Browse Source

LeFilteredQuery.execute() method is written

Yann Weber 8 years ago
parent
commit
eba5d7d616
1 changed files with 28 additions and 5 deletions
  1. 28
    5
      lodel/leapi/query.py

+ 28
- 5
lodel/leapi/query.py View File

@@ -127,6 +127,29 @@ class LeFilteredQuery(LeQuery):
127 127
         self.subqueries = None
128 128
         self.set_query_filter(query_filters)
129 129
     
130
+    ##@brief Abstract FilteredQuery execution method
131
+    #
132
+    # This method takes care to execute subqueries before calling super execute
133
+    def execute(self, datas = None):
134
+        #copy originals filters
135
+        orig_filters = copy.copy(self.__query_filter)
136
+        std_filters, rel_filters = self.__query_filter
137
+
138
+        for rfield, subq in self.subqueries:
139
+            subq_res = subq.execute()
140
+            std_filters.append(
141
+                (rfield, ' in ', subq_res))
142
+        self.__query_filter = (std_filters, rel_filters)
143
+        try:
144
+            res = super().execute()
145
+        except Exception as e:
146
+            #restoring filters even if an exception is raised
147
+            self.__query_filter = orig_filter
148
+            raise e #reraise
149
+        #restoring filters
150
+        self.__query_filter = orig_filters
151
+        return res
152
+
130 153
     ##@brief Add filter(s) to the query
131 154
     #
132 155
     # This method is also able to slice query if different datasources are
@@ -449,7 +472,7 @@ class LeInsertQuery(LeQuery):
449 472
 
450 473
     ## @brief Execute the insert query
451 474
     def execute(self, **datas):
452
-        super().execute(self._datasource, **datas)
475
+        return super().execute(**datas)
453 476
         
454 477
 ##@brief A query to update datas for a given object
455 478
 class LeUpdateQuery(LeFilteredQuery):
@@ -488,7 +511,7 @@ class LeUpdateQuery(LeFilteredQuery):
488 511
     
489 512
     ## @brief Execute the update query
490 513
     def execute(self, **datas):
491
-        super().execute(self._datasource, **datas)
514
+        return super().execute(**datas)
492 515
 
493 516
 ##@brief A query to delete an object
494 517
 class LeDeleteQuery(LeFilteredQuery):
@@ -500,7 +523,7 @@ class LeDeleteQuery(LeFilteredQuery):
500 523
 
501 524
     ## @brief Execute the delete query
502 525
     def execute(self):
503
-        super().execute()
526
+        return super().execute()
504 527
     
505 528
     ##@brief Implements delete query operations
506 529
     # @returns the number of deleted items
@@ -605,8 +628,8 @@ class LeGetQuery(LeFilteredQuery):
605 628
         self.__field_list = list(set(field_list))
606 629
     
607 630
     ##@brief Execute the get query
608
-    def execute(self, datasource):
609
-        super().execute(datasource)
631
+    def execute(self):
632
+        return super().execute()
610 633
 
611 634
     ##@brief Implements select query operations
612 635
     # @returns a list containing the item(s)

Loading…
Cancel
Save