mariadb 使用awk的最大规模重写过滤器

ss2ws0br  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(159)

以下重写规则按预期工作:

%%
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在我看来是最有希望的解决方案。

iaqfqrcu

iaqfqrcu1#

您正在执行的替换类型需要重复替换,并且没有固定数量的值。重写过滤器旨在用于更简单的用例,其中模式是固定的并且不需要复杂的匹配。
但是,这仍然可以通过MaxScale中的regexfilter来完成,它允许更自由地使用正则表达式。下面的regexfilter配置应该处理IN列表中的简单值,并将它们 Package 在SHA1函数调用中。

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

字符串
这是我用来测试它的regex101.com页面。
请注意,这不适用于带有嵌入逗号的字符串,这意味着它不是一个真正的通用解决方案。

相关问题