Fixing bug after merging oneof use in protobuf definition
parent
ba4a480643
commit
6fe0d68393
|
@ -370,34 +370,41 @@ static bool geography_point_as_decoderbufs_point(Datum datum,
|
|||
static void set_datum_value(Decoderbufs__DatumMessage *datum_msg, Oid typid,
|
||||
Oid typoutput, Datum datum) {
|
||||
Numeric num;
|
||||
bytea *valptr;
|
||||
const char *output;
|
||||
Point *p;
|
||||
bytea *valptr = NULL;
|
||||
const char *output = NULL;
|
||||
Point *p = NULL;
|
||||
int size = 0;
|
||||
switch (typid) {
|
||||
case BOOLOID:
|
||||
datum_msg->datum_bool = DatumGetBool(datum);
|
||||
datum_msg->datum_case = DECODERBUFS__DATUM_MESSAGE__DATUM_DATUM_BOOL;
|
||||
break;
|
||||
case INT2OID:
|
||||
datum_msg->datum_int32 = DatumGetInt16(datum);
|
||||
datum_msg->datum_case = DECODERBUFS__DATUM_MESSAGE__DATUM_DATUM_INT32;
|
||||
break;
|
||||
case INT4OID:
|
||||
datum_msg->datum_int32 = DatumGetInt32(datum);
|
||||
datum_msg->datum_case = DECODERBUFS__DATUM_MESSAGE__DATUM_DATUM_INT32;
|
||||
break;
|
||||
case INT8OID:
|
||||
case OIDOID:
|
||||
datum_msg->datum_int64 = DatumGetInt64(datum);
|
||||
datum_msg->datum_case = DECODERBUFS__DATUM_MESSAGE__DATUM_DATUM_INT64;
|
||||
break;
|
||||
case FLOAT4OID:
|
||||
datum_msg->datum_float = DatumGetFloat4(datum);
|
||||
datum_msg->datum_case = DECODERBUFS__DATUM_MESSAGE__DATUM_DATUM_FLOAT;
|
||||
break;
|
||||
case FLOAT8OID:
|
||||
datum_msg->datum_double = DatumGetFloat8(datum);
|
||||
datum_msg->datum_case = DECODERBUFS__DATUM_MESSAGE__DATUM_DATUM_DOUBLE;
|
||||
break;
|
||||
case NUMERICOID:
|
||||
num = DatumGetNumeric(datum);
|
||||
if (!numeric_is_nan(num)) {
|
||||
datum_msg->datum_double = numeric_to_double_no_overflow(num);
|
||||
datum_msg->datum_case = DECODERBUFS__DATUM_MESSAGE__DATUM_DATUM_DOUBLE;
|
||||
}
|
||||
break;
|
||||
case CHAROID:
|
||||
|
@ -409,6 +416,7 @@ static void set_datum_value(Decoderbufs__DatumMessage *datum_msg, Oid typid,
|
|||
case UUIDOID:
|
||||
output = OidOutputFunctionCall(typoutput, datum);
|
||||
datum_msg->datum_string = pnstrdup(output, strlen(output));
|
||||
datum_msg->datum_case = DECODERBUFS__DATUM_MESSAGE__DATUM_DATUM_STRING;
|
||||
break;
|
||||
case TIMESTAMPOID:
|
||||
/*
|
||||
|
@ -417,6 +425,7 @@ static void set_datum_value(Decoderbufs__DatumMessage *datum_msg, Oid typid,
|
|||
case TIMESTAMPTZOID:
|
||||
output = timestamptz_to_str(DatumGetTimestampTz(datum));
|
||||
datum_msg->datum_string = pnstrdup(output, strlen(output));
|
||||
datum_msg->datum_case = DECODERBUFS__DATUM_MESSAGE__DATUM_DATUM_STRING;
|
||||
break;
|
||||
case BYTEAOID:
|
||||
valptr = DatumGetByteaPCopy(datum);
|
||||
|
@ -424,6 +433,7 @@ static void set_datum_value(Decoderbufs__DatumMessage *datum_msg, Oid typid,
|
|||
datum_msg->datum_bytes.data = palloc(size);
|
||||
memcpy(datum_msg->datum_bytes.data, (uint8_t *)VARDATA(valptr), size);
|
||||
datum_msg->datum_bytes.len = size;
|
||||
datum_msg->datum_case = DECODERBUFS__DATUM_MESSAGE__DATUM_DATUM_BYTES;
|
||||
break;
|
||||
case POINTOID:
|
||||
p = DatumGetPointP(datum);
|
||||
|
@ -432,6 +442,7 @@ static void set_datum_value(Decoderbufs__DatumMessage *datum_msg, Oid typid,
|
|||
dp.y = p->y;
|
||||
datum_msg->datum_point = palloc(sizeof(Decoderbufs__Point));
|
||||
memcpy(datum_msg->datum_point, &dp, sizeof(dp));
|
||||
datum_msg->datum_case = DECODERBUFS__DATUM_MESSAGE__DATUM_DATUM_POINT;
|
||||
break;
|
||||
default:
|
||||
// PostGIS uses dynamic OIDs so we need to check the type again here
|
||||
|
@ -439,6 +450,7 @@ static void set_datum_value(Decoderbufs__DatumMessage *datum_msg, Oid typid,
|
|||
elog(DEBUG1, "Converting geography point to datum_point");
|
||||
datum_msg->datum_point = palloc(sizeof(Decoderbufs__Point));
|
||||
geography_point_as_decoderbufs_point(datum, datum_msg->datum_point);
|
||||
datum_msg->datum_case = DECODERBUFS__DATUM_MESSAGE__DATUM_DATUM_POINT;
|
||||
} else {
|
||||
elog(WARNING, "Encountered unknown typid: %d, using bytes", typid);
|
||||
output = OidOutputFunctionCall(typoutput, datum);
|
||||
|
@ -447,6 +459,7 @@ static void set_datum_value(Decoderbufs__DatumMessage *datum_msg, Oid typid,
|
|||
datum_msg->datum_bytes.data = palloc(size);
|
||||
memcpy(datum_msg->datum_bytes.data, (uint8_t *)output, size);
|
||||
datum_msg->datum_bytes.len = len;
|
||||
datum_msg->datum_case = DECODERBUFS__DATUM_MESSAGE__DATUM_DATUM_BYTES;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue