bugfix
This commit is contained in:
parent
0e3e9c0548
commit
0e3e982a4b
@ -221,6 +221,9 @@ class DBPools:
|
|||||||
await sqlor.commit()
|
await sqlor.commit()
|
||||||
await self.freeSqlor(sqlor)
|
await self.freeSqlor(sqlor)
|
||||||
|
|
||||||
|
def get_exception(self):
|
||||||
|
return self.e_except
|
||||||
|
|
||||||
async def _aquireConn(self,dbname):
|
async def _aquireConn(self,dbname):
|
||||||
"""
|
"""
|
||||||
p = self._cpools.get(dbname)
|
p = self._cpools.get(dbname)
|
||||||
|
|||||||
124
sqlor/duckdbor.py
Normal file
124
sqlor/duckdbor.py
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
# -*- coding:utf8 -*-
|
||||||
|
from appPublic.argsConvert import ArgsConvert, ConditionConvert
|
||||||
|
from .sor import SQLor
|
||||||
|
from .const import ROWS
|
||||||
|
|
||||||
|
duckdb_ddl_tmpl = {
|
||||||
|
# 可以按需扩展
|
||||||
|
'create_table': "CREATE TABLE {table} ({fields})",
|
||||||
|
'drop_table': "DROP TABLE IF EXISTS {table}",
|
||||||
|
}
|
||||||
|
|
||||||
|
class DuckDBor(SQLor):
|
||||||
|
"""
|
||||||
|
sqlor 方言适配:DuckDB
|
||||||
|
"""
|
||||||
|
ddl_template = duckdb_ddl_tmpl
|
||||||
|
|
||||||
|
db2modelTypeMapping = {
|
||||||
|
'boolean': 'short',
|
||||||
|
'smallint': 'short',
|
||||||
|
'integer': 'long',
|
||||||
|
'bigint': 'long',
|
||||||
|
'double': 'float',
|
||||||
|
'float': 'float',
|
||||||
|
'real': 'float',
|
||||||
|
'varchar': 'str',
|
||||||
|
'char': 'char',
|
||||||
|
'string': 'str',
|
||||||
|
'blob': 'bin',
|
||||||
|
'date': 'date',
|
||||||
|
'timestamp': 'datetime',
|
||||||
|
}
|
||||||
|
|
||||||
|
model2dbTypemapping = {
|
||||||
|
'date': 'date',
|
||||||
|
'time': 'time',
|
||||||
|
'timestamp': 'timestamp',
|
||||||
|
'str': 'varchar',
|
||||||
|
'char': 'char',
|
||||||
|
'short': 'integer',
|
||||||
|
'long': 'bigint',
|
||||||
|
'float': 'double',
|
||||||
|
'text': 'varchar',
|
||||||
|
'bin': 'blob',
|
||||||
|
'file': 'blob',
|
||||||
|
}
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def isMe(cls, name):
|
||||||
|
return name.lower() in ['duckdb']
|
||||||
|
|
||||||
|
def grammar(self):
|
||||||
|
# duckdb 使用标准 SQL,通常不需要特殊 select_stmt
|
||||||
|
return {}
|
||||||
|
|
||||||
|
def placeHolder(self, varname, pos=None):
|
||||||
|
if varname == '__mainsql__':
|
||||||
|
return ''
|
||||||
|
return '?'
|
||||||
|
|
||||||
|
def dataConvert(self, dataList):
|
||||||
|
if isinstance(dataList, dict):
|
||||||
|
d = list(dataList.values())
|
||||||
|
else:
|
||||||
|
d = [i['value'] for i in dataList]
|
||||||
|
return tuple(d)
|
||||||
|
|
||||||
|
def pagingSQLmodel(self):
|
||||||
|
# DuckDB 兼容标准 SQL LIMIT/OFFSET
|
||||||
|
return """SELECT * FROM (%s) AS A ORDER BY $[sort]$ LIMIT $[rows]$ OFFSET $[from_line]$"""
|
||||||
|
|
||||||
|
def tablesSQL(self):
|
||||||
|
# DuckDB 不支持 INFORMATION_SCHEMA.TABLES 完全一致的结构
|
||||||
|
sqlcmd = """
|
||||||
|
SELECT lower(name) AS name, '' AS title
|
||||||
|
FROM duckdb_tables()
|
||||||
|
WHERE database_name = current_database();
|
||||||
|
"""
|
||||||
|
return sqlcmd
|
||||||
|
|
||||||
|
def fieldsSQL(self, tablename=None):
|
||||||
|
sqlcmd = """
|
||||||
|
SELECT
|
||||||
|
lower(column_name) AS name,
|
||||||
|
lower(column_type) AS type,
|
||||||
|
NULL AS length,
|
||||||
|
NULL AS dec,
|
||||||
|
'YES' AS nullable,
|
||||||
|
'' AS title,
|
||||||
|
lower(table_name) AS table_name
|
||||||
|
FROM duckdb_columns()
|
||||||
|
WHERE database_name = current_database()
|
||||||
|
"""
|
||||||
|
if tablename is not None:
|
||||||
|
sqlcmd += f" AND lower(table_name) = '{tablename.lower()}'"
|
||||||
|
return sqlcmd
|
||||||
|
|
||||||
|
def fkSQL(self, tablename=None):
|
||||||
|
# DuckDB 暂不支持外键约束查询
|
||||||
|
sqlcmd = "SELECT NULL AS constraint_name WHERE 1=0"
|
||||||
|
return sqlcmd
|
||||||
|
|
||||||
|
def pkSQL(self, tablename=None):
|
||||||
|
sqlcmd = f"""
|
||||||
|
SELECT column_name AS name
|
||||||
|
FROM duckdb_constraints()
|
||||||
|
WHERE constraint_type = 'PRIMARY KEY'
|
||||||
|
AND table_name = '{tablename.lower()}'
|
||||||
|
"""
|
||||||
|
return sqlcmd
|
||||||
|
|
||||||
|
def indexesSQL(self, tablename=None):
|
||||||
|
sqlcmd = """
|
||||||
|
SELECT
|
||||||
|
lower(index_name) AS index_name,
|
||||||
|
'' AS is_unique,
|
||||||
|
lower(column_name) AS column_name
|
||||||
|
FROM duckdb_indexes()
|
||||||
|
WHERE database_name = current_database()
|
||||||
|
"""
|
||||||
|
if tablename is not None:
|
||||||
|
sqlcmd += f" AND lower(table_name) = '{tablename.lower()}'"
|
||||||
|
return sqlcmd
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user