以下重写规则按预期工作:
%%
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在我看来是最有希望的解决方案。
1条答案
按热度按时间iaqfqrcu1#
您正在执行的替换类型需要重复替换,并且没有固定数量的值。重写过滤器旨在用于更简单的用例,其中模式是固定的并且不需要复杂的匹配。
但是,这仍然可以通过MaxScale中的
regexfilter
来完成,它允许更自由地使用正则表达式。下面的regexfilter配置应该处理IN
列表中的简单值,并将它们 Package 在SHA1
函数调用中。字符串
这是我用来测试它的regex101.com页面。
请注意,这不适用于带有嵌入逗号的字符串,这意味着它不是一个真正的通用解决方案。