plv8はevalの関数式の評価を使用して実行しました

我々は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

おすすめ

転載: www.cnblogs.com/rongfengliang/p/11823452.html