错误:没有这样的功能:安装了JSON1的SQLite中的json_each

时间:2016-12-24 02:10:39

标签: node.js sqlite sqlite-json1

我已经通过brew安装了SQLite3和JSON1:

brew install sqlite3 --with-json1 --with-fts5

版本:

3.15.2 2016-11-28 19:13:37 bbd85d235f7037c6a033a9690534391ffeacecc8

运行查询时,某些功能正常,例如json_extract

sqlite> SELECT json_extract(Body, '$.issue.fields.labels') FROM Event WHERE json_extract(Body, '$.issue.fields.labels') != '[]';

["foo","bar","baz"]

但是,当我尝试使用json_eachjson_tree时,它会失败:

sqlite> SELECT json_each(Body, '$.issue.fields.labels') FROM Event WHERE json_extract(Body, '$.issue.fields.labels') != '[]';

Error: no such function: json_each

Body表中的Event字段是有效的JSON字符串:

{"issue":{"fields":{"labels": ["foo","bar","baz"]}}}

labels值是一个数组。

我已阅读文档(并查看了json_each examples),搜索了互联网,但无法找到任何其他要求来启用此功能。

我做错了什么,或者:我如何从json_each / json_tree中获益?

2 个答案:

答案 0 :(得分:2)

问题是var db *sqlx.DB // exactly the same as the built-in db = sqlx.Open("sqlite3", ":memory:") var p Person udb := db.Unsafe() err = udb.Get(&p, "SELECT * FROM person, place LIMIT 1;") json_each表值函数,这意味着它们只能用于获取内存中已存在的虚拟表上的数据,而不是直接从数据库中查询数据。

请参阅:The Virtual Table Mechanism Of SQLite

  

2.1.2。表值函数

     

包含隐藏列的虚拟表可以像a一样使用   SELECT语句的FROM子句中的表值函数。该   表值函数的参数成为约束   虚拟表的HIDDEN列。

json_tree sqlite3无法找到与其SELECT json_each(Body, '$.issue.fields.labels') ...定义匹配的函数时,会导致您看到错误。

答案 1 :(得分:1)

AFAIK,您不能在查询中使用//search bus no $(document).on('click' , '.bus_no_search li' , function(){ $('#bus_no').val($(this).text()); $('.bus_no_search').fadeOut(); }); //search source $(document).on('click' , '.source_search li' , function(){ $('#source').val($(this).text()); $('.source_search').fadeOut(); }); json_each()作为字段,它们是table-valued functions。你只能像表一样使用它们。