From 3cc0e255cee11919d64f68180a03e6d817ae0881 Mon Sep 17 00:00:00 2001 From: Johnny Date: Tue, 8 Apr 2025 23:46:08 +0800 Subject: [PATCH] fix: memo filter for postgres --- store/db/postgres/memo_filter.go | 2 +- store/db/postgres/memo_filter_test.go | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/store/db/postgres/memo_filter.go b/store/db/postgres/memo_filter.go index b405d5dc3..f9e66929f 100644 --- a/store/db/postgres/memo_filter.go +++ b/store/db/postgres/memo_filter.go @@ -160,7 +160,7 @@ func (d *DB) ConvertExprToSQL(ctx *filter.ConvertContext, expr *exprv1.Expr) err subcodition := []string{} args := []any{} for _, v := range values { - subcodition, args = append(subcodition, fmt.Sprintf(`memo.payload->'tags' @> %s::jsonb`, placeholder(len(ctx.Args)+ctx.ArgsOffset+len(args)+1))), append(args, []any{v}) + subcodition, args = append(subcodition, fmt.Sprintf(`memo.payload->'tags' @> jsonb_build_array(%s)`, placeholder(len(ctx.Args)+ctx.ArgsOffset+len(args)+1))), append(args, v) } if len(subcodition) == 1 { if _, err := ctx.Buffer.WriteString(subcodition[0]); err != nil { diff --git a/store/db/postgres/memo_filter_test.go b/store/db/postgres/memo_filter_test.go index 1fb20e30a..98cd98744 100644 --- a/store/db/postgres/memo_filter_test.go +++ b/store/db/postgres/memo_filter_test.go @@ -16,13 +16,13 @@ func TestRestoreExprToSQL(t *testing.T) { }{ { filter: `tag in ["tag1", "tag2"]`, - want: "(memo.payload->'tags' @> $1::jsonb OR memo.payload->'tags' @> $2::jsonb)", - args: []any{[]any{"tag1"}, []any{"tag2"}}, + want: "(memo.payload->'tags' @> jsonb_build_array($1) OR memo.payload->'tags' @> jsonb_build_array($2))", + args: []any{"tag1", "tag2"}, }, { filter: `!(tag in ["tag1", "tag2"])`, - want: `NOT ((memo.payload->'tags' @> $1::jsonb OR memo.payload->'tags' @> $2::jsonb))`, - args: []any{[]any{"tag1"}, []any{"tag2"}}, + want: `NOT ((memo.payload->'tags' @> jsonb_build_array($1) OR memo.payload->'tags' @> jsonb_build_array($2)))`, + args: []any{"tag1", "tag2"}, }, { filter: `content.contains("memos")`, @@ -46,8 +46,8 @@ func TestRestoreExprToSQL(t *testing.T) { }, { filter: `tag in ['tag1'] || content.contains('hello')`, - want: "(memo.payload->'tags' @> $1::jsonb OR memo.content ILIKE $2)", - args: []any{[]any{"tag1"}, "%hello%"}, + want: "(memo.payload->'tags' @> jsonb_build_array($1) OR memo.content ILIKE $2)", + args: []any{"tag1", "%hello%"}, }, { filter: `1`,