Skip to content

Commit

Permalink
Fix the issue to support tuple type when insert with placeholder
Browse files Browse the repository at this point in the history
  • Loading branch information
tobegit3hub committed Jan 19, 2022
1 parent 0552fa6 commit 04fe018
Showing 1 changed file with 42 additions and 23 deletions.
65 changes: 42 additions & 23 deletions python/openmldb_dbapi/dbapi.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,6 @@ def __str__(self):
class Cursor(object):

def __init__(self, db, zk, zkPath, conn):

self.description = None
self.rowcount = -1
self.arraysize = 1
Expand All @@ -151,6 +150,7 @@ def __init__(self, db, zk, zkPath, conn):
self._resultSetMetadata = None
self._resultSetStatus = None
self._resultSet = None
self.lastrowid = None

def connected(func):
def func_wrapper(self, *args, **kwargs):
Expand Down Expand Up @@ -237,20 +237,33 @@ def execute(self, operation, parameters=()):
for i in range(len(holdIdxs)):
idx = holdIdxs[i]
name = schema.GetColumnName(idx)
if name not in parameters:
return False, "col {} data not given".format(name)
if parameters[name] is None:
if schema.IsColumnNotNull(idx):
raise DatabaseError("column seq {} not allow null".format(idx))
else:

# Check parameters type, like tuple or dict
if type(parameters) is tuple:
if isinstance(parameters[i], str):
strSize += len(parameters[i])

elif type(parameters) is dict:
if name not in parameters:
raise DatabaseError("col {} data not given".format(name))

if parameters[name] is None:
if schema.IsColumnNotNull(idx):
raise DatabaseError("column seq {} not allow null".format(idx))
else:
continue
colType = schema.GetColumnType(idx)
if colType != sql_router_sdk.kTypeString:
continue
colType = schema.GetColumnType(idx)
if colType != sql_router_sdk.kTypeString:
continue
if isinstance(parameters[name], str):
strSize += len(parameters[name])
if isinstance(parameters[name], str):
strSize += len(parameters[name])
else:
raise DatabaseError("{} value tpye is not str".format(name))
else:
raise DatabaseError("{} value tpye is not str".format(name))
# The parameters is neither tuple or dict
raise DatabaseError("Parameters type {} does not support: {}, should be tuple or dict".
format(type(parameters), parameters))

builder.Init(strSize)
appendMap = {
sql_router_sdk.kTypeBool: builder.AppendBool,
Expand All @@ -263,17 +276,26 @@ def execute(self, operation, parameters=()):
# TODO: align python and java date process, 1900 problem
sql_router_sdk.kTypeDate: lambda x : len(x.split("-")) == 3 and builder.AppendDate(int(x.split("-")[0]), int(x.split("-")[1]), int(x.split("-")[2])),
sql_router_sdk.kTypeTimestamp: builder.AppendTimestamp
}
}
for i in range(len(holdIdxs)):
idx = holdIdxs[i]
name = schema.GetColumnName(idx)
if parameters[name] is None:
builder.AppendNULL()
continue
colType = schema.GetColumnType(idx)
ok = appendMap[colType](parameters[name])
if not ok:
raise DatabaseError("erred at append data seq {}".format(i));

if type(parameters) is tuple:
ok = appendMap[colType](parameters[i])
if not ok:
raise DatabaseError("error at append data seq {}".format(i))
elif type(parameters) is dict:
if parameters[name] is None:
builder.AppendNULL()
continue
ok = appendMap[colType](parameters[name])
if not ok:
raise DatabaseError("error at append data seq {}".format(i))
else:
raise DatabaseError("error at append data seq {} for unsupported type".format(i))

ok, error = self.connection._sdk.executeInsert(self.db, command, builder)
else:
ok, error = self.connection._sdk.executeInsert(self.db, command)
Expand Down Expand Up @@ -347,7 +369,6 @@ def setoutputsize(self, size, columns=()):
def fetchall(self):
raise NotSupportedError("Unsupported in OpenMLDB")


@staticmethod
def substitute_in_query(string_query, parameters):
query = string_query
Expand Down Expand Up @@ -398,8 +419,6 @@ def executeRequest(self, sql, parameter):
self._pre_process_result(rs)
return self



class Connection(object):

def __init__(self, db, zk, zkPath):
Expand Down

0 comments on commit 04fe018

Please sign in to comment.