summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorLV-426 <lv-426@taproot.org.il>2015-05-17 18:09:04 +0300
committerLV-426 <lv-426@taproot.org.il>2015-05-17 18:09:04 +0300
commit547d55621499a26055d59ce2f84516693fffb7aa (patch)
treefc1173ee4d0ac6e10c9d4bac6770fefe56b4bf36 /src/server
parentba36c0820bc023fe548ec817cb434bc387a1baa2 (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.py29
-rw-r--r--src/server/neo4j_cypher.py25
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