diff --git a/enginetest/enginetests.go b/enginetest/enginetests.go index e1a4ff9c6b..f60bc5d113 100644 --- a/enginetest/enginetests.go +++ b/enginetest/enginetests.go @@ -1907,7 +1907,7 @@ func TestComplexIndexQueriesPrepared(t *testing.T, harness Harness) { } func TestJsonScriptsPrepared(t *testing.T, harness Harness, skippedTests []string) { - harness.Setup(setup.MydbData) + harness.Setup(setup.MydbData, setup.BlobData) for _, script := range queries.JsonScripts { for _, skippedTest := range skippedTests { if strings.Contains(script.Name, skippedTest) { @@ -5154,6 +5154,7 @@ func TestNullRanges(t *testing.T, harness Harness) { } func TestJsonScripts(t *testing.T, harness Harness, skippedTests []string) { + harness.Setup(setup.MydbData, setup.BlobData) for _, script := range queries.JsonScripts { for _, skippedTest := range skippedTests { if strings.Contains(script.Name, skippedTest) { diff --git a/enginetest/queries/json_scripts.go b/enginetest/queries/json_scripts.go index 6d7ff5f2eb..475b625ac5 100644 --- a/enginetest/queries/json_scripts.go +++ b/enginetest/queries/json_scripts.go @@ -126,6 +126,17 @@ var JsonScripts = []ScriptTest{ }, }, }, + { + Name: "json_object works on text values from tables", + Assertions: []ScriptTestAssertion{ + { + Query: `select JSON_OBJECT(t, t) FROM textt where i = 1;`, + Expected: []sql.Row{ + {types.MustJSON("{\"first row\": \"first row\"}")}, + }, + }, + }, + }, { Name: "types survive round-trip into tables", SetUpScript: []string{ diff --git a/sql/expression/function/json/json_object.go b/sql/expression/function/json/json_object.go index 34c85bd46c..42f08dfd46 100644 --- a/sql/expression/function/json/json_object.go +++ b/sql/expression/function/json/json_object.go @@ -102,12 +102,19 @@ func (j JSONObject) Eval(ctx *sql.Context, row sql.Row) (interface{}, error) { return nil, err } if i%2 == 0 { - val, _, err := types.LongText.Convert(ctx, val) + val, _, err = types.LongText.Convert(ctx, val) + if err != nil { + return nil, err + } + key, _, err = sql.Unwrap[string](ctx, val) if err != nil { return nil, err } - key = val.(string) } else { + val, err = sql.UnwrapAny(ctx, val) + if err != nil { + return nil, err + } if json, ok := val.(sql.JSONWrapper); ok { val, err = json.ToInterface() if err != nil {