543 HeapTupleData tmptup,
546 bool needsep =
false;
549 sep = use_line_feeds ?
",\n " :
",";
551 td = DatumGetHeapTupleHeader(composite);
554 tupType = HeapTupleHeaderGetTypeId(td);
555 tupTypmod = HeapTupleHeaderGetTypMod(td);
556 tupdesc = lookup_rowtype_tupdesc(tupType, tupTypmod);
559 tmptup.t_len = HeapTupleHeaderGetDatumLength(td);
563 appendStringInfoChar(
result,
'{');
565 for (i = 0; i < tupdesc->natts; i++)
572 Form_pg_attribute att = TupleDescAttr(tupdesc, i);
574 if (att->attisdropped)
578 appendStringInfoString(
result, sep);
581 attname = NameStr(att->attname);
582 escape_json(
result, attname);
583 appendStringInfoChar(
result,
':');
585 val = heap_getattr(tuple, i + 1, tupdesc, &isnull);
590 outfuncoid = InvalidOid;
598 appendStringInfoChar(
result,
'}');
599 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)