Files
db/dialect/duckdb/duckdb.go
T
what 37581f3a65 feat: 新增 BooleanFunctionLookup 支持函数式操作符
- sqlgen: 新增 BooleanFunctionLookup,生成 FUNC(LHS, RHS) 格式,优先级高于 BooleanOperatorLookup
- dialect/duckdb: 使用 regexp_matches 替代 ~ 实现部分匹配,等价于 MySQL REGEXP
- sqlgen/expression_sql_generator_test: 补充 BooleanFunctionLookup 测试用例,修正 encode_error 前缀
- sqlgen/sql_dialect_options_test: 验证 BooleanFunctionLookup 默认为 nil
- dialect/duckdb_test: 新增 regexp_matches SQL 生成测试
2026-05-21 13:34:04 +08:00

46 lines
1.1 KiB
Go

package duckdb
import (
_ "github.com/marcboeker/go-duckdb"
"git.fsdpf.net/go/db"
"git.fsdpf.net/go/db/exp"
)
func DialectOptions() *db.SQLDialectOptions {
do := db.DefaultDialectOptions()
// DuckDB uses PostgreSQL-style placeholders ($1, $2, etc.)
do.PlaceHolderFragment = []byte("$")
do.IncludePlaceholderNum = true
// DuckDB supports most PostgreSQL features
do.SupportsReturn = true
do.SupportsOrderByOnUpdate = false
do.SupportsLimitOnUpdate = false
do.SupportsOrderByOnDelete = false
do.SupportsLimitOnDelete = false
do.SupportsConflictUpdateWhere = true
do.SupportsInsertIgnoreSyntax = false
do.SupportsConflictTarget = true
do.SupportsWithCTE = true
do.SupportsWithCTERecursive = true
do.SupportsDistinctOn = true
do.SupportsWindowFunction = true
// Use double quotes for identifiers (PostgreSQL-style)
do.QuoteRune = '"'
// regexp_matches(col, pattern) 做部分匹配,等价于 MySQL REGEXP
do.BooleanFunctionLookup = map[exp.BooleanOperation][]byte{
exp.RegexpLikeOp: []byte("regexp_matches"),
exp.RegexpILikeOp: []byte("regexp_matches"),
}
return do
}
func init() {
db.RegisterDialect("duckdb", DialectOptions())
}