diff --git a/uncoder-core/app/translator/platforms/base/aql/const.py b/uncoder-core/app/translator/platforms/base/aql/const.py index 1df7cdd1..b2503bd4 100644 --- a/uncoder-core/app/translator/platforms/base/aql/const.py +++ b/uncoder-core/app/translator/platforms/base/aql/const.py @@ -1,7 +1,10 @@ +from app.translator.core.custom_types.values import ValueType + UTF8_PAYLOAD_PATTERN = r"UTF8\(payload\)" -NUM_VALUE_PATTERN = r"(?P\d+(?:\.\d+)*)" -SINGLE_QUOTES_VALUE_PATTERN = ( - r"""'(?P(?:[:a-zA-Zа-яА-Я\*0-9=+%#\-\/\\|,;_<>`~".$&^@!?\(\)\{\}\[\]\s]|'')*)'""" # noqa: RUF001 -) +NUM_VALUE_PATTERN = rf"(?P<{ValueType.number_value}>\d+(?:\.\d+)*)" +SINGLE_QUOTES_VALUE_PATTERN = rf"""'(?P<{ValueType.single_quotes_value}>(?:[:a-zA-Zа-яА-Я\*0-9=+%#\-\/\\|,;_<>`~".$&^@!?\(\)\{{\}}\[\]\s]|'')*)'""" # noqa: E501,RUF001 TABLE_PATTERN = r"\s+FROM\s+[a-zA-Z.\-*]+" TABLE_GROUP_PATTERN = r"\s+FROM\s+(?P[a-zA-Z.\-*]+)" + +FIELD_NAME_PATTERN = rf"(?P<{ValueType.no_quotes_value}>[a-zA-Z0-9\._\-]+)" +DOUBLE_QUOTES_FIELD_NAME_PATTERN = rf'"(?P<{ValueType.double_quotes_value}>[a-zA-Z0-9\._\-\s]+)"' diff --git a/uncoder-core/app/translator/platforms/base/aql/tokenizer.py b/uncoder-core/app/translator/platforms/base/aql/tokenizer.py index 16aa96fe..ff04be20 100644 --- a/uncoder-core/app/translator/platforms/base/aql/tokenizer.py +++ b/uncoder-core/app/translator/platforms/base/aql/tokenizer.py @@ -29,7 +29,13 @@ from app.translator.core.models.query_tokens.keyword import Keyword from app.translator.core.str_value_manager import StrValue from app.translator.core.tokenizer import QueryTokenizer -from app.translator.platforms.base.aql.const import NUM_VALUE_PATTERN, SINGLE_QUOTES_VALUE_PATTERN, UTF8_PAYLOAD_PATTERN +from app.translator.platforms.base.aql.const import ( + DOUBLE_QUOTES_FIELD_NAME_PATTERN, + FIELD_NAME_PATTERN, + NUM_VALUE_PATTERN, + SINGLE_QUOTES_VALUE_PATTERN, + UTF8_PAYLOAD_PATTERN, +) from app.translator.platforms.base.aql.functions.const import AQLFunctionGroupType from app.translator.platforms.base.aql.str_value_manager import aql_str_value_manager from app.translator.tools.utils import get_match_group @@ -51,7 +57,7 @@ class AQLTokenizer(QueryTokenizer): multi_value_operators_map: ClassVar[dict[str, str]] = {"in": OperatorType.EQ} field_pattern = r'(?P"[a-zA-Z\._\-\s]+"|[a-zA-Z\._\-]+)' - function_pattern = r'(?P[a-zA-Z_]+)\((?:(?:[a-zA-Z\._\-\s]+)|(?:"[a-zA-Z\._\-]+"))\)' + function_pattern = rf"(?P[a-zA-Z_]+)\((?:{FIELD_NAME_PATTERN}|{DOUBLE_QUOTES_FIELD_NAME_PATTERN})\)" bool_value_pattern = rf"(?P<{ValueType.bool_value}>true|false)\s*" _value_pattern = rf"{NUM_VALUE_PATTERN}|{bool_value_pattern}|{SINGLE_QUOTES_VALUE_PATTERN}" multi_value_pattern = rf"""\((?P<{ValueType.multi_value}>[:a-zA-Z\"\*0-9=+%#\-_\/\\'\,.&^@!\(\s]*)\)"""