diff options
| author | LV-426 <lv-426@taproot.org.il> | 2015-03-30 19:37:40 +0300 |
|---|---|---|
| committer | LV-426 <lv-426@taproot.org.il> | 2015-04-01 22:25:52 +0300 |
| commit | 7e550d889083bc3f8b9c2c907fe6f6a84c658f36 (patch) | |
| tree | f63cf644b03e06d3e7b355d5122450e57544e56a /src | |
| parent | 69755288913fb867b3746cad8f1af1d8ab21ef68 (diff) | |
QT_RZDOC_NS_Filter__common:
- simplify NS label injection
- do not apply NS injection to path expressions
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/neo4j_cypher.py | 54 | ||||
| -rw-r--r-- | src/server/rz_kernel.py | 4 |
2 files changed, 29 insertions, 29 deletions
diff --git a/src/server/neo4j_cypher.py b/src/server/neo4j_cypher.py index 97e7763f..e6fd0c86 100644 --- a/src/server/neo4j_cypher.py +++ b/src/server/neo4j_cypher.py @@ -89,49 +89,49 @@ class Query_Transformation(object): def apply_to_single_query(self, dbq): pass -class QT_Node_Filter__Doc_ID_Label(Query_Transformation): +class QT_RZDOC_NS_Filter__common(Query_Transformation): + """ + Add RZDoc name-space filter: + - inject NS labels into node patterns + - [!] ignore nodes which are part of path patterns to avoid overriding bound references + + + """ - def __init__(self, rzdoc_id): - self.rzdoc_id = rzdoc_id + def __init__(self, ns_label): + self.ns_label = ns_label def apply_to_single_query(self, dbq): - rzdoc_id_label = META_LABEL__RZ_DOC_PREFIX + self.rzdoc_id - rgx__doc_label = re.compile(r'%s[\w\d_]+' % (META_LABEL__RZ_DOC_PREFIX)) - assert None != rgx__doc_label.match(rzdoc_id_label), 'Illegal doc ID label: %s' % (rzdoc_id_label) # validate doc label + rgx__doc_label = re.compile(r'%s[\w\d_]+' % (neo4j_schema.META_LABEL__RZDOC_NS_PREFIX)) + assert None == rgx__doc_label.match(self.ns_label), 'Illegal doc ID label: %s' % (self.ns_label) # validate doc label q_type = dbq.query_struct_type - c_set = [] # clause set + clause_set = [] if Query_Struct_Type.w == q_type: - c_set += dbq.pt_root.clause_set_by_kw('create') + clause_set += dbq.pt_root.clause_set_by_kw('create') if Query_Struct_Type.r == q_type: - c_set += dbq.pt_root.clause_set_by_kw('match') + clause_set += dbq.pt_root.clause_set_by_kw('match') if Query_Struct_Type.rw == q_type: - c_set += dbq.pt_root.clause_set_by_kw('create') - c_set += dbq.pt_root.clause_set_by_kw('match') + clause_set += dbq.pt_root.clause_set_by_kw('create') + clause_set += dbq.pt_root.clause_set_by_kw('match') - for c in c_set: + for c in clause_set: + n_exp_set = c.sub_exp_set_by_type(p_node , recurse=True) + for n_exp in n_exp_set: - set_of_lbl_set = c.sub_exp_set_by_type(e_label_set, recurse=True) + if n_exp.parent.__class__ == p_path: + continue; - if not set_of_lbl_set: # no label set - p_node_or_path_set = c.sub_exp_set_by_type([p_node], recurse=True) + lbl_set = n_exp.label_set + if not lbl_set: # add label set if necessary + lbl_set = n_exp.spawn_label_set() + lbl_set.add_label(self.ns_label) - def f_visit(n, ctx, depth): - if isinstance(n, e_ident) and n.parent.__class__ in [p_node]: - lbl_set = n.spawn_sibling__adjacent(e_label_set) - lbl = lbl_set.spawn_child(e_value) - lbl.value = rzdoc_id_label + # log.debug('db_q trans: in clause: %s, out clause: %s' % (cur_clause, new_clause)) - for p_exp in p_node_or_path_set: - p_exp.tree_walk__pre(f_visit=f_visit) - else: # append to existing label set - for lbl_set in set_of_lbl_set: - if isinstance(lbl_set.parent, p_node): - lbl = lbl_set.spawn_child(e_value) - lbl.value = rzdoc_id_label # log.debug('db_q trans: in clause: %s, out clause: %s' % (cur_clause, new_clause)) diff --git a/src/server/rz_kernel.py b/src/server/rz_kernel.py index fa4b2627..2ea95304 100644 --- a/src/server/rz_kernel.py +++ b/src/server/rz_kernel.py @@ -48,7 +48,7 @@ class RZ_Kernel(object): assert rzdoc_id, 'diff_commit__topo: missing doc id' op = DBO_diff_commit__topo(topo_diff) - op = QT_Node_Filter__Doc_ID_Label(rzdoc_id)(op) + op = QT_RZDOC_NS_Filter(rzdoc)(op) try: op_ret = self.db_ctl.exec_op(op) @@ -74,7 +74,7 @@ class RZ_Kernel(object): assert rzdoc_id, 'diff_commit__topo: missing doc id' op = DBO_diff_commit__attr(attr_diff) - op = QT_Node_Filter__Doc_ID_Label(rzdoc_id)(op) + op = QT_RZDOC_NS_Filter(rzdoc)(op) try: op_ret = self.db_ctl.exec_op(op) |
