Les règles de réécriture suivantes fonctionnent comme prévu :
%% regex_grammar: Awk case_sensitive: false ignore_whitespace: true % SELECT msg FROM mytable WHERE id = 123 % SELECT msg FROM mytable WHERE id = sha1(123)
Ma question maintenant est de savoir comment écrire cette requête en utilisant des espaces réservés dans regex_grammer : Awk. Si je sais cela, je peux faire une percée sur le prochain problème. Mon objectif actuel est de réécrire la requête suivante :
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))
Je pense que cela ne fonctionne qu'avec regex_grammar Awk, pas Native. Ai-je raison?
C'est la seule documentation que j'ai trouvée : https://mariadb.com/kb/en/mariadb-maxscale-2208-rewrite-filter/
Je suis également ouvert à d'autres suggestions ou outils ! Maxscale est la solution la plus prometteuse pour moi.
Le type de remplacement que vous effectuez nécessite un remplacement répété et le nombre de valeurs n'est pas fixe. Les filtres de réécriture conviennent aux cas d'utilisation plus simples où le modèle est fixe et où une correspondance complexe n'est pas requise.
Cependant, cela est toujours possible via l'appel de fonction
regexfilter
来完成,它允许更自由地使用正则表达式。以下正则表达式过滤器配置应处理IN
列表中的简单值,并将它们包装在SHA1
dans MaxScale.C'est la page regex101.com que j'ai utilisée pour le tester.
Veuillez noter que cela ne fonctionne pas avec les chaînes contenant des virgules intégrées, ce qui signifie que ce n'est pas vraiment une solution universelle.