| 377 | } |
| 378 | |
| 379 | func TestQuery_JSONBWithComposition(t *testing.T) { |
| 380 | // Test JSONB operators with query composition |
| 381 | labelFilter := Q().Space("payload->'labels' ??& ?::TEXT[]", []string{"important"}) |
| 382 | typeFilter := Q().Space("payload ?? 'type'") |
| 383 | |
| 384 | q := Q().Space("SELECT * FROM issues"). |
| 385 | Where("?", labelFilter). |
| 386 | And("?", typeFilter). |
| 387 | And("status = ?", "open") |
| 388 | |
| 389 | sql, args, err := q.ToSQL() |
| 390 | require.NoError(t, err) |
| 391 | require.Equal(t, "SELECT * FROM issues WHERE payload->'labels' ?& $1::TEXT[] AND payload ? 'type' AND status = $2", sql) |
| 392 | require.Equal(t, []any{[]string{"important"}, "open"}, args) |
| 393 | } |
| 394 | |
| 395 | func TestQuery_Comma(t *testing.T) { |
| 396 | // Build a SET clause with comma separators |