1212use Neo4j \QueryAPI \Results \ResultRow ;
1313use RuntimeException ;
1414use Neo4j \QueryAPI \Objects \ProfiledQueryPlan ;
15- use Neo4j \QueryAPI \Objects \Point ;
1615
1716class ResponseParser
1817{
@@ -50,45 +49,21 @@ private function validateAndDecodeResponse(ResponseInterface $response): array
5049 return $ data ;
5150 }
5251
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
6253 {
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 );
8765 }
8866
89-
90-
91-
9267 private function buildCounters (array $ countersData ): ResultCounters
9368 {
9469 return new ResultCounters (
@@ -120,22 +95,17 @@ private function getAccessMode(string $accessModeData): AccessMode
12095
12196 private function buildProfiledQueryPlan (?array $ queryPlanData ): ?ProfiledQueryPlan
12297 {
123- if ($ queryPlanData === null || empty ( $ queryPlanData ) ) {
98+ if (! $ queryPlanData ) {
12499 return null ;
125100 }
126101
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 )) {
132104 return $ this ->ogm ->map ($ value );
133105 }
134-
135106 return $ value ;
136107 }, $ queryPlanData ['arguments ' ] ?? []);
137108
138-
139109 $ queryArguments = new ProfiledQueryPlanArguments (
140110 globalMemory: $ mappedArguments ['GlobalMemory ' ] ?? null ,
141111 plannerImpl: $ mappedArguments ['planner-impl ' ] ?? null ,
@@ -158,11 +128,7 @@ private function buildProfiledQueryPlan(?array $queryPlanData): ?ProfiledQueryPl
158128 planner: $ mappedArguments ['planner ' ] ?? null ,
159129 rows: $ mappedArguments ['Rows ' ] ?? null
160130 );
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 ' ] ?? []);
166132
167133 return new ProfiledQueryPlan (
168134 $ queryPlanData ['dbHits ' ] ?? 0 ,
@@ -178,5 +144,4 @@ private function buildProfiledQueryPlan(?array $queryPlanData): ?ProfiledQueryPl
178144 $ queryPlanData ['identifiers ' ] ?? []
179145 );
180146 }
181-
182147}
0 commit comments