Tulis semula penapis skala maks menggunakan awk
P粉511896716
P粉511896716 2024-01-16 18:26:12
0
1
404

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粉511896716
P粉511896716

membalas semua(1)
P粉316890884

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan