509 HeapTupleData tmptup,
512 bool needsep =
false;
515 sep = use_line_feeds ?
",\n " :
",";
517 td = DatumGetHeapTupleHeader(composite);
520 tupType = HeapTupleHeaderGetTypeId(td);
521 tupTypmod = HeapTupleHeaderGetTypMod(td);
522 tupdesc = lookup_rowtype_tupdesc(tupType, tupTypmod);
525 tmptup.t_len = HeapTupleHeaderGetDatumLength(td);
529 appendStringInfoChar(
result,
'{');
531 for (i = 0; i < tupdesc->natts; i++)
538 Form_pg_attribute att = TupleDescAttr(tupdesc, i);
540 if (att->attisdropped)
544 appendStringInfoString(
result, sep);
547 attname = NameStr(att->attname);
548 escape_json(
result, attname);
549 appendStringInfoChar(
result,
':');
551 val = heap_getattr(tuple, i + 1, tupdesc, &isnull);
556 outfuncoid = InvalidOid;
564 appendStringInfoChar(
result,
'}');
565 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)