further simplification and passing tests

This commit is contained in:
Colin 2025-08-05 13:00:16 -04:00
parent 312b27647a
commit a60861963b
3 changed files with 7 additions and 37 deletions

View File

@ -550,23 +550,7 @@ func (c *CommonSQLConverter) handleBooleanComparison(ctx *ConvertContext, field,
// Handle PostgreSQL differently - it uses the raw operator
if _, ok := c.dialect.(*PostgreSQLDialect); ok {
var jsonExtract string
// Special handling for has_link, has_code, has_incomplete_tasks
if field == "has_link" || field == "has_code" || field == "has_incomplete_tasks" {
// Use memo-> format for these fields
parts := strings.Split(strings.TrimPrefix(jsonPath, "$."), ".")
jsonExtract = "memo->'payload'"
for i, part := range parts {
if i == len(parts)-1 {
jsonExtract += fmt.Sprintf("->>'%s'", part)
} else {
jsonExtract += fmt.Sprintf("->'%s'", part)
}
}
} else {
// Use standard format for has_task_list
jsonExtract = c.dialect.GetJSONExtract(jsonPath)
}
var jsonExtract = c.dialect.GetJSONExtract(jsonPath)
sqlExpr := fmt.Sprintf("(%s)::boolean %s %s",
jsonExtract,

View File

@ -203,20 +203,6 @@ func (d *PostgreSQLDialect) GetBooleanComparison(path string, _ bool) string {
}
func (d *PostgreSQLDialect) GetBooleanCheck(path string) string {
// Special handling for standalone boolean identifiers
if strings.Contains(path, "hasLink") || strings.Contains(path, "hasCode") || strings.Contains(path, "hasIncompleteTasks") {
parts := strings.Split(strings.TrimPrefix(path, "$."), ".")
result := fmt.Sprintf("%s.payload", d.GetTablePrefix())
for i, part := range parts {
if i == len(parts)-1 {
result += fmt.Sprintf("->>'%s'", part)
} else {
result += fmt.Sprintf("->'%s'", part)
}
}
return fmt.Sprintf("(%s)::boolean = true", result)
}
// Use default format for other fields
return fmt.Sprintf("(%s)::boolean IS TRUE", d.GetJSONExtract(path))
}

View File

@ -117,32 +117,32 @@ func TestConvertExprToSQL(t *testing.T) {
},
{
filter: `has_link == true`,
want: "(memo->'payload'->'property'->>'hasLink')::boolean = $1",
want: "(memo.payload->'property'->>'hasLink')::boolean = $1",
args: []any{true},
},
{
filter: `has_code == false`,
want: "(memo->'payload'->'property'->>'hasCode')::boolean = $1",
want: "(memo.payload->'property'->>'hasCode')::boolean = $1",
args: []any{false},
},
{
filter: `has_incomplete_tasks != false`,
want: "(memo->'payload'->'property'->>'hasIncompleteTasks')::boolean != $1",
want: "(memo.payload->'property'->>'hasIncompleteTasks')::boolean != $1",
args: []any{false},
},
{
filter: `has_link`,
want: "(memo->'payload'->'property'->>'hasLink')::boolean = true",
want: "(memo.payload->'property'->>'hasLink')::boolean IS TRUE",
args: []any{},
},
{
filter: `has_code`,
want: "(memo->'payload'->'property'->>'hasCode')::boolean = true",
want: "(memo.payload->'property'->>'hasCode')::boolean IS TRUE",
args: []any{},
},
{
filter: `has_incomplete_tasks`,
want: "(memo->'payload'->'property'->>'hasIncompleteTasks')::boolean = true",
want: "(memo.payload->'property'->>'hasIncompleteTasks')::boolean IS TRUE",
args: []any{},
},
}