504 HeapTupleData tmptup,
507 bool needsep =
false;
510 sep = use_line_feeds ?
",\n " :
",";
512 td = DatumGetHeapTupleHeader(composite);
515 tupType = HeapTupleHeaderGetTypeId(td);
516 tupTypmod = HeapTupleHeaderGetTypMod(td);
517 tupdesc = lookup_rowtype_tupdesc(tupType, tupTypmod);
520 tmptup.t_len = HeapTupleHeaderGetDatumLength(td);
524 appendStringInfoChar(
result,
'{');
526 for (i = 0; i < tupdesc->natts; i++)
533 Form_pg_attribute att = TupleDescAttr(tupdesc, i);
535 if (att->attisdropped)
539 appendStringInfoString(
result, sep);
542 attname = NameStr(att->attname);
543 escape_json(
result, attname);
544 appendStringInfoChar(
result,
':');
546 val = heap_getattr(tuple, i + 1, tupdesc, &isnull);
551 outfuncoid = InvalidOid;
559 appendStringInfoChar(
result,
'}');
560 ReleaseTupleDesc(tupdesc);
char result[OUT_DOUBLE_BUFFER_SIZE]
static void json_categorize_type(Oid typoid, JsonTypeCategory *tcategory, Oid *outfuncoid)
static void datum_to_json(Datum val, bool is_null, StringInfo result, JsonTypeCategory tcategory, Oid outfuncoid, bool key_scalar)