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