使用 awk 重寫 maxscale 過濾器
P粉511896716
P粉511896716 2024-01-16 18:26:12
0
1
373

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

%%
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粉511896716
P粉511896716

全部回覆(1)
P粉316890884

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

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

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

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

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!