Skip to content

Commit

Permalink
Merge pull request #4 from truongsinh/master
Browse files Browse the repository at this point in the history
read/write binary data (bytea)
  • Loading branch information
ibrarahmad committed Oct 2, 2014
2 parents da603d5 + 8e6ca32 commit 486e7d6
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 0 deletions.
18 changes: 18 additions & 0 deletions mongo_fdw.c
Original file line number Diff line number Diff line change
Expand Up @@ -1227,6 +1227,14 @@ ColumnTypesCompatible(BSON_TYPE bsonType, Oid columnTypeId)
}
break;
}
case BYTEAOID:
{
if (bsonType == BSON_TYPE_BINDATA)
{
compatibleTypes = true;
}
break;
}
case NAMEOID:
{
/*
Expand Down Expand Up @@ -1432,6 +1440,16 @@ ColumnValue(BSON_ITERATOR *bsonIterator, Oid columnTypeId, int32 columnTypeMod)
Int32GetDatum(columnTypeMod));
break;
}
case BYTEAOID:
{
int value_len = BsonIterBinLen(bsonIterator);
const char *value = BsonIterBinData(bsonIterator);
bytea *result = (bytea *)palloc(value_len + VARHDRSZ);
memcpy(VARDATA(result), value, value_len);
SET_VARSIZE(result, value_len + VARHDRSZ);
columnValue = PointerGetDatum(result);
break;
}
case DATEOID:
{
int64 valueMillis = BsonIterDate(bsonIterator);
Expand Down
1 change: 1 addition & 0 deletions mongo_fdw.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@
#define BSON_TYPE_INT32 BSON_INT
#define BSON_TYPE_INT64 BSON_LONG
#define BSON_TYPE_DOUBLE BSON_DOUBLE
#define BSON_TYPE_BINDATA BSON_BINDATA
#define BSON_TYPE_BOOL BSON_BOOL
#define BSON_TYPE_UTF8 BSON_STRING
#define BSON_TYPE_OID BSON_OID
Expand Down
15 changes: 15 additions & 0 deletions mongo_query.c
Original file line number Diff line number Diff line change
Expand Up @@ -449,6 +449,21 @@ AppenMongoValue(BSON *queryDocument, const char *keyName, Datum value, bool isnu
status = BsonAppendUTF8(queryDocument, keyName, outputString);
break;
}
case BYTEAOID:
{
int len;
char *data;
char *result = DatumGetPointer(value);
if (VARATT_IS_1B(result)) {
len = VARSIZE_1B(result) - VARHDRSZ_SHORT;
data = VARDATA_1B(result);
} else {
len = VARSIZE_4B(result) - VARHDRSZ;
data = VARDATA_4B(result);
}
status = BsonAppendBinary(queryDocument, keyName, data, len);
break;
}
case NAMEOID:
{
char *outputString = NULL;
Expand Down
13 changes: 13 additions & 0 deletions mongo_wrapper.c
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,15 @@ BsonIterString(BSON_ITERATOR *it)
return bson_iterator_string(it);
}

const char* BsonIterBinData(BSON_ITERATOR *it)
{
return bson_iterator_bin_data(it);
}

int BsonIterBinLen(BSON_ITERATOR *it)
{
return bson_iterator_bin_len(it);
}
const bson_oid_t *
BsonIterOid(BSON_ITERATOR *it)
{
Expand Down Expand Up @@ -294,6 +303,10 @@ BsonAppendUTF8(BSON *b, const char* key, char *v)
return (bson_append_string(b, key, v) == MONGO_OK);
}

bool BsonAppendBinary(BSON *b, const char* key, char *v, size_t len)
{
return (bson_append_binary(b, key, BSON_BIN_BINARY, v, len) == MONGO_OK);
}
bool
BsonAppendDate(BSON *b, const char* key, time_t v)
{
Expand Down
3 changes: 3 additions & 0 deletions mongo_wrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ int64_t BsonIterInt64(BSON_ITERATOR *it);
double BsonIterDouble(BSON_ITERATOR *it);
bool BsonIterBool(BSON_ITERATOR *it);
const char* BsonIterString(BSON_ITERATOR *it);
const char* BsonIterBinData(BSON_ITERATOR *it);
int BsonIterBinLen(BSON_ITERATOR *it);
const bson_oid_t * BsonIterOid(BSON_ITERATOR *it);
time_t BsonIterDate(BSON_ITERATOR *it);
const char* BsonIterKey(BSON_ITERATOR *it);
Expand All @@ -63,6 +65,7 @@ bool BsonAppendInt32(BSON *b, const char* key, int v);
bool BsonAppendInt64(BSON *b, const char* key, int64_t v);
bool BsonAppendDouble(BSON *b, const char* key, double v);
bool BsonAppendUTF8(BSON *b, const char* key, char *v);
bool BsonAppendBinary(BSON *b, const char* key, char *v, size_t len);
bool BsonAppendDate(BSON *b, const char* key, time_t v);
bool BsonAppendStartArray(BSON *b, const char* key, BSON* c);
bool BsonAppendFinishArray(BSON *b, BSON *c);
Expand Down

0 comments on commit 486e7d6

Please sign in to comment.