summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorLV-426 <lv-426@taproot.org.il>2015-03-31 15:33:42 +0300
committerLV-426 <lv-426@taproot.org.il>2015-04-01 22:25:55 +0300
commita3f49ec12d479f9eea33a56daff80cf5f90e995b (patch)
tree52f01f744fbefc841c9318feec5d05f94bd75806 /src/server
parenta4fffe38580f3c6db0dd2f5f67471446d1126755 (diff)
e_kv_pair: is_set__key, is_set__value, assertions
Diffstat (limited to 'src/server')
-rw-r--r--src/server/neo4j_cypher_parser.py16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/server/neo4j_cypher_parser.py b/src/server/neo4j_cypher_parser.py
index 4a72c80a..4495b794 100644
--- a/src/server/neo4j_cypher_parser.py
+++ b/src/server/neo4j_cypher_parser.py
@@ -422,12 +422,20 @@ class e_kv_pair(pt_abs_composite_node): # key value pair
def assert_child_spawn_type(self, n_type):
assert n_type in [e_value, e_ident, e_param]
- def str__tok_sibling_delim(self, sib_a=None, sib_b=None): return ': '
+ def spawn_child(self, n_type, *args, **kwargs):
+ ret = pt_abs_composite_node.spawn_child(self, n_type, *args, **kwargs)
+ assert len(self.sub_exp_set) <= 2
+ return ret
+ def str__tok_sibling_delim(self, sib_a=None, sib_b=None): return ': '
+ def is_set__key(self):
+ return len(self.sub_exp_set) > 0 and self.sub_exp_set[0].__class__ == e_ident
+ def is_set__value(self):
+ return len(self.sub_exp_set) == 2
class p_node(pt_abs_composite_node): # node pattern: '(...)'
"""
@@ -651,11 +659,13 @@ class Cypher_Parser(object):
if ':' == input[0]: # open sibling
return self.parse__e_val_or_param(input[1:], n_cur)
- if not n_cur.sub_exp_set_by_type(e_ident): # kv_pair key yet to be set
+ if not n_cur.is_set__value(): # kv_pair key yet to be set
n_cur = n_cur.spawn_child(e_ident)
return self.__parse(input, n_cur)
- if len(n_cur.sub_exp_set) == 2: return self.__parse(input, n_cur.parent) # collapse
+ if n_cur.is_set__value() and n_cur.is_set__key():
+ n_cur = n_cur.parent
+ return self.__parse(input, n_cur) # collapse
def parse__e_val_or_param(self, input, n_cur):
if ' ' == input[0]: return self.parse__e_val_or_param(input[1:], n_cur) # consume