From: John David Duncan Date: May 16 2011 5:50am Subject: bzr commit into mysql-5.1-telco-7.2 branch (john.duncan:4174) List-Archive: http://lists.mysql.com/commits/137377 Message-Id: <201105160550.p4G5oADk009068@acsmt358.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0865537643==" --===============0865537643== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///Users/jdd/bzr-repo/working/cluster-7.2-labs-memcached/ based on revid:john.duncan@stripped 4174 John David Duncan 2011-05-15 Refactor DataTypeHandler so that readFromNdb() and writeToNdb() return an int -- the length read/written, or < 0 for error. modified: storage/ndb/memcache/include/DataTypeHandler.h storage/ndb/memcache/include/Operation.h storage/ndb/memcache/include/Record.h storage/ndb/memcache/src/DataTypeHandler.cc storage/ndb/memcache/src/Record.cc === modified file 'storage/ndb/memcache/include/DataTypeHandler.h' --- a/storage/ndb/memcache/include/DataTypeHandler.h 2011-03-30 06:54:53 +0000 +++ b/storage/ndb/memcache/include/DataTypeHandler.h 2011-05-16 05:49:22 +0000 @@ -36,25 +36,24 @@ /* Return status codes from some of the functions: */ -// TODO: Return an int: the encoded/read length, or < 0 on error. -enum TypeHandlerStatus { - DTH_OK = 0, - DTH_NOT_SUPPORTED, - DTH_VALUE_TOO_LONG + +enum { /* These can be returned by readFromNdb() or writeToNdb() */ + DTH_NOT_SUPPORTED = -1, + DTH_VALUE_TOO_LONG = -2 }; /* DataTypeHandler interface: */ typedef struct { - // String Readers - TypeHandlerStatus (*readFromNdb)(const NdbDictionary::Column *col, size_t &len, - char * &str, const void * const buf); + // String Readers. Returns length read. + int (*readFromNdb)(const NdbDictionary::Column *col, + char * &str, const void * const buf); size_t (*getStringifiedLength)(const NdbDictionary::Column *col, const void * const buf); - // String Writer - TypeHandlerStatus (*writeToNdb)(const NdbDictionary::Column *col, size_t len, - size_t offset, const char *str, void * const buf); + // String Writer. Returns length written or < 0 for error. + int (*writeToNdb)(const NdbDictionary::Column *col, size_t len, + size_t offset, const char *str, void * const buf); // For an integer column, this holds the int's size in bytes. Otherwise zero. int direct_int_size; === modified file 'storage/ndb/memcache/include/Operation.h' --- a/storage/ndb/memcache/include/Operation.h 2011-04-07 11:20:56 +0000 +++ b/storage/ndb/memcache/include/Operation.h 2011-05-16 05:49:22 +0000 @@ -134,8 +134,8 @@ inline void Operation::clearKeyNullBits( } inline bool Operation::setKeyPart(int idx, const char *strval, size_t strlen) { - TypeHandlerStatus s = plan->key_record->encode(idx, strval, strlen, key_buffer); - return (s == DTH_OK); + int s = plan->key_record->encode(idx, strval, strlen, key_buffer); + return (s > 0); } inline bool Operation::setKeyPartInt(int idx, int value) { @@ -157,8 +157,8 @@ inline void Operation::clearNullBits() { } inline bool Operation::setColumn(int idx, const char *strval, size_t strlen) { - TypeHandlerStatus s = record->encode(idx, strval, strlen, buffer); - return (s == DTH_OK); + int s = record->encode(idx, strval, strlen, buffer); + return (s > 0); } inline bool Operation::setColumnInt(int idx, int value) { === modified file 'storage/ndb/memcache/include/Record.h' --- a/storage/ndb/memcache/include/Record.h 2011-04-07 11:20:56 +0000 +++ b/storage/ndb/memcache/include/Record.h 2011-05-16 05:49:22 +0000 @@ -76,7 +76,7 @@ class Record { int getIntValue(int idx, char *data) const; bool setUint64Value(int idx, Uint64 value, char *buffer) const; Uint64 getUint64Value(int idx, char *data) const; - TypeHandlerStatus encode(int idx, const char *key, int nkey, char *buffer) const; + int encode(int idx, const char *key, int nkey, char *buffer) const; size_t getStringifiedLength(char *data) const; bool decodeNoCopy(int idx, char **dest_ptr, size_t *len_ptr, const char * const src) const; === modified file 'storage/ndb/memcache/src/DataTypeHandler.cc' --- a/storage/ndb/memcache/src/DataTypeHandler.cc 2011-03-30 06:54:53 +0000 +++ b/storage/ndb/memcache/src/DataTypeHandler.cc 2011-05-16 05:49:22 +0000 @@ -31,13 +31,13 @@ #include "DataTypeHandler.h" #include "debug.h" -#define DECODE_ARGS const NdbDictionary::Column *, size_t &, char * &, const void * +#define DECODE_ARGS const NdbDictionary::Column *, char * &, const void * #define SFDLEN_ARGS const NdbDictionary::Column *, const void * -#define WRITE_ARGS const NdbDictionary::Column *, size_t, size_t, const char *, void * +#define WRITE_ARGS const NdbDictionary::Column *, size_t, size_t, const char *, void * -typedef TypeHandlerStatus impl_readFromNdb(DECODE_ARGS); -typedef size_t impl_getStringifiedLength(SFDLEN_ARGS); -typedef TypeHandlerStatus impl_writeToNdb(WRITE_ARGS); +typedef int impl_readFromNdb(DECODE_ARGS); +typedef size_t impl_getStringifiedLength(SFDLEN_ARGS); +typedef int impl_writeToNdb(WRITE_ARGS); /* Implementations for readFromNdb() */ @@ -171,12 +171,11 @@ size_t getColumnRecordSize(const NdbDict /******************* IMPLEMENTATIONS *******************/ /***** VARCHAR *****/ -TypeHandlerStatus dth_decode_varchar(const NdbDictionary::Column *col, - size_t &len, char * &str, - const void *buf) { - len = dth_sfdlen_varchar(col, buf); +int dth_decode_varchar(const NdbDictionary::Column *col, + char * &str, const void *buf) { + size_t len = dth_sfdlen_varchar(col, buf); str = ((char *) buf) + 1; - return DTH_OK; + return len; } @@ -187,9 +186,8 @@ size_t dth_sfdlen_varchar(const NdbDicti } -TypeHandlerStatus dth_encode_varchar(const NdbDictionary::Column *col, - size_t len, size_t offset, - const char *str, void *buf) { +int dth_encode_varchar(const NdbDictionary::Column *col, + size_t len, size_t offset, const char *str, void *buf) { size_t total_len = len + offset; uint8_t * length_byte = (uint8_t *) buf; char *char_buffer = ((char *) buf) + 1 + offset; @@ -203,18 +201,17 @@ TypeHandlerStatus dth_encode_varchar(con /* Copy string value into buffer */ strncpy(char_buffer, str, len); - return DTH_OK; + return len; } /***** LONGVARCHAR *****/ -TypeHandlerStatus dth_decode_longvarchar(const NdbDictionary::Column *col, - size_t &len, char * &str, - const void *buf) { - len = dth_sfdlen_longvarchar(col, buf); +int dth_decode_longvarchar(const NdbDictionary::Column *col, + char * &str, const void *buf) { + size_t len = dth_sfdlen_longvarchar(col, buf); str = ((char *) buf) + 2; - return DTH_OK; + return len; } @@ -227,7 +224,7 @@ size_t dth_sfdlen_longvarchar(const NdbD } -TypeHandlerStatus dth_encode_longvarchar(const NdbDictionary::Column *col, +int dth_encode_longvarchar(const NdbDictionary::Column *col, size_t len, size_t offset, const char *str, void *buf) { char *cbuf = ((char *) buf); @@ -246,16 +243,14 @@ TypeHandlerStatus dth_encode_longvarchar /* Copy string value into buffer */ strncpy(dest, str, len); - return DTH_OK; + return len; } /***** INT *****/ -TypeHandlerStatus dth_decode_int(const NdbDictionary::Column *col, size_t &len, - char * &str, const void *buf) { - len = sprintf(str, "%d",* (int *) buf) + 1; // +1 for null terminator - - return DTH_OK; +int dth_decode_int(const NdbDictionary::Column *col, + char * &str, const void *buf) { + return sprintf(str, "%d",* (int *) buf) + 1; // +1 for null terminator } @@ -267,23 +262,20 @@ size_t dth_sfdlen_int(const NdbDictionar } -TypeHandlerStatus dth_encode_int(const NdbDictionary::Column *col, - size_t len, size_t offset, - const char *str, void *buf) { +int dth_encode_int(const NdbDictionary::Column *col, + size_t len, size_t offset, const char *str, void *buf) { assert(offset == 0); int *ibuf = (int *) buf; *ibuf = strtol(str, NULL, 10); - return DTH_OK; + return len; } /***** BIGINT UNSIGNED *****/ -TypeHandlerStatus dth_decode_ubigint(const NdbDictionary::Column *col, size_t &len, - char * &str, const void *buf) { - len = sprintf(str, "%"PRIu64,* (uint64_t *) buf) + 1; // +1 for null - - return DTH_OK; +int dth_decode_ubigint(const NdbDictionary::Column *col, + char * &str, const void *buf) { + return sprintf(str, "%"PRIu64,* (uint64_t *) buf) + 1; // +1 for null } @@ -295,37 +287,33 @@ size_t dth_sfdlen_ubigint(const NdbDicti } -TypeHandlerStatus dth_encode_ubigint(const NdbDictionary::Column *col, - size_t len, size_t offset, - const char *str, void *buf) { +int dth_encode_ubigint(const NdbDictionary::Column *col, + size_t len, size_t offset, const char *str, void *buf) { assert(offset == 0); uint64_t *ibuf = (uint64_t *) buf; *ibuf = strtoull(str, NULL, 10); - return DTH_OK; + return len; } /***** ENUM *****/ -TypeHandlerStatus dth_decode_char1(const NdbDictionary::Column *col, size_t &len, - char * &str, const void *buf) { - *str = * (char *) buf; - len = 1; - - return DTH_OK; +int dth_decode_char1(const NdbDictionary::Column *col, + char * &str, const void *buf) { + *str = * (char *) buf; + return 1; } size_t dth_sfdlen_char1(const NdbDictionary::Column *col, const void *buf) { return 1; } -TypeHandlerStatus dth_encode_char1(const NdbDictionary::Column *col, - size_t len, size_t offset, - const char *str, void *buf) { +int dth_encode_char1(const NdbDictionary::Column *col, + size_t len, size_t offset, const char *str, void *buf) { assert(offset == 0); char *cbuf = (char *) buf; *cbuf = *str; - return DTH_OK; + return 1; } === modified file 'storage/ndb/memcache/src/Record.cc' --- a/storage/ndb/memcache/src/Record.cc 2011-04-30 14:20:42 +0000 +++ b/storage/ndb/memcache/src/Record.cc 2011-05-16 05:49:22 +0000 @@ -149,7 +149,7 @@ bool Record::complete(NdbDictionary::Dic bool Record::appendCRLF(int idx, size_t len, char *buffer) const { if( handlers[col[idx]]->contains_string && handlers[col[idx]]->writeToNdb(specs[col[idx]].column, 2, len, "\r\n", buffer) - == DTH_OK) + >= 0) { return true; } @@ -164,7 +164,7 @@ bool Record::decodeNoCopy(int idx, if(! handlers[col[idx]]->contains_string) return false; const char * src_buffer = src + specs[col[idx]].offset; - handlers[col[idx]]->readFromNdb(specs[col[idx]].column, *len, *dest, src_buffer); + *len = handlers[col[idx]]->readFromNdb(specs[col[idx]].column, *dest, src_buffer); return true; } @@ -181,7 +181,7 @@ size_t Record::decodeCopy(int idx, char else { /* Types other than VARCHAR */ /* this works but it's strange; something has to be sorted out here. handlers[col[idx]] but specs[idx] ?? */ - handlers[col[idx]]->readFromNdb(specs[idx].column, out_len, dest, src_buffer); + out_len = handlers[col[idx]]->readFromNdb(specs[idx].column, dest, src_buffer); } *(dest + out_len) = 0; // terminating null; may be overwritten by a tab return out_len; @@ -234,7 +234,7 @@ Uint64 Record::getUint64Value(int idx, c } -TypeHandlerStatus Record::encode(int idx, const char *key, int nkey, +int Record::encode(int idx, const char *key, int nkey, char *buffer) const { return handlers[col[idx]]->writeToNdb(specs[col[idx]].column, nkey, 0, key, buffer + specs[col[idx]].offset); --===============0865537643== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/john.duncan@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: john.duncan@stripped # target_branch: file:///Users/jdd/bzr-repo/working/cluster-7.2-labs-\ # memcached/ # testament_sha1: 001ba633682432085fe8511b6ff2cf5363e9f329 # timestamp: 2011-05-15 22:50:04 -0700 # base_revision_id: john.duncan@stripped\ # 9zjelwc0vs2135it # # Begin bundle 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 --===============0865537643==--