首页  >  问答  >  正文

使用 awk 重写 maxscale 过滤器

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

%%
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粉511896716P粉511896716277 天前378

全部回复(1)我来回复

  • P粉316890884

    P粉3168908842024-01-17 15:36:10

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

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

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

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

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

    回复
    0
  • 取消回复