Commit f13723ac authored by joreland@mysql.com's avatar joreland@mysql.com

Merge mysql.com:/home/jonas/src/mysql-5.0-ndb

into mysql.com:/home/jonas/src/wl2126
parents f8e8cbc6 a1a4ddad
...@@ -125,6 +125,10 @@ static TYPELIB command_typelib= ...@@ -125,6 +125,10 @@ static TYPELIB command_typelib=
static struct my_option my_long_options[] = static struct my_option my_long_options[] =
{ {
#ifdef __NETWARE__
{"autoclose", 'a', " Auto close the screen on exit for NetWare",
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
#endif
{"count", 'c', {"count", 'c',
"Number of iterations to make. This works with -i (--sleep) only.", "Number of iterations to make. This works with -i (--sleep) only.",
(gptr*) &nr_iterations, (gptr*) &nr_iterations, 0, GET_UINT, (gptr*) &nr_iterations, (gptr*) &nr_iterations, 0, GET_UINT,
...@@ -218,6 +222,11 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), ...@@ -218,6 +222,11 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
int error = 0; int error = 0;
switch(optid) { switch(optid) {
#ifdef __NETWARE__
case 'a':
setscreenmode(SCR_AUTOCLOSE_ON_EXIT); // auto close the screen /
break;
#endif
case 'c': case 'c':
opt_count_iterations= 1; opt_count_iterations= 1;
break; break;
......
...@@ -15,6 +15,6 @@ All changes that I or other people at MySQL AB have done to all files ...@@ -15,6 +15,6 @@ All changes that I or other people at MySQL AB have done to all files
in the dbug library (Mainly in dbug.c, dbug_analyze.c, dbug_long.h, in the dbug library (Mainly in dbug.c, dbug_analyze.c, dbug_long.h,
dbug.h) are put in public domain, as the rest of the dbug.c library) dbug.h) are put in public domain, as the rest of the dbug.c library)
To my knowledge, all code in dbug library are in public domain. To my knowledge, all code in dbug library is in public domain.
Michael Widenius Michael Widenius
...@@ -377,7 +377,7 @@ The factorial function is then called three times, with the arguments ...@@ -377,7 +377,7 @@ The factorial function is then called three times, with the arguments
Note that the DBUG_PRINT takes exactly Note that the DBUG_PRINT takes exactly
.B two .B two
arguments, with the second argument (a format string and list arguments, with the second argument (a format string and list
of printable values) enclosed in parenthesis. of printable values) enclosed in parentheses.
.P .P
Debug control strings consist of a header, the "-#", followed Debug control strings consist of a header, the "-#", followed
by a colon separated list of debugger arguments. by a colon separated list of debugger arguments.
...@@ -575,7 +575,7 @@ The second argument to a ...@@ -575,7 +575,7 @@ The second argument to a
.B DBUG_PRINT .B DBUG_PRINT
macro is a standard printf style macro is a standard printf style
format string and one or more arguments to print, all format string and one or more arguments to print, all
enclosed in parenthesis so that they collectively become a single macro enclosed in parentheses so that they collectively become a single macro
argument. argument.
This is how variable numbers of printf arguments are supported. This is how variable numbers of printf arguments are supported.
Also note that no explicit newline is required at the end of the format string. Also note that no explicit newline is required at the end of the format string.
...@@ -807,7 +807,7 @@ and the corresponding argument list. ...@@ -807,7 +807,7 @@ and the corresponding argument list.
Note that the format string and argument list are all one macro argument Note that the format string and argument list are all one macro argument
and and
.B must .B must
be enclosed in parenthesis. be enclosed in parentheses.
.SP 1 .SP 1
EX:\ \fCDBUG_PRINT\ ("eof",\ ("end\ of\ file\ found"));\fR EX:\ \fCDBUG_PRINT\ ("eof",\ ("end\ of\ file\ found"));\fR
.br .br
...@@ -826,7 +826,7 @@ EX: \fCDBUG_DBUG\ ("net",\ packet,\ len);\fR ...@@ -826,7 +826,7 @@ EX: \fCDBUG_DBUG\ ("net",\ packet,\ len);\fR
.LI DBUG_SETJMP\ .LI DBUG_SETJMP\
Used in place of the setjmp() function to first save the current Used in place of the setjmp() function to first save the current
debugger state and then execute the standard setjmp call. debugger state and then execute the standard setjmp call.
This allows to the debugger to restore it's state when the This allows to the debugger to restore its state when the
DBUG_LONGJMP macro is used to invoke the standard longjmp() call. DBUG_LONGJMP macro is used to invoke the standard longjmp() call.
Currently all instances of DBUG_SETJMP must occur within the Currently all instances of DBUG_SETJMP must occur within the
same function and at the same function nesting level. same function and at the same function nesting level.
......
...@@ -77,8 +77,10 @@ a b c ...@@ -77,8 +77,10 @@ a b c
3 NULL NULL 3 NULL NULL
select * from t1 use index (bc) where b IS NULL and c IS NULL order by a; select * from t1 use index (bc) where b IS NULL and c IS NULL order by a;
a b c a b c
3 NULL NULL
select * from t1 use index (bc) where b IS NULL and c = 2 order by a; select * from t1 use index (bc) where b IS NULL and c = 2 order by a;
a b c a b c
2 NULL 2
select * from t1 use index (bc) where b < 4 order by a; select * from t1 use index (bc) where b < 4 order by a;
a b c a b c
1 1 1 1 1 1
...@@ -574,3 +576,39 @@ uid gid rid cid ...@@ -574,3 +576,39 @@ uid gid rid cid
1 1 2 3 1 1 2 3
1 1 2 4 1 1 2 4
drop table t1,t2,t3,t4,t5,t6,t7; drop table t1,t2,t3,t4,t5,t6,t7;
CREATE TABLE t1 (
a int unsigned NOT NULL PRIMARY KEY,
b int unsigned,
c int unsigned,
UNIQUE bc(b,c) ) engine = ndb;
insert into t1 values(1,1,1),(2,NULL,2),(3,NULL,NULL),(4,4,NULL);
select * from t1 where b=1 and c=1;
a b c
1 1 1
select * from t1 where b is null and c is null;
a b c
3 NULL NULL
select * from t1 where b is null and c = 2;
a b c
2 NULL 2
select * from t1 where b = 4 and c is null;
a b c
4 4 NULL
create table t8 as
select * from t1 where (b = 1 and c = 1)
or (b is null and c is null)
or (b is null and c = 2)
or (b = 4 and c is null);
select * from t8 order by a;
a b c
1 1 1
2 NULL 2
3 NULL NULL
4 4 NULL
select * from t1 order by a;
a b c
1 1 1
2 NULL 2
3 NULL NULL
4 4 NULL
drop table t1, t8;
...@@ -616,7 +616,7 @@ col1 col2 ...@@ -616,7 +616,7 @@ col1 col2
-9223372036854775808 0 -9223372036854775808 0
9223372036854775807 18446744073709551615 9223372036854775807 18446744073709551615
-9223372036854773760 0 -9223372036854773760 0
-9223372036854775808 1844674407370953984 9223372036854775807 1844674407370953984
-9223372036854775808 NULL -9223372036854775808 NULL
-9223372036854775808 NULL -9223372036854775808 NULL
NULL 18446744073709551615 NULL 18446744073709551615
......
...@@ -8,7 +8,7 @@ create temporary table t1 (a int, b int); ...@@ -8,7 +8,7 @@ create temporary table t1 (a int, b int);
create view v1 (c) as select b+1 from t1; create view v1 (c) as select b+1 from t1;
ERROR HY000: View's SELECT contains a temporary table 't1' ERROR HY000: View's SELECT contains a temporary table 't1'
drop table t1; drop table t1;
create table t1 (a int, b int) max_rows=1000000; create table t1 (a int, b int);
insert into t1 values (1,2), (1,3), (2,4), (2,5), (3,10); insert into t1 values (1,2), (1,3), (2,4), (2,5), (3,10);
create view v1 (c,d) as select a,b+@@global.max_user_connections from t1; create view v1 (c,d) as select a,b+@@global.max_user_connections from t1;
ERROR HY000: View's SELECT contains a variable or parameter ERROR HY000: View's SELECT contains a variable or parameter
...@@ -149,7 +149,7 @@ v5 VIEW ...@@ -149,7 +149,7 @@ v5 VIEW
v6 VIEW v6 VIEW
show table status; show table status;
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
t1 MyISAM 9 Fixed 5 9 45 150994943 1024 0 NULL # # NULL latin1_swedish_ci NULL max_rows=1000000 t1 MyISAM 9 Fixed 5 9 45 38654705663 1024 0 NULL # # NULL latin1_swedish_ci NULL
v1 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL # # NULL NULL NULL NULL view v1 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL # # NULL NULL NULL NULL view
v2 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL # # NULL NULL NULL NULL view v2 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL # # NULL NULL NULL NULL view
v3 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL # # NULL NULL NULL NULL view v3 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL # # NULL NULL NULL NULL view
...@@ -1213,14 +1213,14 @@ select * from v1; ...@@ -1213,14 +1213,14 @@ select * from v1;
drop view v1; drop view v1;
drop table t1; drop table t1;
create function x1 () returns int return 5; create function x1 () returns int return 5;
create table t1 (s1 int) max_rows=1000000; create table t1 (s1 int);
create view v1 as select x1() from t1; create view v1 as select x1() from t1;
drop function x1; drop function x1;
select * from v1; select * from v1;
ERROR 42000: FUNCTION test.x1 does not exist ERROR 42000: FUNCTION test.x1 does not exist
show table status; show table status;
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
t1 MyISAM 9 Fixed 0 0 0 83886079 1024 0 NULL # # NULL latin1_swedish_ci NULL max_rows=1000000 t1 MyISAM 9 Fixed 0 0 0 21474836479 1024 0 NULL # # NULL latin1_swedish_ci NULL
v1 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL # # NULL NULL NULL NULL FUNCTION test.x1 does not exist v1 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL # # NULL NULL NULL NULL FUNCTION test.x1 does not exist
drop view v1; drop view v1;
drop table t1; drop table t1;
......
...@@ -41,6 +41,7 @@ show tables like 't%'; ...@@ -41,6 +41,7 @@ show tables like 't%';
--replace_column 15 # 16 # --replace_column 15 # 16 #
show tables * from test where table_name like 't%'; show tables * from test where table_name like 't%';
--replace_column 12 # 13 # --replace_column 12 # 13 #
--replace_result "2147483647 " "21474836479 "
show table status; show table status;
show full columns from t3 like "a%"; show full columns from t3 like "a%";
show full columns from mysql.db like "Insert%"; show full columns from mysql.db like "Insert%";
......
...@@ -265,4 +265,24 @@ select * from t4 where rid = 2 order by cid; ...@@ -265,4 +265,24 @@ select * from t4 where rid = 2 order by cid;
drop table t1,t2,t3,t4,t5,t6,t7; drop table t1,t2,t3,t4,t5,t6,t7;
# test null in indexes
CREATE TABLE t1 (
a int unsigned NOT NULL PRIMARY KEY,
b int unsigned,
c int unsigned,
UNIQUE bc(b,c) ) engine = ndb;
insert into t1 values(1,1,1),(2,NULL,2),(3,NULL,NULL),(4,4,NULL);
select * from t1 where b=1 and c=1;
select * from t1 where b is null and c is null;
select * from t1 where b is null and c = 2;
select * from t1 where b = 4 and c is null;
create table t8 as
select * from t1 where (b = 1 and c = 1)
or (b is null and c is null)
or (b is null and c = 2)
or (b = 4 and c is null);
select * from t8 order by a;
select * from t1 order by a;
drop table t1, t8;
...@@ -294,12 +294,14 @@ execute stmt4; ...@@ -294,12 +294,14 @@ execute stmt4;
prepare stmt4 from ' show table status from test like ''t2%'' '; prepare stmt4 from ' show table status from test like ''t2%'' ';
# egalize date and time values # egalize date and time values
--replace_column 12 # 13 # 14 # --replace_column 12 # 13 # 14 #
--replace_result 2147483647 64424509439
# Bug#4288 : prepared statement 'show table status ..', wrong output on execute # Bug#4288 : prepared statement 'show table status ..', wrong output on execute
execute stmt4; execute stmt4;
# try the same with the big table # try the same with the big table
prepare stmt4 from ' show table status from test like ''t9%'' '; prepare stmt4 from ' show table status from test like ''t9%'' ';
# egalize date and time values # egalize date and time values
--replace_column 12 # 13 # 14 # --replace_column 12 # 13 # 14 #
--replace_result 2147483647 4294967295
# Bug#4288 # Bug#4288
execute stmt4; execute stmt4;
prepare stmt4 from ' show status like ''Threads_running'' '; prepare stmt4 from ' show status like ''Threads_running'' ';
......
...@@ -19,7 +19,7 @@ create temporary table t1 (a int, b int); ...@@ -19,7 +19,7 @@ create temporary table t1 (a int, b int);
create view v1 (c) as select b+1 from t1; create view v1 (c) as select b+1 from t1;
drop table t1; drop table t1;
create table t1 (a int, b int) max_rows=1000000; create table t1 (a int, b int);
insert into t1 values (1,2), (1,3), (2,4), (2,5), (3,10); insert into t1 values (1,2), (1,3), (2,4), (2,5), (3,10);
# view with variable # view with variable
...@@ -84,6 +84,7 @@ explain extended select c from v6; ...@@ -84,6 +84,7 @@ explain extended select c from v6;
show tables; show tables;
show full tables; show full tables;
--replace_column 12 # 13 # --replace_column 12 # 13 #
--replace_result 2147483647 38654705663
show table status; show table status;
drop view v1,v2,v3,v4,v5,v6; drop view v1,v2,v3,v4,v5,v6;
...@@ -1165,12 +1166,13 @@ drop table t1; ...@@ -1165,12 +1166,13 @@ drop table t1;
# VIEW over dropped function # VIEW over dropped function
# #
create function x1 () returns int return 5; create function x1 () returns int return 5;
create table t1 (s1 int) max_rows=1000000; create table t1 (s1 int);
create view v1 as select x1() from t1; create view v1 as select x1() from t1;
drop function x1; drop function x1;
-- error 1305 -- error 1305
select * from v1; select * from v1;
--replace_column 12 # 13 # --replace_column 12 # 13 #
--replace_result "2147483647 " "21474836479 "
show table status; show table status;
drop view v1; drop view v1;
drop table t1; drop table t1;
......
...@@ -1648,4 +1648,5 @@ NdbIndexScanOperation::end_of_bound() ...@@ -1648,4 +1648,5 @@ NdbIndexScanOperation::end_of_bound()
m_first_bound_word = theKEYINFOptr + theTotalNrOfKeyWordInSignal;; m_first_bound_word = theKEYINFOptr + theTotalNrOfKeyWordInSignal;;
m_this_bound_start = theTupKeyLen; m_this_bound_start = theTupKeyLen;
return 0;
} }
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# MySQL Error File Compiler # MySQL Error File Compiler
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL Error File Compiler" DESCRIPTION "MySQL Error File Compiler"
VERSION 4, 0 VERSION 4, 0
XDCDATA ../netware/mysql.xdc XDCDATA ../netware/mysql.xdc
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
SCREENNAME "MySQL ISAM Table Check Tool" SCREENNAME "MySQL ISAM Table Check Tool"
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL ISAM Table Check Tool" DESCRIPTION "MySQL ISAM Table Check Tool"
VERSION 4, 0 VERSION 4, 0
STACKSIZE 65536 STACKSIZE 65536
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# ISAM Log # ISAM Log
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL ISAM Table Log Tool" DESCRIPTION "MySQL ISAM Table Log Tool"
VERSION 4, 0 VERSION 4, 0
XDCDATA ../netware/mysql.xdc XDCDATA ../netware/mysql.xdc
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
EXPORT @libmysql.imp EXPORT @libmysql.imp
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL Client Library" DESCRIPTION "MySQL Client Library"
VERSION 4, 0 VERSION 4, 0
AUTOUNLOAD AUTOUNLOAD
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# My Print Defaults # My Print Defaults
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL Print Defaults Tool" DESCRIPTION "MySQL Print Defaults Tool"
VERSION 4, 0 VERSION 4, 0
XDCDATA ../netware/mysql.xdc XDCDATA ../netware/mysql.xdc
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
SCREENNAME "MySQL MyISAM Table Dump Tool" SCREENNAME "MySQL MyISAM Table Dump Tool"
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL MyISAM Table Dump Tool" DESCRIPTION "MySQL MyISAM Table Dump Tool"
VERSION 4, 0 VERSION 4, 0
STACKSIZE 65536 STACKSIZE 65536
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
SCREENNAME "MySQL MyISAM Table Check Tool" SCREENNAME "MySQL MyISAM Table Check Tool"
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL MyISAM Table Check Tool" DESCRIPTION "MySQL MyISAM Table Check Tool"
VERSION 4, 0 VERSION 4, 0
STACKSIZE 65536 STACKSIZE 65536
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
SCREENNAME "MySQL MyISAM Table Log Tool" SCREENNAME "MySQL MyISAM Table Log Tool"
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL MyISAM Table Log Tool" DESCRIPTION "MySQL MyISAM Table Log Tool"
VERSION 4, 0 VERSION 4, 0
XDCDATA ../netware/mysql.xdc XDCDATA ../netware/mysql.xdc
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
SCREENNAME "MySQL MyISAM Table Pack Tool" SCREENNAME "MySQL MyISAM Table Pack Tool"
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL MyISAM Table Pack Tool" DESCRIPTION "MySQL MyISAM Table Pack Tool"
VERSION 4, 0 VERSION 4, 0
XDCDATA ../netware/mysql.xdc XDCDATA ../netware/mysql.xdc
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
SCREENNAME "MySQL Monitor" SCREENNAME "MySQL Monitor"
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL Monitor" DESCRIPTION "MySQL Monitor"
VERSION 4, 0 VERSION 4, 0
MULTIPLE MULTIPLE
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# My Print Defaults # My Print Defaults
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL Install Tool" DESCRIPTION "MySQL Install Tool"
VERSION 4, 0 VERSION 4, 0
XDCDATA ../netware/mysql.xdc XDCDATA ../netware/mysql.xdc
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
SCREENNAME "MySQL Install" SCREENNAME "MySQL Install"
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL Initial Database Installer" DESCRIPTION "MySQL Initial Database Installer"
VERSION 4, 0 VERSION 4, 0
XDCDATA ../netware/mysql.xdc XDCDATA ../netware/mysql.xdc
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
MODULE libc.nlm MODULE libc.nlm
STACKSIZE 65536 STACKSIZE 65536
SCREENNAME "MySQL Test Run" SCREENNAME "MySQL Test Run"
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL Test Run" DESCRIPTION "MySQL Test Run"
VERSION 4, 0 VERSION 4, 0
XDCDATA ../netware/mysql.xdc XDCDATA ../netware/mysql.xdc
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
#SCREENNAME "MySQL Tool - Wait for a Program to Terminate" #SCREENNAME "MySQL Tool - Wait for a Program to Terminate"
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL Tool - Wait for a Program to Terminate" DESCRIPTION "MySQL Tool - Wait for a Program to Terminate"
VERSION 4, 0 VERSION 4, 0
STACKSIZE 65536 STACKSIZE 65536
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
SCREENNAME "MySQL Admin" SCREENNAME "MySQL Admin"
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL Admin Tool" DESCRIPTION "MySQL Admin Tool"
VERSION 4, 0 VERSION 4, 0
XDCDATA ../netware/mysql.xdc XDCDATA ../netware/mysql.xdc
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
SCREENNAME "MySQL Binary Log Dump Tool" SCREENNAME "MySQL Binary Log Dump Tool"
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL Binary Log Dump Tool" DESCRIPTION "MySQL Binary Log Dump Tool"
VERSION 4, 0 VERSION 4, 0
XDCDATA ../netware/mysql.xdc XDCDATA ../netware/mysql.xdc
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
SCREENNAME "MySQL Check Tool" SCREENNAME "MySQL Check Tool"
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL Check Tool" DESCRIPTION "MySQL Check Tool"
VERSION 4, 0 VERSION 4, 0
XDCDATA ../netware/mysql.xdc XDCDATA ../netware/mysql.xdc
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# MySQL Server # MySQL Server
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL Database Server" DESCRIPTION "MySQL Database Server"
VERSION 4, 0 VERSION 4, 0
MULTIPLE MULTIPLE
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
SCREENNAME "MySQL Database Server" SCREENNAME "MySQL Database Server"
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL Database Server Monitor" DESCRIPTION "MySQL Database Server Monitor"
VERSION 4, 0 VERSION 4, 0
MULTIPLE MULTIPLE
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
SCREENNAME "MySQL Dump Tool" SCREENNAME "MySQL Dump Tool"
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL Dump Tool" DESCRIPTION "MySQL Dump Tool"
VERSION 4, 0 VERSION 4, 0
XDCDATA ../netware/mysql.xdc XDCDATA ../netware/mysql.xdc
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
SCREENNAME "MySQL Import" SCREENNAME "MySQL Import"
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL Import Tool" DESCRIPTION "MySQL Import Tool"
VERSION 4, 0 VERSION 4, 0
XDCDATA ../netware/mysql.xdc XDCDATA ../netware/mysql.xdc
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
SCREENNAME "MySQL Show" SCREENNAME "MySQL Show"
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL Show Tool" DESCRIPTION "MySQL Show Tool"
VERSION 4, 0 VERSION 4, 0
XDCDATA ../netware/mysql.xdc XDCDATA ../netware/mysql.xdc
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# MySQL Admin # MySQL Admin
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL Test Case Tool" DESCRIPTION "MySQL Test Case Tool"
VERSION 4, 0 VERSION 4, 0
XDCDATA ../netware/mysql.xdc XDCDATA ../netware/mysql.xdc
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# Pack ISAM # Pack ISAM
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL ISAM Table Pack Tool" DESCRIPTION "MySQL ISAM Table Pack Tool"
VERSION 4, 0 VERSION 4, 0
XDCDATA ../netware/mysql.xdc XDCDATA ../netware/mysql.xdc
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# PERROR # PERROR
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL Error Code Description Tool" DESCRIPTION "MySQL Error Code Description Tool"
VERSION 4, 0 VERSION 4, 0
XDCDATA ../netware/mysql.xdc XDCDATA ../netware/mysql.xdc
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# Replace # Replace
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL Text Replacement Tool" DESCRIPTION "MySQL Text Replacement Tool"
VERSION 4, 0 VERSION 4, 0
XDCDATA ../netware/mysql.xdc XDCDATA ../netware/mysql.xdc
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
#SCREENNAME "MySQL Stack Dump Resolve Tool" #SCREENNAME "MySQL Stack Dump Resolve Tool"
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL Stack Dump Resolve Tool" DESCRIPTION "MySQL Stack Dump Resolve Tool"
VERSION 4, 0 VERSION 4, 0
STACKSIZE 65536 STACKSIZE 65536
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# Resolve IP # Resolve IP
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
MODULE libc.nlm MODULE libc.nlm
COPYRIGHT "(c) 2003 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved." COPYRIGHT "(c) 2003-2005 Novell, Inc. Portions (c) 2003 MySQL AB. All Rights Reserved."
DESCRIPTION "MySQL IP/Hostname Resolve Tool" DESCRIPTION "MySQL IP/Hostname Resolve Tool"
VERSION 4, 0 VERSION 4, 0
XDCDATA ../netware/mysql.xdc XDCDATA ../netware/mysql.xdc
......
...@@ -305,6 +305,7 @@ ARCHIVE_SHARE *ha_archive::get_share(const char *table_name, TABLE *table) ...@@ -305,6 +305,7 @@ ARCHIVE_SHARE *ha_archive::get_share(const char *table_name, TABLE *table)
share->use_count= 0; share->use_count= 0;
share->table_name_length= length; share->table_name_length= length;
share->table_name= tmp_name; share->table_name= tmp_name;
share->delayed= FALSE;
fn_format(share->data_file_name,table_name,"",ARZ,MY_REPLACE_EXT|MY_UNPACK_FILENAME); fn_format(share->data_file_name,table_name,"",ARZ,MY_REPLACE_EXT|MY_UNPACK_FILENAME);
fn_format(meta_file_name,table_name,"",ARM,MY_REPLACE_EXT|MY_UNPACK_FILENAME); fn_format(meta_file_name,table_name,"",ARM,MY_REPLACE_EXT|MY_UNPACK_FILENAME);
strmov(share->table_name,table_name); strmov(share->table_name,table_name);
...@@ -536,7 +537,11 @@ int ha_archive::write_row(byte * buf) ...@@ -536,7 +537,11 @@ int ha_archive::write_row(byte * buf)
pthread_mutex_lock(&share->mutex); pthread_mutex_lock(&share->mutex);
written= gzwrite(share->archive_write, buf, table->reclength); written= gzwrite(share->archive_write, buf, table->reclength);
DBUG_PRINT("ha_archive::get_row", ("Wrote %d bytes expected %d", written, table->reclength)); DBUG_PRINT("ha_archive::get_row", ("Wrote %d bytes expected %d", written, table->reclength));
if (!delayed_insert)
share->dirty= TRUE; share->dirty= TRUE;
else
share->delayed= TRUE;
if (written != table->reclength) if (written != table->reclength)
goto error; goto error;
/* /*
...@@ -594,6 +599,7 @@ int ha_archive::rnd_init(bool scan) ...@@ -594,6 +599,7 @@ int ha_archive::rnd_init(bool scan)
{ {
gzflush(share->archive_write, Z_SYNC_FLUSH); gzflush(share->archive_write, Z_SYNC_FLUSH);
share->dirty= FALSE; share->dirty= FALSE;
share->delayed= FALSE;
} }
pthread_mutex_unlock(&share->mutex); pthread_mutex_unlock(&share->mutex);
} }
...@@ -628,9 +634,12 @@ int ha_archive::get_row(gzFile file_to_read, byte *buf) ...@@ -628,9 +634,12 @@ int ha_archive::get_row(gzFile file_to_read, byte *buf)
if (read == 0) if (read == 0)
DBUG_RETURN(HA_ERR_END_OF_FILE); DBUG_RETURN(HA_ERR_END_OF_FILE);
/* If the record is the wrong size, the file is probably damaged */ /* If the record is the wrong size, the file is probably damaged, unless
we are dealing with a delayed insert. In that case we can assume the file is ok,
but our row count doesn't match our data since the file has not been flushed.
*/
if ((ulong) read != table->reclength) if ((ulong) read != table->reclength)
DBUG_RETURN(HA_ERR_CRASHED_ON_USAGE); DBUG_RETURN(share->delayed ? HA_ERR_END_OF_FILE : HA_ERR_CRASHED_ON_USAGE);
/* Calculate blob length, we use this for our buffer */ /* Calculate blob length, we use this for our buffer */
for (field=table->blob_field; *field ; field++) for (field=table->blob_field; *field ; field++)
...@@ -648,7 +657,7 @@ int ha_archive::get_row(gzFile file_to_read, byte *buf) ...@@ -648,7 +657,7 @@ int ha_archive::get_row(gzFile file_to_read, byte *buf)
{ {
read= gzread(file_to_read, last, size); read= gzread(file_to_read, last, size);
if ((size_t) read != size) if ((size_t) read != size)
DBUG_RETURN(HA_ERR_CRASHED_ON_USAGE); DBUG_RETURN(share->delayed ? HA_ERR_END_OF_FILE : HA_ERR_CRASHED_ON_USAGE);
(*field)->set_ptr(size, last); (*field)->set_ptr(size, last);
last += size; last += size;
} }
...@@ -839,6 +848,11 @@ THR_LOCK_DATA **ha_archive::store_lock(THD *thd, ...@@ -839,6 +848,11 @@ THR_LOCK_DATA **ha_archive::store_lock(THD *thd,
THR_LOCK_DATA **to, THR_LOCK_DATA **to,
enum thr_lock_type lock_type) enum thr_lock_type lock_type)
{ {
if (lock_type == TL_WRITE_DELAYED)
delayed_insert= TRUE;
else
delayed_insert= FALSE;
if (lock_type != TL_IGNORE && lock.type == TL_UNLOCK) if (lock_type != TL_IGNORE && lock.type == TL_UNLOCK)
{ {
/* /*
......
...@@ -36,6 +36,7 @@ typedef struct st_archive_share { ...@@ -36,6 +36,7 @@ typedef struct st_archive_share {
gzFile archive_write; /* Archive file we are working with */ gzFile archive_write; /* Archive file we are working with */
bool dirty; /* Flag for if a flush should occur */ bool dirty; /* Flag for if a flush should occur */
ulonglong rows_recorded; /* Number of rows in tables */ ulonglong rows_recorded; /* Number of rows in tables */
bool delayed; /* If a delayed insert has happened since opena */
} ARCHIVE_SHARE; } ARCHIVE_SHARE;
/* /*
...@@ -53,9 +54,10 @@ class ha_archive: public handler ...@@ -53,9 +54,10 @@ class ha_archive: public handler
byte byte_buffer[IO_SIZE]; /* Initial buffer for our string */ byte byte_buffer[IO_SIZE]; /* Initial buffer for our string */
String buffer; /* Buffer used for blob storage */ String buffer; /* Buffer used for blob storage */
ulonglong scan_rows; /* Number of rows left in scan */ ulonglong scan_rows; /* Number of rows left in scan */
bool delayed_insert; /* If the insert is delayed */
public: public:
ha_archive(TABLE *table): handler(table) ha_archive(TABLE *table): handler(table), delayed_insert(0)
{ {
/* Set our original buffer from pre-allocated memory */ /* Set our original buffer from pre-allocated memory */
buffer.set(byte_buffer, IO_SIZE, system_charset_info); buffer.set(byte_buffer, IO_SIZE, system_charset_info);
...@@ -72,7 +74,7 @@ class ha_archive: public handler ...@@ -72,7 +74,7 @@ class ha_archive: public handler
ulong table_flags() const ulong table_flags() const
{ {
return (HA_REC_NOT_IN_SEQ | HA_NOT_EXACT_COUNT | HA_NO_AUTO_INCREMENT | return (HA_REC_NOT_IN_SEQ | HA_NOT_EXACT_COUNT | HA_NO_AUTO_INCREMENT |
HA_FILE_BASED); HA_FILE_BASED | HA_CAN_INSERT_DELAYED);
} }
ulong index_flags(uint idx, uint part, bool all_parts) const ulong index_flags(uint idx, uint part, bool all_parts) const
{ {
......
...@@ -1182,7 +1182,7 @@ int Field_tiny::store(double nr) ...@@ -1182,7 +1182,7 @@ int Field_tiny::store(double nr)
error= 1; error= 1;
} }
else else
*ptr=(char) nr; *ptr=(char) (int) nr;
} }
return error; return error;
} }
...@@ -1313,9 +1313,9 @@ int Field_short::store(const char *from,uint len,CHARSET_INFO *cs) ...@@ -1313,9 +1313,9 @@ int Field_short::store(const char *from,uint len,CHARSET_INFO *cs)
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1); set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
error= 1; error= 1;
} }
else if (tmp > (uint16) ~0) else if (tmp > UINT_MAX16)
{ {
tmp=(uint16) ~0; tmp=UINT_MAX16;
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1); set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
error= 1; error= 1;
} }
...@@ -1364,9 +1364,9 @@ int Field_short::store(double nr) ...@@ -1364,9 +1364,9 @@ int Field_short::store(double nr)
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1); set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
error= 1; error= 1;
} }
else if (nr > (double) (uint16) ~0) else if (nr > (double) UINT_MAX16)
{ {
res=(int16) (uint16) ~0; res=(int16) UINT_MAX16;
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1); set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
error= 1; error= 1;
} }
...@@ -1388,7 +1388,7 @@ int Field_short::store(double nr) ...@@ -1388,7 +1388,7 @@ int Field_short::store(double nr)
error= 1; error= 1;
} }
else else
res=(int16) nr; res=(int16) (int) nr;
} }
#ifdef WORDS_BIGENDIAN #ifdef WORDS_BIGENDIAN
if (table->db_low_byte_first) if (table->db_low_byte_first)
...@@ -1413,9 +1413,9 @@ int Field_short::store(longlong nr) ...@@ -1413,9 +1413,9 @@ int Field_short::store(longlong nr)
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1); set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
error= 1; error= 1;
} }
else if (nr > (longlong) (uint16) ~0) else if (nr > (longlong) UINT_MAX16)
{ {
res=(int16) (uint16) ~0; res=(int16) UINT_MAX16;
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1); set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
error= 1; error= 1;
} }
...@@ -1884,7 +1884,7 @@ int Field_long::store(double nr) ...@@ -1884,7 +1884,7 @@ int Field_long::store(double nr)
error= 1; error= 1;
} }
else else
res=(int32) nr; res=(int32) (longlong) nr;
} }
if (error) if (error)
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1); set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
...@@ -2123,7 +2123,7 @@ int Field_longlong::store(double nr) ...@@ -2123,7 +2123,7 @@ int Field_longlong::store(double nr)
res=0; res=0;
error= 1; error= 1;
} }
else if (nr >= (double) ~ (ulonglong) 0) else if (nr >= (double) ULONGLONG_MAX)
{ {
res= ~(longlong) 0; res= ~(longlong) 0;
error= 1; error= 1;
...@@ -2133,15 +2133,15 @@ int Field_longlong::store(double nr) ...@@ -2133,15 +2133,15 @@ int Field_longlong::store(double nr)
} }
else else
{ {
if (nr < (double) LONGLONG_MIN) if (nr <= (double) LONGLONG_MIN)
{ {
res= LONGLONG_MIN; res= LONGLONG_MIN;
error= 1; error= (nr < (double) LONGLONG_MIN);
} }
else if (nr > (double) LONGLONG_MAX) else if (nr >= (double) LONGLONG_MAX)
{ {
res= LONGLONG_MAX; res= LONGLONG_MAX;
error= 1; error= (nr > (double) LONGLONG_MAX);
} }
else else
res=(longlong) nr; res=(longlong) nr;
......
...@@ -1183,9 +1183,10 @@ int ha_ndbcluster::unique_index_read(const byte *key, ...@@ -1183,9 +1183,10 @@ int ha_ndbcluster::unique_index_read(const byte *key,
for (i= 0; key_part != end; key_part++, i++) for (i= 0; key_part != end; key_part++, i++)
{ {
if (set_ndb_key(op, key_part->field, i, key_ptr)) if (set_ndb_key(op, key_part->field, i,
key_part->null_bit ? key_ptr + 1 : key_ptr))
ERR_RETURN(trans->getNdbError()); ERR_RETURN(trans->getNdbError());
key_ptr+= key_part->length; key_ptr+= key_part->store_length;
} }
if((res= define_read_attrs(buf, op))) if((res= define_read_attrs(buf, op)))
...@@ -2273,6 +2274,28 @@ int ha_ndbcluster::index_end() ...@@ -2273,6 +2274,28 @@ int ha_ndbcluster::index_end()
DBUG_RETURN(close_scan()); DBUG_RETURN(close_scan());
} }
/**
* Check if key contains null
*/
static
int
check_null_in_key(const KEY* key_info, const byte *key, uint key_len)
{
KEY_PART_INFO *curr_part, *end_part;
const byte* end_ptr = key + key_len;
curr_part= key_info->key_part;
end_part= curr_part + key_info->key_parts;
for (; curr_part != end_part && key < end_ptr; curr_part++)
{
if(curr_part->null_bit && *key)
return 1;
key += curr_part->store_length;
}
return 0;
}
int ha_ndbcluster::index_read(byte *buf, int ha_ndbcluster::index_read(byte *buf,
const byte *key, uint key_len, const byte *key, uint key_len,
...@@ -2290,6 +2313,8 @@ int ha_ndbcluster::index_read(byte *buf, ...@@ -2290,6 +2313,8 @@ int ha_ndbcluster::index_read(byte *buf,
case PRIMARY_KEY_INDEX: case PRIMARY_KEY_INDEX:
if (find_flag == HA_READ_KEY_EXACT && key_info->key_length == key_len) if (find_flag == HA_READ_KEY_EXACT && key_info->key_length == key_len)
{ {
if(m_active_cursor && (error= close_scan()))
DBUG_RETURN(error);
DBUG_RETURN(pk_read(key, key_len, buf)); DBUG_RETURN(pk_read(key, key_len, buf));
} }
else if (type == PRIMARY_KEY_INDEX) else if (type == PRIMARY_KEY_INDEX)
...@@ -2299,8 +2324,11 @@ int ha_ndbcluster::index_read(byte *buf, ...@@ -2299,8 +2324,11 @@ int ha_ndbcluster::index_read(byte *buf,
break; break;
case UNIQUE_ORDERED_INDEX: case UNIQUE_ORDERED_INDEX:
case UNIQUE_INDEX: case UNIQUE_INDEX:
if (find_flag == HA_READ_KEY_EXACT && key_info->key_length == key_len) if (find_flag == HA_READ_KEY_EXACT && key_info->key_length == key_len &&
!check_null_in_key(key_info, key, key_len))
{ {
if(m_active_cursor && (error= close_scan()))
DBUG_RETURN(error);
DBUG_RETURN(unique_index_read(key, key_len, buf)); DBUG_RETURN(unique_index_read(key, key_len, buf));
} }
else if (type == UNIQUE_INDEX) else if (type == UNIQUE_INDEX)
...@@ -2407,6 +2435,8 @@ int ha_ndbcluster::read_range_first_to_buf(const key_range *start_key, ...@@ -2407,6 +2435,8 @@ int ha_ndbcluster::read_range_first_to_buf(const key_range *start_key,
start_key->length == key_info->key_length && start_key->length == key_info->key_length &&
start_key->flag == HA_READ_KEY_EXACT) start_key->flag == HA_READ_KEY_EXACT)
{ {
if(m_active_cursor && (error= close_scan()))
DBUG_RETURN(error);
error= pk_read(start_key->key, start_key->length, buf); error= pk_read(start_key->key, start_key->length, buf);
DBUG_RETURN(error == HA_ERR_KEY_NOT_FOUND ? HA_ERR_END_OF_FILE : error); DBUG_RETURN(error == HA_ERR_KEY_NOT_FOUND ? HA_ERR_END_OF_FILE : error);
} }
...@@ -2414,10 +2444,12 @@ int ha_ndbcluster::read_range_first_to_buf(const key_range *start_key, ...@@ -2414,10 +2444,12 @@ int ha_ndbcluster::read_range_first_to_buf(const key_range *start_key,
case UNIQUE_ORDERED_INDEX: case UNIQUE_ORDERED_INDEX:
case UNIQUE_INDEX: case UNIQUE_INDEX:
key_info= table->key_info + active_index; key_info= table->key_info + active_index;
if (start_key && if (start_key && start_key->length == key_info->key_length &&
start_key->length == key_info->key_length && start_key->flag == HA_READ_KEY_EXACT &&
start_key->flag == HA_READ_KEY_EXACT) !check_null_in_key(key_info, start_key->key, start_key->length))
{ {
if(m_active_cursor && (error= close_scan()))
DBUG_RETURN(error);
error= unique_index_read(start_key->key, start_key->length, buf); error= unique_index_read(start_key->key, start_key->length, buf);
DBUG_RETURN(error == HA_ERR_KEY_NOT_FOUND ? HA_ERR_END_OF_FILE : error); DBUG_RETURN(error == HA_ERR_KEY_NOT_FOUND ? HA_ERR_END_OF_FILE : error);
} }
......
...@@ -1086,7 +1086,7 @@ class COND_EQUAL: public Sql_alloc ...@@ -1086,7 +1086,7 @@ class COND_EQUAL: public Sql_alloc
}; };
class Item_equal_iterator :List_iterator_fast<Item_field> class Item_equal_iterator : public List_iterator_fast<Item_field>
{ {
public: public:
inline Item_equal_iterator(Item_equal &item_equal) inline Item_equal_iterator(Item_equal &item_equal)
......
...@@ -149,6 +149,7 @@ static VolumeID_t datavolid; ...@@ -149,6 +149,7 @@ static VolumeID_t datavolid;
static event_handle_t eh; static event_handle_t eh;
static Report_t ref; static Report_t ref;
static void *refneb= NULL; static void *refneb= NULL;
my_bool event_flag= FALSE;
static int volumeid= -1; static int volumeid= -1;
/* NEB event callback */ /* NEB event callback */
...@@ -819,6 +820,7 @@ static void __cdecl kill_server(int sig_ptr) ...@@ -819,6 +820,7 @@ static void __cdecl kill_server(int sig_ptr)
unireg_end(); unireg_end();
#ifdef __NETWARE__ #ifdef __NETWARE__
if(!event_flag)
pthread_join(select_thread, NULL); // wait for main thread pthread_join(select_thread, NULL); // wait for main thread
#endif /* __NETWARE__ */ #endif /* __NETWARE__ */
...@@ -1530,6 +1532,7 @@ static void check_data_home(const char *path) ...@@ -1530,6 +1532,7 @@ static void check_data_home(const char *path)
// down server event callback // down server event callback
void mysql_down_server_cb(void *, void *) void mysql_down_server_cb(void *, void *)
{ {
event_flag= TRUE;
kill_server(0); kill_server(0);
} }
...@@ -1563,7 +1566,7 @@ void mysql_cb_init() ...@@ -1563,7 +1566,7 @@ void mysql_cb_init()
Register for volume deactivation event Register for volume deactivation event
Wrap the callback function, as it is called by non-LibC thread Wrap the callback function, as it is called by non-LibC thread
*/ */
(void)NX_WRAP_INTERFACE(neb_event_callback, 1, &refneb); (void *) NX_WRAP_INTERFACE(neb_event_callback, 1, &refneb);
registerwithneb(); registerwithneb();
NXVmRegisterExitHandler(mysql_cb_destroy, NULL); // clean-up NXVmRegisterExitHandler(mysql_cb_destroy, NULL); // clean-up
...@@ -1660,6 +1663,7 @@ ulong neb_event_callback(struct EventBlock *eblock) ...@@ -1660,6 +1663,7 @@ ulong neb_event_callback(struct EventBlock *eblock)
{ {
consoleprintf("MySQL data volume is deactivated, shutting down MySQL Server \n"); consoleprintf("MySQL data volume is deactivated, shutting down MySQL Server \n");
nw_panic = TRUE; nw_panic = TRUE;
event_flag= TRUE;
kill_server(0); kill_server(0);
} }
} }
......
...@@ -3464,7 +3464,7 @@ best_access_path(JOIN *join, ...@@ -3464,7 +3464,7 @@ best_access_path(JOIN *join,
{ {
/* /*
Assume that the first key part matches 1% of the file Assume that the first key part matches 1% of the file
and that the hole key matches 10 (duplicates) or 1 and that the whole key matches 10 (duplicates) or 1
(unique) records. (unique) records.
Assume also that more key matches proportionally more Assume also that more key matches proportionally more
records records
...@@ -3472,7 +3472,7 @@ best_access_path(JOIN *join, ...@@ -3472,7 +3472,7 @@ best_access_path(JOIN *join,
records = (x * (b-a) + a*c-b)/(c-1) records = (x * (b-a) + a*c-b)/(c-1)
b = records matched by whole key b = records matched by whole key
a = records matched by first key part (10% of all records?) a = records matched by first key part (1% of all records?)
c = number of key parts in key c = number of key parts in key
x = used key parts (1 <= x <= c) x = used key parts (1 <= x <= c)
*/ */
...@@ -3488,9 +3488,12 @@ best_access_path(JOIN *join, ...@@ -3488,9 +3488,12 @@ best_access_path(JOIN *join,
else else
{ {
double a=s->records*0.01; double a=s->records*0.01;
tmp = (max_key_part * (rec_per_key - a) + if (keyinfo->key_parts > 1)
tmp= (max_key_part * (rec_per_key - a) +
a*keyinfo->key_parts - rec_per_key)/ a*keyinfo->key_parts - rec_per_key)/
(keyinfo->key_parts-1); (keyinfo->key_parts-1);
else
tmp= a;
set_if_bigger(tmp,1.0); set_if_bigger(tmp,1.0);
} }
records = (ulong) tmp; records = (ulong) tmp;
...@@ -4421,7 +4424,7 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count, ...@@ -4421,7 +4424,7 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count,
{ {
/* /*
Assume that the first key part matches 1% of the file Assume that the first key part matches 1% of the file
and that the hole key matches 10 (duplicates) or 1 and that the whole key matches 10 (duplicates) or 1
(unique) records. (unique) records.
Assume also that more key matches proportionally more Assume also that more key matches proportionally more
records records
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment