些細なことではないと確信している特定のリクエストがありますが、念のため質問することを考えました。条件付きのクエリがWHERE
ある場合:
SELECT * FROM table1 WHERE a = b AND a->fn(b->c) > 0
に参加するすべてのオペランドを知りたいのですがWHERE
、この場合は['a', 'b', 'a->fn(b->c)', 0]
.
その理由は、これらの値を追跡し、変更があった場合はクエリを再評価するだけだからです。
些細なことではないと確信している特定のリクエストがありますが、念のため質問することを考えました。条件付きのクエリがWHERE
ある場合:
SELECT * FROM table1 WHERE a = b AND a->fn(b->c) > 0
に参加するすべてのオペランドを知りたいのですがWHERE
、この場合は['a', 'b', 'a->fn(b->c)', 0]
.
その理由は、これらの値を追跡し、変更があった場合はクエリを再評価するだけだからです。
関数を使用alasql.parse()
して、SQL ステートメントから抽象構文ツリーを生成できます。WHERE
ステートメントの句からツリーの一部を印刷するには、SELECT
次を使用してください。
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
これはあなたの質問に対する答えですか?