summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <tomas@whalegate.ndb.mysql.com>2007-04-27 11:45:28 +0200
committerunknown <tomas@whalegate.ndb.mysql.com>2007-04-27 11:45:28 +0200
commit56c184503cdbcbbdca808b178bb0861c055c6d9c (patch)
tree3eb78469f31084eaff3e905d0317f9770846fcfd
parent11a463bbff755dfe2550a1f766a9c72e613fe15d (diff)
parentf63100e144e403c32b9536efbb0502e78b81e85f (diff)
downloadmariadb-git-56c184503cdbcbbdca808b178bb0861c055c6d9c.tar.gz
Merge whalegate.ndb.mysql.com:/home/tomas/mysql-5.0
into whalegate.ndb.mysql.com:/home/tomas/mysql-5.0-ndb sql/ha_ndbcluster.cc: Auto merged
-rwxr-xr-xBUILD/compile-pentium-debug3
-rwxr-xr-xBUILD/compile-pentium-debug-max3
-rwxr-xr-xBUILD/compile-pentium-debug-max-no-ndb3
-rwxr-xr-xBUILD/compile-pentium64-debug3
-rwxr-xr-xBUILD/compile-pentium64-debug-max3
-rw-r--r--Makefile.am4
-rw-r--r--VC++Files/mysql.sln1
-rw-r--r--configure.in92
-rw-r--r--dbug/dbug_analyze.c4
-rw-r--r--include/Makefile.am4
-rw-r--r--myisam/mi_info.c6
-rw-r--r--myisam/mi_rkey.c4
-rw-r--r--myisam/myisamdef.h1
-rw-r--r--myisammrg/myrg_rkey.c4
-rw-r--r--mysql-test/Makefile.am9
-rw-r--r--mysql-test/r/fulltext.result7
-rw-r--r--mysql-test/r/merge.result11
-rw-r--r--mysql-test/r/truncate.result26
-rw-r--r--mysql-test/t/fulltext.test10
-rw-r--r--mysql-test/t/merge.test13
-rw-r--r--mysql-test/t/sp.test3
-rw-r--r--mysql-test/t/truncate.test31
-rw-r--r--ndb/include/ndbapi/Ndb.hpp13
-rw-r--r--ndb/src/ndbapi/NdbImpl.hpp15
-rw-r--r--ndb/test/ndbapi/testScanFilter.cpp5
-rw-r--r--sql/ha_ndbcluster.cc8
-rw-r--r--sql/item_func.cc2
-rw-r--r--sql/sql_delete.cc9
-rw-r--r--sql/sql_lex.cc1
29 files changed, 187 insertions, 111 deletions
diff --git a/BUILD/compile-pentium-debug b/BUILD/compile-pentium-debug
index 7957caead29..e31cb59a8a4 100755
--- a/BUILD/compile-pentium-debug
+++ b/BUILD/compile-pentium-debug
@@ -1,7 +1,8 @@
#! /bin/sh
path=`dirname $0`
-. "$path/SETUP.sh" $@ --with-debug=full
+set -- "$@" --with-debug=full
+. "$path/SETUP.sh"
extra_flags="$pentium_cflags $debug_cflags"
c_warnings="$c_warnings $debug_extra_warnings"
diff --git a/BUILD/compile-pentium-debug-max b/BUILD/compile-pentium-debug-max
index a69513ac6bb..56e24617abb 100755
--- a/BUILD/compile-pentium-debug-max
+++ b/BUILD/compile-pentium-debug-max
@@ -1,7 +1,8 @@
#! /bin/sh
path=`dirname $0`
-. "$path/SETUP.sh" $@ --with-debug=full
+set -- "$@" --with-debug=full
+. "$path/SETUP.sh"
extra_flags="$pentium_cflags $debug_cflags $max_cflags"
c_warnings="$c_warnings $debug_extra_warnings"
diff --git a/BUILD/compile-pentium-debug-max-no-ndb b/BUILD/compile-pentium-debug-max-no-ndb
index 26ec7eacc9d..92a388f9cb9 100755
--- a/BUILD/compile-pentium-debug-max-no-ndb
+++ b/BUILD/compile-pentium-debug-max-no-ndb
@@ -1,7 +1,8 @@
#! /bin/sh
path=`dirname $0`
-. "$path/SETUP.sh" $@ --with-debug=full
+set -- "$@" --with-debug=full
+. "$path/SETUP.sh"
extra_flags="$pentium_cflags $debug_cflags $max_cflags"
c_warnings="$c_warnings $debug_extra_warnings"
diff --git a/BUILD/compile-pentium64-debug b/BUILD/compile-pentium64-debug
index 0299669f79a..1edc9827366 100755
--- a/BUILD/compile-pentium64-debug
+++ b/BUILD/compile-pentium64-debug
@@ -1,7 +1,8 @@
#! /bin/sh
path=`dirname $0`
-. "$path/SETUP.sh" $@ --with-debug=full
+set -- "$@" --with-debug=full
+. "$path/SETUP.sh"
extra_flags="$pentium64_cflags $debug_cflags"
c_warnings="$c_warnings $debug_extra_warnings"
diff --git a/BUILD/compile-pentium64-debug-max b/BUILD/compile-pentium64-debug-max
index f0745c88c90..656825d8494 100755
--- a/BUILD/compile-pentium64-debug-max
+++ b/BUILD/compile-pentium64-debug-max
@@ -1,7 +1,8 @@
#! /bin/sh
path=`dirname $0`
-. "$path/SETUP.sh" $@ --with-debug=full
+set -- "$@" --with-debug=full
+. "$path/SETUP.sh"
extra_flags="$pentium64_cflags $debug_cflags $max_cflags"
c_warnings="$c_warnings $debug_extra_warnings"
diff --git a/Makefile.am b/Makefile.am
index 9e9520c29d8..992a6f6d755 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -153,6 +153,10 @@ test-bt:
@PERL@ ./mysql-test-run.pl --force --comment=normal --report-features
-cd mysql-test ; MTR_BUILD_THREAD=auto \
@PERL@ ./mysql-test-run.pl --force --comment=ps --ps-protocol
+ -cd mysql-test ; MTR_BUILD_THREAD=auto \
+ @PERL@ ./mysql-test-run.pl --force --comment=funcs1_ps --ps-protocol --suite=funcs_1
+ -cd mysql-test ; MTR_BUILD_THREAD=auto \
+ @PERL@ ./mysql-test-run.pl --force --comment=funcs2 --suite=funcs_2
test-bt-debug:
-cd mysql-test ; MTR_BUILD_THREAD=auto \
diff --git a/VC++Files/mysql.sln b/VC++Files/mysql.sln
index 31b9232e2ec..f9b22b6dcc9 100644
--- a/VC++Files/mysql.sln
+++ b/VC++Files/mysql.sln
@@ -733,6 +733,7 @@ Global
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.Debug 98.ActiveCfg = Debug 98|Win32
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.Debug 98.Build.0 = Debug 98|Win32
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.Enterprise.ActiveCfg = Release|Win32
+ {44D9C7DC-6636-4B82-BD01-6876C64017DF}.Enterprise.Build.0 = Release|Win32
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.Enterprise Debug.ActiveCfg = Debug|Win32
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.Enterprise Debug.Build.0 = Debug|Win32
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.Enterprise GPL.ActiveCfg = Release|Win32
diff --git a/configure.in b/configure.in
index 86caf320d96..1026c855bf2 100644
--- a/configure.in
+++ b/configure.in
@@ -463,6 +463,22 @@ AC_SUBST(MAKEINDEX)
# icheck, used for ABI check
AC_PATH_PROG(ICHECK, icheck, no)
+# "icheck" is also the name of a file system check program on Tru64.
+# Verify the program found is really the interface checker.
+if test "x$ICHECK" != "xno"
+then
+ AC_MSG_CHECKING(if $ICHECK works as expected)
+ echo "int foo;" > conftest.h
+ $ICHECK --canonify -o conftest.ic conftest.h 2>/dev/null
+ if test -f "conftest.ic"
+ then
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+ ICHECK=no
+ fi
+ rm -f conftest.ic conftest.h
+fi
AC_SUBST(ICHECK)
# Lock for PS
@@ -2380,28 +2396,6 @@ AC_ARG_WITH(man,
[with_man=yes]
)
-if test X"$with_man" = Xyes
-then
- man_dirs="man"
- if test X"$have_ndbcluster" = Xyes
- then
- man1_files=`ls $srcdir/man/*.1 | sed -e 's;^.*man/;;'`
- man8_files=`ls $srcdir/man/*.8 | sed -e 's;^.*man/;;'`
- else
- man1_files=`ls $srcdir/man/*.1 | grep -v '/ndb' | sed -e 's;^.*man/;;'`
- man8_files=`ls $srcdir/man/*.8 | grep -v '/ndb' | sed -e 's;^.*man/;;'`
- fi
- man1_files=`echo $man1_files`
- man8_files=`echo $man8_files`
-else
- man_dirs=""
- man1_files=""
- man8_files=""
-fi
-AC_SUBST(man_dirs)
-AC_SUBST(man1_files)
-AC_SUBST(man8_files)
-
# Shall we build the bench code?
AC_ARG_WITH(bench,
[ --without-bench Skip building of the benchmark suite.],
@@ -2536,6 +2530,60 @@ MYSQL_CHECK_BLACKHOLEDB
MYSQL_CHECK_NDBCLUSTER
MYSQL_CHECK_FEDERATED
+# Include man pages, if desired, adapted to the configured parts.
+if test X"$with_man" = Xyes
+then
+ # First, create the list of all man pages present.
+ MANLISTFIL=manlist.$$
+ TMPLISTFIL=`echo $MANLISTFIL | sed -e 's/manlist/tmplist/'`
+ if test -f $MANLISTFIL -o -f $TMPLISTFIL
+ then
+ echo "Temp file '$MANLISTFIL' or '$TMPLISTFIL' already exists in '`pwd`' - aborting"
+ exit 1
+ fi
+ touch $MANLISTFIL $TMPLISTFIL
+
+ ls $srcdir/man/*.[[18]] > $MANLISTFIL
+
+ # Then, remove all those pages from the list which are specific to parts
+ # (table handlers, features, ...) which are not configured in this run.
+ AC_MSG_CHECKING("for man pages to remove")
+ MAN_DROP="dropping"
+ if test X"$have_ndbcluster" != Xyes
+ then
+ MAN_DROP="$MAN_DROP ndbcluster"
+ grep -v '/ndb' $MANLISTFIL > $TMPLISTFIL ; mv -f $TMPLISTFIL $MANLISTFIL
+ fi
+ if test X"$with_embedded_server" != Xyes
+ then
+ MAN_DROP="$MAN_DROP embedded"
+ grep -v 'embedded' $MANLISTFIL > $TMPLISTFIL ; mv -f $TMPLISTFIL $MANLISTFIL
+ fi
+ if test X"$have_innodb" != Xyes
+ then
+ MAN_DROP="$MAN_DROP innodb"
+ grep -v 'inno' $MANLISTFIL > $TMPLISTFIL ; mv -f $TMPLISTFIL $MANLISTFIL
+ fi
+ AC_MSG_RESULT([$MAN_DROP])
+
+ # Finally, split the man pages into sections 1 and 8.
+ # Get rid of line breaks.
+ man1_files=`sed -n -e '/\.1$/s/^.*man\///p' <$MANLISTFIL`
+ man8_files=`sed -n -e '/\.8$/s/^.*man\///p' <$MANLISTFIL`
+
+ man_dirs="man"
+ man1_files=`echo $man1_files`
+ man8_files=`echo $man8_files`
+ rm -f $MANLISTFIL $TMPLISTFIL
+else
+ man_dirs=""
+ man1_files=""
+ man8_files=""
+fi
+AC_SUBST(man_dirs)
+AC_SUBST(man1_files)
+AC_SUBST(man8_files)
+
# If we have threads generate some library functions and test programs
sql_server_dirs=
server_scripts=
diff --git a/dbug/dbug_analyze.c b/dbug/dbug_analyze.c
index 8cd0af4f7e0..3263b2ccc59 100644
--- a/dbug/dbug_analyze.c
+++ b/dbug/dbug_analyze.c
@@ -574,10 +574,12 @@ int main (int argc, char **argv)
FILE *infile;
FILE *outfile = {stdout};
-#if defined(HAVE_PTHREAD_INIT) && defined(THREAD)
+#ifdef THREAD
+#if defined(HAVE_PTHREAD_INIT)
pthread_init(); /* Must be called before DBUG_ENTER */
#endif
my_thread_global_init();
+#endif /* THREAD */
{
DBUG_ENTER ("main");
DBUG_PROCESS (argv[0]);
diff --git a/include/Makefile.am b/include/Makefile.am
index e5fac39e5ff..ccd5ac627bf 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -22,7 +22,7 @@ HEADERS_ABI = mysql.h mysql_com.h mysql_time.h \
pkginclude_HEADERS = $(HEADERS_ABI) my_dbug.h m_string.h my_sys.h \
my_xml.h mysql_embed.h \
my_pthread.h my_no_pthread.h raid.h \
- errmsg.h my_global.h my_net.h \
+ decimal.h errmsg.h my_global.h my_net.h \
my_getopt.h sslopt-longopts.h my_dir.h \
sslopt-vars.h sslopt-case.h sql_common.h keycache.h \
m_ctype.h my_attribute.h $(HEADERS_GEN)
@@ -33,7 +33,7 @@ noinst_HEADERS = config-win.h config-os2.h config-netware.h \
my_nosys.h my_alarm.h queues.h rijndael.h sha1.h \
my_aes.h my_tree.h hash.h thr_alarm.h \
thr_lock.h t_ctype.h violite.h md5.h base64.h \
- mysql_version.h.in my_handler.h my_time.h decimal.h \
+ mysql_version.h.in my_handler.h my_time.h \
my_user.h my_libwrap.h
# Remove built files and the symlinked directories
diff --git a/myisam/mi_info.c b/myisam/mi_info.c
index 0435269ed6d..b7de8e7b37d 100644
--- a/myisam/mi_info.c
+++ b/myisam/mi_info.c
@@ -57,9 +57,9 @@ int mi_status(MI_INFO *info, register MI_ISAMINFO *x, uint flag)
x->keys = share->state.header.keys;
x->check_time = share->state.check_time;
- x->mean_reclength = info->state->records ?
- (ulong) ((info->state->data_file_length-info->state->empty)/
- info->state->records) : (ulong) share->min_pack_length;
+ x->mean_reclength= x->records ?
+ (ulong) ((x->data_file_length - x->delete_length) / x->records) :
+ (ulong) share->min_pack_length;
}
if (flag & HA_STATUS_ERRKEY)
{
diff --git a/myisam/mi_rkey.c b/myisam/mi_rkey.c
index 6323c95ffd7..83259a275b1 100644
--- a/myisam/mi_rkey.c
+++ b/myisam/mi_rkey.c
@@ -49,7 +49,7 @@ int mi_rkey(MI_INFO *info, byte *buf, int inx, const byte *key, uint key_len,
key_buff=info->lastkey+info->s->base.max_key_length;
pack_key_length= key_len;
bmove(key_buff,key,key_len);
- last_used_keyseg= 0;
+ last_used_keyseg= info->s->keyinfo[inx].seg + info->last_used_keyseg;
}
else
{
@@ -61,6 +61,8 @@ int mi_rkey(MI_INFO *info, byte *buf, int inx, const byte *key, uint key_len,
key_len, &last_used_keyseg);
/* Save packed_key_length for use by the MERGE engine. */
info->pack_key_length= pack_key_length;
+ info->last_used_keyseg= (uint16) (last_used_keyseg -
+ info->s->keyinfo[inx].seg);
DBUG_EXECUTE("key",_mi_print_key(DBUG_FILE, keyinfo->seg,
key_buff, pack_key_length););
}
diff --git a/myisam/myisamdef.h b/myisam/myisamdef.h
index 0733073a7ea..1a04cbe74fc 100644
--- a/myisam/myisamdef.h
+++ b/myisam/myisamdef.h
@@ -263,6 +263,7 @@ struct st_myisam_info {
enum ha_rkey_function last_key_func; /* CONTAIN, OVERLAP, etc */
uint save_lastkey_length;
uint pack_key_length; /* For MYISAMMRG */
+ uint16 last_used_keyseg; /* For MyISAMMRG */
int errkey; /* Got last error on this key */
int lock_type; /* How database was locked */
int tmp_lock_type; /* When locked by readinfo */
diff --git a/myisammrg/myrg_rkey.c b/myisammrg/myrg_rkey.c
index f7b7f082019..0f9e9a9b822 100644
--- a/myisammrg/myrg_rkey.c
+++ b/myisammrg/myrg_rkey.c
@@ -40,12 +40,14 @@ int myrg_rkey(MYRG_INFO *info,byte *buf,int inx, const byte *key,
{
byte *key_buff;
uint pack_key_length;
+ uint16 last_used_keyseg;
MYRG_TABLE *table;
MI_INFO *mi;
int err;
DBUG_ENTER("myrg_rkey");
LINT_INIT(key_buff);
LINT_INIT(pack_key_length);
+ LINT_INIT(last_used_keyseg);
if (_myrg_init_queue(info,inx,search_flag))
DBUG_RETURN(my_errno);
@@ -60,10 +62,12 @@ int myrg_rkey(MYRG_INFO *info,byte *buf,int inx, const byte *key,
/* Get the saved packed key and packed key length. */
key_buff=(byte*) mi->lastkey+mi->s->base.max_key_length;
pack_key_length=mi->pack_key_length;
+ last_used_keyseg= mi->last_used_keyseg;
}
else
{
mi->once_flags|= USE_PACKED_KEYS;
+ mi->last_used_keyseg= last_used_keyseg;
err=mi_rkey(mi,0,inx,key_buff,pack_key_length,search_flag);
}
info->last_used_table=table+1;
diff --git a/mysql-test/Makefile.am b/mysql-test/Makefile.am
index d48b8c7dfe4..6c7207b0b2d 100644
--- a/mysql-test/Makefile.am
+++ b/mysql-test/Makefile.am
@@ -33,7 +33,7 @@ endif
benchdir_root= $(prefix)
testdir = $(benchdir_root)/mysql-test
EXTRA_SCRIPTS = mysql-test-run-shell.sh install_test_db.sh valgrind.supp $(PRESCRIPTS)
-EXTRA_DIST = $(EXTRA_SCRIPTS)
+EXTRA_DIST = $(EXTRA_SCRIPTS) suite
GENSCRIPTS = mysql-test-run-shell mysql-test-run install_test_db mtr
PRESCRIPTS = mysql-test-run.pl
test_SCRIPTS = $(GENSCRIPTS) $(PRESCRIPTS)
@@ -67,6 +67,7 @@ dist-hook:
$(INSTALL_DATA) $(srcdir)/std_data/*.MY* $(distdir)/std_data
$(INSTALL_DATA) $(srcdir)/std_data/*.cnf $(distdir)/std_data
$(INSTALL_DATA) $(srcdir)/lib/*.pl $(distdir)/lib
+ -rm -rf `find $(distdir)/suite -type d -name SCCS`
install-data-local:
$(mkinstalldirs) \
@@ -98,6 +99,12 @@ install-data-local:
$(INSTALL_DATA) $(srcdir)/std_data/*.MY* $(DESTDIR)$(testdir)/std_data
$(INSTALL_DATA) $(srcdir)/std_data/*.cnf $(DESTDIR)$(testdir)/std_data
$(INSTALL_DATA) $(srcdir)/lib/*.pl $(DESTDIR)$(testdir)/lib
+ for f in `(cd $(srcdir); find suite -type f | grep -v SCCS)`; \
+ do \
+ d=$(DESTDIR)$(testdir)/`dirname $$f`; \
+ mkdir -p $$d ; \
+ $(INSTALL_DATA) $(srcdir)/$$f $$d ; \
+ done
uninstall-local:
@RM@ -f -r $(DESTDIR)$(testdir)
diff --git a/mysql-test/r/fulltext.result b/mysql-test/r/fulltext.result
index 7c9069791fa..f6efe2411c0 100644
--- a/mysql-test/r/fulltext.result
+++ b/mysql-test/r/fulltext.result
@@ -456,3 +456,10 @@ a FORMAT(MATCH(a) AGAINST('test1 test'),6)
test1 0.685267
DEALLOCATE PREPARE stmt;
DROP TABLE t1;
+CREATE TABLE t1 (a VARCHAR(255), FULLTEXT(a));
+SELECT * FROM t1 IGNORE INDEX(a) WHERE MATCH(a) AGAINST('test');
+a
+ALTER TABLE t1 DISABLE KEYS;
+SELECT * FROM t1 WHERE MATCH(a) AGAINST('test');
+ERROR HY000: Can't find FULLTEXT index matching the column list
+DROP TABLE t1;
diff --git a/mysql-test/r/merge.result b/mysql-test/r/merge.result
index c4419d64a65..27465dd96f6 100644
--- a/mysql-test/r/merge.result
+++ b/mysql-test/r/merge.result
@@ -816,6 +816,17 @@ ALTER TABLE m1 ENGINE=MERGE UNION=(t1);
SELECT * FROM m1;
c1 c2 c3 c4 c5 c6 c7 c8 c9
DROP TABLE t1, m1;
+CREATE TABLE t1 (a VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_german2_ci,
+b INT, INDEX(a,b));
+CREATE TABLE t2 LIKE t1;
+CREATE TABLE t3 LIKE t1;
+ALTER TABLE t3 ENGINE=MERGE UNION=(t1,t2);
+INSERT INTO t1 VALUES ('ss',1);
+INSERT INTO t2 VALUES ('ss',2),(0xDF,2);
+SELECT COUNT(*) FROM t3 WHERE a=0xDF AND b=2;
+COUNT(*)
+2
+DROP TABLE t1,t2,t3;
create table t1 (b bit(1));
create table t2 (b bit(1));
create table tm (b bit(1)) engine = merge union = (t1,t2);
diff --git a/mysql-test/r/truncate.result b/mysql-test/r/truncate.result
index 6c21db0e2b8..b194f9b7dc6 100644
--- a/mysql-test/r/truncate.result
+++ b/mysql-test/r/truncate.result
@@ -57,26 +57,6 @@ create table t1 (s1 int);
insert into t1 (s1) values (1), (2), (3), (4), (5);
create view v1 as select * from t1;
truncate table v1;
-select count(*) from t1;
-count(*)
-0
-insert into t1 (s1) values (1), (2), (3), (4), (5);
-create view v2 as select * from t1 where s1 > 3;
-truncate table v2;
-select * from t1;
-s1
-1
-2
-3
-select * from v2;
-s1
-delete from t1;
-create table t2 (s1 int, s2 int);
-create view v3 as select a.s1, b.s2 from t1 a join t2 b on a.s1 = b.s1 where a.s1 > 3;
-truncate table v3;
-ERROR HY000: Can not delete from join view 'test.v3'
-create view v4 as select * from t1 limit 1,1;
-truncate table v4;
-ERROR HY000: The target table v4 of the TRUNCATE is not updatable
-drop view v1, v2, v3, v4;
-drop table t1, t2;
+ERROR 42S02: Table 'test.v1' doesn't exist
+drop view v1;
+drop table t1;
diff --git a/mysql-test/t/fulltext.test b/mysql-test/t/fulltext.test
index 0f7835e9e7e..44375562307 100644
--- a/mysql-test/t/fulltext.test
+++ b/mysql-test/t/fulltext.test
@@ -377,4 +377,14 @@ EXECUTE stmt;
DEALLOCATE PREPARE stmt;
DROP TABLE t1;
+#
+# BUG#25951 - ignore/use index does not work with fulltext
+#
+CREATE TABLE t1 (a VARCHAR(255), FULLTEXT(a));
+SELECT * FROM t1 IGNORE INDEX(a) WHERE MATCH(a) AGAINST('test');
+ALTER TABLE t1 DISABLE KEYS;
+--error 1191
+SELECT * FROM t1 WHERE MATCH(a) AGAINST('test');
+DROP TABLE t1;
+
# End of 4.1 tests
diff --git a/mysql-test/t/merge.test b/mysql-test/t/merge.test
index 490010c0a42..b3944416adc 100644
--- a/mysql-test/t/merge.test
+++ b/mysql-test/t/merge.test
@@ -447,6 +447,19 @@ ALTER TABLE m1 ENGINE=MERGE UNION=(t1);
SELECT * FROM m1;
DROP TABLE t1, m1;
+#
+# BUG#24342 - Incorrect results with query over MERGE table
+#
+CREATE TABLE t1 (a VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_german2_ci,
+ b INT, INDEX(a,b));
+CREATE TABLE t2 LIKE t1;
+CREATE TABLE t3 LIKE t1;
+ALTER TABLE t3 ENGINE=MERGE UNION=(t1,t2);
+INSERT INTO t1 VALUES ('ss',1);
+INSERT INTO t2 VALUES ('ss',2),(0xDF,2);
+SELECT COUNT(*) FROM t3 WHERE a=0xDF AND b=2;
+DROP TABLE t1,t2,t3;
+
# End of 4.1 tests
#
diff --git a/mysql-test/t/sp.test b/mysql-test/t/sp.test
index 64876ae0584..c94a526e10c 100644
--- a/mysql-test/t/sp.test
+++ b/mysql-test/t/sp.test
@@ -7075,8 +7075,11 @@ DROP FUNCTION bug5274_f2|
delimiter ;|
drop table t1,t2;
+# Disable warnings to allow test run without InnoDB
+--disable_warnings
CREATE TABLE t1 (a int auto_increment primary key) engine=MyISAM;
CREATE TABLE t2 (a int auto_increment primary key, b int) engine=innodb;
+--enable_warnings
set @a=0;
delimiter |;
diff --git a/mysql-test/t/truncate.test b/mysql-test/t/truncate.test
index c52260124cb..ba5364bd324 100644
--- a/mysql-test/t/truncate.test
+++ b/mysql-test/t/truncate.test
@@ -54,33 +54,18 @@ drop table t1;
# End of 4.1 tests
# Test for Bug#5507 "TRUNCATE should work with views"
+#
+# when it'll be fixed, the error should become 1347
+# (test.v1' is not BASE TABLE)
+#
create table t1 (s1 int);
-
insert into t1 (s1) values (1), (2), (3), (4), (5);
create view v1 as select * from t1;
+--error 1146
truncate table v1;
-select count(*) from t1;
-
-insert into t1 (s1) values (1), (2), (3), (4), (5);
-create view v2 as select * from t1 where s1 > 3;
-truncate table v2;
-select * from t1;
-select * from v2;
-delete from t1;
-
-# The following should fail
-create table t2 (s1 int, s2 int);
-create view v3 as select a.s1, b.s2 from t1 a join t2 b on a.s1 = b.s1 where a.s1 > 3;
---error 1395
-truncate table v3;
-
-# The following should fail
-create view v4 as select * from t1 limit 1,1;
---error 1288
-truncate table v4;
-
-drop view v1, v2, v3, v4;
-drop table t1, t2;
+drop view v1;
+drop table t1;
# End of 5.0 tests
+
diff --git a/ndb/include/ndbapi/Ndb.hpp b/ndb/include/ndbapi/Ndb.hpp
index 5af86cd09a8..b3c9acd4e20 100644
--- a/ndb/include/ndbapi/Ndb.hpp
+++ b/ndb/include/ndbapi/Ndb.hpp
@@ -1051,18 +1051,7 @@ class Ndb
friend class NdbDictionaryImpl;
friend class NdbDictInterface;
friend class NdbBlob;
- friend class Ndb_free_list_t<NdbRecAttr>;
- friend class Ndb_free_list_t<NdbApiSignal>;
- friend class Ndb_free_list_t<NdbLabel>;
- friend class Ndb_free_list_t<NdbBranch>;
- friend class Ndb_free_list_t<NdbSubroutine>;
- friend class Ndb_free_list_t<NdbCall>;
- friend class Ndb_free_list_t<NdbBlob>;
- friend class Ndb_free_list_t<NdbReceiver>;
- friend class Ndb_free_list_t<NdbIndexScanOperation>;
- friend class Ndb_free_list_t<NdbOperation>;
- friend class Ndb_free_list_t<NdbIndexOperation>;
- friend class Ndb_free_list_t<NdbTransaction>;
+ friend class NdbImpl;
#endif
public:
diff --git a/ndb/src/ndbapi/NdbImpl.hpp b/ndb/src/ndbapi/NdbImpl.hpp
index ec386074692..dc0a057619f 100644
--- a/ndb/src/ndbapi/NdbImpl.hpp
+++ b/ndb/src/ndbapi/NdbImpl.hpp
@@ -89,6 +89,15 @@ public:
return 0;
}
+/*
+ We need this friend accessor function to work around a HP compiler problem,
+ where template class friends are not working.
+*/
+ static inline void setNdbError(Ndb &ndb,int code){
+ ndb.theError.code = code;
+ return;
+ }
+
/**
* NOTE free lists must be _after_ theNdbObjectIdMap take
* assure that destructors are run in correct order
@@ -208,7 +217,7 @@ Ndb_free_list_t<T>::fill(Ndb* ndb, Uint32 cnt)
m_free_list = new T(ndb);
if (m_free_list == 0)
{
- ndb->theError.code = 4000;
+ NdbImpl::setNdbError(*ndb, 4000);
assert(false);
return -1;
}
@@ -218,7 +227,7 @@ Ndb_free_list_t<T>::fill(Ndb* ndb, Uint32 cnt)
T* obj= new T(ndb);
if(obj == 0)
{
- ndb->theError.code = 4000;
+ NdbImpl::setNdbError(*ndb, 4000);
assert(false);
return -1;
}
@@ -250,7 +259,7 @@ Ndb_free_list_t<T>::seize(Ndb* ndb)
}
else
{
- ndb->theError.code = 4000;
+ NdbImpl::setNdbError(*ndb, 4000);
assert(false);
}
return tmp;
diff --git a/ndb/test/ndbapi/testScanFilter.cpp b/ndb/test/ndbapi/testScanFilter.cpp
index e195c04bd93..5098d83745b 100644
--- a/ndb/test/ndbapi/testScanFilter.cpp
+++ b/ndb/test/ndbapi/testScanFilter.cpp
@@ -1,9 +1,8 @@
-/* Copyright (C) 2007, Justin He, MySQL AB
+/* Copyright (C) 2007 MySQL AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
+ the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc
index 604a5ea19e2..8701a216b8e 100644
--- a/sql/ha_ndbcluster.cc
+++ b/sql/ha_ndbcluster.cc
@@ -733,8 +733,8 @@ int ha_ndbcluster::set_ndb_value(NdbOperation *ndb_op, Field *field,
DBUG_DUMP("value", (char*)&bits, pack_len);
#ifdef WORDS_BIGENDIAN
/* store lsw first */
- bits = ((bits >> 32) & 0x00000000FFFFFFFF)
- | ((bits << 32) & 0xFFFFFFFF00000000);
+ bits = ((bits >> 32) & 0x00000000FFFFFFFFLL)
+ | ((bits << 32) & 0xFFFFFFFF00000000LL);
#endif
DBUG_RETURN(ndb_op->setValue(fieldnr, (char*)&bits, pack_len) != 0);
}
@@ -2685,10 +2685,10 @@ void ha_ndbcluster::unpack_record(byte* buf)
/* lsw is stored first */
Uint32 *buf= (Uint32 *)(*value).rec->aRef();
((Field_bit *) *field)->store((((longlong)*buf)
- & 0x000000000FFFFFFFF)
+ & 0x000000000FFFFFFFFLL)
|
((((longlong)*(buf+1)) << 32)
- & 0xFFFFFFFF00000000),
+ & 0xFFFFFFFF00000000LL),
TRUE);
#else
((Field_bit *) *field)->store((longlong)
diff --git a/sql/item_func.cc b/sql/item_func.cc
index c4279d1bd4e..503b4362e7a 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -4734,7 +4734,7 @@ bool Item_func_match::fix_index()
for (keynr=0 ; keynr < table->s->keys ; keynr++)
{
if ((table->key_info[keynr].flags & HA_FULLTEXT) &&
- (table->keys_in_use_for_query.is_set(keynr)))
+ (table->s->keys_in_use.is_set(keynr)))
{
ft_to_key[fts]=keynr;
ft_cnt[fts]=0;
diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc
index 071acb57945..bccd4d4cafe 100644
--- a/sql/sql_delete.cc
+++ b/sql/sql_delete.cc
@@ -369,8 +369,6 @@ bool mysql_prepare_delete(THD *thd, TABLE_LIST *table_list, Item **conds)
{
Item *fake_conds= 0;
SELECT_LEX *select_lex= &thd->lex->select_lex;
- const char *operation = thd->lex->sql_command == SQLCOM_TRUNCATE ?
- "TRUNCATE" : "DELETE";
DBUG_ENTER("mysql_prepare_delete");
List<Item> all_fields;
@@ -385,14 +383,14 @@ bool mysql_prepare_delete(THD *thd, TABLE_LIST *table_list, Item **conds)
DBUG_RETURN(TRUE);
if (!table_list->updatable || check_key_in_view(thd, table_list))
{
- my_error(ER_NON_UPDATABLE_TABLE, MYF(0), table_list->alias, operation);
+ my_error(ER_NON_UPDATABLE_TABLE, MYF(0), table_list->alias, "DELETE");
DBUG_RETURN(TRUE);
}
{
TABLE_LIST *duplicate;
if ((duplicate= unique_table(thd, table_list, table_list->next_global, 0)))
{
- update_non_unique_table_error(table_list, operation, duplicate);
+ update_non_unique_table_error(table_list, "DELETE", duplicate);
DBUG_RETURN(TRUE);
}
}
@@ -897,8 +895,7 @@ bool mysql_truncate(THD *thd, TABLE_LIST *table_list, bool dont_send_ok)
if (!dont_send_ok)
{
db_type table_type;
- if (mysql_frm_type(thd, path, &table_type) == FRMTYPE_VIEW)
- goto trunc_by_del;
+ mysql_frm_type(thd, path, &table_type);
if (table_type == DB_TYPE_UNKNOWN)
{
my_error(ER_NO_SUCH_TABLE, MYF(0),
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc
index 4be0aca3ea7..3be844b6761 100644
--- a/sql/sql_lex.cc
+++ b/sql/sql_lex.cc
@@ -1834,7 +1834,6 @@ bool st_lex::can_use_merged()
case SQLCOM_UPDATE_MULTI:
case SQLCOM_DELETE:
case SQLCOM_DELETE_MULTI:
- case SQLCOM_TRUNCATE:
case SQLCOM_INSERT:
case SQLCOM_INSERT_SELECT:
case SQLCOM_REPLACE: