搜尋

首頁  >  問答  >  主體

使用 awk 重寫 maxscale 過濾器

以下重寫規則如預期般運作:

%%
regex_grammar: Awk
case_sensitive: false
ignore_whitespace: true
%
SELECT msg FROM mytable WHERE id = 123
%
SELECT msg FROM mytable WHERE id = sha1(123)

我現在的問題是,如何在 regex_grammer 中使用佔位符編寫此查詢:Awk。如果我知道了這一點,我就能在下一個問題上取得突破。我的實際目標是重寫以下查詢:

Input:
SELECT msg FROM mytable WHERE id IN (123,456,769)

Output:
SELECT msg FROM mytable WHERE id IN (sha1(123),sha1(456),sha1(769))

我認為這只適用於 regex_grammar Awk,不適用於 Native。我說得對嗎?

這是我找到的唯一文件:https://mariadb.com/kb/en/mariadb-maxscale-2208-rewrite-filter/

我也接受其他建議或工具! Maxscale 對我來說是最有前途的解決方案。

P粉511896716P粉511896716372 天前435

全部回覆(1)我來回復

  • P粉316890884

    P粉3168908842024-01-17 15:36:10

    您正在進行的替換類型需要重複替換,且數值的數量不固定。重寫過濾器適用於更簡單的用例,其中模式是固定的並且不需要複雜的匹配。

    但是,這仍然可以透過 MaxScale 中的 regexfilter 來完成,它允許更自由地使用正規表示式。以下正規表示式篩選器設定應處理 IN 清單中的簡單值,並將它們包裝在 SHA1 函數呼叫中。

    [regex]
    type=filter
    module=regexfilter
    match=/(?i)(IN\s+\(|,)\s*([^,]+)\s*/
    replace= SHA1()

    這是我用來測試它的 regex101.com 頁面。

    請注意,這不適用於嵌入逗號的字串,這意味著它並不是真正的通用解決方案。

    回覆
    0
  • 取消回覆