programing

awk가 있는 maxscale 다시 쓰기 필터

closeapi 2023. 7. 30. 17:48
반응형

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은 제게 가장 유망한 해결책으로 보였습니다.

현재 수행 중인 교체 유형에는 고정된 값의 양이 없는 반복적인 교체가 필요합니다.다시 쓰기 필터는 패턴이 고정되어 있고 복잡한 일치가 필요하지 않은 단순한 사용 사례를 위한 것입니다.

하지만, 이것은 여전히 할 수 있습니다.regexfilterMaxScale에서 정규식을 더 자유롭게 사용할 수 있습니다.다음 정규식 필터 구성은 다음에서 단순 값을 처리해야 합니다.IN그것들을 나열하고 포장합니다.SHA1함수 호출.

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

여기 제가 테스트할 때 사용한 regex101.com 페이지가 있습니다.

이는 쉼표가 포함된 문자열에서는 작동하지 않으므로 범용 솔루션이 아닙니다.

언급URL : https://stackoverflow.com/questions/76613380/maxscale-rewrite-filter-with-awk

반응형