def init(self): if self.is_cluster_mode: options = sql_router_sdk.SQLRouterOptions() options.zk_cluster = self.options.zk_cluster options.zk_path = self.options.zk_path options.request_timeout = self.options.request_timeout self.sdk = sql_router_sdk.NewClusterSQLRouter(options) if not self.sdk: logger.error( "fail to init OpenMLDB sdk with zk cluster %s and zk path %s" % (options.zk_cluster, options.zk_path)) return False logger.info( "init OpenMLDB sdk done with zk cluster %s and zk path %s" % (options.zk_cluster, options.zk_path)) else: options = sql_router_sdk.StandaloneOptions() options.host = self.options.host options.port = self.options.port options.request_timeout = self.options.request_timeout self.sdk = sql_router_sdk.NewStandaloneSQLRouter(options) if not self.sdk: logger.error( "fail to init OpenMLDB sdk with host %s and port %s" % (options.host, options.port)) return False logger.info("init openmldb sdk done with host %s and port %s" % (options.host, options.port)) status = sql_router_sdk.Status() self.sdk.ExecuteSQL("SET @@execute_mode='online'", status) return True
def dropDB(self, db): if not self.sdk: return False, "please init sdk first" status = sql_router_sdk.Status() if self.sdk.DropDB(db, status): return True, "ok" else: return False, status.msg
def getRequestBuilder(self, db, sql): if not self.sdk: return False, "please init sdk first" status = sql_router_sdk.Status() row_builder = self.sdk.GetRequestRow(db, sql, status) if status.code != 0: return False, status.msg return True, row_builder
def executeDDL(self, db, ddl): if not self.sdk: return False, "please init sdk first" status = sql_router_sdk.Status() if not self.sdk.ExecuteDDL(db, ddl, status): return False, status.msg else: self.sdk.RefreshCatalog() return True, "ok"
def getJobLog(self, id): if not self.sdk: return False, "please init sdk first" status = sql_router_sdk.Status() log = self.sdk.GetJobLog(id, status) if status.code !=0: # TODO: Throw exception if get failure status return "" return log
def getDatabases(self): if not self.sdk: return False, "please init sdk first" dbs = sql_router_sdk.VectorString() status = sql_router_sdk.Status() self.sdk.ShowDB(dbs, status) if status.code !=0: return False output_dbs = [] for i in range(dbs.size()): output_dbs.append(dbs[i]) return output_dbs
def executeQueryParameterized(self, db, sql, row_builder): if not self.sdk: return False, "please init sdk first" if not row_builder: return False, "pealse init parameter row" status = sql_router_sdk.Status() rs = self.sdk.ExecuteSQLParameterized(db, sql, row_builder, status) if status.code != 0: return False, status.msg else: return True, rs
def executeQuery(self, db, sql, row_builder = None): if not self.sdk: return False, "please init sdk first" status = sql_router_sdk.Status() if row_builder is not None: rs = self.sdk.ExecuteSQLRequest(db, sql, row_builder, status) else: rs = self.sdk.ExecuteSQL(db, sql, status) if status.code != 0: return False, status.msg else: return True, rs
def executeInsert(self, db, sql, row_builder = None): if not self.sdk: return False, "please init sdk first" status = sql_router_sdk.Status() if row_builder is not None: if self.sdk.ExecuteInsert(db, sql, row_builder, status): return True, "" else: return False, status.msg else: if self.sdk.ExecuteInsert(db, sql, status): return True, "" else: return False, status.msg
def executeSQL(self, db, sql, row_builder=None): """ 1. no row_builder: batch mode 2. row_builder: request mode And if db, use this one, if not, use the db setting in sdk """ if not self.sdk: return False, "please init sdk first" status = sql_router_sdk.Status() if row_builder is not None: # TODO(hw): must set db in request mode now, fix later rs = self.sdk.ExecuteSQLRequest(db, sql, row_builder, status) elif db: rs = self.sdk.ExecuteSQL(db, sql, status) else: # if no db specific in here, use the current db in sdk rs = self.sdk.ExecuteSQL(sql, status) if status.code != 0: return False, status.msg else: return True, rs
def doBatchRowRequest(self, db, sql, commonCol, parameters): ok, requestRow = self.getRequestBuilder(db, sql) if not ok: return ok, "get request builder fail" schema = requestRow.GetSchema() commonCols = sql_router_sdk.ColumnIndicesSet(schema) count = schema.GetColumnCnt() commnColAddCount = 0 for i in range(count): colName = schema.GetColumnName(i) if colName in commonCol: commonCols.AddCommonColumnIdx(i) commnColAddCount+=1 if commnColAddCount != len(commonCol): return False, "some common col is not in table schema" requestRowBatch = sql_router_sdk.SQLRequestRowBatch(schema, commonCols) if requestRowBatch is None: return False, "generate sql request row batch fail" if isinstance(parameters, dict): ok, msg = self._append_request_row(requestRow, schema, parameters) if not ok: return ok, msg requestRowBatch.AddRow(requestRow) else: for d in parameters: ok, msg = self._append_request_row(requestRow, schema, d) if not ok: return ok, msg requestRowBatch.AddRow(requestRow) ok, requestRow = self.getRequestBuilder(db, sql) if not ok: return ok, "get request builder fail" status = sql_router_sdk.Status() rs = self.sdk.ExecuteSQLBatchRequest(db, sql, requestRowBatch, status) if status.code != 0: return False, status.msg return True, rs
def callProc(self, db, sp, rq): status = sql_router_sdk.Status() rs = self.sdk.CallProcedure(db, sp, rq, status) if status.code != 0: return False, status.msg return True, rs
def getRowBySp(self, db, sp): status = sql_router_sdk.Status() row_builder = self.sdk.GetRequestRowByProcedure(db, sp, status) if status.code != 0: return False, status.msg return True, row_builder