【问题标题】:AlaSQL: Getting where opperandsAlaSQL:获取操作数的位置
【发布时间】:2016-01-19 10:32:15
【问题描述】:

我有一个具体的要求,我很确定这不是微不足道的,但我想问一下以防万一。如果我对WHERE 条件有任何疑问:

SELECT * FROM table1 WHERE a = b AND a->fn(b->c) > 0

我想知道参与WHERE 的所有操作数,在本例中为['a', 'b', 'a->fn(b->c)', 0]

原因是我想跟踪这些值,如果有任何变化,我会重新评估查询。

【问题讨论】:

    标签: alasql


    【解决方案1】:

    您可以使用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
    

    这是您问题的答案吗?

    【讨论】:

    • 是的,这正是我需要的。
    猜你喜欢
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多