feat: 新增 SQLite3 虚拟表框架及方言扩展
- 新增 dialect/sqlite3/vtab 包,提供干净的虚拟表接口(Module/Table/Cursor) - 适配层自动将 BestIndex 约束与 Filter 值绑定(ConstraintInfo.Value),无需手动编解码 IdxStr - 支持 OpLIMIT/OpOFFSET 约束下推 - 新增 SupportsDistinct 方言选项,控制 SELECT 级和表达式级 DISTINCT 生成 - sqlite3 方言注册 IF() 函数支持
This commit is contained in:
@@ -559,6 +559,15 @@ func (esg *expressionSQLGenerator) literalExpressionSQL(b sb.SQLBuilder, literal
|
||||
//
|
||||
// COUNT(I("a")) -> COUNT("a")
|
||||
func (esg *expressionSQLGenerator) sqlFunctionExpressionSQL(b sb.SQLBuilder, sqlFunc exp.SQLFunctionExpression) {
|
||||
if sqlFunc.Name() == "DISTINCT" && !esg.dialectOptions.SupportsDistinct {
|
||||
for i, arg := range sqlFunc.Args() {
|
||||
if i > 0 {
|
||||
b.WriteRunes(esg.dialectOptions.CommaRune, esg.dialectOptions.SpaceRune)
|
||||
}
|
||||
esg.Generate(b, arg)
|
||||
}
|
||||
return
|
||||
}
|
||||
b.WriteStrings(sqlFunc.Name())
|
||||
esg.Generate(b, sqlFunc.Args())
|
||||
}
|
||||
|
||||
@@ -34,6 +34,8 @@ type (
|
||||
SupportsWithCTERecursive bool
|
||||
// Set to true if multiple tables are supported in UPDATE statement. (DEFAULT=true)
|
||||
SupportsMultipleUpdateTables bool
|
||||
// Set to true if DISTINCT is supported (DEFAULT=true)
|
||||
SupportsDistinct bool
|
||||
// Set to true if DISTINCT ON is supported (DEFAULT=true)
|
||||
SupportsDistinctOn bool
|
||||
// Set to true if LATERAL queries are supported (DEFAULT=true)
|
||||
@@ -420,6 +422,7 @@ func DefaultDialectOptions() *SQLDialectOptions {
|
||||
SupportsConflictTarget: true,
|
||||
SupportsWithCTE: true,
|
||||
SupportsWithCTERecursive: true,
|
||||
SupportsDistinct: true,
|
||||
SupportsDistinctOn: true,
|
||||
WrapCompoundsInParens: true,
|
||||
SupportsWindowFunction: true,
|
||||
|
||||
Reference in New Issue
Block a user