cari

Rumah  >  Soal Jawab  >  teks badan

Tulis semula penapis skala maks menggunakan awk

Peraturan tulis semula berikut berfungsi seperti yang diharapkan:

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

Soalan saya sekarang ialah, cara menulis pertanyaan ini menggunakan ruang letak dalam regex_grammer: Awk. Jika saya tahu ini, saya boleh membuat terobosan pada masalah seterusnya. Matlamat sebenar saya adalah untuk menulis semula pertanyaan berikut:

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

Saya rasa ini hanya berfungsi dengan regex_grammar Awk, bukan Native. Adakah saya betul?

Ini adalah satu-satunya dokumentasi yang saya temui: https://mariadb.com/kb/en/mariadb-maxscale-2208-rewrite-filter/

Saya juga terbuka kepada cadangan atau alatan lain! Maxscale adalah penyelesaian yang paling menjanjikan untuk saya.

P粉511896716P粉511896716407 hari yang lalu460

membalas semua(1)saya akan balas

  • P粉316890884

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

    Jenis penggantian yang anda lakukan memerlukan penggantian berulang, dan bilangan nilai tidak tetap. Penapis tulis semula sesuai untuk kes penggunaan yang lebih mudah di mana coraknya tetap dan padanan kompleks tidak diperlukan.

    Walau bagaimanapun, ini masih boleh dilakukan melalui panggilan fungsi regexfilter 来完成,它允许更自由地使用正则表达式。以下正则表达式过滤器配置应处理 IN 列表中的简单值,并将它们包装在 SHA1 dalam MaxScale.

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

    Ini adalah halaman regex101.com yang saya gunakan untuk mengujinya.

    Sila ambil perhatian bahawa ini tidak berfungsi dengan rentetan dengan koma terbenam, bermakna ia bukanlah penyelesaian universal.

    balas
    0
  • Batalbalas