AlaSQL:获取操作数
AlaSQL: Getting where opperands
我有一个具体的要求,我很确定这不是微不足道的,但为了以防万一我想问一下。如果我有任何条件 WHERE
的查询:
SELECT * FROM table1 WHERE a = b AND a->fn(b->c) > 0
我想知道参与 WHERE
的所有操作数,在本例中为 ['a', 'b', 'a->fn(b->c)', 0]
。
原因是我想跟踪这些值,如果有任何变化,我将重新评估查询。
您可以使用 alasql.parse()
函数从 SQL 语句生成抽象语法树。要从 SELECT
语句的 WHERE
子句中打印部分树,请使用:
var ast = alasql.parse('SELECT * FROM table1 WHERE a = b AND a->fn(b->c) > 0');
console.log(ast.statements[0].where);
然后你会看到树结构。
{"expression":
{"left":
{"left": {"columnid":"a"},"op":"=", "right":{"columnid":"b"}},
"op":"AND",
"right":{"left":
{"left":{"columnid":"a"},
"op":"->",
"right":
{"funcid":"fn","args":[
{"left":{"columnid":"b"},
"op":"->",
"right":"c"}
]}},
"op":">",
"right":{"value":0}}}}
你可以沿着这棵树走来收集所有的论点。每个节点都是yy.xxx类型的对象,所以可以测试一下:
if(node instanceof yy.Column) // then process as the column
这是你问题的答案吗?
我有一个具体的要求,我很确定这不是微不足道的,但为了以防万一我想问一下。如果我有任何条件 WHERE
的查询:
SELECT * FROM table1 WHERE a = b AND a->fn(b->c) > 0
我想知道参与 WHERE
的所有操作数,在本例中为 ['a', 'b', 'a->fn(b->c)', 0]
。
原因是我想跟踪这些值,如果有任何变化,我将重新评估查询。
您可以使用 alasql.parse()
函数从 SQL 语句生成抽象语法树。要从 SELECT
语句的 WHERE
子句中打印部分树,请使用:
var ast = alasql.parse('SELECT * FROM table1 WHERE a = b AND a->fn(b->c) > 0');
console.log(ast.statements[0].where);
然后你会看到树结构。
{"expression":
{"left":
{"left": {"columnid":"a"},"op":"=", "right":{"columnid":"b"}},
"op":"AND",
"right":{"left":
{"left":{"columnid":"a"},
"op":"->",
"right":
{"funcid":"fn","args":[
{"left":{"columnid":"b"},
"op":"->",
"right":"c"}
]}},
"op":">",
"right":{"value":0}}}}
你可以沿着这棵树走来收集所有的论点。每个节点都是yy.xxx类型的对象,所以可以测试一下:
if(node instanceof yy.Column) // then process as the column
这是你问题的答案吗?