Skip to content

Commit 2bc9ab2

Browse files
committed
sql str value manager
1 parent bf008fe commit 2bc9ab2

File tree

4 files changed

+39
-73
lines changed

4 files changed

+39
-73
lines changed

uncoder-core/app/translator/platforms/anomali/renders/anomali.py

Lines changed: 3 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -17,65 +17,16 @@
1717
-----------------------------------------------------------------
1818
"""
1919
from app.translator.const import DEFAULT_VALUE_TYPE
20-
from app.translator.core.custom_types.values import ValueType
2120
from app.translator.core.models.platform_details import PlatformDetails
22-
from app.translator.core.render import BaseFieldValueRender, PlatformQueryRender
21+
from app.translator.core.render import PlatformQueryRender
2322
from app.translator.managers import render_manager
2423
from app.translator.platforms.anomali.const import anomali_query_details
2524
from app.translator.platforms.anomali.mapping import AnomaliMappings, anomali_query_mappings
26-
from app.translator.platforms.base.sql.str_value_manager import sql_str_value_manager
25+
from app.translator.platforms.base.sql.renders.sql import SqlFieldValueRender
2726

2827

29-
class AnomaliFieldValueRender(BaseFieldValueRender):
28+
class AnomaliFieldValueRender(SqlFieldValueRender):
3029
details: PlatformDetails = anomali_query_details
31-
str_value_manager = sql_str_value_manager
32-
33-
@staticmethod
34-
def _wrap_str_value(value: str) -> str:
35-
return f"'{value}'"
36-
37-
def equal_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
38-
if isinstance(value, list):
39-
return f"({self.or_token.join([self.equal_modifier(field=field, value=v) for v in value])})"
40-
return f"{field} = {self._pre_process_value(field, value, wrap_str=True)}"
41-
42-
def not_equal_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
43-
if isinstance(value, list):
44-
return f"({self.or_token.join([self.not_equal_modifier(field=field, value=v) for v in value])})"
45-
return f"{field} != {self._pre_process_value(field, value, wrap_str=True)}"
46-
47-
def less_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
48-
return f"{field} < {self._pre_process_value(field, value, wrap_str=True)}"
49-
50-
def less_or_equal_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
51-
return f"{field} <= {self._pre_process_value(field, value, wrap_str=True)}"
52-
53-
def greater_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
54-
return f"{field} > {self._pre_process_value(field, value, wrap_str=True)}"
55-
56-
def greater_or_equal_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
57-
return f"{field} >= {self._pre_process_value(field, value, wrap_str=True)}"
58-
59-
def contains_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
60-
if isinstance(value, list):
61-
return f"({self.or_token.join(self.contains_modifier(field=field, value=v) for v in value)})"
62-
return f"{field} like '%{self._pre_process_value(field, value)}%'"
63-
64-
def endswith_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
65-
if isinstance(value, list):
66-
return f"({self.or_token.join(self.endswith_modifier(field=field, value=v) for v in value)})"
67-
return f"{field} like '%{self._pre_process_value(field, value)}'"
68-
69-
def startswith_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
70-
if isinstance(value, list):
71-
return f"({self.or_token.join(self.startswith_modifier(field=field, value=v) for v in value)})"
72-
return f"{field} like '{self._pre_process_value(field, value)}%'"
73-
74-
def regex_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
75-
if isinstance(value, list):
76-
return f"({self.or_token.join(self.regex_modifier(field=field, value=v) for v in value)})"
77-
regex_str = self._pre_process_value(field, value, value_type=ValueType.regex_value, wrap_str=True)
78-
return f"regexp_like({field}, {regex_str})"
7930

8031
def keywords(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
8132
return f'message contains "{self._pre_process_value(field, value)}"'

uncoder-core/app/translator/platforms/base/spl/renders/spl.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,12 @@ def _wrap_str_value(value: str) -> str:
3434
return f'"{value}"'
3535

3636
def _pre_process_value(
37-
self, field: str, value: Union[int, str, StrValue], value_type: str = ValueType.value, wrap_str: bool = False
37+
self,
38+
field: str,
39+
value: Union[bool, int, str, StrValue],
40+
value_type: str = ValueType.value,
41+
wrap_str: bool = False,
42+
wrap_int: bool = False, # noqa: ARG002
3843
) -> Union[int, str]:
3944
value = super()._pre_process_value(field, value, value_type=value_type, wrap_str=wrap_str)
4045
return self._wrap_str_value(str(value)) if not isinstance(value, str) else value

uncoder-core/app/translator/platforms/base/sql/renders/sql.py

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,55 +17,62 @@
1717
-----------------------------------------------------------------
1818
"""
1919

20-
from typing import Union
21-
2220
from app.translator.const import DEFAULT_VALUE_TYPE
21+
from app.translator.core.custom_types.values import ValueType
2322
from app.translator.core.mapping import LogSourceSignature
2423
from app.translator.core.render import BaseFieldValueRender, PlatformQueryRender
24+
from app.translator.platforms.base.sql.str_value_manager import sql_str_value_manager
2525

