summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorLV-426 <lv-426@taproot.org.il>2015-01-20 13:06:28 +0200
committerLV-426 <lv-426@taproot.org.il>2015-01-20 14:02:10 +0200
commit88ff9c171992dea974909b5aadf6405eda0aaacf (patch)
tree9fcaffb7c08c4f3f63071fb78500735cb974f237 /src/server
parent5d642cd0277879ed69e65a6bbc6e4fcd8a6ab020 (diff)
db_controller: adapt to kernel yield return style, proper composed_op handling
Diffstat (limited to 'src/server')
-rw-r--r--src/server/db_controller.py25
1 files changed, 13 insertions, 12 deletions
diff --git a/src/server/db_controller.py b/src/server/db_controller.py
index 1dbdc27b..30c8450e 100644
--- a/src/server/db_controller.py
+++ b/src/server/db_controller.py
@@ -27,21 +27,22 @@ class DB_Controller:
"""
execute operation within a DB transaction
"""
- if isinstance(op, DB_composed_op):
- # construct a list comprehension composed of all sup_op statements
- for s_op in op:
- self.exec_op(s_op)
- return op.process_result_set()
-
try:
- self.db_driver.begin_tx(op)
- self.db_driver.exec_statement_set(op)
- self.db_driver.commit_tx(op)
- ret = op.process_result_set()
+ if not isinstance(op, DB_composed_op): # non composed DB op
+ self.db_driver.begin_tx(op)
+ self.db_driver.exec_statement_set(op)
+ self.db_driver.commit_tx(op)
+
+ op_ret = op.process_result_set()
+ log.debug('exec_op:' + op.name + ': return value: ' + str(op_ret))
+ yield op, op_ret
+
+ else: # composed DB op
+ for sub_op in op:
+ sub_op, sub_op_ret = self.exec_op(sub_op).next() # recursive call
+ yield sub_op, sub_op_ret
- log.debug('exec_op:' + op.name + ': return value: ' + str(ret))
- return ret
except Neo4JException as e:
log.exception(e) # Neo4JException may be composed of several sub errors, defer to class __str__
raise e