Commit db9bcd8b authored by Joerg Bruehe's avatar Joerg Bruehe

Merge main 5.0 branch -> 5.0-build (team tree).

parents c12f3512 68674082
[MYSQL] [MYSQL]
post_commit_to = "commits@lists.mysql.com" post_commit_to = "commits@lists.mysql.com"
post_push_to = "commits@lists.mysql.com" post_push_to = "commits@lists.mysql.com"
tree_name = "mysql-5.0" tree_name = "mysql-5.1-bugteam"
...@@ -82,18 +82,18 @@ SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -DDBUG_OFF") ...@@ -82,18 +82,18 @@ SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -DDBUG_OFF")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4800 /wd4805") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4800 /wd4805")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4800 /wd4805") SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4800 /wd4805")
IF(CMAKE_GENERATOR MATCHES "Visual Studio 8") # Disable warnings in Visual Studio 8 and above
IF(MSVC AND NOT CMAKE_GENERATOR MATCHES "Visual Studio 7")
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /wd4996") SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /wd4996")
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /wd4996") SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /wd4996")
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /wd4996") SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /wd4996")
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /wd4996") SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /wd4996")
SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /wd4996") SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /wd4996")
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /wd4996") SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /wd4996")
ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 8") ENDIF(MSVC AND NOT CMAKE_GENERATOR MATCHES "Visual Studio 7")
IF(CMAKE_GENERATOR MATCHES "Visual Studio 7" OR
CMAKE_GENERATOR MATCHES "Visual Studio 8")
# Settings for Visual Studio 7 and above.
IF(MSVC)
# replace /MDd with /MTd # replace /MDd with /MTd
STRING(REPLACE "/MD" "/MT" CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE}) STRING(REPLACE "/MD" "/MT" CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE})
STRING(REPLACE "/MD" "/MT" CMAKE_C_FLAGS_RELWITHDEBINFO ${CMAKE_C_FLAGS_RELWITHDEBINFO}) STRING(REPLACE "/MD" "/MT" CMAKE_C_FLAGS_RELWITHDEBINFO ${CMAKE_C_FLAGS_RELWITHDEBINFO})
...@@ -123,9 +123,7 @@ IF(CMAKE_GENERATOR MATCHES "Visual Studio 7" OR ...@@ -123,9 +123,7 @@ IF(CMAKE_GENERATOR MATCHES "Visual Studio 7" OR
IF(NOT tmp_manifest) IF(NOT tmp_manifest)
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO") SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO")
ENDIF(NOT tmp_manifest) ENDIF(NOT tmp_manifest)
ENDIF(MSVC)
ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 7" OR
CMAKE_GENERATOR MATCHES "Visual Studio 8")
ADD_DEFINITIONS("-D_WINDOWS -D__WIN__ -D_CRT_SECURE_NO_DEPRECATE") ADD_DEFINITIONS("-D_WINDOWS -D__WIN__ -D_CRT_SECURE_NO_DEPRECATE")
......
...@@ -7,7 +7,7 @@ AC_INIT(sql/mysqld.cc) ...@@ -7,7 +7,7 @@ AC_INIT(sql/mysqld.cc)
AC_CANONICAL_SYSTEM AC_CANONICAL_SYSTEM
# The Docs Makefile.am parses this line! # The Docs Makefile.am parses this line!
# remember to also change ndb version below and update version.c in ndb # remember to also change ndb version below and update version.c in ndb
AM_INIT_AUTOMAKE(mysql, 5.0.70) AM_INIT_AUTOMAKE(mysql, 5.0.72)
AM_CONFIG_HEADER([include/config.h:config.h.in]) AM_CONFIG_HEADER([include/config.h:config.h.in])
PROTOCOL_VERSION=10 PROTOCOL_VERSION=10
...@@ -23,7 +23,7 @@ NDB_SHARED_LIB_VERSION=$NDB_SHARED_LIB_MAJOR_VERSION:0:0 ...@@ -23,7 +23,7 @@ NDB_SHARED_LIB_VERSION=$NDB_SHARED_LIB_MAJOR_VERSION:0:0
# ndb version # ndb version
NDB_VERSION_MAJOR=5 NDB_VERSION_MAJOR=5
NDB_VERSION_MINOR=0 NDB_VERSION_MINOR=0
NDB_VERSION_BUILD=70 NDB_VERSION_BUILD=72
NDB_VERSION_STATUS="" NDB_VERSION_STATUS=""
# Set all version vars based on $VERSION. How do we do this more elegant ? # Set all version vars based on $VERSION. How do we do this more elegant ?
......
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="taocrypt"
SccProjectName=""
SccLocalPath="">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\debug_obj"
IntermediateDirectory=".\debug_obj"
ConfigurationType="4"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
OptimizeForProcessor="2"
AdditionalIncludeDirectories="include,mySTL"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
ExceptionHandling="FALSE"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="2"
PrecompiledHeaderFile=".\debug_obj/taocrypt.pch"
AssemblerListingLocation=".\debug_obj/"
ObjectFile=".\debug_obj/"
ProgramDataBaseFileName=".\debug_obj/"
BrowseInformation="1"
WarningLevel="3"
SuppressStartupBanner="TRUE"
DebugInformationFormat="4"
CompileAs="0"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLibrarianTool"
OutputFile=".\debug_obj\taocrypt.lib"
SuppressStartupBanner="TRUE"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1033"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory=".\release_obj"
IntermediateDirectory=".\release_obj"
ConfigurationType="4"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
OptimizeForProcessor="2"
AdditionalIncludeDirectories="include,mySTL"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
StringPooling="TRUE"
ExceptionHandling="FALSE"
RuntimeLibrary="0"
EnableFunctionLevelLinking="TRUE"
UsePrecompiledHeader="2"
PrecompiledHeaderFile=".\release_obj/taocrypt.pch"
AssemblerListingLocation=".\release_obj/"
ObjectFile=".\release_obj/"
ProgramDataBaseFileName=".\release_obj/"
WarningLevel="3"
SuppressStartupBanner="TRUE"
CompileAs="0"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLibrarianTool"
OutputFile=".\release_obj\taocrypt.lib"
SuppressStartupBanner="TRUE"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="1033"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
<File
RelativePath="src\aes.cpp">
</File>
<File
RelativePath="src\aestables.cpp">
</File>
<File
RelativePath="src\algebra.cpp">
</File>
<File
RelativePath="src\arc4.cpp">
</File>
<File
RelativePath="src\asn.cpp">
</File>
<File
RelativePath="src\coding.cpp">
</File>
<File
RelativePath="src\des.cpp">
</File>
<File
RelativePath="src\dh.cpp">
</File>
<File
RelativePath="src\dsa.cpp">
</File>
<File
RelativePath="src\file.cpp">
</File>
<File
RelativePath="src\hash.cpp">
</File>
<File
RelativePath="src\integer.cpp">
</File>
<File
RelativePath="src\md2.cpp">
</File>
<File
RelativePath="src\md4.cpp">
</File>
<File
RelativePath="src\md5.cpp">
</File>
<File
RelativePath="src\misc.cpp">
</File>
<File
RelativePath="src\random.cpp">
</File>
<File
RelativePath="src\ripemd.cpp">
</File>
<File
RelativePath="src\rsa.cpp">
</File>
<File
RelativePath="src\sha.cpp">
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl">
<File
RelativePath="include\aes.hpp">
</File>
<File
RelativePath="include\algebra.hpp">
</File>
<File
RelativePath="include\arc4.hpp">
</File>
<File
RelativePath="include\asn.hpp">
</File>
<File
RelativePath="include\block.hpp">
</File>
<File
RelativePath="include\coding.hpp">
</File>
<File
RelativePath="include\des.hpp">
</File>
<File
RelativePath="include\dh.hpp">
</File>
<File
RelativePath="include\dsa.hpp">
</File>
<File
RelativePath="include\error.hpp">
</File>
<File
RelativePath="include\file.hpp">
</File>
<File
RelativePath="include\hash.hpp">
</File>
<File
RelativePath="include\hmac.hpp">
</File>
<File
RelativePath="include\integer.hpp">
</File>
<File
RelativePath="include\md2.hpp">
</File>
<File
RelativePath="include\md4.hpp">
</File>
<File
RelativePath="include\md5.hpp">
</File>
<File
RelativePath="include\misc.hpp">
</File>
<File
RelativePath="include\modarith.hpp">
</File>
<File
RelativePath="include\modes.hpp">
</File>
<File
RelativePath="include\random.hpp">
</File>
<File
RelativePath="include\ripemd.hpp">
</File>
<File
RelativePath="include\rsa.hpp">
</File>
<File
RelativePath="include\sha.hpp">
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="yassl"
SccProjectName=""
SccLocalPath="">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\debug_obj"
IntermediateDirectory=".\debug_obj"
ConfigurationType="4"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
OptimizeForProcessor="2"
AdditionalIncludeDirectories="include,taocrypt\include,taocrypt\mySTL"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;YASSL_PREFIX"
ExceptionHandling="FALSE"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="2"
PrecompiledHeaderFile=".\debug_obj/yassl.pch"
AssemblerListingLocation=".\debug_obj/"
ObjectFile=".\debug_obj/"
ProgramDataBaseFileName=".\debug_obj/"
BrowseInformation="1"
WarningLevel="3"
SuppressStartupBanner="TRUE"
DebugInformationFormat="4"
CompileAs="0"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLibrarianTool"
OutputFile=".\debug_obj\yassl.lib"
SuppressStartupBanner="TRUE"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1033"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory=".\release_obj"
IntermediateDirectory=".\release_obj"
ConfigurationType="4"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
OptimizeForProcessor="2"
AdditionalIncludeDirectories="include,taocrypt\include,taocrypt\mySTL"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;YASSL_PREFIX"
StringPooling="TRUE"
ExceptionHandling="FALSE"
RuntimeLibrary="0"
EnableFunctionLevelLinking="TRUE"
UsePrecompiledHeader="2"
PrecompiledHeaderFile=".\release_obj/yassl.pch"
AssemblerListingLocation=".\release_obj/"
ObjectFile=".\release_obj/"
ProgramDataBaseFileName=".\release_obj/"
WarningLevel="3"
SuppressStartupBanner="TRUE"
CompileAs="0"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLibrarianTool"
OutputFile=".\release_obj\yassl.lib"
SuppressStartupBanner="TRUE"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="1033"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
<File
RelativePath="src\buffer.cpp">
</File>
<File
RelativePath="src\cert_wrapper.cpp">
</File>
<File
RelativePath="src\crypto_wrapper.cpp">
</File>
<File
RelativePath="src\handshake.cpp">
</File>
<File
RelativePath="src\lock.cpp">
</File>
<File
RelativePath="src\log.cpp">
</File>
<File
RelativePath="src\socket_wrapper.cpp">
</File>
<File
RelativePath="src\ssl.cpp">
</File>
<File
RelativePath="src\timer.cpp">
</File>
<File
RelativePath="src\yassl_error.cpp">
</File>
<File
RelativePath="src\yassl_imp.cpp">
</File>
<File
RelativePath="src\yassl_int.cpp">
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl">
<File
RelativePath="include\buffer.hpp">
</File>
<File
RelativePath="include\cert_wrapper.hpp">
</File>
<File
RelativePath="include\crypto_wrapper.hpp">
</File>
<File
RelativePath="include\factory.hpp">
</File>
<File
RelativePath="include\handshake.hpp">
</File>
<File
RelativePath="include\lock.hpp">
</File>
<File
RelativePath="include\log.hpp">
</File>
<File
RelativePath="include\socket_wrapper.hpp">
</File>
<File
RelativePath="include\timer.hpp">
</File>
<File
RelativePath="include\yassl_error.hpp">
</File>
<File
RelativePath="include\yassl_imp.hpp">
</File>
<File
RelativePath="include\yassl_int.hpp">
</File>
<File
RelativePath="include\yassl_types.hpp">
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>
...@@ -89,9 +89,20 @@ BOOL APIENTRY LibMain(HANDLE hInst,DWORD ul_reason_being_called, ...@@ -89,9 +89,20 @@ BOOL APIENTRY LibMain(HANDLE hInst,DWORD ul_reason_being_called,
UNREFERENCED_PARAMETER(lpReserved); UNREFERENCED_PARAMETER(lpReserved);
} /* LibMain */ } /* LibMain */
static BOOL do_libmain;
int __stdcall DllMain(HANDLE hInst,DWORD ul_reason_being_called,LPVOID lpReserved) int __stdcall DllMain(HANDLE hInst,DWORD ul_reason_being_called,LPVOID lpReserved)
{ {
return LibMain(hInst,ul_reason_being_called,lpReserved); /*
Unless environment variable LIBMYSQL_DLLINIT is set, do nothing.
The environment variable is checked once, during the first call to DllMain()
(in DLL_PROCESS_ATTACH hook).
*/
if (ul_reason_being_called == DLL_PROCESS_ATTACH)
do_libmain = (getenv("LIBMYSQL_DLLINIT") != NULL);
if (do_libmain)
return LibMain(hInst,ul_reason_being_called,lpReserved);
return TRUE;
} }
#elif defined(WINDOWS) #elif defined(WINDOWS)
......
...@@ -1546,4 +1546,15 @@ SHOW INDEX FROM t1; ...@@ -1546,4 +1546,15 @@ SHOW INDEX FROM t1;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
t1 1 c1 1 c1 A NULL NULL NULL YES BTREE t1 1 c1 1 c1 A NULL NULL NULL YES BTREE
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 (a INTEGER AUTO_INCREMENT PRIMARY KEY, b INTEGER NOT NULL);
INSERT IGNORE INTO t1 (b) VALUES (5);
CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
SELECT a FROM t1;
CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
SELECT a FROM t1;
ERROR 23000: Duplicate entry '1' for key 1
CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
SELECT a FROM t1;
ERROR 23000: Duplicate entry '1' for key 1
DROP TABLE t1, t2;
End of 5.0 tests End of 5.0 tests
...@@ -205,4 +205,19 @@ Warnings: ...@@ -205,4 +205,19 @@ Warnings:
Warning 1364 Field 'id' doesn't have a default value Warning 1364 Field 'id' doesn't have a default value
drop view v1; drop view v1;
drop table t1; drop table t1;
create table t1 (a int unique);
create table t2 (b int default 10);
insert into t1 (a) values (1);
insert into t2 (b) values (1);
insert into t1 (a) select b from t2 on duplicate key update a=default;
select * from t1;
a
NULL
insert into t1 (a) values (1);
insert into t1 (a) select b from t2 on duplicate key update a=default(b);
select * from t1;
a
NULL
10
drop table t1, t2;
End of 5.0 tests. End of 5.0 tests.
...@@ -114,4 +114,16 @@ End of 4.1 tests ...@@ -114,4 +114,16 @@ End of 4.1 tests
SELECT 1 REGEXP NULL; SELECT 1 REGEXP NULL;
1 REGEXP NULL 1 REGEXP NULL
NULL NULL
SELECT '' REGEXP BINARY NULL;
'' REGEXP BINARY NULL
NULL
SELECT NULL REGEXP BINARY NULL;
NULL REGEXP BINARY NULL
NULL
SELECT 'A' REGEXP BINARY NULL;
'A' REGEXP BINARY NULL
NULL
SELECT "ABC" REGEXP BINARY NULL;
"ABC" REGEXP BINARY NULL
NULL
End of 5.0 tests End of 5.0 tests
...@@ -7,7 +7,7 @@ start slave; ...@@ -7,7 +7,7 @@ start slave;
stop slave; stop slave;
reset master; reset master;
reset slave; reset slave;
reset master; start slave;
create table t1(n int not null auto_increment primary key); create table t1(n int not null auto_increment primary key);
insert into t1 values (NULL); insert into t1 values (NULL);
drop table t1; drop table t1;
...@@ -25,8 +25,8 @@ master-bin.000001 219 Intvar 1 247 INSERT_ID=1 ...@@ -25,8 +25,8 @@ master-bin.000001 219 Intvar 1 247 INSERT_ID=1
master-bin.000001 247 Query 1 338 use `test`; insert into t1 values (NULL) master-bin.000001 247 Query 1 338 use `test`; insert into t1 values (NULL)
master-bin.000001 338 Query 1 414 use `test`; drop table t1 master-bin.000001 338 Query 1 414 use `test`; drop table t1
master-bin.000001 414 Query 1 517 use `test`; create table t1 (word char(20) not null) master-bin.000001 414 Query 1 517 use `test`; create table t1 (word char(20) not null)
master-bin.000001 517 Begin_load_query 1 1121 ;file_id=1;block_len=581 master-bin.000001 517 Begin_load_query 1 1121 ;file_id=#;block_len=#
master-bin.000001 1121 Execute_load_query 1 1269 use `test`; load data infile '../std_data_ln/words.dat' into table t1 ignore 1 lines ;file_id=1 master-bin.000001 1121 Execute_load_query 1 1269 use `test`; load data infile 'words.dat' into table t1 ignore 1 lines ;file_id=#
master-bin.000001 1269 Query 1 1345 use `test`; drop table t1 master-bin.000001 1269 Query 1 1345 use `test`; drop table t1
show binlog events from 98 limit 1; show binlog events from 98 limit 1;
Log_name Pos Event_type Server_id End_log_pos Info Log_name Pos Event_type Server_id End_log_pos Info
...@@ -41,7 +41,6 @@ master-bin.000001 247 Query 1 338 use `test`; insert into t1 values (NULL) ...@@ -41,7 +41,6 @@ master-bin.000001 247 Query 1 338 use `test`; insert into t1 values (NULL)
flush logs; flush logs;
create table t5 (a int); create table t5 (a int);
drop table t5; drop table t5;
start slave;
flush logs; flush logs;
stop slave; stop slave;
create table t1 (n int); create table t1 (n int);
...@@ -55,8 +54,8 @@ master-bin.000001 219 Intvar 1 247 INSERT_ID=1 ...@@ -55,8 +54,8 @@ master-bin.000001 219 Intvar 1 247 INSERT_ID=1
master-bin.000001 247 Query 1 338 use `test`; insert into t1 values (NULL) master-bin.000001 247 Query 1 338 use `test`; insert into t1 values (NULL)
master-bin.000001 338 Query 1 414 use `test`; drop table t1 master-bin.000001 338 Query 1 414 use `test`; drop table t1
master-bin.000001 414 Query 1 517 use `test`; create table t1 (word char(20) not null) master-bin.000001 414 Query 1 517 use `test`; create table t1 (word char(20) not null)
master-bin.000001 517 Begin_load_query 1 1121 ;file_id=1;block_len=581 master-bin.000001 517 Begin_load_query 1 1121 ;file_id=#;block_len=#
master-bin.000001 1121 Execute_load_query 1 1269 use `test`; load data infile '../std_data_ln/words.dat' into table t1 ignore 1 lines ;file_id=1 master-bin.000001 1121 Execute_load_query 1 1269 use `test`; load data infile 'words.dat' into table t1 ignore 1 lines ;file_id=#
master-bin.000001 1269 Query 1 1345 use `test`; drop table t1 master-bin.000001 1269 Query 1 1345 use `test`; drop table t1
master-bin.000001 1345 Rotate 1 1389 master-bin.000002;pos=4 master-bin.000001 1345 Rotate 1 1389 master-bin.000002;pos=4
show binlog events in 'master-bin.000002'; show binlog events in 'master-bin.000002';
...@@ -84,8 +83,8 @@ slave-bin.000001 219 Intvar 1 247 INSERT_ID=1 ...@@ -84,8 +83,8 @@ slave-bin.000001 219 Intvar 1 247 INSERT_ID=1
slave-bin.000001 247 Query 1 338 use `test`; insert into t1 values (NULL) slave-bin.000001 247 Query 1 338 use `test`; insert into t1 values (NULL)
slave-bin.000001 338 Query 1 414 use `test`; drop table t1 slave-bin.000001 338 Query 1 414 use `test`; drop table t1
slave-bin.000001 414 Query 1 517 use `test`; create table t1 (word char(20) not null) slave-bin.000001 414 Query 1 517 use `test`; create table t1 (word char(20) not null)
slave-bin.000001 517 Begin_load_query 1 1121 ;file_id=1;block_len=581 slave-bin.000001 517 Begin_load_query 1 1121 ;file_id=#;block_len=#
slave-bin.000001 1121 Execute_load_query 1 1271 use `test`; load data INFILE '../tmp/SQL_LOAD-2-1-1.data' INTO table t1 ignore 1 lines ;file_id=1 slave-bin.000001 1121 Execute_load_query 1 1271 use `test`; load data INFILE 'words.dat' INTO table t1 ignore 1 lines ;file_id=#
slave-bin.000001 1271 Query 1 1347 use `test`; drop table t1 slave-bin.000001 1271 Query 1 1347 use `test`; drop table t1
slave-bin.000001 1347 Query 1 1433 use `test`; create table t5 (a int) slave-bin.000001 1347 Query 1 1433 use `test`; create table t5 (a int)
slave-bin.000001 1433 Query 1 1509 use `test`; drop table t5 slave-bin.000001 1433 Query 1 1509 use `test`; drop table t5
......
...@@ -560,4 +560,27 @@ select * from t2 ...@@ -560,4 +560,27 @@ select * from t2
where id in (select id from t2 as x1 where (t2.cur_date is null)); where id in (select id from t2 as x1 where (t2.cur_date is null));
id cur_date id cur_date
drop table t1,t2; drop table t1,t2;
SELECT
CAST('NULL' AS DATE) <=> CAST('2008-01-01' AS DATE) n1,
CAST('2008-01-01' AS DATE) <=> CAST('NULL' AS DATE) n2,
CAST('NULL' AS DATE) <=> CAST('NULL' AS DATE) n3,
CAST('NULL' AS DATE) <> CAST('2008-01-01' AS DATE) n4,
CAST('2008-01-01' AS DATE) <> CAST('NULL' AS DATE) n5,
CAST('NULL' AS DATE) <> CAST('NULL' AS DATE) n6,
CAST('NULL' AS DATE) < CAST('2008-01-01' AS DATE) n7,
CAST('2008-01-01' AS DATE) < CAST('NULL' AS DATE) n8,
CAST('NULL' AS DATE) < CAST('NULL' AS DATE) n9;
n1 n2 n3 n4 n5 n6 n7 n8 n9
0 0 1 NULL NULL NULL NULL NULL NULL
Warnings:
Warning 1292 Truncated incorrect datetime value: 'NULL'
Warning 1292 Truncated incorrect datetime value: 'NULL'
Warning 1292 Truncated incorrect datetime value: 'NULL'
Warning 1292 Truncated incorrect datetime value: 'NULL'
Warning 1292 Truncated incorrect datetime value: 'NULL'
Warning 1292 Truncated incorrect datetime value: 'NULL'
Warning 1292 Truncated incorrect datetime value: 'NULL'
Warning 1292 Truncated incorrect datetime value: 'NULL'
Warning 1292 Truncated incorrect datetime value: 'NULL'
Warning 1292 Truncated incorrect datetime value: 'NULL'
End of 5.0 tests End of 5.0 tests
...@@ -1172,4 +1172,22 @@ SHOW INDEX FROM t1; ...@@ -1172,4 +1172,22 @@ SHOW INDEX FROM t1;
DROP TABLE t1; DROP TABLE t1;
#
# Bug#38821: Assert table->auto_increment_field_not_null failed in open_table()
#
CREATE TABLE t1 (a INTEGER AUTO_INCREMENT PRIMARY KEY, b INTEGER NOT NULL);
INSERT IGNORE INTO t1 (b) VALUES (5);
CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
SELECT a FROM t1;
--error 1062
CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
SELECT a FROM t1;
--error 1062
CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
SELECT a FROM t1;
DROP TABLE t1, t2;
--echo End of 5.0 tests --echo End of 5.0 tests
...@@ -145,5 +145,24 @@ insert into t1 values(default); ...@@ -145,5 +145,24 @@ insert into t1 values(default);
drop view v1; drop view v1;
drop table t1; drop table t1;
#
# Bug #39002: crash with
# INSERT ... SELECT ... ON DUPLICATE KEY UPDATE col=DEFAULT
#
create table t1 (a int unique);
create table t2 (b int default 10);
insert into t1 (a) values (1);
insert into t2 (b) values (1);
insert into t1 (a) select b from t2 on duplicate key update a=default;
select * from t1;
insert into t1 (a) values (1);
insert into t1 (a) select b from t2 on duplicate key update a=default(b);
select * from t1;
drop table t1, t2;
--echo End of 5.0 tests. --echo End of 5.0 tests.
...@@ -17,8 +17,6 @@ im_options_set : Bug#20294: Instance manager tests fail randomly ...@@ -17,8 +17,6 @@ im_options_set : Bug#20294: Instance manager tests fail randomly
im_options_unset : Bug#20294: Instance manager tests fail randomly im_options_unset : Bug#20294: Instance manager tests fail randomly
im_utils : Bug#20294: Instance manager tests fail randomly im_utils : Bug#20294: Instance manager tests fail randomly
grant_cache : Bug#32651: grant_cache.test fails grant_cache : Bug#32651: grant_cache.test fails
rpl_log : Bug#32653: rpl_log.test fails randomly
rpl_view : Bug#32654: rpl_view.test fails randomly
ndb_backup_print : Bug#32357: ndb_backup_print test fails sometimes in pushbuild ndb_backup_print : Bug#32357: ndb_backup_print test fails sometimes in pushbuild
rpl_log_pos : Bug#8693 Test 'rpl_log_pos' fails sometimes rpl_log_pos : Bug#8693 Test 'rpl_log_pos' fails sometimes
kill : Bug#29149 Test "kill" fails on Windows kill : Bug#29149 Test "kill" fails on Windows
...@@ -64,4 +64,14 @@ drop table t1; ...@@ -64,4 +64,14 @@ drop table t1;
SELECT 1 REGEXP NULL; SELECT 1 REGEXP NULL;
#
# Bug #39021: SELECT REGEXP BINARY NULL never returns
#
SELECT '' REGEXP BINARY NULL;
SELECT NULL REGEXP BINARY NULL;
SELECT 'A' REGEXP BINARY NULL;
SELECT "ABC" REGEXP BINARY NULL;
--echo End of 5.0 tests --echo End of 5.0 tests
...@@ -55,6 +55,18 @@ DROP DATABASE IF EXISTS mysqltest3; ...@@ -55,6 +55,18 @@ DROP DATABASE IF EXISTS mysqltest3;
CREATE DATABASE mysqltest1; CREATE DATABASE mysqltest1;
CREATE DATABASE mysqltest2; CREATE DATABASE mysqltest2;
CREATE TABLE mysqltest1.t1 (f1 BIGINT) ENGINE= "InnoDB"; CREATE TABLE mysqltest1.t1 (f1 BIGINT) ENGINE= "InnoDB";
# Prevent Bug#26687 rpl_ddl test fails if run with --innodb option
# The current testscripts + the expected result need that the slave uses MyISAM
# for the table mysqltest.t1.
sync_slave_with_master;
connection slave;
if (`SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'mysqltest1' AND TABLE_NAME = 't1'
AND ENGINE <> 'MyISAM'`)
{
skip This test needs on slave side: InnoDB disabled, default engine: MyISAM;
}
connection master;
INSERT INTO mysqltest1.t1 SET f1= 0; INSERT INTO mysqltest1.t1 SET f1= 0;
CREATE TABLE mysqltest1.t2 (f1 BIGINT) ENGINE= "InnoDB"; CREATE TABLE mysqltest1.t2 (f1 BIGINT) ENGINE= "InnoDB";
CREATE TABLE mysqltest1.t3 (f1 BIGINT) ENGINE= "InnoDB"; CREATE TABLE mysqltest1.t3 (f1 BIGINT) ENGINE= "InnoDB";
......
...@@ -13,22 +13,15 @@ save_master_pos; ...@@ -13,22 +13,15 @@ save_master_pos;
connection slave; connection slave;
sync_with_master; sync_with_master;
stop slave; stop slave;
--source include/wait_for_slave_to_stop.inc
reset master; reset master;
reset slave; reset slave;
# We are going to read the slave's binlog which contains file_id (for some LOAD start slave;
# DATA INFILE); to make it repeatable (not influenced by other tests), we need --source include/wait_for_slave_to_start.inc
# to stop and start the slave, to be sure file_id will start from 1.
# This can be done with 'server_stop slave', but
# this would require the manager, so most of the time the test will be skipped
# :(
# To workaround this, I (Guilhem) add a (empty) rpl_log-slave.opt (because when
# mysql-test-run finds such a file it restarts the slave before doing the
# test). That's not very elegant but I could find no better way, sorry.
let $VERSION=`select version()`; let $VERSION=`select version()`;
connection master; connection master;
reset master;
create table t1(n int not null auto_increment primary key); create table t1(n int not null auto_increment primary key);
insert into t1 values (NULL); insert into t1 values (NULL);
drop table t1; drop table t1;
...@@ -37,6 +30,7 @@ load data infile '../std_data_ln/words.dat' into table t1 ignore 1 lines; ...@@ -37,6 +30,7 @@ load data infile '../std_data_ln/words.dat' into table t1 ignore 1 lines;
select count(*) from t1; select count(*) from t1;
drop table t1; drop table t1;
--replace_result $VERSION VERSION --replace_result $VERSION VERSION
--replace_regex /file_id=[0-9]+/file_id=#/ /block_len=[0-9]+/block_len=#/ /infile '.+'/infile 'words.dat'/
show binlog events; show binlog events;
show binlog events from 98 limit 1; show binlog events from 98 limit 1;
show binlog events from 98 limit 2; show binlog events from 98 limit 2;
...@@ -69,10 +63,10 @@ connection slave; ...@@ -69,10 +63,10 @@ connection slave;
# Note that the above 'slave start' will cause a 3rd rotate event (a fake one) # Note that the above 'slave start' will cause a 3rd rotate event (a fake one)
# to go into the relay log (the master always sends a fake one when replication # to go into the relay log (the master always sends a fake one when replication
# starts). # starts).
start slave;
sync_with_master; sync_with_master;
flush logs; flush logs;
stop slave; stop slave;
--source include/wait_for_slave_to_stop.inc
connection master; connection master;
# Create some entries for second log # Create some entries for second log
...@@ -81,6 +75,7 @@ create table t1 (n int); ...@@ -81,6 +75,7 @@ create table t1 (n int);
insert into t1 values (1); insert into t1 values (1);
drop table t1; drop table t1;
--replace_result $VERSION VERSION --replace_result $VERSION VERSION
--replace_regex /file_id=[0-9]+/file_id=#/ /block_len=[0-9]+/block_len=#/ /infile '.+'/infile 'words.dat'/
show binlog events; show binlog events;
--replace_result $VERSION VERSION --replace_result $VERSION VERSION
show binlog events in 'master-bin.000002'; show binlog events in 'master-bin.000002';
...@@ -88,9 +83,11 @@ show binary logs; ...@@ -88,9 +83,11 @@ show binary logs;
save_master_pos; save_master_pos;
connection slave; connection slave;
start slave; start slave;
--source include/wait_for_slave_to_start.inc
sync_with_master; sync_with_master;
show binary logs; show binary logs;
--replace_result $MASTER_MYPORT MASTER_PORT $VERSION VERSION --replace_result $MASTER_MYPORT MASTER_PORT $VERSION VERSION
--replace_regex /file_id=[0-9]+/file_id=#/ /block_len=[0-9]+/block_len=#/ /INFILE '.+'/INFILE 'words.dat'/
show binlog events in 'slave-bin.000001' from 4; show binlog events in 'slave-bin.000001' from 4;
--replace_result $MASTER_MYPORT MASTER_PORT $VERSION VERSION --replace_result $MASTER_MYPORT MASTER_PORT $VERSION VERSION
show binlog events in 'slave-bin.000002' from 4; show binlog events in 'slave-bin.000002' from 4;
......
--replicate-ignore-table=test.foo
...@@ -388,4 +388,20 @@ where id in (select id from t2 as x1 where (t2.cur_date is null)); ...@@ -388,4 +388,20 @@ where id in (select id from t2 as x1 where (t2.cur_date is null));
drop table t1,t2; drop table t1,t2;
#
# Bug #37526: asymertic operator <=> in trigger
#
SELECT
CAST('NULL' AS DATE) <=> CAST('2008-01-01' AS DATE) n1,
CAST('2008-01-01' AS DATE) <=> CAST('NULL' AS DATE) n2,
CAST('NULL' AS DATE) <=> CAST('NULL' AS DATE) n3,
CAST('NULL' AS DATE) <> CAST('2008-01-01' AS DATE) n4,
CAST('2008-01-01' AS DATE) <> CAST('NULL' AS DATE) n5,
CAST('NULL' AS DATE) <> CAST('NULL' AS DATE) n6,
CAST('NULL' AS DATE) < CAST('2008-01-01' AS DATE) n7,
CAST('2008-01-01' AS DATE) < CAST('NULL' AS DATE) n8,
CAST('NULL' AS DATE) < CAST('NULL' AS DATE) n9;
--echo End of 5.0 tests --echo End of 5.0 tests
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="mysqlmanager"
ProjectGUID="{6D524B3E-210A-4FCD-8D41-FEC0D21E83AC}"
Keyword="Win32Proj">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\debug_obj"
IntermediateDirectory=".\debug_obj"
ConfigurationType="1"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
OptimizeForProcessor="2"
AdditionalIncludeDirectories="..\..\include,../../extra/yassl/include"
PreprocessorDefinitions="MYSQL_INSTANCE_MANAGER;MYSQL_SERVER;_DEBUG;SAFEMALLOC;SAFE_MUTEX;_WINDOWS;CONSOLE"
MinimalRebuild="TRUE"
ExceptionHandling="FALSE"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
DebugInformationFormat="4"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="wsock32.lib"
OutputFile=".\debug/mysqlmanager.exe"
LinkIncremental="1"
GenerateDebugInformation="TRUE"
ProgramDatabaseFile=".\debug/mysqlmanager.pdb"
GenerateMapFile="TRUE"
MapFileName=".\debug/mysqlmanager.map"
SubSystem="1"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory=".\release_obj"
IntermediateDirectory=".\release_obj"
ConfigurationType="1"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
OptimizeForProcessor="2"
AdditionalIncludeDirectories="..\..\include,../../extra/yassl/include"
PreprocessorDefinitions="MYSQL_INSTANCE_MANAGER;MYSQL_SERVER;_WINDOWS;CONSOLE"
ExceptionHandling="FALSE"
RuntimeLibrary="0"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
DebugInformationFormat="3"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="wsock32.lib"
OutputFile=".\release/mysqlmanager.exe"
LinkIncremental="1"
GenerateDebugInformation="TRUE"
ProgramDatabaseFile=".\release/mysqlmanager.pdb"
GenerateMapFile="TRUE"
MapFileName=".\release/mysqlmanager.map"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
<File
RelativePath=".\buffer.cpp">
</File>
<File
RelativePath="..\..\sql\client.c">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)/$(InputName)1.obj"/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)/$(InputName)1.obj"/>
</FileConfiguration>
</File>
<File
RelativePath=".\command.cpp">
</File>
<File
RelativePath=".\commands.cpp">
</File>
<File
RelativePath="..\..\libmysql\get_password.c">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)/$(InputName)1.obj"/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)/$(InputName)1.obj"/>
</FileConfiguration>
</File>
<File
RelativePath=".\guardian.cpp">
</File>
<File
RelativePath=".\IMService.cpp">
</File>
<File
RelativePath=".\instance.cpp">
</File>
<File
RelativePath=".\instance_map.cpp">
</File>
<File
RelativePath=".\instance_options.cpp">
</File>
<File
RelativePath=".\listener.cpp">
</File>
<File
RelativePath=".\log.cpp">
</File>
<File
RelativePath=".\manager.cpp">
</File>
<File
RelativePath=".\messages.cpp">
</File>
<File
RelativePath="..\..\sql\mini_client_errors.c">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)/$(InputName)1.obj"/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)/$(InputName)1.obj"/>
</FileConfiguration>
</File>
<File
RelativePath=".\mysql_connection.cpp">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)/$(InputName)1.obj"/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)/$(InputName)1.obj"/>
</FileConfiguration>
</File>
<File
RelativePath=".\mysqlmanager.cpp">
</File>
<File
RelativePath="..\..\sql\net_serv.cpp">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)/$(InputName)1.obj"/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)/$(InputName)1.obj"/>
</FileConfiguration>
</File>
<File
RelativePath=".\options.cpp">
</File>
<File
RelativePath="..\..\sql\pack.c">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)/$(InputName)1.obj"/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)/$(InputName)1.obj"/>
</FileConfiguration>
</File>
<File
RelativePath=".\parse.cpp">
</File>
<File
RelativePath=".\parse_output.cpp">
</File>
<File
RelativePath="..\..\sql\password.c">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)/$(InputName)1.obj"/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)/$(InputName)1.obj"/>
</FileConfiguration>
</File>
<File
RelativePath=".\priv.cpp">
</File>
<File
RelativePath=".\protocol.cpp">
</File>
<File
RelativePath="..\..\sql\sql_state.c">
</File>
<File
RelativePath=".\thread_registry.cpp">
</File>
<File
RelativePath=".\user_map.cpp">
</File>
<File
RelativePath=".\WindowsService.cpp">
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
<File
RelativePath=".\buffer.h">
</File>
<File
RelativePath=".\command.h">
</File>
<File
RelativePath=".\commands.h">
</File>
<File
RelativePath=".\factory.h">
</File>
<File
RelativePath=".\guardian.h">
</File>
<File
RelativePath=".\IMService.h">
</File>
<File
RelativePath=".\instance.h">
</File>
<File
RelativePath=".\instance_map.h">
</File>
<File
RelativePath=".\instance_options.h">
</File>
<File
RelativePath=".\listener.h">
</File>
<File
RelativePath=".\log.h">
</File>
<File
RelativePath=".\manager.h">
</File>
<File
RelativePath=".\messages.h">
</File>
<File
RelativePath=".\mysql_connection.h">
</File>
<File
RelativePath=".\mysql_manager_error.h">
</File>
<File
RelativePath=".\options.h">
</File>
<File
RelativePath=".\parse.h">
</File>
<File
RelativePath=".\parse_output.h">
</File>
<File
RelativePath=".\portability.h">
</File>
<File
RelativePath=".\priv.h">
</File>
<File
RelativePath=".\protocol.h">
</File>
<File
RelativePath=".\thread_registry.h">
</File>
<File
RelativePath=".\user_map.h">
</File>
<File
RelativePath=".\WindowsService.h">
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>
...@@ -6046,6 +6046,13 @@ Item *Item_default_value::transform(Item_transformer transformer, byte *args) ...@@ -6046,6 +6046,13 @@ Item *Item_default_value::transform(Item_transformer transformer, byte *args)
{ {
DBUG_ASSERT(!current_thd->is_stmt_prepare()); DBUG_ASSERT(!current_thd->is_stmt_prepare());
/*
If the value of arg is NULL, then this object represents a constant,
so further transformation is unnecessary (and impossible).
*/
if (!arg)
return 0;
Item *new_item= arg->transform(transformer, args); Item *new_item= arg->transform(transformer, args);
if (!new_item) if (!new_item)
return 0; return 0;
......
...@@ -966,19 +966,24 @@ get_datetime_value(THD *thd, Item ***item_arg, Item **cache_arg, ...@@ -966,19 +966,24 @@ get_datetime_value(THD *thd, Item ***item_arg, Item **cache_arg,
1 if items are equal or both are null 1 if items are equal or both are null
0 otherwise 0 otherwise
If is_nulls_eq is FALSE: If is_nulls_eq is FALSE:
-1 a < b or one of items is null -1 a < b or at least one item is null
0 a == b 0 a == b
1 a > b 1 a > b
See the table:
is_nulls_eq | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
a_is_null | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
b_is_null | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 |
result | 1 | 0 | 0 |0/1|-1 |-1 |-1 |-1/0/1|
*/ */
int Arg_comparator::compare_datetime() int Arg_comparator::compare_datetime()
{ {
bool is_null= FALSE; bool a_is_null, b_is_null;
ulonglong a_value, b_value; ulonglong a_value, b_value;
/* Get DATE/DATETIME/TIME value of the 'a' item. */ /* Get DATE/DATETIME/TIME value of the 'a' item. */
a_value= (*get_value_func)(thd, &a, &a_cache, *b, &is_null); a_value= (*get_value_func)(thd, &a, &a_cache, *b, &a_is_null);
if (!is_nulls_eq && is_null) if (!is_nulls_eq && a_is_null)
{ {
if (owner) if (owner)
owner->null_value= 1; owner->null_value= 1;
...@@ -986,14 +991,15 @@ int Arg_comparator::compare_datetime() ...@@ -986,14 +991,15 @@ int Arg_comparator::compare_datetime()
} }
/* Get DATE/DATETIME/TIME value of the 'b' item. */ /* Get DATE/DATETIME/TIME value of the 'b' item. */
b_value= (*get_value_func)(thd, &b, &b_cache, *a, &is_null); b_value= (*get_value_func)(thd, &b, &b_cache, *a, &b_is_null);
if (is_null) if (a_is_null || b_is_null)
{ {
if (owner) if (owner)
owner->null_value= is_nulls_eq ? 0 : 1; owner->null_value= is_nulls_eq ? 0 : 1;
return is_nulls_eq ? 1 : -1; return is_nulls_eq ? (a_is_null == b_is_null) : -1;
} }
/* Here we have two not-NULL values. */
if (owner) if (owner)
owner->null_value= 0; owner->null_value= 0;
...@@ -4341,8 +4347,20 @@ void Item_func_like::cleanup() ...@@ -4341,8 +4347,20 @@ void Item_func_like::cleanup()
#ifdef USE_REGEX #ifdef USE_REGEX
bool /**
Item_func_regex::regcomp(bool send_error) @brief Compile regular expression.
@param[in] send_error send error message if any.
@details Make necessary character set conversion then
compile regular expression passed in the args[1].
@retval 0 success.
@retval 1 error occurred.
@retval -1 given null regular expression.
*/
int Item_func_regex::regcomp(bool send_error)
{ {
char buff[MAX_FIELD_WIDTH]; char buff[MAX_FIELD_WIDTH];
String tmp(buff,sizeof(buff),&my_charset_bin); String tmp(buff,sizeof(buff),&my_charset_bin);
...@@ -4350,12 +4368,12 @@ Item_func_regex::regcomp(bool send_error) ...@@ -4350,12 +4368,12 @@ Item_func_regex::regcomp(bool send_error)
int error; int error;
if (args[1]->null_value) if (args[1]->null_value)
return TRUE; return -1;
if (regex_compiled) if (regex_compiled)
{ {
if (!stringcmp(res, &prev_regexp)) if (!stringcmp(res, &prev_regexp))
return FALSE; return 0;
prev_regexp.copy(*res); prev_regexp.copy(*res);
my_regfree(&preg); my_regfree(&preg);
regex_compiled= 0; regex_compiled= 0;
...@@ -4367,7 +4385,7 @@ Item_func_regex::regcomp(bool send_error) ...@@ -4367,7 +4385,7 @@ Item_func_regex::regcomp(bool send_error)
uint dummy_errors; uint dummy_errors;
if (conv.copy(res->ptr(), res->length(), res->charset(), if (conv.copy(res->ptr(), res->length(), res->charset(),
regex_lib_charset, &dummy_errors)) regex_lib_charset, &dummy_errors))
return TRUE; return 1;
res= &conv; res= &conv;
} }
...@@ -4379,10 +4397,10 @@ Item_func_regex::regcomp(bool send_error) ...@@ -4379,10 +4397,10 @@ Item_func_regex::regcomp(bool send_error)
(void) my_regerror(error, &preg, buff, sizeof(buff)); (void) my_regerror(error, &preg, buff, sizeof(buff));
my_error(ER_REGEXP_ERROR, MYF(0), buff); my_error(ER_REGEXP_ERROR, MYF(0), buff);
} }
return TRUE; return 1;
} }
regex_compiled= 1; regex_compiled= 1;
return FALSE; return 0;
} }
...@@ -4420,13 +4438,14 @@ Item_func_regex::fix_fields(THD *thd, Item **ref) ...@@ -4420,13 +4438,14 @@ Item_func_regex::fix_fields(THD *thd, Item **ref)
const_item_cache=args[0]->const_item() && args[1]->const_item(); const_item_cache=args[0]->const_item() && args[1]->const_item();
if (!regex_compiled && args[1]->const_item()) if (!regex_compiled && args[1]->const_item())
{ {
if (args[1]->null_value) int comp_res= regcomp(TRUE);
if (comp_res == -1)
{ // Will always return NULL { // Will always return NULL
maybe_null=1; maybe_null=1;
fixed= 1; fixed= 1;
return FALSE; return FALSE;
} }
if (regcomp(TRUE)) else if (comp_res)
return TRUE; return TRUE;
regex_is_const= 1; regex_is_const= 1;
maybe_null= args[0]->maybe_null; maybe_null= args[0]->maybe_null;
......
...@@ -1323,7 +1323,7 @@ class Item_func_regex :public Item_bool_func ...@@ -1323,7 +1323,7 @@ class Item_func_regex :public Item_bool_func
CHARSET_INFO *regex_lib_charset; CHARSET_INFO *regex_lib_charset;
int regex_lib_flags; int regex_lib_flags;
String conv; String conv;
bool regcomp(bool send_error); int regcomp(bool send_error);
public: public:
Item_func_regex(Item *a,Item *b) :Item_bool_func(a,b), Item_func_regex(Item *a,Item *b) :Item_bool_func(a,b),
regex_compiled(0),regex_is_const(0) {} regex_compiled(0),regex_is_const(0) {}
......
...@@ -2897,7 +2897,11 @@ bool select_insert::send_data(List<Item> &values) ...@@ -2897,7 +2897,11 @@ bool select_insert::send_data(List<Item> &values)
DBUG_RETURN(1); DBUG_RETURN(1);
} }
} }
if (!(error= write_record(thd, table, &info)))
error= write_record(thd, table, &info);
table->auto_increment_field_not_null= FALSE;
if (!error)
{ {
if (table->triggers || info.handle_duplicates == DUP_UPDATE) if (table->triggers || info.handle_duplicates == DUP_UPDATE)
{ {
......
@echo off
REM Copyright (C) 2006 MySQL AB
REM
REM This program is free software; you can redistribute it and/or modify
REM it under the terms of the GNU General Public License as published by
REM the Free Software Foundation; version 2 of the License.
REM
REM This program is distributed in the hope that it will be useful,
REM but WITHOUT ANY WARRANTY; without even the implied warranty of
REM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
REM GNU General Public License for more details.
REM
REM You should have received a copy of the GNU General Public License
REM along with this program; if not, write to the Free Software
REM Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
cmake -G "Visual Studio 9 2008"
@echo off
REM Copyright (C) 2006 MySQL AB
REM
REM This program is free software; you can redistribute it and/or modify
REM it under the terms of the GNU General Public License as published by
REM the Free Software Foundation; version 2 of the License.
REM
REM This program is distributed in the hope that it will be useful,
REM but WITHOUT ANY WARRANTY; without even the implied warranty of
REM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
REM GNU General Public License for more details.
REM
REM You should have received a copy of the GNU General Public License
REM along with this program; if not, write to the Free Software
REM Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
cmake -G "Visual Studio 9 2008 Win64"
...@@ -194,7 +194,7 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ ...@@ -194,7 +194,7 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
# ifdef __TURBOC__ # ifdef __TURBOC__
# define NO_vsnprintf # define NO_vsnprintf
# endif # endif
# ifdef WIN32 # if defined(WIN32) && (!defined(_MSC_VER) || _MSC_VER < 1500)
/* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */ /* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */
# if !defined(vsnprintf) && !defined(NO_vsnprintf) # if !defined(vsnprintf) && !defined(NO_vsnprintf)
# define vsnprintf _vsnprintf # define vsnprintf _vsnprintf
......
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