From 881cd3200dd2cb6b4e9e02344a43cf17196d0680 Mon Sep 17 00:00:00 2001 From: SkywalkerSpace Date: Tue, 11 Aug 2026 11:37:02 +0800 Subject: [PATCH 1/2] update SingleSelectOperator --- dtable_events/utils/sql_generator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dtable_events/utils/sql_generator.py b/dtable_events/utils/sql_generator.py index 611712f5..37b0900a 100644 --- a/dtable_events/utils/sql_generator.py +++ b/dtable_events/utils/sql_generator.py @@ -391,7 +391,7 @@ def op_is(self): return "`%s` %s '%s'" % ( self.column_name, '=', - filter_term + self.escape_string(filter_term) ) def op_is_not(self): From 051c7b4a0e26648f10389c2926464a71de96b5bc Mon Sep 17 00:00:00 2001 From: Alex Happy <1223408988@qq.com> Date: Wed, 19 Aug 2026 14:39:19 +0800 Subject: [PATCH 2/2] update sql unittest --- dtable_events/tests/sql/column_reference.py | 2 +- dtable_events/tests/sql/test_reference.py | 44 +++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/dtable_events/tests/sql/column_reference.py b/dtable_events/tests/sql/column_reference.py index 2d7ecc35..752b3d50 100644 --- a/dtable_events/tests/sql/column_reference.py +++ b/dtable_events/tests/sql/column_reference.py @@ -2,7 +2,7 @@ {'key': '0000', 'name': '名称', 'type': 'text', 'width': 126, 'editable': True, 'resizable': True}, {'key': 'r1A1', 'type': 'date', 'name': 'Time2d', 'editable': True, 'width': 135, 'resizable': True, 'draggable': True, 'data': {'format': 'YYYY-MM-DD HH:mm'}, 'permission_type': '', 'permitted_users': [], 'editor': {'key': None, 'ref': None, 'props': {}, '_owner': None, '_store': {}}, 'formatter': {'key': None, 'ref': None, 'props': {}, '_owner': None, '_store': {}}}, {'key': '_ctime', 'type': 'ctime', 'name': 'createTime', 'editable': True, 'width': 172, 'resizable': True, 'draggable': True, 'data': None, 'permission_type': '', 'permitted_users': []}, - {'key': 'PQ7r', 'type': 'single-select', 'name': 'Sing', 'editable': True, 'width': 117, 'resizable': True, 'draggable': True, 'data': {'options': [{'name': 'a', 'color': '#FFFCB5', 'textColor': '#202428', 'borderColor': '#E8E79D', 'id': '63347'}, {'name': 'b', 'color': '#F4667C', 'textColor': '#FFFFFF', 'borderColor': '#DC556A', 'id': '905189'}, {'name': 'c', 'color': '#9860E5', 'textColor': '#FFFFFF', 'borderColor': '#844BD2', 'id': '506341'}]}, 'permission_type': '', 'permitted_users': []}, + {'key': 'PQ7r', 'type': 'single-select', 'name': 'Sing', 'editable': True, 'width': 117, 'resizable': True, 'draggable': True, 'data': {'options': [{'name': 'a', 'color': '#FFFCB5', 'textColor': '#202428', 'borderColor': '#E8E79D', 'id': '63347'}, {'name': 'b', 'color': '#F4667C', 'textColor': '#FFFFFF', 'borderColor': '#DC556A', 'id': '905189'}, {'name': 'c', 'color': '#9860E5', 'textColor': '#FFFFFF', 'borderColor': '#844BD2', 'id': '506341'}, {'name': "d'quote", 'color': '#FFD9C8', 'textColor': '#202428', 'borderColor': '#EFBAA3', 'id': '99999'}]}, 'permission_type': '', 'permitted_users': []}, {'key': 'OhXJ', 'type': 'multiple-select', 'name': 'Mul', 'editable': True, 'width': 143, 'resizable': True, 'draggable': True, 'data': {'options': [{'name': 'aa', 'color': '#FFD9C8', 'textColor': '#202428', 'borderColor': '#EFBAA3', 'id': '885435'}, {'name': 'bb', 'color': '#EAA775', 'textColor': '#FFFFFF', 'borderColor': '#D59361', 'id': '764614'}, {'name': 'cc', 'color': '#9F8CF1', 'textColor': '#FFFFFF', 'borderColor': '#8F75E2', 'id': '418530'}, {'name': 'dd', 'color': '#ADDF84', 'textColor': '#FFFFFF', 'borderColor': '#9CCF72', 'id': '634546'}]}, 'permission_type': '', 'permitted_users': []}, {'key': 'Dhi2', 'type': 'rate', 'name': 'rate', 'editable': True, 'width': 200, 'resizable': True, 'draggable': True, 'data': {'rate_max_number': 5, 'rate_style_color': '#FF8000'}, 'permission_type': '', 'permitted_users': []}, {'key': 'W1lp', 'type': 'collaborator', 'name': 'Colla', 'editable': True, 'width': 200, 'resizable': True, 'draggable': True, 'data': {'enable_send_notification': False}, 'permission_type': '', 'permitted_users': []}, diff --git a/dtable_events/tests/sql/test_reference.py b/dtable_events/tests/sql/test_reference.py index cf9cb437..76ea4ad1 100644 --- a/dtable_events/tests/sql/test_reference.py +++ b/dtable_events/tests/sql/test_reference.py @@ -322,6 +322,50 @@ def get_expected_sql_for_modifier(filter_modifier, column_name): "expected_sql": "SELECT * FROM `Table1` WHERE (`Sing` = 'a') LIMIT 0, 100", "by_group": False, }, + { + "filter_conditions": { + "filters": [ + {'column_name': 'Sing', 'filter_predicate': 'is', 'filter_term': '99999'} + ], + "filter_predicate": 'And', + "sorts":[], + }, + "expected_sql": "SELECT * FROM `Table1` WHERE (`Sing` = 'd''quote') LIMIT 0, 100", + "by_group": False, + }, + { + "filter_conditions": { + "filters": [ + {'column_name': 'Sing', 'filter_predicate': 'is_not', 'filter_term': '99999'} + ], + "filter_predicate": 'And', + "sorts":[], + }, + "expected_sql": "SELECT * FROM `Table1` WHERE (`Sing` <> 'd''quote') LIMIT 0, 100", + "by_group": False, + }, + { + "filter_conditions": { + "filters": [ + {'column_name': 'Sing', 'filter_predicate': 'is_any_of', 'filter_term': ['99999']} + ], + "filter_predicate": 'And', + "sorts":[], + }, + "expected_sql": "SELECT * FROM `Table1` WHERE (`Sing` in ('d''quote')) LIMIT 0, 100", + "by_group": False, + }, + { + "filter_conditions": { + "filters": [ + {'column_name': 'Sing', 'filter_predicate': 'is_none_of', 'filter_term': ['99999']} + ], + "filter_predicate": 'And', + "sorts":[], + }, + "expected_sql": "SELECT * FROM `Table1` WHERE (`Sing` not in ('d''quote')) LIMIT 0, 100", + "by_group": False, + }, { "filter_conditions": { "filters": [