diff options
| author | LV-426 <lv-426@taproot.org.il> | 2015-05-17 18:09:04 +0300 |
|---|---|---|
| committer | LV-426 <lv-426@taproot.org.il> | 2015-05-17 18:09:04 +0300 |
| commit | 547d55621499a26055d59ce2f84516693fffb7aa (patch) | |
| tree | fc1173ee4d0ac6e10c9d4bac6770fefe56b4bf36 /src/server | |
| parent | ba36c0820bc023fe548ec817cb434bc387a1baa2 (diff) | |
DBO_raw_query_set - [!] use discouraged, work around queries the parser can't handle
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/db_op.py | 29 | ||||
| -rw-r--r-- | src/server/neo4j_cypher.py | 25 |
2 files changed, 46 insertions, 8 deletions
diff --git a/src/server/db_op.py b/src/server/db_op.py index b8939f8d..a9a5dc58 100644 --- a/src/server/db_op.py +++ b/src/server/db_op.py @@ -7,7 +7,7 @@ import StringIO as sio from model.graph import Attr_Diff from model.graph import Topo_Diff from model.model import Link, RZDoc, RZCommit -from neo4j_cypher import DB_Query, DB_result_set +from neo4j_cypher import DB_Query, DB_result_set, DB_Raw_Query import neo4j_schema from neo4j_util import cfmt from neo4j_util import generate_random_id__uuid, rzdoc__ns_label, \ @@ -355,13 +355,30 @@ class DBO_block_chain__list(DB_op): for col in row: return col -class DBO_cypher_query(DB_op): +class DBO_raw_query_set(DB_op): """ - freeform cypher query + Freeform set of DB query statements + + [!] use of this class is discouraged and should be done + only when no other DB_op is able to handle the task + at hand """ - def __init__(self, q, q_params={}): - super(DBO_cypher_query, self).__init__() - self.add_statement(q, q_params) + def __init__(self, q_arr=None, q_params={}): + super(DBO_raw_query_set, self).__init__() + + if q_arr is not None: + self.add_statement(q_arr, q_params) + + def add_statement(self, q_arr, query_params={}): + """ + super.add_statement() override: use raw queries + """ + db_q = DB_Raw_Query(q_arr, query_params) + self.query_set.append(db_q) + return len(self.query_set) + + def add_db_query(self, db_q): + assert False, 'DBO_raw_query_set only supports raw queries - use add_statement()' class DBO_diff_commit__topo(DB_composed_op): diff --git a/src/server/neo4j_cypher.py b/src/server/neo4j_cypher.py index 6d1cfa57..31a73450 100644 --- a/src/server/neo4j_cypher.py +++ b/src/server/neo4j_cypher.py @@ -3,12 +3,14 @@ Neo4j DB object """ from enum import Enum -from neo4j_cypher_parser import Cypher_Parser, e_clause__where, e_keyword,\ - e_value import logging + +from neo4j_cypher_parser import Cypher_Parser, e_clause__where, e_keyword, \ + e_value import neo4j_cypher_parser import neo4j_schema + log = logging.getLogger('rhizi') class Query_Struct_Type(Enum): @@ -44,6 +46,9 @@ class Query_Struct_Type(Enum): class DB_Query(object): + """ + DB query object + """ def __init__(self, q_arr, param_set={}): """ @@ -114,6 +119,22 @@ class DB_Query(object): def str__cypher_query(self): return self.pt_root.str__cypher_query() +class DB_Raw_Query(object): + """ + Raw DB query object which does not undergo parsing + """ + + def __init__(self, q_arr, param_set={}): + self.q_arr = q_arr + self.param_set = param_set + + def __iter__(self): + for keyword, clause_set in self.pt_root.index__kw_to_clause_set().items(): + yield keyword, clause_set + + def str__cypher_query(self): + return ' '.join(self.q_arr) + class DB_row(object): def __init__(self, data): self.data = data |
