Fixing bug after merging oneof use in protobuf definition

pull/1/head
Xavier Stevens 2015-04-27 15:18:45 -07:00
parent ba4a480643
commit 6fe0d68393
1 changed files with 16 additions and 3 deletions

View File

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