2626

2727
class SqlFieldValueRender(BaseFieldValueRender):
28+
str_value_manager = sql_str_value_manager
29+
30+
@staticmethod
31+
def _wrap_str_value(value: str) -> str:
32+
return f"'{value}'"
33+
2834
def equal_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
2935
if isinstance(value, list):
3036
return f"({self.or_token.join([self.equal_modifier(field=field, value=v) for v in value])})"
31-
return f"{field} = '{value}'"
37+
return f"{field} = {self._pre_process_value(field, value, wrap_str=True)}"
3238

33-
def less_modifier(self, field: str, value: Union[int, str]) -> str:
34-
return f"{field} < '{value}'"
39+
def not_equal_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
40+
if isinstance(value, list):
41+
return f"({self.or_token.join([self.not_equal_modifier(field=field, value=v) for v in value])})"
42+
return f"{field} != {self._pre_process_value(field, value, wrap_str=True)}"
3543

36-
def less_or_equal_modifier(self, field: str, value: Union[int, str]) -> str:
37-
return f"{field} <= '{value}'"
44+
def less_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
45+
return f"{field} < {self._pre_process_value(field, value, wrap_str=True)}"
3846

39-
def greater_modifier(self, field: str, value: Union[int, str]) -> str:
40-
return f"{field} > '{value}'"
47+
def less_or_equal_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
48+
return f"{field} <= {self._pre_process_value(field, value, wrap_str=True)}"
4149

42-
def greater_or_equal_modifier(self, field: str, value: Union[int, str]) -> str:
43-
return f"{field} >= '{value}'"
50+
def greater_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
51+
return f"{field} > {self._pre_process_value(field, value, wrap_str=True)}"
4452

45-
def not_equal_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
46-
if isinstance(value, list):
47-
return f"({self.or_token.join([self.not_equal_modifier(field=field, value=v) for v in value])})"
48-
return f"{field} != '{value}'"
53+
def greater_or_equal_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
54+
return f"{field} >= {self._pre_process_value(field, value, wrap_str=True)}"
4955

5056
def contains_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
5157
if isinstance(value, list):
5258
return f"({self.or_token.join(self.contains_modifier(field=field, value=v) for v in value)})"
53-
return f"{field} ILIKE '%{value}%' ESCAPE '\\'"
59+
return f"{field} like '%{self._pre_process_value(field, value)}%'"
5460

5561
def endswith_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
5662
if isinstance(value, list):
5763
return f"({self.or_token.join(self.endswith_modifier(field=field, value=v) for v in value)})"
58-
return f"{field} ILIKE '%{value}' ESCAPE '\\'"
64+
return f"{field} like '%{self._pre_process_value(field, value)}'"
5965

6066
def startswith_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
6167
if isinstance(value, list):
6268
return f"({self.or_token.join(self.startswith_modifier(field=field, value=v) for v in value)})"
63-
return f"{field} ILIKE '{value}%' ESCAPE '\\'"
69+
return f"{field} like '{self._pre_process_value(field, value)}%'"
6470

6571
def regex_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> str:
6672
if isinstance(value, list):
6773
return f"({self.or_token.join(self.regex_modifier(field=field, value=v) for v in value)})"
68-
return f"{field} ILIKE '{value}' ESCAPE '\\'"
74+
regex_str = self._pre_process_value(field, value, value_type=ValueType.regex_value, wrap_str=True)
75+
return f"regexp_like({field}, {regex_str})"
6976

7077

7178
class SqlQueryRender(PlatformQueryRender):

uncoder-core/app/translator/platforms/base/sql/tokenizer.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from app.translator.core.models.query_tokens.field_value import FieldValue
2525
from app.translator.core.models.query_tokens.identifier import Identifier
2626
from app.translator.core.tokenizer import QueryTokenizer
27+
from app.translator.platforms.base.sql.str_value_manager import sql_str_value_manager
2728
from app.translator.tools.utils import get_match_group
2829

2930

@@ -51,6 +52,8 @@ class SqlTokenizer(QueryTokenizer):
5152

5253
wildcard_symbol = "%"
5354

55+
str_value_manager = sql_str_value_manager
56+
5457
@staticmethod
5558
def should_process_value_wildcards(operator: Optional[str]) -> bool:
5659
return operator and operator.lower() in ("like",)
@@ -65,7 +68,7 @@ def get_operator_and_value(
6568
return mapped_operator, bool_value
6669

6770
if (s_q_value := get_match_group(match, group_name=ValueType.single_quotes_value)) is not None:
68-
return mapped_operator, s_q_value
71+
return mapped_operator, self.str_value_manager.from_str_to_container(s_q_value)
6972

7073
return super().get_operator_and_value(match, mapped_operator, operator)
7174

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy