MCPcopy
hub / github.com/ent/ent / TestAppend

Function TestAppend

dialect/sql/sqljson/sqljson_test.go:467–535  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

465}
466
467func TestAppend(t *testing.T) {
468 tests := []struct {
469 input sql.Querier
470 wantQuery string
471 wantArgs []any
472 }{
473 {
474 input: func() sql.Querier {
475 u := sql.Dialect(dialect.Postgres).Update("t")
476 sqljson.Append(u, "c", []string{"a"})
477 return u
478 }(),
479 wantQuery: `UPDATE "t" SET "c" = CASE WHEN ("c" IS NULL OR "c" = 'null'::jsonb) THEN $1 ELSE "c" || $2 END`,
480 wantArgs: []any{`["a"]`, `["a"]`},
481 },
482 {
483 input: func() sql.Querier {
484 u := sql.Dialect(dialect.Postgres).Update("t")
485 sqljson.Append(u, "c", []string{"a"}, sqljson.Path("a"))
486 return u
487 }(),
488 wantQuery: `UPDATE "t" SET "c" = CASE WHEN (("c"->'a')::jsonb IS NULL OR ("c"->'a')::jsonb = 'null'::jsonb) THEN jsonb_set("c", '{a}', $1, true) ELSE jsonb_set("c", '{a}', "c"->'a' || $2, true) END`,
489 wantArgs: []any{`["a"]`, `["a"]`},
490 },
491 {
492 input: func() sql.Querier {
493 u := sql.Dialect(dialect.SQLite).Update("t")
494 sqljson.Append(u, "c", []string{"a"})
495 return u
496 }(),
497 wantQuery: "UPDATE `t` SET `c` = CASE WHEN (JSON_TYPE(`c`, '$') IS NULL OR JSON_TYPE(`c`, '$') = 'null') THEN ? ELSE JSON_INSERT(`c`, '$[#]', ?) END",
498 wantArgs: []any{`["a"]`, "a"},
499 },
500 {
501 input: func() sql.Querier {
502 u := sql.Dialect(dialect.SQLite).Update("t")
503 sqljson.Append(u, "c", []any{"a", struct{}{}}, sqljson.Path("a"))
504 return u
505 }(),
506 wantQuery: "UPDATE `t` SET `c` = CASE WHEN (JSON_TYPE(`c`, '$.a') IS NULL OR JSON_TYPE(`c`, '$.a') = 'null') THEN JSON_SET(`c`, '$.a', JSON(?)) ELSE JSON_INSERT(`c`, '$.a[#]', ?, '$.a[#]', JSON(?)) END",
507 wantArgs: []any{`["a",{}]`, "a", "{}"},
508 },
509 {
510 input: func() sql.Querier {
511 u := sql.Dialect(dialect.MySQL).Update("t")
512 sqljson.Append(u, "c", []string{"a"})
513 return u
514 }(),
515 wantQuery: "UPDATE `t` SET `c` = CASE WHEN (JSON_TYPE(JSON_EXTRACT(`c`, '$')) IS NULL OR JSON_TYPE(JSON_EXTRACT(`c`, '$')) = 'NULL') THEN JSON_ARRAY(?) ELSE JSON_ARRAY_APPEND(`c`, '$', ?) END",
516 wantArgs: []any{"a", "a"},
517 },
518 {
519 input: func() sql.Querier {
520 u := sql.Dialect(dialect.MySQL).Update("t")
521 sqljson.Append(u, "c", []string{"a"}, sqljson.Path("a"))
522 return u
523 }(),
524 wantQuery: "UPDATE `t` SET `c` = CASE WHEN (JSON_TYPE(JSON_EXTRACT(`c`, '$.a')) IS NULL OR JSON_TYPE(JSON_EXTRACT(`c`, '$.a')) = 'NULL') THEN JSON_SET(`c`, '$.a', JSON_ARRAY(?)) ELSE JSON_ARRAY_APPEND(`c`, '$.a', ?) END",

Callers

nothing calls this directly

Calls 6

DialectFunction · 0.92
AppendFunction · 0.92
PathFunction · 0.92
RunMethod · 0.80
QueryMethod · 0.65
UpdateMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…