From: John David Duncan Date: May 16 2011 6:07am Subject: bzr commit into mysql-5.1-telco-7.2 branch (john.duncan:4175) List-Archive: http://lists.mysql.com/commits/137378 Message-Id: <201105160607.p4G67Y3d011831@acsmt357.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1563810291==" --===============1563810291== 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 4175 John David Duncan 2011-05-15 Support CHAR modified: storage/ndb/memcache/src/DataTypeHandler.cc === modified file 'storage/ndb/memcache/src/DataTypeHandler.cc' --- a/storage/ndb/memcache/src/DataTypeHandler.cc 2011-05-16 05:49:22 +0000 +++ b/storage/ndb/memcache/src/DataTypeHandler.cc 2011-05-16 06:07:15 +0000 @@ -43,46 +43,65 @@ typedef int impl_writeToNdb(WRITE_ARG /* Implementations for readFromNdb() */ impl_readFromNdb dth_decode_varchar; impl_readFromNdb dth_decode_longvarchar; +impl_readFromNdb dth_decode_char; +impl_readFromNdb dth_decode_char1; impl_readFromNdb dth_decode_int; impl_readFromNdb dth_decode_ubigint; -impl_readFromNdb dth_decode_char1; /* Implementations for impl_getStringifiedLength() */ -impl_getStringifiedLength dth_sfdlen_varchar; -impl_getStringifiedLength dth_sfdlen_longvarchar; -impl_getStringifiedLength dth_sfdlen_int; -impl_getStringifiedLength dth_sfdlen_ubigint; -impl_getStringifiedLength dth_sfdlen_char1; +impl_getStringifiedLength dth_length_varchar; +impl_getStringifiedLength dth_length_longvarchar; +impl_getStringifiedLength dth_length_char; +impl_getStringifiedLength dth_length_char1; +impl_getStringifiedLength dth_length_int; +impl_getStringifiedLength dth_length_ubigint; /* Implementations for writeToNdb() */ impl_writeToNdb dth_encode_varchar; impl_writeToNdb dth_encode_longvarchar; +impl_writeToNdb dth_encode_char; +impl_writeToNdb dth_encode_char1; impl_writeToNdb dth_encode_int; impl_writeToNdb dth_encode_ubigint; -impl_writeToNdb dth_encode_char1; /***** Singleton Handlers *****/ DataTypeHandler Handler_Varchar = { - dth_decode_varchar, - dth_sfdlen_varchar, - dth_encode_varchar, - 0, - true + dth_decode_varchar, // readFromNdb() + dth_length_varchar, // getStringifiedLength() + dth_encode_varchar, // writeToNdb() + 0, // direct_int_size + true // contains_string }; DataTypeHandler Handler_LongVarchar = { dth_decode_longvarchar, - dth_sfdlen_longvarchar, + dth_length_longvarchar, dth_encode_longvarchar, 0, true }; +DataTypeHandler Handler_Char = { + dth_decode_char, // readFromNdb() + dth_length_char, // getStringifiedLength() + dth_encode_char, // writeToNdb() + 0, // direct_int_size + true // contains_string +}; + +DataTypeHandler Handler_enum = { /* NDB sees ENUM columns as CHAR(1) */ + dth_decode_char1, + dth_length_char1, + dth_encode_char1, + 1, + false +}; + DataTypeHandler Handler_Int = { dth_decode_int, - dth_sfdlen_int, + dth_length_int, dth_encode_int, 4, false @@ -90,19 +109,12 @@ DataTypeHandler Handler_Int = { DataTypeHandler Handler_BigIntUnsigned = { dth_decode_ubigint, - dth_sfdlen_ubigint, + dth_length_ubigint, dth_encode_ubigint, 8, false }; -DataTypeHandler Handler_enum = { /* NDB sees ENUM columns as CHAR(1) */ - dth_decode_char1, - dth_sfdlen_char1, - dth_encode_char1, - 1, - false -}; /* @@ -128,7 +140,7 @@ DataTypeHandler * getDataTypeHandlerForC case NdbDictionary::Column::Char: if(col->getLength() == 1) return & Handler_enum; - /* fallthrough. TODO: support CHAR */ + else return & Handler_Char; default: return NULL; @@ -173,13 +185,13 @@ size_t getColumnRecordSize(const NdbDict /***** VARCHAR *****/ int dth_decode_varchar(const NdbDictionary::Column *col, char * &str, const void *buf) { - size_t len = dth_sfdlen_varchar(col, buf); + size_t len = dth_length_varchar(col, buf); str = ((char *) buf) + 1; return len; } -size_t dth_sfdlen_varchar(const NdbDictionary::Column *col, const void *buf) { +size_t dth_length_varchar(const NdbDictionary::Column *col, const void *buf) { /* Return the actual length of the value string */ uint8_t * length_byte = (uint8_t *) buf; return (size_t) (*length_byte); @@ -209,13 +221,13 @@ int dth_encode_varchar(const NdbDictiona /***** LONGVARCHAR *****/ int dth_decode_longvarchar(const NdbDictionary::Column *col, char * &str, const void *buf) { - size_t len = dth_sfdlen_longvarchar(col, buf); + size_t len = dth_length_longvarchar(col, buf); str = ((char *) buf) + 2; return len; } -size_t dth_sfdlen_longvarchar(const NdbDictionary::Column *col, const void *buf) { +size_t dth_length_longvarchar(const NdbDictionary::Column *col, const void *buf) { /* Return the actual length of the value string */ uint8_t * length_byte_1 = (uint8_t *) buf; uint8_t * length_byte_2 = ((uint8_t *) buf) + 1; @@ -247,6 +259,29 @@ int dth_encode_longvarchar(const NdbDict } +/***** CHAR *****/ +int dth_decode_char(const NdbDictionary::Column *col, + char * &str, const void *buf) { + *str = * (char *) buf; + // TODO: is it null-padded? space-padded? + return col->getLength(); +} + +size_t dth_length_char(const NdbDictionary::Column *col, const void *buf) { + return col->getLength(); +} + +int dth_encode_char(const NdbDictionary::Column *col, + size_t len, size_t offset, const char *str, void *buf) { + char *cbuf = ((char *) buf); + char *dest = cbuf + offset; + + if(len > col->getLength()) return DTH_VALUE_TOO_LONG; + + memcpy(dest, str, len); + return len; +} + /***** INT *****/ int dth_decode_int(const NdbDictionary::Column *col, char * &str, const void *buf) { @@ -254,7 +289,7 @@ int dth_decode_int(const NdbDictionary:: } -size_t dth_sfdlen_int(const NdbDictionary::Column *col, const void *buf) { +size_t dth_length_int(const NdbDictionary::Column *col, const void *buf) { int i = *((int *) buf); int len = ( i < 0) ? 2 : 1; for( ; i > 0 ; len++) i = i / 10; @@ -266,8 +301,8 @@ int dth_encode_int(const NdbDictionary:: size_t len, size_t offset, const char *str, void *buf) { assert(offset == 0); int *ibuf = (int *) buf; - *ibuf = strtol(str, NULL, 10); - + *ibuf = strtol(str, NULL, 10); + return len; } @@ -275,11 +310,11 @@ int dth_encode_int(const NdbDictionary:: /***** BIGINT UNSIGNED *****/ int dth_decode_ubigint(const NdbDictionary::Column *col, char * &str, const void *buf) { - return sprintf(str, "%"PRIu64,* (uint64_t *) buf) + 1; // +1 for null + return sprintf(str, "%"PRIu64,* (Uint64 *) buf) + 1; // +1 for null } -size_t dth_sfdlen_ubigint(const NdbDictionary::Column *col, const void *buf) { +size_t dth_length_ubigint(const NdbDictionary::Column *col, const void *buf) { int i = *((uint64_t *) buf); int len = ( i < 0) ? 2 : 1; for( ; i > 0 ; len++) i = i / 10; @@ -305,8 +340,8 @@ int dth_decode_char1(const NdbDictionary return 1; } -size_t dth_sfdlen_char1(const NdbDictionary::Column *col, const void *buf) { - return 1; +size_t dth_length_char1(const NdbDictionary::Column *col, const void *buf) { + return 1; } int dth_encode_char1(const NdbDictionary::Column *col, --===============1563810291== 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: aa81937f9c3493148e4c845fd01d3fc1f5c8b53a # timestamp: 2011-05-15 23:07:27 -0700 # base_revision_id: john.duncan@stripped\ # oiw5dunl4uac01g0 # # Begin bundle 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 --===============1563810291==--