@@ -314,10 +314,10 @@ jsonPathAppendEntryWithLen(StringInfo path, const char *entry, int len)
314
314
315
315
/*
316
316
* jsonPathStatsGetSubpath
317
- * ???
317
+ * Find JSON path stats for object key or array elements (if 'key' = NULL).
318
318
*/
319
319
JsonPathStats
320
- jsonPathStatsGetSubpath (JsonPathStats pstats , const char * key , int keylen )
320
+ jsonPathStatsGetSubpath (JsonPathStats pstats , const char * key )
321
321
{
322
322
JsonPathStats spstats ;
323
323
char * path ;
@@ -329,7 +329,7 @@ jsonPathStatsGetSubpath(JsonPathStats pstats, const char *key, int keylen)
329
329
330
330
initStringInfo (& str );
331
331
appendBinaryStringInfo (& str , pstats -> path , pstats -> pathlen );
332
- jsonPathAppendEntryWithLen (& str , key , keylen );
332
+ jsonPathAppendEntry (& str , key );
333
333
334
334
path = str .data ;
335
335
pathlen = str .len ;
@@ -390,8 +390,7 @@ jsonStatsGetPathStats(JsonStats jsdata, Datum *path, int pathlen,
390
390
391
391
for (int i = 0 ; pstats && i < pathlen ; i ++ )
392
392
{
393
- char * key = text_to_cstring (DatumGetTextP (path [i ]));
394
- int keylen = strlen (key );
393
+ char * key = TextDatumGetCString (path [i ]);
395
394
char * tail ;
396
395
int index ;
397
396
@@ -402,15 +401,15 @@ jsonStatsGetPathStats(JsonStats jsdata, Datum *path, int pathlen,
402
401
if (tail == key || * tail != '\0' || errno != 0 )
403
402
{
404
403
/* Find object key stats */
405
- pstats = jsonPathStatsGetSubpath (pstats , key , keylen );
404
+ pstats = jsonPathStatsGetSubpath (pstats , key );
406
405
}
407
406
else
408
407
{
409
408
/* Find array index stats */
410
409
float4 arrfreq ;
411
410
412
411
/* FIXME consider object key "index" also */
413
- pstats = jsonPathStatsGetSubpath (pstats , NULL , 0 );
412
+ pstats = jsonPathStatsGetSubpath (pstats , NULL );
414
413
sel *= jsonPathStatsGetArrayIndexSelectivity (pstats , index );
415
414
arrfreq = jsonPathStatsGetFreq (pstats , 0.0 );
416
415
0 commit comments