diff options
37 files changed, 283 insertions, 123 deletions
diff --git a/.bzrignore b/.bzrignore index 8a947d63b75..bb1cdb1c0c3 100644 --- a/.bzrignore +++ b/.bzrignore @@ -1052,3 +1052,6 @@ vio/test-ssl vio/test-sslclient vio/test-sslserver vio/viotest-ssl +include/mysqld_ername.h +include/mysqld_error.h +include/sql_state.h diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index fe2a38f29bf..6f99987bd9b 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -241,6 +241,7 @@ tonu@x153.internalnet tonu@x3.internalnet tsmith@build.mysql.com tulin@build.mysql.com +tulin@mysql.com ulli@morbus.(none) venu@hundin.mysql.fi venu@myvenu.com diff --git a/Docs/Images/Makefile.am b/Docs/Images/Makefile.am index b57d701d8a0..8ba1ff7382c 100644 --- a/Docs/Images/Makefile.am +++ b/Docs/Images/Makefile.am @@ -27,9 +27,5 @@ EXTRA_DIST = all: : -# Nothing to cleanup in this dummy directory. -clean: - : - # Don't update the files from bitkeeper %::SCCS/s.% diff --git a/client/Makefile.am b/client/Makefile.am index 9b62d698e38..2721953629e 100644 --- a/client/Makefile.am +++ b/client/Makefile.am @@ -18,7 +18,7 @@ #AUTOMAKE_OPTIONS = nostdinc INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/regex \ - $(openssl_includes) -I$(top_srcdir)/extra + $(openssl_includes) -I$(top_builddir)/include LIBS = @CLIENT_LIBS@ LDADD= @CLIENT_EXTRA_LDFLAGS@ \ $(top_builddir)/libmysql/libmysqlclient.la diff --git a/configure.in b/configure.in index 124e1ce3dcc..b2d8d65439d 100644 --- a/configure.in +++ b/configure.in @@ -1674,8 +1674,8 @@ then elif test "$with_debug" = "full" then # Full debug. Very slow in some cases - CFLAGS="$DEBUG_CFLAGS -DDBUG_ON -DSAFE_MUTEX -DSAFEMALLOC -DUNIV_DEBUG $CFLAGS" - CXXFLAGS="$DEBUG_CXXFLAGS -DDBUG_ON -DSAFE_MUTEX -DSAFEMALLOC -DUNIV_DEBUG $CXXFLAGS" + CFLAGS="$DEBUG_CFLAGS -DDBUG_ON -DSAFE_MUTEX -DSAFEMALLOC $CFLAGS" + CXXFLAGS="$DEBUG_CXXFLAGS -DDBUG_ON -DSAFE_MUTEX -DSAFEMALLOC $CXXFLAGS" else # Optimized version. No debug CFLAGS="$OPTIMIZE_CFLAGS -DDBUG_OFF $CFLAGS" diff --git a/dbug/Makefile.am b/dbug/Makefile.am index f8ddf0e6567..a951aff6094 100644 --- a/dbug/Makefile.am +++ b/dbug/Makefile.am @@ -26,6 +26,7 @@ EXTRA_DIST = example1.c example2.c example3.c \ NROFF_INC = example1.r example2.r example3.r main.r \ factorial.r output1.r output2.r output3.r \ output4.r output5.r +CLEANFILES = $(NROFF_INC) user.t user.ps # Must be linked with libs that are not compiled yet @@ -59,8 +60,5 @@ output5.r: factorial @RM@ -f $@ @SED@ -e 's!\\!\\\\!g' $< > $@ -clean: - @RM@ -f $(NROFF_INC) user.t user.ps - # Don't update the files from bitkeeper %::SCCS/s.% diff --git a/extra/Makefile.am b/extra/Makefile.am index 9f18cbf96e6..43981753515 100644 --- a/extra/Makefile.am +++ b/extra/Makefile.am @@ -16,25 +16,26 @@ INCLUDES = @MT_INCLUDES@ -I$(top_srcdir)/include \ @ndbcluster_includes@ -I$(top_srcdir)/sql \ - -I$(top_srcdir)/extra + -I$(top_builddir)/include LDADD = @CLIENT_EXTRA_LDFLAGS@ ../mysys/libmysys.a \ ../dbug/libdbug.a ../strings/libmystrings.a -BUILT_SOURCES= mysqld_error.h sql_state.h mysqld_ername.h +BUILT_SOURCES= $(top_builddir)/include/mysqld_error.h \ + $(top_builddir)/include/sql_state.h \ + $(top_builddir)/include/mysqld_ername.h pkginclude_HEADERS= $(BUILT_SOURCES) -created_sources = created_include_files -CLEANFILES = $(created_sources) -SUPERCLEANFILES = $(BUILT_SOURCES) - -all: $(created_sources) +CLEANFILES = $(BUILT_SOURCES) # This will build mysqld_error.h and sql_state.h -mysqld_error.h: created_include_files -mysqld_ername.h: created_include_files -sql_state.h: created_include_files - -created_include_files: comp_err - $(top_builddir)/extra/comp_err --charset=$(srcdir)/../sql/share/charsets --out-dir=$(top_builddir)/sql/share/ --header_file=$(top_builddir)/extra/mysqld_error.h --name_file=$(top_builddir)/extra/mysqld_ername.h --state_file=$(top_builddir)/extra/sql_state.h --in_file=$(srcdir)/../sql/share/errmsg.txt - touch created_include_files +$(top_builddir)/include/mysqld_error.h: comp_err + $(top_builddir)/extra/comp_err \ + --charset=$(top_srcdir)/sql/share/charsets \ + --out-dir=$(top_builddir)/sql/share/ \ + --header_file=$(top_builddir)/include/mysqld_error.h \ + --name_file=$(top_builddir)/include/mysqld_ername.h \ + --state_file=$(top_builddir)/include/sql_state.h \ + --in_file=$(top_srcdir)/sql/share/errmsg.txt +$(top_builddir)/include/mysqld_ername.h: $(top_builddir)/include/mysqld_error.h +$(top_builddir)/include/sql_state.h: $(top_builddir)/include/mysqld_error.h bin_PROGRAMS = replace comp_err perror resolveip my_print_defaults \ resolve_stack_dump mysql_waitpid diff --git a/include/Makefile.am b/include/Makefile.am index e11ca2b4647..08beb4b7236 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -33,15 +33,10 @@ noinst_HEADERS = config-win.h config-os2.h config-netware.h \ mysql_version.h.in my_handler.h my_time.h decimal.h # mysql_version.h are generated -SUPERCLEANFILES = mysql_version.h my_config.h +CLEANFILES = mysql_version.h my_config.h readline # Some include files that may be moved and patched by configure -DISTCLEANFILES = sched.h $(SUPERCLEANFILES) - -clean: - $(RM) -fr readline -distclean: - $(RM) -fr readline +DISTCLEANFILES = sched.h $(CLEANFILES) all-local: my_config.h diff --git a/innobase/include/rem0rec.ic b/innobase/include/rem0rec.ic index ca69b9ca871..366f1c3f77d 100644 --- a/innobase/include/rem0rec.ic +++ b/innobase/include/rem0rec.ic @@ -526,7 +526,7 @@ bits of a record. (Only compact records have status bits.) */ UNIV_INLINE ulint rec_get_info_and_status_bits( -/*==============*/ +/*=========================*/ /* out: info bits */ rec_t* rec, /* in: physical record */ ibool comp) /* in: TRUE=compact page format */ @@ -550,7 +550,7 @@ bits of a record. (Only compact records have status bits.) */ UNIV_INLINE void rec_set_info_and_status_bits( -/*==============*/ +/*=========================*/ rec_t* rec, /* in: physical record */ ibool comp, /* in: TRUE=compact page format */ ulint bits) /* in: info bits */ diff --git a/innobase/include/trx0trx.h b/innobase/include/trx0trx.h index 76b051105de..b63afdd526c 100644 --- a/innobase/include/trx0trx.h +++ b/innobase/include/trx0trx.h @@ -383,7 +383,9 @@ struct trx_struct{ dulint commit_lsn; /* lsn at the time of the commit */ ibool dict_operation; /* TRUE if the trx is used to create a table, create an index, or drop a - table */ + table. This is a hint that the table + may need to be dropped in crash + recovery. */ dulint table_id; /* table id if the preceding field is TRUE */ /*------------------------------*/ diff --git a/innobase/row/row0mysql.c b/innobase/row/row0mysql.c index 6aaa0cbcf1b..2c4eebedaf7 100644 --- a/innobase/row/row0mysql.c +++ b/innobase/row/row0mysql.c @@ -2561,17 +2561,6 @@ do not allow the TRUNCATE. We also reserve the data dictionary latch. */ goto funct_exit; } - if (table->n_mysql_handles_opened > 1) { - ut_print_timestamp(stderr); -fputs(" InnoDB: Warning: MySQL is trying to truncate table ", stderr); - ut_print_name(stderr, trx, table->name); - fputs("\n" -"InnoDB: though there are still open handles to it.\n", stderr); - err = DB_ERROR; - - goto funct_exit; - } - /* TODO: could we replace the counter n_foreign_key_checks_running with lock checks on the table? Acquire here an exclusive lock on the table, and rewrite lock0lock.c and the lock wait in srv0srv.c so that @@ -2594,7 +2583,6 @@ fputs(" InnoDB: Warning: MySQL is trying to truncate table ", stderr); lock_reset_all_on_table(table); - trx->dict_operation = TRUE; trx->table_id = table->id; /* scan SYS_INDEXES for all indexes of the table */ diff --git a/libmysql/Makefile.am b/libmysql/Makefile.am index 91ee5e66c83..0670a0befa8 100644 --- a/libmysql/Makefile.am +++ b/libmysql/Makefile.am @@ -24,7 +24,7 @@ target = libmysqlclient.la target_defs = -DUNDEF_THREADS_HACK -DDONT_USE_RAID @LIB_EXTRA_CCFLAGS@ LIBS = @CLIENT_LIBS@ INCLUDES = -I$(top_srcdir)/include $(openssl_includes) @ZLIB_INCLUDES@ \ - -I$(top_srcdir)/extra + -I$(top_builddir)/include include $(srcdir)/Makefile.shared diff --git a/libmysql_r/Makefile.am b/libmysql_r/Makefile.am index e8c576ca2b1..b83ee36dd39 100644 --- a/libmysql_r/Makefile.am +++ b/libmysql_r/Makefile.am @@ -26,7 +26,7 @@ LIBS = @LIBS@ @ZLIB_LIBS@ @openssl_libs@ INCLUDES = @MT_INCLUDES@ \ -I$(top_srcdir)/include $(openssl_includes) @ZLIB_INCLUDES@ \ - -I$(top_srcdir)/extra + -I$(top_builddir)/include ## automake barfs if you don't use $(srcdir) or $(top_srcdir) in include include $(top_srcdir)/libmysql/Makefile.shared diff --git a/libmysqld/Makefile.am b/libmysqld/Makefile.am index 4cd53216434..2f90d22f990 100644 --- a/libmysqld/Makefile.am +++ b/libmysqld/Makefile.am @@ -28,7 +28,7 @@ DEFS = -DEMBEDDED_LIBRARY -DMYSQL_SERVER \ INCLUDES= @MT_INCLUDES@ @bdb_includes@ -I$(top_srcdir)/include \ -I$(top_srcdir)/sql -I$(top_srcdir)/sql/examples \ -I$(top_srcdir)/regex \ - -I$(top_srcdir)/extra \ + -I$(top_builddir)/include \ $(openssl_includes) @ZLIB_INCLUDES@ noinst_LIBRARIES = libmysqld_int.a diff --git a/libmysqld/examples/Makefile.am b/libmysqld/examples/Makefile.am index d70d7330e55..bd18e7154aa 100644 --- a/libmysqld/examples/Makefile.am +++ b/libmysqld/examples/Makefile.am @@ -1,7 +1,8 @@ -noinst_PROGRAMS = mysql -bin_PROGRAMS = mysqltest_embedded mysql_client_test_embedded -client_sources = $(mysqltest_embedded_SOURCES) $(mysql_SOURCES) -tests_sources= $(mysql_client_test_embedded_SOURCES) +noinst_PROGRAMS = mysql +bin_PROGRAMS = mysqltest_embedded mysql_client_test_embedded +client_sources = $(mysqltest_embedded_SOURCES) $(mysql_SOURCES) +tests_sources = $(mysql_client_test_embedded_SOURCES) +CLEANFILES = $(client_sources) $(tests_sources) link_sources: for f in $(client_sources); do \ @@ -16,7 +17,7 @@ link_sources: DEFS = -DEMBEDDED_LIBRARY INCLUDES = @MT_INCLUDES@ -I$(top_srcdir)/include -I$(srcdir) \ -I$(top_srcdir) -I$(top_srcdir)/client -I$(top_srcdir)/regex \ - -I$(top_srcdir)/extra $(openssl_includes) + -I$(top_builddir)/include $(openssl_includes) LIBS = @LIBS@ @WRAPLIBS@ @CLIENT_LIBS@ LDADD = @CLIENT_EXTRA_LDFLAGS@ ../libmysqld.a @innodb_system_libs@ @LIBDL@ $(CXXLDFLAGS) @@ -31,9 +32,5 @@ mysql_LDADD = @readline_link@ @TERMCAP_LIB@ $(LDADD) mysql_client_test_embedded_LINK = $(CXXLINK) mysql_client_test_embedded_SOURCES = mysql_client_test.c -clean: - rm -f $(client_sources) - rm -f $(tests_sources) - # Don't update the files from bitkeeper %::SCCS/s.% diff --git a/mysql-test/r/ndb_index_ordered.result b/mysql-test/r/ndb_index_ordered.result index 7558e5cdb11..9aa7559d660 100644 --- a/mysql-test/r/ndb_index_ordered.result +++ b/mysql-test/r/ndb_index_ordered.result @@ -432,16 +432,16 @@ index(ye), index(ti), index(ts) ) engine=ndb; -insert into t1 (pk,dt,da,ye,ti) values -(1, '1901-05-05 23:00:59', '1901-05-05', '1901', '23:00:59'), -(2, '1912-09-05 13:00:59', '1912-09-05', '1912', '13:00:59'), -(3, '1945-12-31 00:00:00', '1945-12-31', '1945', '00:00:00'), -(4, '1955-12-31 00:00:00', '1955-12-31', '1955', '00:00:00'), -(5, '1963-06-06 06:06:06', '1963-06-06', '1963', '06:06:06'), -(6, '1993-06-06 06:06:06', '1993-06-06', '1993', '06:06:06'), -(7, '2001-01-01 10:11:10', '2001-01-01', '2001', '10:11:10'), -(8, '2001-01-01 10:11:11', '2001-01-01', '2001', '10:11:11'), -(9, '2005-01-31 23:59:59', '2005-01-31', '2005', '23:59:59'); +insert into t1 (pk,dt,da,ye,ti,ts) values +(1, '1901-05-05 23:00:59', '1901-05-05', '1901', '23:00:59', '2001-01-01 23:00:59'), +(2, '1912-09-05 13:00:59', '1912-09-05', '1912', '13:00:59', '2001-01-01 13:00:59'), +(3, '1945-12-31 00:00:00', '1945-12-31', '1945', '00:00:00', '2001-01-01 00:00:00'), +(4, '1955-12-31 00:00:00', '1955-12-31', '1955', '00:00:00', '2001-01-01 00:00:00'), +(5, '1963-06-06 06:06:06', '1963-06-06', '1963', '06:06:06', '2001-01-01 06:06:06'), +(6, '1993-06-06 06:06:06', '1993-06-06', '1993', '06:06:06', '2001-01-01 06:06:06'), +(7, '2001-01-01 10:11:10', '2001-01-01', '2001', '10:11:10', '2001-01-01 10:11:10'), +(8, '2001-01-01 10:11:11', '2001-01-01', '2001', '10:11:11', '2001-01-01 10:11:11'), +(9, '2005-01-31 23:59:59', '2005-01-31', '2005', '23:59:59', '2001-01-01 23:59:59'); select count(*)-9 from t1 use index (dt) where dt > '1900-01-01 00:00:00'; count(*)-9 0 @@ -529,6 +529,30 @@ count(*)-8 select count(*)-9 from t1 use index (ti) where ti <= '23:59:59'; count(*)-9 0 +select count(*)-9 from t1 use index (ts) where ts >= '2001-01-01 00:00:00'; +count(*)-9 +0 +select count(*)-7 from t1 use index (ts) where ts > '2001-01-01 00:00:00'; +count(*)-7 +0 +select count(*)-7 from t1 use index (ts) where ts > '2001-01-01 05:05:05'; +count(*)-7 +0 +select count(*)-5 from t1 use index (ts) where ts > '2001-01-01 06:06:06'; +count(*)-5 +0 +select count(*)-5 from t1 use index (ts) where ts < '2001-01-01 10:11:11'; +count(*)-5 +0 +select count(*)-6 from t1 use index (ts) where ts <= '2001-01-01 10:11:11'; +count(*)-6 +0 +select count(*)-8 from t1 use index (ts) where ts < '2001-01-01 23:59:59'; +count(*)-8 +0 +select count(*)-9 from t1 use index (ts) where ts <= '2001-01-01 23:59:59'; +count(*)-9 +0 drop table t1; create table t1(a int primary key, b int not null, index(b)); insert into t1 values (1,1), (2,2); diff --git a/mysql-test/t/ndb_index_ordered.test b/mysql-test/t/ndb_index_ordered.test index 1e70eac181e..bea21f65381 100644 --- a/mysql-test/t/ndb_index_ordered.test +++ b/mysql-test/t/ndb_index_ordered.test @@ -220,16 +220,16 @@ create table t1 ( index(ts) ) engine=ndb; -insert into t1 (pk,dt,da,ye,ti) values - (1, '1901-05-05 23:00:59', '1901-05-05', '1901', '23:00:59'), - (2, '1912-09-05 13:00:59', '1912-09-05', '1912', '13:00:59'), - (3, '1945-12-31 00:00:00', '1945-12-31', '1945', '00:00:00'), - (4, '1955-12-31 00:00:00', '1955-12-31', '1955', '00:00:00'), - (5, '1963-06-06 06:06:06', '1963-06-06', '1963', '06:06:06'), - (6, '1993-06-06 06:06:06', '1993-06-06', '1993', '06:06:06'), - (7, '2001-01-01 10:11:10', '2001-01-01', '2001', '10:11:10'), - (8, '2001-01-01 10:11:11', '2001-01-01', '2001', '10:11:11'), - (9, '2005-01-31 23:59:59', '2005-01-31', '2005', '23:59:59'); +insert into t1 (pk,dt,da,ye,ti,ts) values + (1, '1901-05-05 23:00:59', '1901-05-05', '1901', '23:00:59', '2001-01-01 23:00:59'), + (2, '1912-09-05 13:00:59', '1912-09-05', '1912', '13:00:59', '2001-01-01 13:00:59'), + (3, '1945-12-31 00:00:00', '1945-12-31', '1945', '00:00:00', '2001-01-01 00:00:00'), + (4, '1955-12-31 00:00:00', '1955-12-31', '1955', '00:00:00', '2001-01-01 00:00:00'), + (5, '1963-06-06 06:06:06', '1963-06-06', '1963', '06:06:06', '2001-01-01 06:06:06'), + (6, '1993-06-06 06:06:06', '1993-06-06', '1993', '06:06:06', '2001-01-01 06:06:06'), + (7, '2001-01-01 10:11:10', '2001-01-01', '2001', '10:11:10', '2001-01-01 10:11:10'), + (8, '2001-01-01 10:11:11', '2001-01-01', '2001', '10:11:11', '2001-01-01 10:11:11'), + (9, '2005-01-31 23:59:59', '2005-01-31', '2005', '23:59:59', '2001-01-01 23:59:59'); # datetime select count(*)-9 from t1 use index (dt) where dt > '1900-01-01 00:00:00'; @@ -268,6 +268,16 @@ select count(*)-6 from t1 use index (ti) where ti <= '10:11:11'; select count(*)-8 from t1 use index (ti) where ti < '23:59:59'; select count(*)-9 from t1 use index (ti) where ti <= '23:59:59'; +# timestamp +select count(*)-9 from t1 use index (ts) where ts >= '2001-01-01 00:00:00'; +select count(*)-7 from t1 use index (ts) where ts > '2001-01-01 00:00:00'; +select count(*)-7 from t1 use index (ts) where ts > '2001-01-01 05:05:05'; +select count(*)-5 from t1 use index (ts) where ts > '2001-01-01 06:06:06'; +select count(*)-5 from t1 use index (ts) where ts < '2001-01-01 10:11:11'; +select count(*)-6 from t1 use index (ts) where ts <= '2001-01-01 10:11:11'; +select count(*)-8 from t1 use index (ts) where ts < '2001-01-01 23:59:59'; +select count(*)-9 from t1 use index (ts) where ts <= '2001-01-01 23:59:59'; + drop table t1; # bug#7798 diff --git a/ndb/docs/Makefile.am b/ndb/docs/Makefile.am index ca826d7e178..afa91857771 100644 --- a/ndb/docs/Makefile.am +++ b/ndb/docs/Makefile.am @@ -9,7 +9,7 @@ DOXYOUT = .doxyout NDB_RELEASE = @NDB_VERSION_MAJOR@.@NDB_VERSION_MINOR@.@NDB_VERSION_BUILD@-@NDB_VERSION_STATUS@ -clean: +clean-local: rm -rf ndbapi.pdf ndbapi.html mgmapi.pdf mgmapi.html rm -rf $(DOXYTMP) $(DOXYOUT) diff --git a/ndb/include/kernel/signaldata/DictTabInfo.hpp b/ndb/include/kernel/signaldata/DictTabInfo.hpp index 6ae8a8a2985..61c043f2998 100644 --- a/ndb/include/kernel/signaldata/DictTabInfo.hpp +++ b/ndb/include/kernel/signaldata/DictTabInfo.hpp @@ -276,7 +276,9 @@ public: ExtBit = NdbSqlUtil::Type::Bit, ExtLongvarchar = NdbSqlUtil::Type::Longvarchar, ExtLongvarbinary = NdbSqlUtil::Type::Longvarbinary, - ExtTime = NdbSqlUtil::Type::Time + ExtTime = NdbSqlUtil::Type::Time, + ExtYear = NdbSqlUtil::Type::Year, + ExtTimestamp = NdbSqlUtil::Type::Timestamp }; // Attribute data interpretation @@ -389,6 +391,14 @@ public: AttributeSize = DictTabInfo::an8Bit; AttributeArraySize = 3 * AttributeExtLength; break; + case DictTabInfo::ExtYear: + AttributeSize = DictTabInfo::an8Bit; + AttributeArraySize = 1 * AttributeExtLength; + break; + case DictTabInfo::ExtTimestamp: + AttributeSize = DictTabInfo::an8Bit; + AttributeArraySize = 4 * AttributeExtLength; + break; default: return false; }; diff --git a/ndb/include/ndb_constants.h b/ndb/include/ndb_constants.h index a04afe1bd72..da3fc2cbdd8 100644 --- a/ndb/include/ndb_constants.h +++ b/ndb/include/ndb_constants.h @@ -61,7 +61,9 @@ #define NDB_TYPE_LONG_VARCHAR 23 #define NDB_TYPE_LONG_VARBINARY 24 #define NDB_TYPE_TIME 25 +#define NDB_TYPE_YEAR 26 +#define NDB_TYPE_TIMESTAMP 27 -#define NDB_TYPE_MAX 26 +#define NDB_TYPE_MAX 28 #endif diff --git a/ndb/include/ndbapi/NdbDictionary.hpp b/ndb/include/ndbapi/NdbDictionary.hpp index 80c0831f675..91cfc0cb22a 100644 --- a/ndb/include/ndbapi/NdbDictionary.hpp +++ b/ndb/include/ndbapi/NdbDictionary.hpp @@ -196,7 +196,9 @@ public: Bit = NDB_TYPE_BIT, ///< Bit, length specifies no of bits Longvarchar = NDB_TYPE_LONG_VARCHAR, ///< Length bytes: 2, little-endian Longvarbinary = NDB_TYPE_LONG_VARBINARY, ///< Length bytes: 2, little-endian - Time = NDB_TYPE_TIME ///< Time without date + Time = NDB_TYPE_TIME, ///< Time without date + Year = NDB_TYPE_YEAR, ///< Year 1901-2155 (1 byte) + Timestamp = NDB_TYPE_TIMESTAMP ///< Unix time }; /** diff --git a/ndb/include/ndbapi/NdbScanFilter.hpp b/ndb/include/ndbapi/NdbScanFilter.hpp index 5f214451321..7c575169dc1 100644 --- a/ndb/include/ndbapi/NdbScanFilter.hpp +++ b/ndb/include/ndbapi/NdbScanFilter.hpp @@ -53,7 +53,7 @@ public: COND_GE = 2, ///< upper bound COND_GT = 3, ///< upper bound, strict COND_EQ = 4, ///< equality - COND_NE = 5 + COND_NE = 5 ///< not equal }; /** diff --git a/ndb/include/ndbapi/ndb_opt_defaults.h b/ndb/include/ndbapi/ndb_opt_defaults.h index 63b673ed60d..d03a9dcc36f 100644 --- a/ndb/include/ndbapi/ndb_opt_defaults.h +++ b/ndb/include/ndbapi/ndb_opt_defaults.h @@ -17,11 +17,7 @@ #ifndef NDB_OPT_DEFAULTS_H #define NDB_OPT_DEFAULTS_H -#ifdef SIGRTMIN -#define OPT_NDB_SHM_SIGNUM_DEFAULT SIGRTMIN+2 -#else #define OPT_NDB_SHM_SIGNUM_DEFAULT 0 -#endif #define OPT_NDB_SHM_DEFAULT 0 #endif diff --git a/ndb/include/util/NdbSqlUtil.hpp b/ndb/include/util/NdbSqlUtil.hpp index 75e2a819174..a8a2979558a 100644 --- a/ndb/include/util/NdbSqlUtil.hpp +++ b/ndb/include/util/NdbSqlUtil.hpp @@ -92,7 +92,9 @@ public: Bit = NDB_TYPE_BIT, Longvarchar = NDB_TYPE_LONG_VARCHAR, Longvarbinary = NDB_TYPE_LONG_VARBINARY, - Time = NDB_TYPE_TIME + Time = NDB_TYPE_TIME, + Year = NDB_TYPE_YEAR, + Timestamp = NDB_TYPE_TIMESTAMP }; Enum m_typeId; // redundant Cmp* m_cmp; // comparison method @@ -161,6 +163,8 @@ private: static Cmp cmpLongvarchar; static Cmp cmpLongvarbinary; static Cmp cmpTime; + static Cmp cmpYear; + static Cmp cmpTimestamp; }; #endif diff --git a/ndb/src/common/util/NdbSqlUtil.cpp b/ndb/src/common/util/NdbSqlUtil.cpp index 82f99d0e7fd..d5f06f119ee 100644 --- a/ndb/src/common/util/NdbSqlUtil.cpp +++ b/ndb/src/common/util/NdbSqlUtil.cpp @@ -179,6 +179,14 @@ NdbSqlUtil::m_typeList[] = { { Type::Time, cmpTime + }, + { + Type::Year, + cmpYear + }, + { + Type::Timestamp, + cmpTimestamp } }; @@ -670,6 +678,40 @@ NdbSqlUtil::cmpLongvarbinary(const void* info, const void* p1, unsigned n1, cons return CmpUnknown; } +int +NdbSqlUtil::cmpYear(const void* info, const void* p1, unsigned n1, const void* p2, unsigned n2, bool full) +{ + if (n2 >= sizeof(Uint8)) { + Uint8 v1, v2; + memcpy(&v1, p1, sizeof(Uint8)); + memcpy(&v2, p2, sizeof(Uint8)); + if (v1 < v2) + return -1; + if (v1 > v2) + return +1; + return 0; + } + assert(! full); + return CmpUnknown; +} + +int +NdbSqlUtil::cmpTimestamp(const void* info, const void* p1, unsigned n1, const void* p2, unsigned n2, bool full) +{ + if (n2 >= sizeof(Uint32)) { + Uint32 v1, v2; + memcpy(&v1, p1, sizeof(Uint32)); + memcpy(&v2, p2, sizeof(Uint32)); + if (v1 < v2) + return -1; + if (v1 > v2) + return +1; + return 0; + } + assert(! full); + return CmpUnknown; +} + // check charset bool diff --git a/ndb/src/ndbapi/NdbDictionary.cpp b/ndb/src/ndbapi/NdbDictionary.cpp index 93a82e4bc83..346f5de9eb5 100644 --- a/ndb/src/ndbapi/NdbDictionary.cpp +++ b/ndb/src/ndbapi/NdbDictionary.cpp @@ -980,6 +980,12 @@ operator<<(NdbOut& out, const NdbDictionary::Column& col) case NdbDictionary::Column::Time: out << "Time"; break; + case NdbDictionary::Column::Year: + out << "Year"; + break; + case NdbDictionary::Column::Timestamp: + out << "Timestamp"; + break; case NdbDictionary::Column::Undefined: out << "Undefined"; break; diff --git a/ndb/src/ndbapi/NdbDictionaryImpl.cpp b/ndb/src/ndbapi/NdbDictionaryImpl.cpp index b86a7ada380..a089a818fb5 100644 --- a/ndb/src/ndbapi/NdbDictionaryImpl.cpp +++ b/ndb/src/ndbapi/NdbDictionaryImpl.cpp @@ -144,6 +144,8 @@ NdbColumnImpl::init(Type t) m_cs = default_cs; break; case Time: + case Year: + case Timestamp: m_precision = 0; m_scale = 0; m_length = 1; diff --git a/ndb/src/ndbapi/NdbRecAttr.cpp b/ndb/src/ndbapi/NdbRecAttr.cpp index 30ba5c112fa..85b08c0cfa4 100644 --- a/ndb/src/ndbapi/NdbRecAttr.cpp +++ b/ndb/src/ndbapi/NdbRecAttr.cpp @@ -178,10 +178,11 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r) return out; } - if (r.arraySize() > 1) + uint length = r.getColumn()->getLength(); + if (length > 1) out << "["; - for (Uint32 j = 0; j < r.arraySize(); j++) + for (Uint32 j = 0; j < length; j++) { if (j > 0) out << " "; @@ -221,13 +222,13 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r) break; case NdbDictionary::Column::Char: ndbrecattr_print_string(out,"Char",r.aRef(),r.arraySize()); - j = r.arraySize(); + j = length; break; case NdbDictionary::Column::Varchar: { unsigned len = *(const unsigned char*)r.aRef(); ndbrecattr_print_string(out,"Varchar", r.aRef()+1,len); - j = r.arraySize(); + j = length; } break; case NdbDictionary::Column::Float: @@ -236,6 +237,86 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r) case NdbDictionary::Column::Double: out << r.double_value(); break; + // for dates cut-and-paste from field.cc + case NdbDictionary::Column::Datetime: + { + ulonglong tmp=r.u_64_value(); + long part1,part2,part3; + part1=(long) (tmp/LL(1000000)); + part2=(long) (tmp - (ulonglong) part1*LL(1000000)); + char buf[40]; + char* pos=(char*) buf+19; + *pos--=0; + *pos--= (char) ('0'+(char) (part2%10)); part2/=10; + *pos--= (char) ('0'+(char) (part2%10)); part3= (int) (part2 / 10); + *pos--= ':'; + *pos--= (char) ('0'+(char) (part3%10)); part3/=10; + *pos--= (char) ('0'+(char) (part3%10)); part3/=10; + *pos--= ':'; + *pos--= (char) ('0'+(char) (part3%10)); part3/=10; + *pos--= (char) ('0'+(char) part3); + *pos--= '/'; + *pos--= (char) ('0'+(char) (part1%10)); part1/=10; + *pos--= (char) ('0'+(char) (part1%10)); part1/=10; + *pos--= '-'; + *pos--= (char) ('0'+(char) (part1%10)); part1/=10; + *pos--= (char) ('0'+(char) (part1%10)); part3= (int) (part1/10); + *pos--= '-'; + *pos--= (char) ('0'+(char) (part3%10)); part3/=10; + *pos--= (char) ('0'+(char) (part3%10)); part3/=10; + *pos--= (char) ('0'+(char) (part3%10)); part3/=10; + *pos=(char) ('0'+(char) part3); + out << buf; + } + break; + case NdbDictionary::Column::Date: + { + uint32 tmp=(uint32) uint3korr(r.aRef()); + int part; + char buf[40]; + char *pos=(char*) buf+10; + *pos--=0; + part=(int) (tmp & 31); + *pos--= (char) ('0'+part%10); + *pos--= (char) ('0'+part/10); + *pos--= '-'; + part=(int) (tmp >> 5 & 15); + *pos--= (char) ('0'+part%10); + *pos--= (char) ('0'+part/10); + *pos--= '-'; + part=(int) (tmp >> 9); + *pos--= (char) ('0'+part%10); part/=10; + *pos--= (char) ('0'+part%10); part/=10; + *pos--= (char) ('0'+part%10); part/=10; + *pos= (char) ('0'+part); + out << buf; + } + break; + case NdbDictionary::Column::Time: + { + long tmp=(long) sint3korr(r.aRef()); + int hour=(uint) (tmp/10000); + int minute=(uint) (tmp/100 % 100); + int second=(uint) (tmp % 100); + char buf[40]; + sprintf(buf, "%02d:%02d:%02d", hour, minute, second); + out << buf; + } + break; + case NdbDictionary::Column::Year: + { + uint year = 1900 + r.u_char_value(); + char buf[40]; + sprintf(buf, "%04d", year); + out << buf; + } + break; + case NdbDictionary::Column::Timestamp: + { + time_t time = r.u_32_value(); + out << (uint)time; + } + break; case NdbDictionary::Column::Blob: { const NdbBlob::Head* h = (const NdbBlob::Head*)r.aRef(); @@ -244,7 +325,7 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r) unsigned n = r.arraySize() - sizeof(*h); for (unsigned k = 0; k < n && k < h->length; k++) out.print("%02X", (int)p[k]); - j = r.arraySize(); + j = length; } break; case NdbDictionary::Column::Text: @@ -255,26 +336,26 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r) unsigned n = r.arraySize() - sizeof(*h); for (unsigned k = 0; k < n && k < h->length; k++) out.print("%c", (int)p[k]); - j = r.arraySize(); + j = length; } break; case NdbDictionary::Column::Longvarchar: { unsigned len = uint2korr(r.aRef()); ndbrecattr_print_string(out,"Longvarchar", r.aRef()+2,len); - j = r.arraySize(); + j = length; } break; default: /* no print functions for the rest, just print type */ out << (int) r.getType(); - j = r.arraySize(); + j = length; if (j > 1) out << " " << j << " times"; break; } } - if (r.arraySize() > 1) + if (length > 1) { out << "]"; } diff --git a/ndb/test/include/NdbSchemaOp.hpp b/ndb/test/include/NdbSchemaOp.hpp index e2fb4015b88..77e704c0e5c 100644 --- a/ndb/test/include/NdbSchemaOp.hpp +++ b/ndb/test/include/NdbSchemaOp.hpp @@ -575,10 +575,6 @@ convertColumnTypeToAttrType(NdbDictionary::Column::Type _type) case NdbDictionary::Column::Binary: case NdbDictionary::Column::Varbinary: return String; - case NdbDictionary::Column::Datetime: - case NdbDictionary::Column::Date: - case NdbDictionary::Column::Time: - case NdbDictionary::Column::Undefined: default: return NoAttrTypeDef; } diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 71b70fc0e4a..221fab13635 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -90,7 +90,7 @@ CLEANFILES = @server_scripts@ \ fill_help_tables \ mysql_create_system_tables -SUPERCLEANFILES = mysqlbug +DISTCLEANFILES = mysqlbug # We want the right version and configure comand line in mysqlbug mysqlbug: ${top_builddir}/config.status mysqlbug.sh diff --git a/server-tools/instance-manager/Makefile.am b/server-tools/instance-manager/Makefile.am index c2bf501eca7..c9c9009a8ec 100644 --- a/server-tools/instance-manager/Makefile.am +++ b/server-tools/instance-manager/Makefile.am @@ -14,7 +14,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -INCLUDES= -I$(top_srcdir)/include -I$(top_srcdir)/extra +INCLUDES= -I$(top_srcdir)/include -I$(top_builddir)/include DEFS= -DMYSQL_INSTANCE_MANAGER -DMYSQL_SERVER diff --git a/sql/Makefile.am b/sql/Makefile.am index 8ff55898ba4..3c520ac971c 100644 --- a/sql/Makefile.am +++ b/sql/Makefile.am @@ -22,7 +22,7 @@ MYSQLBASEdir= $(prefix) INCLUDES = @MT_INCLUDES@ @ZLIB_INCLUDES@ \ @bdb_includes@ @innodb_includes@ @ndbcluster_includes@ \ -I$(top_srcdir)/include -I$(top_srcdir)/regex \ - -I$(srcdir) $(openssl_includes) -I$(top_srcdir)/extra + -I$(srcdir) $(openssl_includes) -I$(top_builddir)/include WRAPLIBS= @WRAPLIBS@ SUBDIRS = share libexec_PROGRAMS = mysqld @@ -115,6 +115,7 @@ DEFS = -DMYSQL_SERVER \ # Don't put lex_hash.h in BUILT_SOURCES as this will give infinite recursion BUILT_SOURCES = sql_yacc.cc sql_yacc.h EXTRA_DIST = udf_example.cc $(BUILT_SOURCES) +DISTCLEANFILES = lex_hash.h AM_YFLAGS = -d mysql_tzinfo_to_sql.cc: @@ -160,8 +161,5 @@ sql_lex.o: lex_hash.h udf_example.so: udf_example.cc $(CXXCOMPILE) -shared -o $@ $< -distclean: - rm -f lex_hash.h - # Don't update the files from bitkeeper %::SCCS/s.% diff --git a/sql/ha_innodb.cc b/sql/ha_innodb.cc index 18ab6f42d28..01580586bf6 100644 --- a/sql/ha_innodb.cc +++ b/sql/ha_innodb.cc @@ -5787,11 +5787,12 @@ ha_innobase::store_lock( if (lock_type != TL_IGNORE && lock.type == TL_UNLOCK) { /* If we are not doing a LOCK TABLE or DISCARD/IMPORT - TABLESPACE, then allow multiple writers */ + TABLESPACE or TRUNCATE TABLE, then allow multiple writers */ if ((lock_type >= TL_WRITE_CONCURRENT_INSERT && lock_type <= TL_WRITE) && !thd->in_lock_tables - && !thd->tablespace_op) { + && !thd->tablespace_op + && thd->lex->sql_command != SQLCOM_TRUNCATE) { lock_type = TL_WRITE_ALLOW_WRITE; } diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index cfd1698ae2d..f2b159353e3 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -3472,14 +3472,14 @@ static int create_ndb_column(NDBCOL &col, col.setLength(1); break; // Date types - case MYSQL_TYPE_TIMESTAMP: - col.setType(NDBCOL::Unsigned); - col.setLength(1); - break; case MYSQL_TYPE_DATETIME: col.setType(NDBCOL::Datetime); col.setLength(1); break; + case MYSQL_TYPE_DATE: // ? + col.setType(NDBCOL::Char); + col.setLength(field->pack_length()); + break; case MYSQL_TYPE_NEWDATE: col.setType(NDBCOL::Date); col.setLength(1); @@ -3488,10 +3488,13 @@ static int create_ndb_column(NDBCOL &col, col.setType(NDBCOL::Time); col.setLength(1); break; - case MYSQL_TYPE_DATE: // ? - case MYSQL_TYPE_YEAR: - col.setType(NDBCOL::Char); - col.setLength(field->pack_length()); + case MYSQL_TYPE_YEAR: + col.setType(NDBCOL::Year); + col.setLength(1); + break; + case MYSQL_TYPE_TIMESTAMP: + col.setType(NDBCOL::Timestamp); + col.setLength(1); break; // Char types case MYSQL_TYPE_STRING: diff --git a/sql/share/Makefile.am b/sql/share/Makefile.am index cfbbb36c489..608bbdb7ae6 100644 --- a/sql/share/Makefile.am +++ b/sql/share/Makefile.am @@ -14,10 +14,11 @@ dist-hook: all: english/errmsg.sys # Use the english errmsg.sys as a flag that all errmsg.sys needs to be -# created. Normally these are created by extra/Makefile.am +# created. Normally these are created by extra/Makefile english/errmsg.sys: errmsg.txt - $(top_builddir)/extra/comp_err --charset=$(srcdir)/charsets --out-dir=$(top_builddir)/sql/share/ --header_file=$(top_builddir)/extra/mysqld_error.h --state_file=$(top_builddir)/extra/sql_state.h --in_file=errmsg.txt + rm $(top_builddir)/include/mysqld_error.h + (cd $(top_builddir)/extra && $(MAKE)) install-data-local: for lang in @AVAILABLE_LANGUAGES@; \ diff --git a/sql/sql_show.cc b/sql/sql_show.cc index defa99f3a36..e9126871045 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -3191,9 +3191,10 @@ int mysql_schema_table(THD *thd, LEX *lex, TABLE_LIST *table_list) views working correctly */ - table->alias_name_used= my_strcasecmp(table_alias_charset, - table_list->schema_table_name, - table_list->alias); + if (table_list->schema_table_name) + table->alias_name_used= my_strcasecmp(table_alias_charset, + table_list->schema_table_name, + table_list->alias); table_list->table_name= (char*) table->s->table_name; table_list->table= table; table->next= thd->derived_tables; diff --git a/tools/Makefile.am b/tools/Makefile.am index 55801c22c48..1cb07f85e5a 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -16,7 +16,7 @@ # Process this file with automake to create Makefile.in INCLUDES=@MT_INCLUDES@ -I$(top_srcdir)/include $(openssl_includes) \ - -I$(top_srcdir)/extra + -I$(top_builddir)/include LDADD= @CLIENT_EXTRA_LDFLAGS@ @openssl_libs@ \ $(top_builddir)/libmysql_r/libmysqlclient_r.la @ZLIB_LIBS@ bin_PROGRAMS= mysqlmanager |