以下重寫規則如預期般運作:
%% 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 對我來說是最有前途的解決方案。
您正在進行的替換類型需要重複替換,且數值的數量不固定。重寫過濾器適用於更簡單的用例,其中模式是固定的並且不需要複雜的匹配。
但是,這仍然可以透過 MaxScale 中的
regexfilter
來完成,它允許更自由地使用正規表示式。以下正規表示式篩選器設定應處理IN
清單中的簡單值,並將它們包裝在SHA1
函數呼叫中。這是我用來測試它的 regex101.com 頁面。
請注意,這不適用於嵌入逗號的字串,這意味著它並不是真正的通用解決方案。