Either I am misusing the JSON functions in a way I do not understand,
or this is a bug:

SQLite version 3.10.2 2016-01-20 15:27:19
...
sqlite> CREATE TABLE t (n INTEGER PRIMARY KEY, s1 TEXT);
sqlite> INSERT INTO t (n, s1) VALUES (0, NULL), (1, 'foo');
sqlite> SELECT n, json_group_array(s1),
json_group_array(json_object('v', s1)) FROM t GROUP BY n;
n           json_group_array(s1)  json_group_array(json_object('v', s1))
----------  --------------------  --------------------------------------
0           [null]                [{"v":null}]
1           [foo]                 [{"v":"foo"}]

"[foo]" is not valid JSON: SQLite is not quoting the string.

If I make small changes to the query that should not affect "[foo]",
SQLite does quote the string:

sqlite> SELECT n, json_group_array(s1) FROM t GROUP BY n;
n           json_group_array(s1)
----------  --------------------
0           [null]
1           ["foo"]

sqlite> SELECT n, json_group_array(s1),
json_group_array(json_object('v', s1)) FROM t WHERE n == 1 GROUP BY n;
n           json_group_array(s1)  json_group_array(json_object('v', s1))
----------  --------------------  --------------------------------------
1           ["foo"]               [{"v":"foo"}]

This inconsistent behavior makes me suspect there is a bug in SQLite,
although it is possible I am doing something so badly wrong the
results are undefined.

>From reading the documentation, the string should get quoted: the
aggregate functions take "VALUE arguments" and what I pass to the
first json_group_array() is not the result of a json1 function.

Does someone see the problem (either in my query or in SQLite)?

Thanks!

-- 
Marien Zwart

Reply via email to