Browse Source

[#85] Update method now uses the relationnal filters

Roland Haroutiounian 9 years ago
parent
commit
0375755f3e
1 changed files with 16 additions and 4 deletions
  1. 16
    4
      leapi/datasources/ledatasourcesql.py

+ 16
- 4
leapi/datasources/ledatasourcesql.py View File

@@ -102,7 +102,7 @@ class LeDataSourceSQL(DummyDatasource):
102 102
                         query += " AND "
103 103
                     query += "%s %s %s" % (filter_item[0][0], filter_item[0][1], filter_item[1])
104 104
         else:
105
-            query = delete(query_table_name, filters)
105
+            query = delete(query_table_name, prep_filters)
106 106
 
107 107
         query_delete_from_object = delete(self.datasource_utils.objects_table_name, {'lodel_id': filters['lodel_id']})
108 108
         with self.connection as cur:
@@ -117,14 +117,26 @@ class LeDataSourceSQL(DummyDatasource):
117 117
     # @param rel_filters list : List of relationnal filters (see @ref leobject_filters)
118 118
     # @param **datas : Datas in kwargs
119 119
     # @return the number of updated components
120
-    # @TODO Prendre en charge les rel_filters
121 120
     def update(self, target_cls, filters, rel_filters, **datas):
122 121
         query_table_name = self.datasource_utils.get_table_name_from_class(target_cls.__name__)
123
-        where_filters = filters
122
+        prep_filters = self._prepare_filters(filters, query_table_name)
124 123
         set_data = datas
125 124
         if rel_filters is not None:
126 125
             prep_rel_filters = self._prepare_rel_filters(rel_filters)
127
-        query = update(table=query_table_name, where=where_filters, set=set_data)
126
+            for prep_rel_filter in prep_rel_filters:
127
+                query += "%s INNER JOIN  %s ON (%s.%s = %s.%s)" % (
128
+                    self.datasource_utils.relations_table_name,
129
+                    query_table_name,
130
+                    self.datasource_utils.relations_table_name,
131
+                    prep_rel_filter['position'],
132
+                    query_table_name,
133
+                    self.datasource_utils.field_lodel_id
134
+                )
135
+
136
+                if prep_rel_filter['condition_key'][0] is not None:
137
+                    prep_filters[("%s.%s" % (self.datasource_utils.relations_table_name, prep_rel_filter['condition_key'][0]), prep_rel_filter['condition_key'][1])] = prep_rel_filter['condition_value']
138
+
139
+        query = update(table=query_table_name, where=prep_filters, set=set_data)
128 140
         with self.connection as cur:
129 141
             result = cur.execute(query)
130 142
         return result

Loading…
Cancel
Save