@@ -2197,163 +2197,6 @@ isValueReplacable(JsonValue *oldval, JsonValue *newval)
2197
2197
}
2198
2198
}
2199
2199
2200
- static bool
2201
- jsonxSetPathInplace (JsonContainer * jc , int idx ,
2202
- Datum * path_elems , bool * path_nulls ,
2203
- int path_len , int level , JsonbValue * newval ,
2204
- int op_type , JsonbParseState * * st , JsonValue * * res )
2205
- {
2206
- JsonbToastedContainerPointerData jbcptr ;
2207
-
2208
- if (!jsonb_inplace_updates )
2209
- return false;
2210
-
2211
- if (level != path_len - 1 || /* FIXME */
2212
- (op_type & (JB_PATH_INSERT_AFTER | JB_PATH_INSERT_BEFORE )))
2213
- return false;
2214
-
2215
- if (JsonContainerIsToasted (jc , & jbcptr ) &&
2216
- (!jbcptr .tail_data || jbcptr .has_diff ))
2217
- {
2218
- JsonFieldPtr ptr = {0 };
2219
- JsonValue * old_val ;
2220
-
2221
- if (JsonContainerIsObject (jc ))
2222
- old_val = JsonFindKeyPtrInObject (jc ,
2223
- VARDATA_ANY (path_elems [level ]),
2224
- VARSIZE_ANY_EXHDR (path_elems [level ]),
2225
- NULL ,
2226
- & ptr );
2227
- else
2228
- old_val = JsonGetArrayElementPtr (jc , idx , & ptr );
2229
-
2230
- if (old_val && ptr .offset )
2231
- {
2232
- JsonxPointerDiff diff ;
2233
- JsonValue * new_val = newval ;
2234
- JsonValue new_val_buf ;
2235
-
2236
- ptr .offset += jbcptr .container_offset ;
2237
-
2238
- if (newval -> type == jbvBinary &&
2239
- JsonContainerIsScalar (newval -> val .binary .data ))
2240
- new_val = JsonExtractScalar (newval -> val .binary .data ,
2241
- & new_val_buf );
2242
-
2243
- if (jbcptr .tail_size > 0 )
2244
- memcpy (& diff , jbcptr .tail_data , offsetof(JsonxPointerDiff , data ));
2245
- else
2246
- diff .offset = ptr .offset ;
2247
-
2248
- if (ptr .offset == diff .offset &&
2249
- isValueReplacable (old_val , new_val ))
2250
- {
2251
- JsonIteratorToken r ;
2252
- JsonValue toast_diff_jv ;
2253
- Datum toast_diff ;
2254
- const void * val ;
2255
- int len ;
2256
-
2257
- switch (new_val -> type )
2258
- {
2259
- case jbvString :
2260
- val = new_val -> val .string .val ;
2261
- len = new_val -> val .string .len ;
2262
- break ;
2263
-
2264
- case jbvNumeric :
2265
- val = new_val -> val .numeric ;
2266
- len = VARSIZE_ANY (new_val -> val .numeric );
2267
- break ;
2268
-
2269
- case jbvBinary :
2270
- Assert (new_val -> val .binary .data -> ops == & jsonbContainerOps );
2271
- val = JsonContainerDataPtr (new_val -> val .binary .data );
2272
- len = new_val -> val .binary .data -> len ;
2273
- break ;
2274
-
2275
- default :
2276
- break ;
2277
- }
2278
-
2279
- pfree (old_val );
2280
-
2281
- toast_diff = PointerGetDatum (
2282
- jsonx_toast_make_pointer_diff (jbcptr .toasterid ,
2283
- & jbcptr .ptr ,
2284
- jbcptr .compressed_chunks ,
2285
- diff .offset ,
2286
- len , val ));
2287
-
2288
- JsonValueInitBinary (& toast_diff_jv ,
2289
- jsonxzInitContainerFromDatum (jc , toast_diff ));
2290
-
2291
- r = * st && (* st )-> contVal .type == jbvArray ? WJB_ELEM : WJB_VALUE ;
2292
-
2293
- * res = pushJsonbValueExt (st , r , & toast_diff_jv , false);
2294
- return true;
2295
- }
2296
- }
2297
-
2298
- if (old_val )
2299
- pfree (old_val );
2300
- }
2301
-
2302
- return false;
2303
- }
2304
-
2305
- static Datum
2306
- jsonxSetPath (JsonContainer * js , Datum * path_elems ,
2307
- bool * path_nulls , int path_len ,
2308
- JsonValue * newval , int op_type )
2309
- {
2310
- #if 0
2311
- Datum res =
2312
- jsonxSetPathInplace (js , -1 path_elems , path_nulls , path_len , 0 ,
2313
- newval , op_type );
2314
-
2315
- if (res != (Datum ) 0 )
2316
- return res ;
2317
- #endif
2318
-
2319
- return JsonSetPathGeneric (js , path_elems , path_nulls , path_len ,
2320
- newval , op_type );
2321
- }
2322
-
2323
- static JsonValue *
2324
- jsonxSetArrayElement (JsonContainer * jc , int idx ,
2325
- Datum * path_elems , bool * path_nulls , int path_len ,
2326
- JsonbParseState * * st , int level ,
2327
- JsonValue * newval , int op_type )
2328
- {
2329
- JsonValue * res ;
2330
-
2331
- if (jsonxSetPathInplace (jc , idx , path_elems ,
2332
- path_nulls , path_len ,
2333
- level , newval , op_type , st , & res ))
2334
- return res ;
2335
-
2336
- return JsonSetArrayElementGeneric (jc , idx , path_elems , path_nulls , path_len ,
2337
- st , level , newval , op_type );
2338
- }
2339
-
2340
- static JsonValue *
2341
- jsonxSetObjectKey (JsonContainer * jc ,
2342
- Datum * path_elems , bool * path_nulls , int path_len ,
2343
- JsonbParseState * * st , int level ,
2344
- JsonValue * newval , int op_type )
2345
- {
2346
- JsonValue * res ;
2347
-
2348
- if (jsonxSetPathInplace (jc , -1 , path_elems ,
2349
- path_nulls , path_len ,
2350
- level , newval , op_type , st , & res ))
2351
- return res ;
2352
-
2353
- return JsonSetObjectKeyGeneric (jc , path_elems , path_nulls , path_len ,
2354
- st , level , newval , op_type );
2355
- }
2356
-
2357
2200
typedef struct JsonxMutatorRoot
2358
2201
{
2359
2202
JsonContainer * container ;
@@ -2883,9 +2726,6 @@ jsonxzContainerOps =
2883
2726
jsonxzCopy ,
2884
2727
jsonxzFree ,
2885
2728
jsonxzEncode ,
2886
- jsonxSetPath ,
2887
- jsonxSetObjectKey ,
2888
- jsonxSetArrayElement ,
2889
2729
jsonxObjectMutatorInit ,
2890
2730
jsonxArrayMutatorInit
2891
2731
};
@@ -2904,9 +2744,6 @@ jsonxContainerOps =
2904
2744
JsonCopyFlat ,
2905
2745
NULL ,
2906
2746
jsonxEncode ,
2907
- jsonxSetPath ,
2908
- jsonxSetObjectKey ,
2909
- jsonxSetArrayElement ,
2910
2747
jsonxObjectMutatorInit ,
2911
2748
jsonxArrayMutatorInit
2912
2749
};
0 commit comments