12
12
use Neo4j \QueryAPI \Results \ResultRow ;
13
13
use RuntimeException ;
14
14
use Neo4j \QueryAPI \Objects \ProfiledQueryPlan ;
15
- use Neo4j \QueryAPI \Objects \Point ;
16
15
17
16
class ResponseParser
18
17
{
@@ -50,45 +49,21 @@ private function validateAndDecodeResponse(ResponseInterface $response): array
50
49
return $ data ;
51
50
}
52
51
53
- /**
54
- * @return list<ResultRow>
55
- */
56
- /**
57
- * @param list<string> $fields
58
- * @param list<array<array-key, mixed>> $values
59
- * @return list<ResultRow>
60
- */
61
- private function mapRows (array $ fields , array $ values ): array
52
+ private function mapRows (array $ keys , array $ values ): array
62
53
{
63
- return array_map (
64
- fn (array $ row ): ResultRow => new ResultRow (
65
- array_combine (
66
- $ fields ,
67
- array_map ([$ this , 'formatOGMOutput ' ], $ row )
68
- ) ?: [] // Ensure array_combine never returns false
69
- ),
70
- $ values
71
- );
72
- }
73
-
74
- /**
75
- * Ensures mapped output follows expected format
76
- *
77
- * @param mixed $value
78
- * @return mixed
79
- */
80
- private function formatOGMOutput (mixed $ value ): mixed
81
- {
82
- if (is_array ($ value ) && array_key_exists ('$type ' , $ value ) && array_key_exists ('_value ' , $ value )) {
83
- return $ this ->ogm ->map ($ value );
84
- }
85
-
86
- return $ value ;
54
+ return array_map (function ($ row ) use ($ keys ) {
55
+ $ mapped = [];
56
+ foreach ($ keys as $ index => $ key ) {
57
+ $ fieldData = $ row [$ index ] ?? null ;
58
+ if (is_string ($ fieldData )) {
59
+ $ fieldData = ['$type ' => 'String ' , '_value ' => $ fieldData ];
60
+ }
61
+ $ mapped [$ key ] = $ this ->ogm ->map ($ fieldData );
62
+ }
63
+ return new ResultRow ($ mapped );
64
+ }, $ values );
87
65
}
88
66
89
-
90
-
91
-
92
67
private function buildCounters (array $ countersData ): ResultCounters
93
68
{
94
69
return new ResultCounters (
@@ -120,22 +95,17 @@ private function getAccessMode(string $accessModeData): AccessMode
120
95
121
96
private function buildProfiledQueryPlan (?array $ queryPlanData ): ?ProfiledQueryPlan
122
97
{
123
- if ($ queryPlanData === null || empty ( $ queryPlanData ) ) {
98
+ if (! $ queryPlanData ) {
124
99
return null ;
125
100
}
126
101
127
- /**
128
- * @var array<string, mixed> $mappedArguments
129
- */
130
- $ mappedArguments = array_map (function (mixed $ value ): mixed {
131
- if (is_array ($ value ) && isset ($ value ['$type ' ]) && isset ($ value ['_value ' ])) {
102
+ $ mappedArguments = array_map (function ($ value ) {
103
+ if (is_array ($ value ) && array_key_exists ('$type ' , $ value ) && array_key_exists ('_value ' , $ value )) {
132
104
return $ this ->ogm ->map ($ value );
133
105
}
134
-
135
106
return $ value ;
136
107
}, $ queryPlanData ['arguments ' ] ?? []);
137
108
138
-
139
109
$ queryArguments = new ProfiledQueryPlanArguments (
140
110
globalMemory: $ mappedArguments ['GlobalMemory ' ] ?? null ,
141
111
plannerImpl: $ mappedArguments ['planner-impl ' ] ?? null ,
@@ -158,11 +128,7 @@ private function buildProfiledQueryPlan(?array $queryPlanData): ?ProfiledQueryPl
158
128
planner: $ mappedArguments ['planner ' ] ?? null ,
159
129
rows: $ mappedArguments ['Rows ' ] ?? null
160
130
);
161
-
162
- $ children = array_map (
163
- fn (array $ child ): ?ProfiledQueryPlan => $ this ->buildProfiledQueryPlan ($ child ),
164
- $ queryPlanData ['children ' ] ?? []
165
- );
131
+ $ children = array_map (fn ($ child ) => $ this ->buildProfiledQueryPlan ($ child ), $ queryPlanData ['children ' ] ?? []);
166
132
167
133
return new ProfiledQueryPlan (
168
134
$ queryPlanData ['dbHits ' ] ?? 0 ,
@@ -178,5 +144,4 @@ private function buildProfiledQueryPlan(?array $queryPlanData): ?ProfiledQueryPl
178
144
$ queryPlanData ['identifiers ' ] ?? []
179
145
);
180
146
}
181
-
182
147
}
0 commit comments