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

这是你问题的答案吗?