mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2024-12-27 09:58:45 +01:00
add msglen column to msgs table to be used to avoid calculating size
later. Stores size of string as it was passed to db, not as stored.
This commit is contained in:
parent
b863931db5
commit
96fead3164
2 changed files with 8 additions and 4 deletions
|
@ -434,14 +434,15 @@ DBMgr::StoreMessage( const char* const connName, int hid,
|
|||
const unsigned char* buf, int len )
|
||||
{
|
||||
size_t newLen;
|
||||
const char* fmt = "INSERT INTO " MSGS_TABLE " (connname, hid, msg)"
|
||||
" VALUES( '%s', %d, E'%s')";
|
||||
const char* fmt = "INSERT INTO " MSGS_TABLE " (connname, hid, msg, msglen)"
|
||||
" VALUES( '%s', %d, E'%s', %d)";
|
||||
|
||||
unsigned char* bytes = PQescapeByteaConn( getThreadConn(), buf, len, &newLen );
|
||||
assert( NULL != bytes );
|
||||
|
||||
char query[newLen+128];
|
||||
unsigned int siz = snprintf( query, sizeof(query), fmt, connName, hid, bytes );
|
||||
unsigned int siz = snprintf( query, sizeof(query), fmt, connName, hid,
|
||||
bytes, len );
|
||||
logf( XW_LOGINFO, "%s: query: %s", __func__, query );
|
||||
PQfreemem( bytes );
|
||||
assert( siz < sizeof(query) );
|
||||
|
@ -453,7 +454,7 @@ bool
|
|||
DBMgr::GetStoredMessage( const char* const connName, int hid,
|
||||
unsigned char* buf, size_t* buflen, int* msgID )
|
||||
{
|
||||
const char* fmt = "SELECT id, msg FROM " MSGS_TABLE
|
||||
const char* fmt = "SELECT id, msg, msglen FROM " MSGS_TABLE
|
||||
" WHERE connName = '%s' AND hid = %d ORDER BY id LIMIT 1";
|
||||
char query[256];
|
||||
snprintf( query, sizeof(query), fmt, connName, hid );
|
||||
|
@ -466,6 +467,7 @@ DBMgr::GetStoredMessage( const char* const connName, int hid,
|
|||
bool found = nTuples == 1;
|
||||
if ( found ) {
|
||||
*msgID = atoi( PQgetvalue( result, 0, 0 ) );
|
||||
size_t msglen = atoi( PQgetvalue( result, 0, 2 ) );
|
||||
|
||||
/* int len = PQgetlength( result, 0, 1 ); */
|
||||
const unsigned char* from =
|
||||
|
@ -476,6 +478,7 @@ DBMgr::GetStoredMessage( const char* const connName, int hid,
|
|||
memcpy( buf, bytes, to_length );
|
||||
PQfreemem( bytes );
|
||||
*buflen = to_length;
|
||||
assert( to_length == msglen );
|
||||
}
|
||||
PQclear( result );
|
||||
return found;
|
||||
|
|
|
@ -54,6 +54,7 @@ id SERIAL
|
|||
,hid INTEGER
|
||||
,ctime TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
,msg BYTEA
|
||||
,msglen INTEGER
|
||||
,UNIQUE ( connName, hid, msg )
|
||||
);
|
||||
EOF
|
||||
|
|
Loading…
Reference in a new issue