|
@@ -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)
|