Browse Source

Optimized the relational filters parsing

Roland Haroutiounian 9 years ago
parent
commit
edb86d7f55
1 changed files with 26 additions and 13 deletions
  1. 26
    13
      leobject/datasources/ledatasourcesql.py

+ 26
- 13
leobject/datasources/ledatasourcesql.py View File

@@ -35,6 +35,8 @@ class LeDataSourceSQL(DummyDatasource):
35 35
         where_filters = filters
36 36
         set_data = data
37 37
 
38
+        prepared_rel_filters = self._prepare_rel_filters(rel_filters)
39
+
38 40
         # Building the query
39 41
         query = update(table=query_table_name, where=where_filters, set=set_data)
40 42
         # Executing the query
@@ -65,6 +67,8 @@ class LeDataSourceSQL(DummyDatasource):
65 67
     # @todo prendre en compte les rel_filters
66 68
     def delete(self, letype, leclass, filters, relational_filters):
67 69
         query_table_name = leclass.name
70
+        prepared_relational_filters = self._prepare_rel_filters(relational_filters)
71
+
68 72
         query = delete(query_table_name, filters)
69 73
         with self.connection as cur:
70 74
             cur.execute(query)
@@ -84,23 +88,15 @@ class LeDataSourceSQL(DummyDatasource):
84 88
         join_fields = {}
85 89
 
86 90
         if relational_filters is not None and len(relational_filters) > 0:
87
-            for relational_filter in relational_filters:
88
-                # Parsing the relation_filter
89
-                relational_position = REL_SUB if relational_filter[0][0] == REL_SUP else REL_SUP
90
-                relational_nature = relational_filter[0][1]
91
-                relational_operator = relational_filter[1]
92
-
93
-                relational_condition_key = (self.RELATIONS_POSITIONS_FIELDS[relational_filter[0][0]], relational_operator)
94
-                relational_condition_value = relational_filter[2]
95
-
91
+            prepared_rel_filters = self._prepare_rel_filters(relational_filters)
92
+            for prepared_rel_filter in prepared_rel_filters:
96 93
                 # Definition of the join condition
97
-                relation_table_join_field = "%s.%s" % (self.RELATIONS_TABLE_NAME, self.RELATIONS_POSITIONS_FIELDS[relational_position])
94
+                relation_table_join_field = "%s.%s" % (self.RELATIONS_TABLE_NAME, self.RELATIONS_POSITIONS_FIELD[prepared_rel_filter['position']])
98 95
                 query_table_join_field = "%s.lodel_id" % query_table_name
99 96
                 join_fields[query_table_join_field] = relation_table_join_field
100
-
101 97
                 # Adding "where" filters
102
-                where_filters['%s.%s' % (self.RELATIONS_TABLE_NAME, self.RELATIONS_NATURE_FIELD)] = relational_nature
103
-                where_filters[relational_condition_key] = relational_condition_value
98
+                where_filters['%s.%s' % (self.RELATIONS_TABLE_NAME, self.RELATIONS_NATURE_FIELD)] = prepared_rel_filter['nature']
99
+                where_filters[prepared_rel_filter['condition_key']] = prepared_rel_filter['condition_value']
104 100
 
105 101
             # Building the query
106 102
             query = select(query_table_name, where=where_filters, select=field_list, joins=join(self.RELATIONS_TABLE_NAME, join_fields))
@@ -125,3 +121,20 @@ class LeDataSourceSQL(DummyDatasource):
125 121
             prepared_filters[prepared_filter_key] = prepared_filter_value
126 122
 
127 123
         return prepared_filters
124
+
125
+    ## @brief prepares the relational filters
126
+    # @params rel_filters : (("superior"|"subordinate"), operator, value)
127
+    # @return list
128
+    def _prepare_rel_filters(self, rel_filters):
129
+        prepared_rel_filters = []
130
+
131
+        for rel_filter in rel_filters:
132
+            rel_filter_dict = {
133
+                'position': REL_SUB if rel_filter[0][0] == REL_SUP else REL_SUB,
134
+                'nature': rel_filter[0][1],
135
+                'condition_key': (self.RELATIONS_POSITIONS_FIELDS[rel_filter[0][0]], rel_filter[1]),
136
+                'condition_value': rel_filter[2]
137
+            }
138
+            prepared_rel_filters.append(rel_filter_dict)
139
+
140
+        return prepared_rel_filters

Loading…
Cancel
Save