@@ -14,21 +14,27 @@ data class QueryContext @JvmOverloads constructor(
1414 private var paramKeysPerValues = mutableMapOf<String , MutableMap <Any ?, Parameter <* >>>()
1515
1616 fun resolve (string : String ): String {
17- return contextParams?.let { params ->
18- CONTEXT_VARIABLE_PATTERN .replace(string) {
19- val path = it.groups[1 ] ? : it.groups[2 ] ? : throw IllegalStateException (" expected a group" )
20- val parts = path.value.split(" ." )
21- var o: Any = params
22- for (part in parts) {
23- if (o is Map <* , * >) {
24- o = o[part] ? : return @replace " "
17+ return CONTEXT_VARIABLE_PATTERN .replace(string) {
18+ val path = it.groups[1 ] ? : it.groups[2 ] ? : throw IllegalStateException (" expected a group" )
19+ val parts = path.value.split(" ." )
20+ var o: Any? = null
21+ for ((index, part) in parts.withIndex()) {
22+ if (index == 0 ) {
23+ if (part == " context" ) {
24+ o = contextParams
25+ continue
2526 } else {
26- TODO (" only maps are currently supported " )
27+ TODO (" query context does not provide a ` $part ` " )
2728 }
2829 }
29- return @replace o.toString()
30+ if (o is Map <* , * >) {
31+ o = o[part] ? : return @replace " "
32+ } else {
33+ TODO (" only maps are currently supported" )
34+ }
3035 }
31- } ? : string
36+ return @replace o.toString()
37+ }
3238 }
3339
3440 fun getNextVariable (relationField : RelationField ) = getNextVariable(
@@ -61,6 +67,8 @@ data class QueryContext @JvmOverloads constructor(
6167 const val KEY = " Neo4jGraphQLQueryContext"
6268
6369 private const val PATH_PATTERN = " ([a-zA-Z_][a-zA-Z_0-9]*(?:.[a-zA-Z_][a-zA-Z_0-9]*)*)"
70+
71+ // matches ${path} or $path
6472 private val CONTEXT_VARIABLE_PATTERN = Regex (" \\ \$ (?:\\ {$PATH_PATTERN }|$PATH_PATTERN )" )
6573 }
6674}
0 commit comments