From 62973040331e62f1d3933425162cb3d15421ce6d Mon Sep 17 00:00:00 2001 From: Denis Arh Date: Tue, 8 Nov 2022 12:43:21 +0100 Subject: [PATCH] Remove old 'Deep JSON' leftover code --- store/adapters/rdbms/drivers/mysql/json.go | 55 ------------------- .../adapters/rdbms/drivers/mysql/json_test.go | 46 ---------------- 2 files changed, 101 deletions(-) delete mode 100644 store/adapters/rdbms/drivers/mysql/json_test.go diff --git a/store/adapters/rdbms/drivers/mysql/json.go b/store/adapters/rdbms/drivers/mysql/json.go index 66ce43421..b070b1f95 100644 --- a/store/adapters/rdbms/drivers/mysql/json.go +++ b/store/adapters/rdbms/drivers/mysql/json.go @@ -7,27 +7,6 @@ import ( "strings" ) -func JsonPath(asJSON bool, jsonDoc exp.Expression, pp ...any) (_ exp.LiteralExpression, err error) { - var ( - sql strings.Builder - path string - ) - - if path, err = jsonPath(pp...); err != nil { - return nil, err - } - - sql.WriteString(`?->'`) - if !asJSON { - // interested in un-encoded value - sql.WriteString(`>'`) - } - sql.WriteString(path) - sql.WriteString(`'`) - - return exp.NewLiteralExpression(sql.String(), jsonDoc), nil -} - func jsonPathExpr(pp ...any) (exp.LiteralExpression, error) { if path, err := jsonPath(pp...); err != nil { return nil, err @@ -59,37 +38,3 @@ func jsonPath(pp ...any) (string, error) { return sql.String(), nil } - -// JSONArrayContains prepares MySQL compatible comparison of value and JSON array -// -// # literal value = multi-value field / plain -// # multi-value field = single-value field / plain -// JSON_CONTAINS(v, JSON_EXTRACT(V, '$.f3'), '$.f2') -// -// # single-value field = multi-value field / plain -// # multi-value field = single-value field / plain -// JSON_CONTAINS(v, '"aaa"', '$.f2') -// -// This approach is not optimal, but it is the only way to make it work -func JSONArrayContains(left exp.Expression, ident exp.IdentifierExpression, pp ...any) (jc exp.Expression, err error) { - var ( - pathAux string - path exp.Expression - ) - - // this is the least painful way how to encode - // an unknown value as JSON - left = exp.NewSQLFunctionExpression( - "JSON_EXTRACT", - exp.NewSQLFunctionExpression("JSON_ARRAY", left), - exp.NewLiteralExpression(`'$[0]'`), - ) - - if pathAux, err = jsonPath(pp...); err != nil { - return nil, err - } else { - path = exp.NewLiteralExpression(`'` + pathAux + `'`) - } - - return exp.NewSQLFunctionExpression("JSON_CONTAINS", ident, left, path), nil -} diff --git a/store/adapters/rdbms/drivers/mysql/json_test.go b/store/adapters/rdbms/drivers/mysql/json_test.go deleted file mode 100644 index 2f0f60b56..000000000 --- a/store/adapters/rdbms/drivers/mysql/json_test.go +++ /dev/null @@ -1,46 +0,0 @@ -package mysql - -import ( - "testing" - - "github.com/stretchr/testify/require" -) - -// test deep ident expression generator -func Test_DeepIdentJSON(t *testing.T) { - var ( - cc = []struct { - input []interface{} - sql string - }{ - { - input: []interface{}{"one"}, - sql: `?->>"$.one"`, - }, - { - input: []interface{}{"one", "two"}, - sql: `?->>"$.one.two"`, - }, - { - input: []interface{}{"one", 2, "three"}, - sql: `?->>"$.one[2].three"`, - }, - { - input: []interface{}{"one", "two", 3}, - sql: `?->>"$.one.two[3]"`, - }, - } - ) - - for _, c := range cc { - t.Run(c.sql, func(t *testing.T) { - var ( - r = require.New(t) - l, err = JSONPath(nil, c.input...) - ) - - r.NoError(err) - r.Equal(c.sql, l.Literal()) - }) - } -}