diff options
| -rw-r--r-- | src-py/db_controller.py | 24 | ||||
| -rw-r--r-- | src-py/test_db_controller.py | 15 |
2 files changed, 39 insertions, 0 deletions
diff --git a/src-py/db_controller.py b/src-py/db_controller.py index 8e87d9d8..49ed3b6b 100644 --- a/src-py/db_controller.py +++ b/src-py/db_controller.py @@ -123,6 +123,30 @@ class DBO_topo_diff_commit(DB_composed_op): self.add_sub_op(op_n_add) self.add_sub_op(op_l_add) + def on_completion(self, data): + pass + +class DBO_attr_diff_commit(DB_op): + """ + commit a Attr_Diff + """ + def __init__(self, attr_diff): + super(DBO_attr_diff_commit, self).__init__() + + for id_attr, n_attr_diff in attr_diff.items(): + # TODO parameterize multiple attr removal + rm_attr_set = n_attr_diff['attr_remove'] + rm_attr_str = ', '.join(['n.' + attr for attr in rm_attr_set]) + + q = ("match (n {id: {id}}) " + + "set n += {attr_set}" + + "remove " + rm_attr_str + + " return n.id, n") + q_param_set = {'id': id_attr, + 'attr_set': n_attr_diff['attr_write']} + self.add_statement(q, q_param_set) + + def on_completion(self, data): pass class DBO_add_node_set(DB_op): diff --git a/src-py/test_db_controller.py b/src-py/test_db_controller.py index 254afb80..66ecfd09 100644 --- a/src-py/test_db_controller.py +++ b/src-py/test_db_controller.py @@ -193,6 +193,21 @@ class TestDBController(unittest.TestCase): id_set = self.db_ctl.exec_op(dbc.DBO_match_link_set_by_src_or_dst_id_attributes(src_id=n_1_id, dst_id=n_0_id)) self.assertEqual(len(id_set), 1) + def test_attr_diff_commit(self): + # create test node + n_id = rand_id() + topo_diff = Topo_Diff(node_set_add=[{'__type': 'T_test_attr_diff_commit', 'id': n_id, 'attr_rm': 0}]) + op = dbc.DBO_topo_diff_commit(topo_diff) + self.db_ctl.exec_op(op) + + # apply attr_diff + attr_diff = {n_id: {'attr_write': {'attr_0': 0, + 'attr_1': 'a'}, + 'attr_remove': ['attr_rm']}} + op = dbc.DBO_attr_diff_commit(attr_diff) + n_set = self.db_ctl.exec_op(op) + pass + def tearDown(self): pass if __name__ == "__main__": |
