summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/local/domain/cri.rhizi.net/test_domain__CRI.py4
-rw-r--r--src/server-tests/neo4j_test_util.py4
-rw-r--r--src/server-tests/test_rhizi_api.py4
-rw-r--r--src/server-tests/test_util__rzdoc.py4
-rw-r--r--src/server/db_op.py29
-rw-r--r--src/server/neo4j_cypher.py25
6 files changed, 54 insertions, 16 deletions
diff --git a/src/local/domain/cri.rhizi.net/test_domain__CRI.py b/src/local/domain/cri.rhizi.net/test_domain__CRI.py
index 652c04a6..5a28c803 100644
--- a/src/local/domain/cri.rhizi.net/test_domain__CRI.py
+++ b/src/local/domain/cri.rhizi.net/test_domain__CRI.py
@@ -4,7 +4,7 @@ import tempfile
import unittest
import db_controller as dbc
-from db_op import DBO_cypher_query, DBO_rzdoc__create
+from db_op import DBO_raw_query_set, DBO_rzdoc__create
from neo4j_test_util import rand_label
from rz_config import RZ_Config
from test_util import generate_random_RZDoc
@@ -126,7 +126,7 @@ class Test_Domain_CRI(unittest.TestCase):
'match (n)-[r:Novice|Intermediate|Expert]->(m:Skill)', # [!] expect link type to be proficiency level
'return n.name, collect({skill_name: m.name, skill_level: r.proficiency})'
]
- op = DBO_cypher_query(q_arr)
+ op = DBO_raw_query_set(q_arr)
#
# write csv file
diff --git a/src/server-tests/neo4j_test_util.py b/src/server-tests/neo4j_test_util.py
index 9d6700fb..6ea940e7 100644
--- a/src/server-tests/neo4j_test_util.py
+++ b/src/server-tests/neo4j_test_util.py
@@ -2,11 +2,11 @@ from random import choice
import string
import uuid
-from db_op import DB_op, DBO_cypher_query
+from db_op import DB_op, DBO_raw_query_set
import neo4j_cypher
import neo4j_schema
-class DBO_flush_db(DBO_cypher_query):
+class DBO_flush_db(DBO_raw_query_set):
"""
complete DB flush: remove all nodes & links
"""
diff --git a/src/server-tests/test_rhizi_api.py b/src/server-tests/test_rhizi_api.py
index 67a67220..2924f4e8 100644
--- a/src/server-tests/test_rhizi_api.py
+++ b/src/server-tests/test_rhizi_api.py
@@ -5,7 +5,7 @@ from werkzeug.test import Client
from werkzeug.test import EnvironBuilder
import db_controller as dbc
-from db_op import DBO_cypher_query
+from db_op import DBO_raw_query_set
import rz_api
from rz_config import RZ_Config
from test_util__pydev import debug__pydev_pd_arg
@@ -49,7 +49,7 @@ class TestRhiziAPI(unittest.TestCase):
"""
id_set = ['skill_00']
q = ['create (s:Skill {id: \'skill_00\'} )']
- op = DBO_cypher_query(q)
+ op = DBO_raw_query_set(q)
self.db_ctl.exec_op(op)
with rz_api.webapp.test_client() as c:
diff --git a/src/server-tests/test_util__rzdoc.py b/src/server-tests/test_util__rzdoc.py
index ffcc2423..f2ad2004 100644
--- a/src/server-tests/test_util__rzdoc.py
+++ b/src/server-tests/test_util__rzdoc.py
@@ -1,8 +1,8 @@
-from db_op import DBO_cypher_query
+from db_op import DBO_raw_query_set
import neo4j_util
-class DBO_RDG__skill_graph(DBO_cypher_query):
+class DBO_RDG__skill_graph(DBO_raw_query_set):
def __init__(self, rzdoc,
lim_n=50,
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