mirror of
https://github.com/brianc/node-postgres.git
synced 2025-12-08 20:16:25 +00:00
Encode buffers as bytea hex strings
This commit is contained in:
parent
4662d41972
commit
cd29f806f1
@ -891,6 +891,14 @@ private:
|
||||
paramValues[i] = cString;
|
||||
} else if(val->IsNull()) {
|
||||
paramValues[i] = NULL;
|
||||
} else if(val->IsObject() && Buffer::HasInstance(val)) {
|
||||
char *cHexString = MallocCHexString(val);
|
||||
if(!cHexString) {
|
||||
LOG("ArgToCStringArray: OUT OF MEMORY OR SOMETHING BAD!");
|
||||
ReleaseCStringArray(paramValues, i-1);
|
||||
return 0;
|
||||
}
|
||||
paramValues[i] = cHexString;
|
||||
} else {
|
||||
//a paramter was not a string
|
||||
LOG("Parameter not a string");
|
||||
@ -921,6 +929,27 @@ private:
|
||||
strcpy(cString, *utf8String);
|
||||
return cString;
|
||||
}
|
||||
|
||||
//helper function to Malloc a Bytea encoded Hex string from a buffer
|
||||
static char* MallocCHexString(v8::Handle<Value> buf)
|
||||
{
|
||||
char* bufferData = Buffer::Data(buf);
|
||||
size_t hexStringLen = Buffer::Length(buf)*2 + 3;
|
||||
char *cHexString = (char *) malloc(hexStringLen);
|
||||
if(!cHexString) {
|
||||
return cHexString;
|
||||
}
|
||||
strcpy(cHexString, "\\x");
|
||||
for (uint32_t i = 0, k = 2; k < hexStringLen; i += 1, k += 2) {
|
||||
static const char hex[] = "0123456789abcdef";
|
||||
uint8_t val = static_cast<uint8_t>(bufferData[i]);
|
||||
cHexString[k + 0] = hex[val >> 4];
|
||||
cHexString[k + 1] = hex[val & 15];
|
||||
}
|
||||
cHexString[hexStringLen-1] = 0;
|
||||
return cHexString;
|
||||
}
|
||||
|
||||
void SendCopyFromChunk(Handle<Object> chunk) {
|
||||
PQputCopyData(connection_, Buffer::Data(chunk), Buffer::Length(chunk));
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user