Schreiben Sie den Maxscale-Filter mit awk neu
P粉511896716
P粉511896716 2024-01-16 18:26:12
0
1
369

Die folgenden Umschreiberegeln funktionieren wie erwartet:

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

Meine Frage ist nun, wie man diese Abfrage mithilfe von Platzhaltern in regex_grammer schreibt: Awk. Wenn ich das weiß, kann ich beim nächsten Problem einen Durchbruch erzielen. Mein eigentliches Ziel ist es, die folgende Abfrage umzuschreiben:

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))

Ich denke, das funktioniert nur mit regex_grammar Awk, nicht mit Native. Habe ich recht?

Dies ist die einzige Dokumentation, die ich gefunden habe: https://mariadb.com/kb/en/mariadb-maxscale-2208-rewrite-filter/

Ich bin auch offen für andere Vorschläge oder Tools! Maxscale ist für mich die vielversprechendste Lösung.

P粉511896716
P粉511896716

Antworte allen(1)
P粉316890884

您正在进行的替换类型需要重复替换,且值的数量不固定。重写过滤器适用于更简单的用例,其中模式是固定的并且不需要复杂的匹配。

但是,这仍然可以通过 MaxScale 中的 regexfilter 来完成,它允许更自由地使用正则表达式。以下正则表达式过滤器配置应处理 IN 列表中的简单值,并将它们包装在 SHA1 函数调用中。

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

这是我用来测试它的 regex101.com 页面。

请注意,这不适用于嵌入逗号的字符串,这意味着它并不是真正的通用解决方案。

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!