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 生成测试
This commit is contained in:
@@ -386,10 +386,22 @@ func (esg *expressionSQLGenerator) aliasedExpressionSQL(b sb.SQLBuilder, aliased
|
||||
|
||||
// Generates SQL for a BooleanExpresion (e.g. I("a").Eq(2) -> "a" = 2)
|
||||
func (esg *expressionSQLGenerator) booleanExpressionSQL(b sb.SQLBuilder, operator exp.BooleanExpression) {
|
||||
operatorOp := operator.Op()
|
||||
|
||||
// 函数式操作符:生成 FUNC(LHS, RHS)
|
||||
if fn, ok := esg.dialectOptions.BooleanFunctionLookup[operatorOp]; ok {
|
||||
b.Write(fn)
|
||||
b.WriteRunes(esg.dialectOptions.LeftParenRune)
|
||||
esg.Generate(b, operator.LHS())
|
||||
b.WriteRunes(esg.dialectOptions.CommaRune, esg.dialectOptions.SpaceRune)
|
||||
esg.Generate(b, operator.RHS())
|
||||
b.WriteRunes(esg.dialectOptions.RightParenRune)
|
||||
return
|
||||
}
|
||||
|
||||
b.WriteRunes(esg.dialectOptions.LeftParenRune)
|
||||
esg.Generate(b, operator.LHS())
|
||||
b.WriteRunes(esg.dialectOptions.SpaceRune)
|
||||
operatorOp := operator.Op()
|
||||
if val, ok := esg.dialectOptions.BooleanOperatorLookup[operatorOp]; ok {
|
||||
b.Write(val)
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user