我々はevalの機能の開発に言うJSが悪であるが、この機能はまた、ここでは、いくつかの簡単なケースを魔法の効果の多くをされています
JSの発現に基づいて計算を実行EVAL
たとえば、我々は次の表を持っています
CREATE TABLEの(ルールを
id SERIAL PRIMARY KEY、
rule_expressionのテキスト
);
- インデックス----------------------------------------------- --------
CREATE UNIQUE INDEXのrules_pkey ON ルール(のID int4_ops)。
- 目次
INSERT INTO "公共"。"ルール"("ID"、"rule_expression")
VALUES
(1、E ' "$ {vars_name}"長さ> 10')。
- plv8機能
CREATE または交換する機能をrule_test(IDのint型、引数のテキスト)RETURNS JSON AS
$$
//関数テンプレートESは問題、文字列テンプレートターンを解決します
文字列。プロトタイプ。補間= 関数(paramsは){
constの名前= オブジェクト。キー(paramsは)。
constのヴァルス= オブジェクト。値(paramsは)。
返す新しい関数を(
}
た結果= {}
VaRの計画= plv8。(準備'ID = $ 1のルールからSELECT rule_expression' [ 'INT'])。
//だけテストするための一つの行をフェッチ
VaRのrule_row = 計画。実行([ ID])[ 0];
聞かせてvars_name = 引数を。
VAR rule_template = rule_row。rule_expression。補間({ vars_name})。
VAR execresult = のeval(rule_template)。
結果{=
ID:ID、
検証:execresult
}
予定。自由();
返すJSONを。(文字列化結果)。
$$
言語plv8。
- 通話機能
選択* からrule_test(1、'ddssaa'); //戻り{ "ID":1、 "検証":偽}
選択* からrule_test(1、'dddaaasssssssssaa'); //戻り{ "ID":1、 "検証":真}
evalのの、より一般的なルールベースの検証
- 合意された
VARSで。JSの処理支援キー規格&& || - 参考例
"$ {vars.name}"。長さ> 10 && "$ {vars.version}" == "1.0"
- 関数の定義
CREATE または交換する機能rule_test3(IDのint型、引数は、JSON、rule_row テキスト)RETURNS JSON AS
$$
文字列。プロトタイプ。補間= 関数(paramsは){
constの名前= オブジェクト。キー(paramsは)。
constのヴァルス= オブジェクト。値(paramsは)。
返す新しい関数を(
}
た結果= {}
せVARS = {
VAR rule_template = rule_row。補間({ VARS})。
VAR execresult = のeval(rule_template)。
結果{=
ID:ID、
検証:execresult
}
返すJSONを。(文字列化結果)。
$$
言語plv8。
- コール
選択。*、rule_test3(3、{ "バージョン": "1.0"、 "名前": "dddddddd"は} '、。B rule_expression)からアプリ参加ルールをbは上。ID = B。ID ところ。ID = 2; /
// 2栄{ "ID":3、 "検証":偽}
選択。*、rule_test3(3、{ "バージョン": "1.0"、 "名前": "dddddd1111dd"} '、。B rule_expression)からアプリ参加ルールをbは上。ID = B。ID ところ。ID = 2;
// 2栄{ "ID":3、 "検証":真}
説明
上記判定JSが実装単純な規則を使用して、使用plv8に簡単であり、処理コアの文字列テンプレートの関数であります
参考資料
https://plv8.github.io/#inline-statement-calls
https://github.com/plv8/plv8