Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit40d51c4

Browse files
committed
parse sql escape symbol
1 parent0cd14cb commit40d51c4

File tree

13 files changed

+67
-38
lines changed

13 files changed

+67
-38
lines changed

‎uncoder-core/app/translator/core/str_value_manager.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ class StrValueManager:
182182
container_spec_symbols_map:ClassVar[dict[type[BaseSpecSymbol],str]]=CONTAINER_SPEC_SYMBOLS_MAP
183183

184184
@staticmethod
185-
deffrom_str_to_container(value:str)->StrValue:
185+
deffrom_str_to_container(value:str,escape_symbol:Optional[str]=None)->StrValue:# noqa: ARG004
186186
returnStrValue(value=value,split_value=[value])
187187

188188
deffrom_re_str_to_container(self,value:str)->StrValue:

‎uncoder-core/app/translator/core/tokenizer.py‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,7 @@ def search_multi_value(
162162

163163
def_get_field_value_match(self,query:str,operator:str,field_name:str,value_pattern:str)->re.Match:
164164
field_value_pattern=self.get_field_value_pattern(operator,field_name,value_pattern)
165-
field_value_regex=re.compile(field_value_pattern,re.IGNORECASE)
166-
field_value_match=re.match(field_value_regex,query)
165+
field_value_match=re.match(field_value_pattern,query,re.IGNORECASE)
167166
iffield_value_matchisNone:
168167
raiseTokenizerGeneralException(error=f"Value couldn't be found in query part:{query}")
169168

‎uncoder-core/app/translator/platforms/base/aql/str_value_manager.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"""
1919

2020
importcopy
21-
fromtypingimportClassVar
21+
fromtypingimportClassVar,Optional
2222

2323
fromapp.translator.core.custom_types.valuesimportValueType
2424
fromapp.translator.core.str_value_managerimport (
@@ -55,7 +55,7 @@ class AQLStrValueManager(StrValueManager):
5555
"%":UnboundLenWildCard,
5656
}
5757

58-
deffrom_str_to_container(self,value:str)->StrValue:
58+
deffrom_str_to_container(self,value:str,escape_symbol:Optional[str]=None)->StrValue:# noqa: ARG002
5959
split= []
6060
prev_char=None
6161
forcharinvalue:

‎uncoder-core/app/translator/platforms/base/lucene/str_value_manager.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
-----------------------------------------------------------------
1818
"""
1919

20-
fromtypingimportClassVar
20+
fromtypingimportClassVar,Optional
2121

2222
fromapp.translator.core.str_value_managerimport (
2323
BaseSpecSymbol,
@@ -68,7 +68,7 @@ class LuceneStrValueManager(StrValueManager):
6868
}
6969
re_str_spec_symbols_map=RE_STR_SPEC_SYMBOLS_MAP
7070

71-
deffrom_str_to_container(self,value:str)->StrValue:
71+
deffrom_str_to_container(self,value:str,escape_symbol:Optional[str]=None)->StrValue:# noqa: ARG002
7272
split= []
7373
prev_char=None
7474
forcharinvalue:

‎uncoder-core/app/translator/platforms/base/spl/str_value_manager.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
limitations under the License.
1717
-----------------------------------------------------------------
1818
"""
19-
fromtypingimportClassVar
19+
fromtypingimportClassVar,Optional
2020

2121
fromapp.translator.core.str_value_managerimportBaseSpecSymbol,StrValue,StrValueManager,UnboundLenWildCard
2222
fromapp.translator.platforms.base.spl.escape_managerimportspl_escape_manager
@@ -26,7 +26,7 @@ class SplStrValueManager(StrValueManager):
2626
escape_manager=spl_escape_manager
2727
str_spec_symbols_map:ClassVar[dict[str,type[BaseSpecSymbol]]]= {"*":UnboundLenWildCard}
2828

29-
deffrom_str_to_container(self,value:str)->StrValue:
29+
deffrom_str_to_container(self,value:str,escape_symbol:Optional[str]=None)->StrValue:# noqa: ARG002
3030
split= []
3131
prev_char=None
3232
forcharinvalue:

‎uncoder-core/app/translator/platforms/base/sql/custom_types/__init__.py‎

Whitespace-only changes.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
fromapp.translator.core.custom_types.valuesimportValueType
2+
3+
4+
classSQLValueType(ValueType):
5+
like_value="like_value"

‎uncoder-core/app/translator/platforms/base/sql/escape_manager.py‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
fromtypingimportClassVar
22

3-
fromapp.translator.core.custom_types.valuesimportValueType
43
fromapp.translator.core.escape_managerimportEscapeManager
54
fromapp.translator.core.models.escape_detailsimportEscapeDetails
5+
fromapp.translator.platforms.base.sql.custom_types.valuesimportSQLValueType
66

77

88
classSQLEscapeManager(EscapeManager):
99
escape_map:ClassVar[dict[str,list[EscapeDetails]]]= {
10-
ValueType.value: [EscapeDetails(pattern=r"(')",escape_symbols=r"'\1")],
11-
ValueType.regex_value: [
10+
SQLValueType.value: [EscapeDetails(pattern=r"(')",escape_symbols=r"'\1")],
11+
SQLValueType.like_value: [EscapeDetails(pattern=r"(['%_\\])",escape_symbols=r"\\\1")],
12+
SQLValueType.regex_value: [
1213
EscapeDetails(pattern=r"([$^*+()\[\]{}|.?\-\\])",escape_symbols=r"\\\1"),
1314
EscapeDetails(pattern=r"(')",escape_symbols=r"'\1"),
1415
],

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
fromapp.translator.core.custom_types.valuesimportValueType
2222
fromapp.translator.core.mappingimportLogSourceSignature
2323
fromapp.translator.core.renderimportBaseFieldValueRender,PlatformQueryRender
24+
fromapp.translator.platforms.base.sql.custom_types.valuesimportSQLValueType
2425
fromapp.translator.platforms.base.sql.str_value_managerimportsql_str_value_manager
2526

2627

@@ -56,17 +57,23 @@ def greater_or_equal_modifier(self, field: str, value: DEFAULT_VALUE_TYPE) -> st
5657
defcontains_modifier(self,field:str,value:DEFAULT_VALUE_TYPE)->str:
5758
ifisinstance(value,list):
5859
returnf"({self.or_token.join(self.contains_modifier(field=field,value=v)forvinvalue)})"
59-
returnf"{field} like '%{self._pre_process_value(field,value)}%'"
60+
61+
value=f"'%{self._pre_process_value(field,value,value_type=SQLValueType.like_value)}%' escape '\\'"
62+
returnf"{field} like{value}"
6063

6164
defendswith_modifier(self,field:str,value:DEFAULT_VALUE_TYPE)->str:
6265
ifisinstance(value,list):
6366
returnf"({self.or_token.join(self.endswith_modifier(field=field,value=v)forvinvalue)})"
64-
returnf"{field} like '%{self._pre_process_value(field,value)}'"
67+
68+
value=f"'%{self._pre_process_value(field,value,value_type=SQLValueType.like_value)}' escape '\\'"
69+
returnf"{field} like{value}"
6570

6671
defstartswith_modifier(self,field:str,value:DEFAULT_VALUE_TYPE)->str:
6772
ifisinstance(value,list):
6873
returnf"({self.or_token.join(self.startswith_modifier(field=field,value=v)forvinvalue)})"
69-
returnf"{field} like '{self._pre_process_value(field,value)}%'"
74+
75+
value=f"'{self._pre_process_value(field,value,value_type=SQLValueType.like_value)}%' escape '\\'"
76+
returnf"{field} like{value}"
7077

7178
defregex_modifier(self,field:str,value:DEFAULT_VALUE_TYPE)->str:
7279
ifisinstance(value,list):

‎uncoder-core/app/translator/platforms/base/sql/str_value_manager.py‎

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"""
1919

2020
importcopy
21-
fromtypingimportClassVar
21+
fromtypingimportClassVar,Optional
2222

2323
fromapp.translator.core.custom_types.valuesimportValueType
2424
fromapp.translator.core.str_value_managerimport (
@@ -55,20 +55,28 @@ class SQLStrValueManager(StrValueManager):
5555
"%":UnboundLenWildCard,
5656
}
5757

58-
deffrom_str_to_container(self,value:str)->StrValue:
58+
deffrom_str_to_container(self,value:str,escape_symbol:Optional[str]=None)->StrValue:
5959
split= []
6060
prev_char=None
6161
forcharinvalue:
62-
ifcharinself.str_spec_symbols_map:
63-
split.append(self.str_spec_symbols_map[char]())
64-
else:
65-
ifchar=="'":
66-
ifprev_char=="'":
67-
split.append(char)
68-
prev_char=None
69-
continue
70-
prev_char=char
62+
ifescape_symbolandchar==escape_symbol:
63+
ifprev_char==escape_symbol:
64+
split.append(char)
65+
prev_char=None
7166
continue
67+
prev_char=char
68+
continue
69+
ifnotescape_symbolandchar=="'":
70+
ifprev_char=="'":
71+
split.append(char)
72+
prev_char=None
73+
continue
74+
elifcharin ("'","_","%"):
75+
ifescape_symbolandprev_char==escape_symbol:
76+
split.append(char)
77+
elifcharinself.str_spec_symbols_map:
78+
split.append(self.str_spec_symbols_map[char]())
79+
else:
7280
split.append(char)
7381

7482
prev_char=char

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp