@@ -44,15 +44,59 @@ class Graph {
4444 strings . push ( resultSet . next ( ) . getString ( 0 ) ) ;
4545 }
4646 return strings ;
47- }
47+ }
48+
49+ paramToString ( paramValue ) {
50+ if ( paramValue == null )
51+ return "null"
52+ let paramType = typeof ( paramValue ) ;
53+ if ( paramType == "string" ) {
54+ let strValue = "" ;
55+ if ( paramValue [ 0 ] != "\"" )
56+ strValue += "\"" ;
57+ strValue += paramValue ;
58+ if ( paramValue [ paramValue . length - 1 ] != "\"" )
59+ strValue += "\"" ;
60+ return strValue ;
61+ }
62+ if ( Array . isArray ( paramValue ) ) {
63+ let stringsArr = new Array ( paramValue . length ) ;
64+ for ( var i = 0 ; i < paramValue . length ; i ++ ) {
65+ stringsArr [ i ] = this . paramToString ( paramValue [ i ] ) ;
66+ }
67+ return [ "[" , stringsArr . join ( ", " ) , "]" ] . join ( "" ) ;
68+ }
69+ return paramValue ;
70+ }
71+
72+ /**
73+ * Extracts parameters from dictionary into cypher parameters string.
74+ *
75+ * @param params parameters dictionary.
76+ * @return a cypher parameters string.
77+ */
78+ buildParamsHeader ( params ) {
79+ let paramsArray = [ "CYPHER" ]
80+
81+ for ( var key in params ) {
82+ let value = this . paramToString ( params [ key ] ) ;
83+ paramsArray . push ( `${ key } =${ value } ` ) ;
84+ }
85+ paramsArray . push ( ' ' ) ;
86+ return paramsArray . join ( ' ' ) ;
87+ }
4888
4989 /**
5090 * Execute a Cypher query (async)
5191 *
5292 * @param query Cypher query
93+ * @param params Parameters map
5394 * @return a promise contains a result set
5495 */
55- async query ( query ) {
96+ async query ( query , params ) {
97+ if ( params ) {
98+ query = this . buildParamsHeader ( params ) + query ;
99+ }
56100 var res = await this . _sendCommand ( "graph.QUERY" , [ this . _graphId , query , "--compact" ] ) ;
57101 var resultSet = new ResultSet ( this ) ;
58102 return resultSet . parseResponse ( res ) ;
0 commit comments