From 30c58170fd627da7d37af95a08f509cc9c692efe Mon Sep 17 00:00:00 2001 From: "tomas@poseidon.mysql.com" <> Date: Thu, 8 Mar 2007 15:37:53 +0700 Subject: [PATCH] medium int printout support --- mysql-test/r/ndb_restore_print.result | 18 ++++++++++++++++ mysql-test/t/ndb_restore_print.test | 21 ++++++++++++++++++ ndb/include/ndbapi/NdbRecAttr.hpp | 31 +++++++++++++++++++++++++++ ndb/src/ndbapi/NdbRecAttr.cpp | 8 +++++-- 4 files changed, 76 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/ndb_restore_print.result b/mysql-test/r/ndb_restore_print.result index b50a2f5c90b..e05f8e43d1a 100644 --- a/mysql-test/r/ndb_restore_print.result +++ b/mysql-test/r/ndb_restore_print.result @@ -298,6 +298,24 @@ t4 4 34 5 35 drop table t1; +create table t1 +(pk int key +,a1 MEDIUMINT, a2 MEDIUMINT UNSIGNED +) engine ndb; +insert into t1 values(1, 8388607, 16777215); +insert into t1 values(2, -8388608, 0); +insert into t1 values(3, -1, 1); +CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info (id INT, backup_id INT) ENGINE = HEAP; +DELETE FROM test.backup_info; +LOAD DATA INFILE '../tmp.dat' INTO TABLE test.backup_info FIELDS TERMINATED BY ','; +SELECT @the_backup_id:=backup_id FROM test.backup_info; +@the_backup_id:=backup_id +<the_backup_id> +DROP TABLE test.backup_info; +1;8388607;16777215 +2;-8388608;0 +3;-1;1 +drop table t1; drop table t2; drop table t3; drop table t4; diff --git a/mysql-test/t/ndb_restore_print.test b/mysql-test/t/ndb_restore_print.test index 66ad83a84a6..6dbbfdf5933 100644 --- a/mysql-test/t/ndb_restore_print.test +++ b/mysql-test/t/ndb_restore_print.test @@ -161,6 +161,27 @@ insert into t4 values (1,31),(2,32),(3,33),(4,34),(5,35); --exec rm -f $MYSQLTEST_VARDIR/tmp/t3.txt --exec rm -f $MYSQLTEST_VARDIR/tmp/t4.txt +# now test some other datatypes +drop table t1; +create table t1 + (pk int key + ,a1 MEDIUMINT, a2 MEDIUMINT UNSIGNED + ) engine ndb; + +# max values +insert into t1 values(1, 8388607, 16777215); +# min values +insert into t1 values(2, -8388608, 0); +# small values +insert into t1 values(3, -1, 1); + +# backup and print +--source include/ndb_backup.inc + +--let ndb_restore_filter=test t1 +--let ndb_restore_opts=--verbose=0 --print_data --hex --fields-terminated-by=";" +--source include/ndb_backup_print.inc + # clean up drop table t1; drop table t2; diff --git a/ndb/include/ndbapi/NdbRecAttr.hpp b/ndb/include/ndbapi/NdbRecAttr.hpp index 159c7e7ce77..2f3a2c8383a 100644 --- a/ndb/include/ndbapi/NdbRecAttr.hpp +++ b/ndb/include/ndbapi/NdbRecAttr.hpp @@ -145,6 +145,13 @@ public: */ Int32 int32_value() const; + /** + * Get value stored in NdbRecAttr object. + * + * @return Medium value. + */ + Int32 medium_value() const; + /** * Get value stored in NdbRecAttr object. * @@ -173,6 +180,13 @@ public: */ Uint32 u_32_value() const; + /** + * Get value stored in NdbRecAttr object. + * + * @return Unsigned medium value. + */ + Uint32 u_medium_value() const; + /** * Get value stored in NdbRecAttr object. * @@ -318,6 +332,16 @@ NdbRecAttr::int32_value() const return *(Int32*)theRef; } +inline +Int32 +NdbRecAttr::medium_value() const +{ + Uint32 tmp = *(Uint32*)theRef; + if (tmp & (0x1<<23)) + tmp|= (0xFF<<24); + return (Int32)tmp; +} + inline short NdbRecAttr::short_value() const @@ -339,6 +363,13 @@ NdbRecAttr::u_32_value() const return *(Uint32*)theRef; } +inline +Uint32 +NdbRecAttr::u_medium_value() const +{ + return *(Uint32*)theRef; +} + inline Uint16 NdbRecAttr::u_short_value() const diff --git a/ndb/src/ndbapi/NdbRecAttr.cpp b/ndb/src/ndbapi/NdbRecAttr.cpp index 2577151e256..a0c394603c5 100644 --- a/ndb/src/ndbapi/NdbRecAttr.cpp +++ b/ndb/src/ndbapi/NdbRecAttr.cpp @@ -265,6 +265,9 @@ ndbrecattr_print_formatted(NdbOut& out, const NdbRecAttr &r, if (length > 1) out << f.end_array_enclosure; break; + case NdbDictionary::Column::Mediumunsigned: + out << r.u_medium_value(); + break; case NdbDictionary::Column::Smallunsigned: out << r.u_short_value(); break; @@ -277,6 +280,9 @@ ndbrecattr_print_formatted(NdbOut& out, const NdbRecAttr &r, case NdbDictionary::Column::Int: out << r.int32_value(); break; + case NdbDictionary::Column::Mediumint: + out << r.medium_value(); + break; case NdbDictionary::Column::Smallint: out << r.short_value(); break; @@ -463,8 +469,6 @@ ndbrecattr_print_formatted(NdbOut& out, const NdbRecAttr &r, break; case NdbDictionary::Column::Undefined: - case NdbDictionary::Column::Mediumint: - case NdbDictionary::Column::Mediumunsigned: unknown: //default: /* no print functions for the rest, just print type */ out << (int) r.getType(); -- 2.30.9