From 40c2e7499b40a10ee2b8042e5d672b7c4d4c66fe Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 8 Oct 2002 22:28:24 +0300 Subject: [PATCH 1/5] Portability fixes to be able to compile MySQL with VC++ VC++Files/client/mysqlclient.dsp: Updated VC++ files for 4.1 VC++Files/libmysql/libmysql.dsp: Updated VC++ files for 4.1 VC++Files/libmysqld/libmysqld.dsp: Updated VC++ files for 4.1 VC++Files/myisam/myisam.dsp: Updated VC++ files for 4.1 VC++Files/mysys/mysys.dsp: Updated VC++ files for 4.1 VC++Files/sql/mysqld.dsp: Updated VC++ files for 4.1 VC++Files/strings/strings.dsp: Updated VC++ files for 4.1 client/mysql.cc: Update for windows heap/_check.c: Fixed wrong DBUG_PRINT() usage include/mysql.h: Portability fix (uint -> unsigned int) libmysql/libmysql.def: Removed old my_casecmp function sql/ha_innodb.cc: Update for windows sql/init.cc: Removed not used variable sql/log.cc: Removed not used variable sql/net_pkg.cc: Portability fix sql/sql_db.cc: Portability fixes. Removed not used variables sql/sql_lex.h: Portability fix sql/sql_parse.cc: Portability fix sql/sql_prepare.cc: Removed not used variables sql/sql_select.cc: Portability fix sql/sql_show.cc: Portability fix sql/sql_union.cc: Portability fix --- VC++Files/client/mysqlclient.dsp | 4 +++ VC++Files/fix-project-files | 7 +++++ VC++Files/libmysql/libmysql.dsp | 5 ++++ VC++Files/libmysqld/libmysqld.dsp | 39 +++++++++++++++++--------- VC++Files/myisam/myisam.dsp | 24 ++++++++++++++++ VC++Files/mysys/mysys.dsp | 12 +++++--- VC++Files/sql/mysqld.dsp | 46 ++++++++++++++++++++++++++----- VC++Files/strings/strings.dsp | 4 +++ client/mysql.cc | 4 +-- heap/_check.c | 8 ++---- include/mysql.h | 10 +++---- libmysql/libmysql.def | 5 ++-- sql/ha_innodb.cc | 4 +-- sql/init.cc | 1 - sql/log.cc | 1 - sql/net_pkg.cc | 4 +-- sql/sql_db.cc | 7 ++--- sql/sql_lex.h | 2 +- sql/sql_parse.cc | 5 ++-- sql/sql_prepare.cc | 1 - sql/sql_select.cc | 7 ++--- sql/sql_show.cc | 5 ++-- sql/sql_union.cc | 4 +-- 23 files changed, 146 insertions(+), 63 deletions(-) create mode 100755 VC++Files/fix-project-files diff --git a/VC++Files/client/mysqlclient.dsp b/VC++Files/client/mysqlclient.dsp index 4d70971a363..4c806091b84 100644 --- a/VC++Files/client/mysqlclient.dsp +++ b/VC++Files/client/mysqlclient.dsp @@ -136,6 +136,10 @@ SOURCE="..\strings\ctype-latin1_de.c" # End Source File # Begin Source File +SOURCE="..\strings\ctype-simple.c" +# End Source File +# Begin Source File + SOURCE="..\strings\ctype-sjis.c" # End Source File # Begin Source File diff --git a/VC++Files/fix-project-files b/VC++Files/fix-project-files new file mode 100755 index 00000000000..b63ceab318a --- /dev/null +++ b/VC++Files/fix-project-files @@ -0,0 +1,7 @@ +#!/bin/sh + +# +# Change linefeed -> return+linefeed for all VC++ project files +# + +find . \( -name "*.dsp" -o -name "*.dsw" \) -print | grep -v "SCCS" | xargs replace '\r\$' ' ' '\$' ' ' -- diff --git a/VC++Files/libmysql/libmysql.dsp b/VC++Files/libmysql/libmysql.dsp index 4dc0f86a6e9..af61d6e7ebe 100644 --- a/VC++Files/libmysql/libmysql.dsp +++ b/VC++Files/libmysql/libmysql.dsp @@ -147,6 +147,10 @@ SOURCE="..\strings\ctype-latin1_de.c" # End Source File # Begin Source File +SOURCE="..\strings\ctype-simple.c" +# End Source File +# Begin Source File + SOURCE="..\strings\ctype-sjis.c" # End Source File # Begin Source File @@ -256,6 +260,7 @@ SOURCE=..\mysys\my_alloc.c # Begin Source File SOURCE=..\mysys\my_compress.c +# ADD CPP /I "../zlib" # End Source File # Begin Source File diff --git a/VC++Files/libmysqld/libmysqld.dsp b/VC++Files/libmysqld/libmysqld.dsp index bd20c75a24e..6eeb1fcd603 100644 --- a/VC++Files/libmysqld/libmysqld.dsp +++ b/VC++Files/libmysqld/libmysqld.dsp @@ -43,8 +43,7 @@ RSC=rc.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBMYSQLD_EXPORTS" /YX /FD /c -# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../sql" /I "../bdb/build_win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "USE_SYMDIR" /D "SIGNAL_WITH_VIO_CLOSE" /D "HAVE_DLOPEN" /D "EMBEDDED_LIBRARY" /D "HAVE_INNOBASE_DB" /D "DBUG_OFF" /D "USE_TLS" /D "__WIN__" /FR /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../regex" /I "../sql" /I "../bdb/build_win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "USE_SYMDIR" /D "SIGNAL_WITH_VIO_CLOSE" /D "HAVE_DLOPEN" /D "EMBEDDED_LIBRARY" /D "HAVE_INNOBASE_DB" /D "DBUG_OFF" /D "USE_TLS" /D "__WIN__" /FR /FD /mktyplib203 /win32 # ADD BASE MTL /c # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x416 /d "NDEBUG" # ADD RSC /l 0x416 /d "NDEBUG" @@ -53,8 +52,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib ..\lib_release\myisam.lib ..\lib_release\myisammrg.lib ..\lib_release\mysys.lib ..\lib_release\strings.lib ..\lib_release\regex.lib ..\lib_release\heap.lib ..\lib_release\innodb.lib ..\lib_release\bdb.lib ..\lib_release\zlib.lib /nologo /dll /machine:I386 /out:"../lib_release/libmysqld.dll" /implib:"../lib_release/libmysqld.lib" -# SUBTRACT LINK32 /pdb:none +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib ..\lib_release\myisam.lib ..\lib_release\myisammrg.lib ..\lib_release\mysys.lib ..\lib_release\strings.lib ..\lib_release\regex.lib ..\lib_release\heap.lib ..\lib_release\innodb.lib ..\lib_release\bdb.lib ..\lib_release\zlib.lib # SUBTRACT LINK32 /nologo /dll /pdb:none /machine:I386 /out:"../lib_release/libmysqld.dll" /implib:"../lib_release/libmysqld.lib" !ELSEIF "$(CFG)" == "libmysqld - Win32 Debug" @@ -70,8 +68,7 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBMYSQLD_EXPORTS" /YX /FD /GZ /c -# ADD CPP /nologo /MT /W3 /Gm /Zi /Od /I "../include" /I "../sql" /I "../regex" /I "../bdb/build_win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "HAVE_BERKELEY_DB" /D "USE_SYMDIR" /D "SIGNAL_WITH_VIO_CLOSE" /D "HAVE_DLOPEN" /D "EMBEDDED_LIBRARY" /D "HAVE_INNOBASE_DB" /D "USE_TLS" /D "__WIN__" /FD /GZ /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD CPP /nologo /MT /W3 /Gm /Zi /Od /I "../include" /I "../sql" /I "../regex" /I "../bdb/build_win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "HAVE_BERKELEY_DB" /D "USE_SYMDIR" /D "SIGNAL_WITH_VIO_CLOSE" /D "HAVE_DLOPEN" /D "EMBEDDED_LIBRARY" /D "HAVE_INNOBASE_DB" /D "USE_TLS" /D "__WIN__" /FD /GZ /mktyplib203 /win32 # ADD BASE MTL /c # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x416 /d "_DEBUG" # ADD RSC /l 0x416 /d "_DEBUG" @@ -80,8 +77,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib ..\lib_debug\dbug.lib ..\lib_debug\mysys.lib ..\lib_debug\strings.lib ..\lib_debug\regex.lib ..\lib_debug\heap.lib ..\lib_debug\innodb.lib /nologo /dll /incremental:no /debug /machine:I386 /nodefaultlib:"LIBCMTD" /out:"../lib_debug/libmysqld.dll" /implib:"../lib_debug/libmysqld.lib" /pdbtype:sept -# SUBTRACT LINK32 /pdb:none +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib ..\lib_debug\dbug.lib ..\lib_debug\mysys.lib ..\lib_debug\strings.lib ..\lib_debug\regex.lib ..\lib_debug\heap.lib ..\lib_debug\innodb.lib # SUBTRACT LINK32 /nologo /dll /pdb:none /debug /machine:I386 /nodefaultlib:"LIBCMTD" /out:"../lib_debug/libmysqld.dll" /implib:"../lib_debug/libmysqld.lib" !ENDIF @@ -119,6 +115,10 @@ SOURCE=..\libmysql\get_password.c # End Source File # Begin Source File +SOURCE=..\sql\gstream.cpp +# End Source File +# Begin Source File + SOURCE=..\sql\ha_berkeley.cpp # End Source File # Begin Source File @@ -176,6 +176,7 @@ SOURCE=..\sql\item_create.cpp # Begin Source File SOURCE=..\sql\item_func.cpp +# ADD CPP /I "../zlib" # End Source File # Begin Source File @@ -183,6 +184,10 @@ SOURCE=..\sql\item_strfunc.cpp # End Source File # Begin Source File +SOURCE=..\sql\item_subselect.cpp +# End Source File +# Begin Source File + SOURCE=..\sql\item_sum.cpp # End Source File # Begin Source File @@ -271,7 +276,7 @@ SOURCE=..\sql\set_var.cpp # End Source File # Begin Source File -SOURCE=..\sql\slave.cpp +SOURCE=..\sql\spatial.cpp # End Source File # Begin Source File @@ -307,10 +312,18 @@ SOURCE=..\sql\sql_delete.cpp # End Source File # Begin Source File +SOURCE=..\sql\sql_derived.cpp +# End Source File +# Begin Source File + SOURCE=..\sql\sql_do.cpp # End Source File # Begin Source File +SOURCE=..\sql\sql_error.cpp +# End Source File +# Begin Source File + SOURCE=..\sql\sql_handler.cpp # End Source File # Begin Source File @@ -327,10 +340,6 @@ SOURCE=..\sql\sql_list.cpp # End Source File # Begin Source File -SOURCE=..\sql\sql_load.cpp -# End Source File -# Begin Source File - SOURCE=..\sql\sql_manager.cpp # End Source File # Begin Source File @@ -340,6 +349,10 @@ SOURCE=..\sql\sql_map.cpp # Begin Source File SOURCE=..\sql\sql_parse.cpp +# End Source File +# Begin Source File + +SOURCE=..\sql\sql_prepare.cpp # End Source File # Begin Source File diff --git a/VC++Files/myisam/myisam.dsp b/VC++Files/myisam/myisam.dsp index 8346cddbc54..96cb85f7139 100644 --- a/VC++Files/myisam/myisam.dsp +++ b/VC++Files/myisam/myisam.dsp @@ -265,8 +265,28 @@ SOURCE=.\mi_write.c # End Source File # Begin Source File +SOURCE=.\rt_index.c +# End Source File +# Begin Source File + +SOURCE=.\rt_key.c +# End Source File +# Begin Source File + +SOURCE=.\rt_mbr.c +# End Source File +# Begin Source File + +SOURCE=.\rt_split.c +# End Source File +# Begin Source File + SOURCE=.\sort.c # End Source File +# Begin Source File + +SOURCE=.\sp_key.c +# End Source File # End Group # Begin Group "Header Files" @@ -279,6 +299,10 @@ SOURCE=.\ft_eval.h SOURCE=.\myisamdef.h # End Source File +# Begin Source File + +SOURCE=.\rt_index.h +# End Source File # End Group # End Target # End Project diff --git a/VC++Files/mysys/mysys.dsp b/VC++Files/mysys/mysys.dsp index 42213b16cf5..0465c446647 100644 --- a/VC++Files/mysys/mysys.dsp +++ b/VC++Files/mysys/mysys.dsp @@ -26,7 +26,7 @@ CFG=mysys - Win32 Debug # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" -CPP=xicl6.exe +CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "mysys - Win32 Release" @@ -49,7 +49,7 @@ RSC=rc.exe BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo -LIB32=xilink6.exe -lib +LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"..\lib_release\mysys.lib" @@ -73,7 +73,7 @@ LIB32=xilink6.exe -lib BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo -LIB32=xilink6.exe -lib +LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"..\lib_debug\mysys.lib" @@ -98,7 +98,7 @@ LIB32=xilink6.exe -lib BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo -LIB32=xilink6.exe -lib +LIB32=link.exe -lib # ADD BASE LIB32 /nologo /out:"..\lib_release\mysys.lib" # ADD LIB32 /nologo /out:"..\lib_release\mysys-max.lib" @@ -339,6 +339,10 @@ SOURCE=.\my_getwd.c # End Source File # Begin Source File +SOURCE=.\my_handler.c +# End Source File +# Begin Source File + SOURCE=.\my_init.c # End Source File # Begin Source File diff --git a/VC++Files/sql/mysqld.dsp b/VC++Files/sql/mysqld.dsp index 093cfb0d925..0c7f2b6d928 100644 --- a/VC++Files/sql/mysqld.dsp +++ b/VC++Files/sql/mysqld.dsp @@ -28,7 +28,7 @@ CFG=mysqld - Win32 Release # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" -CPP=xicl6.exe +CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "mysqld - Win32 Release" @@ -52,7 +52,7 @@ RSC=rc.exe BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo -LINK32=xilink6.exe +LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib ..\lib_release\vio.lib ..\lib_release\isam.lib ..\lib_release\merge.lib ..\lib_release\mysys.lib ..\lib_release\strings.lib ..\lib_release\regex.lib ..\lib_release\heap.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"../client_release/mysqld-opt.exe" # SUBTRACT LINK32 /debug @@ -78,7 +78,7 @@ LINK32=xilink6.exe BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo -LINK32=xilink6.exe +LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib ..\lib_debug\dbug.lib ..\lib_debug\vio.lib ..\lib_debug\isam.lib ..\lib_debug\merge.lib ..\lib_debug\mysys.lib ..\lib_debug\strings.lib ..\lib_debug\regex.lib ..\lib_debug\heap.lib ..\lib_debug\bdb.lib ..\lib_debug\innodb.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"../client_debug/mysqld.exe" /pdbtype:sept @@ -105,7 +105,7 @@ LINK32=xilink6.exe BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo -LINK32=xilink6.exe +LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib ..\lib_release\dbug.lib ..\lib_release\isam.lib ..\lib_release\merge.lib ..\lib_release\mysys.lib ..\lib_release\strings.lib ..\lib_release\regex.lib ..\lib_release\heap.lib /nologo /subsystem:console /debug /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib ..\lib_release\vio.lib ..\lib_release\isam.lib ..\lib_release\merge.lib ..\lib_release\myisam.lib ..\lib_release\myisammrg.lib ..\lib_release\mysys.lib ..\lib_release\strings.lib ..\lib_release\regex.lib ..\lib_release\heap.lib ..\lib_release\innodb.lib ..\lib_release\zlib.lib /nologo /subsystem:console /map /machine:I386 /out:"../client_release/mysqld-nt.exe" # SUBTRACT LINK32 /pdb:none /debug @@ -133,7 +133,7 @@ LINK32=xilink6.exe BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo -LINK32=xilink6.exe +LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib ..\lib_release\isam.lib ..\lib_release\merge.lib ..\lib_release\myisam.lib ..\lib_release\myisammrg.lib ..\lib_release\mysys.lib ..\lib_release\strings.lib ..\lib_release\regex.lib ..\lib_release\heap.lib ..\lib_release\zlib.lib /nologo /subsystem:console /map /machine:I386 /out:"../client_release/mysqld-nt.exe" # SUBTRACT BASE LINK32 /pdb:none /debug # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib ..\lib_release\vio.lib ..\lib_release\isam.lib ..\lib_release\merge.lib ..\lib_release\myisam.lib ..\lib_release\myisammrg.lib ..\lib_release\mysys-max.lib ..\lib_release\strings.lib ..\lib_release\regex.lib ..\lib_release\heap.lib ..\lib_release\zlib.lib ..\lib_release\innodb.lib ..\lib_release\bdb.lib /nologo /subsystem:console /map /machine:I386 /out:"../client_release/mysqld-max-nt.exe" @@ -162,7 +162,7 @@ LINK32=xilink6.exe BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo -LINK32=xilink6.exe +LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib ..\lib_release\isam.lib ..\lib_release\merge.lib ..\lib_release\mysys.lib ..\lib_release\strings.lib ..\lib_release\regex.lib ..\lib_release\heap.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /out:"../client_release/mysqld-opt.exe" # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Wsock32.lib ..\lib_release\vio.lib ..\lib_release\isam.lib ..\lib_release\merge.lib ..\lib_release\myisam.lib ..\lib_release\myisammrg.lib ..\lib_release\mysys-max.lib ..\lib_release\strings.lib ..\lib_release\regex.lib ..\lib_release\heap.lib ..\lib_release\innodb.lib ..\lib_release\bdb.lib ..\lib_release\zlib.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"../client_release/mysqld-max.exe" # SUBTRACT LINK32 /debug @@ -278,6 +278,10 @@ SOURCE=.\filesort.cpp # End Source File # Begin Source File +SOURCE=.\gstream.cpp +# End Source File +# Begin Source File + SOURCE=.\ha_berkeley.cpp # End Source File # Begin Source File @@ -456,17 +460,25 @@ SOURCE=.\item_func.cpp !IF "$(CFG)" == "mysqld - Win32 Release" +# ADD CPP /I "../zlib" + !ELSEIF "$(CFG)" == "mysqld - Win32 Debug" -# ADD CPP /G5 +# ADD CPP /G5 /I "../zlib" # SUBTRACT CPP /YX /Yc /Yu !ELSEIF "$(CFG)" == "mysqld - Win32 nt" +# ADD CPP /I "../zlib" + !ELSEIF "$(CFG)" == "mysqld - Win32 Max nt" +# ADD CPP /I "../zlib" + !ELSEIF "$(CFG)" == "mysqld - Win32 Max" +# ADD CPP /I "../zlib" + !ENDIF # End Source File @@ -492,6 +504,10 @@ SOURCE=.\item_strfunc.cpp # End Source File # Begin Source File +SOURCE=.\item_subselect.cpp +# End Source File +# Begin Source File + SOURCE=.\item_sum.cpp !IF "$(CFG)" == "mysqld - Win32 Release" @@ -811,6 +827,10 @@ SOURCE=.\slave.cpp # End Source File # Begin Source File +SOURCE=.\spatial.cpp +# End Source File +# Begin Source File + SOURCE=.\sql_acl.cpp !IF "$(CFG)" == "mysqld - Win32 Release" @@ -927,10 +947,18 @@ SOURCE=.\sql_delete.cpp # End Source File # Begin Source File +SOURCE=.\sql_derived.cpp +# End Source File +# Begin Source File + SOURCE=.\sql_do.cpp # End Source File # Begin Source File +SOURCE=.\sql_error.cpp +# End Source File +# Begin Source File + SOURCE=.\sql_handler.cpp # End Source File # Begin Source File @@ -1059,6 +1087,10 @@ SOURCE=.\sql_parse.cpp # End Source File # Begin Source File +SOURCE=.\sql_prepare.cpp +# End Source File +# Begin Source File + SOURCE=.\sql_rename.cpp # End Source File # Begin Source File diff --git a/VC++Files/strings/strings.dsp b/VC++Files/strings/strings.dsp index 52655947790..1433b8d05f6 100644 --- a/VC++Files/strings/strings.dsp +++ b/VC++Files/strings/strings.dsp @@ -128,6 +128,10 @@ SOURCE=".\ctype-latin1_de.c" # End Source File # Begin Source File +SOURCE=".\ctype-simple.c" +# End Source File +# Begin Source File + SOURCE=".\ctype-sjis.c" # End Source File # Begin Source File diff --git a/client/mysql.cc b/client/mysql.cc index 7341132b8e0..567b9e450e4 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -91,8 +91,8 @@ extern "C" { #define vidattr(A) {} // Can't get this to work #endif -#ifdef __WIN__ -#define cmp_database(A,B) my_strcasecmp((A),(B)) +#ifdef FN_NO_CASE_SENCE +#define cmp_database(A,B) my_strcasecmp(system_charset_info, (A), (B)) #else #define cmp_database(A,B) strcmp((A),(B)) #endif diff --git a/heap/_check.c b/heap/_check.c index 3b2fc9afad9..4a6482901d9 100644 --- a/heap/_check.c +++ b/heap/_check.c @@ -116,13 +116,11 @@ static int check_one_rb_key(HP_INFO *info, uint keynr, ulong records, SEARCH_FIND | SEARCH_SAME, ¬_used)) { error= 1; - DBUG_PRINT("error",("Record in wrong link: Link %d Record: %lx\n", - link, recpos)); + DBUG_PRINT("error",("Record in wrong link: key: %d Record: %lx\n", + keynr, recpos)); } else - { found++; - } key= tree_search_next(&keydef->rb_tree, &info->last_pos, offsetof(TREE_ELEMENT, left), offsetof(TREE_ELEMENT, right)); @@ -130,7 +128,7 @@ static int check_one_rb_key(HP_INFO *info, uint keynr, ulong records, } if (found != records) { - DBUG_PRINT("error",("Found %ld of %ld records")); + DBUG_PRINT("error",("Found %lu of %lu records", found, records)); error= 1; } if (print_status) diff --git a/include/mysql.h b/include/mysql.h index 64b118ca8b1..710f5006724 100644 --- a/include/mysql.h +++ b/include/mysql.h @@ -275,7 +275,7 @@ my_ulonglong STDCALL mysql_affected_rows(MYSQL *mysql); my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql); unsigned int STDCALL mysql_errno(MYSQL *mysql); const char * STDCALL mysql_error(MYSQL *mysql); -uint STDCALL mysql_warning_count(MYSQL *mysql); +unsigned int STDCALL mysql_warning_count(MYSQL *mysql); const char * STDCALL mysql_info(MYSQL *mysql); unsigned long STDCALL mysql_thread_id(MYSQL *mysql); const char * STDCALL mysql_character_set_name(MYSQL *mysql); @@ -427,7 +427,7 @@ typedef struct st_mysql_bind /* The following are for internal use. Set by mysql_bind_param */ long bind_length; /* Default length of data */ my_bool long_ended; /* All data supplied for long */ - uint param_number; /* For null count and error messages */ + unsigned int param_number; /* For null count and error messages */ void (*store_param_func)(NET *net, struct st_mysql_bind *param); char *(*fetch_result)(struct st_mysql_bind *, const char *row); } MYSQL_BIND; @@ -448,7 +448,7 @@ typedef struct st_mysql_stmt unsigned long field_count; /* fields count */ unsigned long long_length; /* long buffer alloced length */ unsigned long stmt_id; /* Id for prepared statement */ - uint last_errno; /* error code */ + unsigned int last_errno; /* error code */ enum MY_STMT_STATE state; /* statement state */ char last_error[MYSQL_ERRMSG_SIZE]; /* error message */ my_bool long_alloced; /* flag to indicate long alloced */ @@ -463,14 +463,14 @@ unsigned long STDCALL mysql_param_count(MYSQL_STMT * stmt); my_bool STDCALL mysql_bind_param(MYSQL_STMT * stmt, MYSQL_BIND * bind); my_bool STDCALL mysql_bind_result(MYSQL_STMT * stmt, MYSQL_BIND * bind); my_bool STDCALL mysql_stmt_close(MYSQL_STMT * stmt); -uint STDCALL mysql_stmt_errno(MYSQL_STMT * stmt); +unsigned int STDCALL mysql_stmt_errno(MYSQL_STMT * stmt); const char *STDCALL mysql_stmt_error(MYSQL_STMT * stmt); my_bool STDCALL mysql_commit(MYSQL * mysql); my_bool STDCALL mysql_rollback(MYSQL * mysql); my_bool STDCALL mysql_autocommit(MYSQL * mysql, my_bool auto_mode); int STDCALL mysql_fetch(MYSQL_STMT *stmt); my_bool STDCALL mysql_send_long_data(MYSQL_STMT *stmt, - uint param_number, + unsigned int param_number, const char *data, unsigned long length, my_bool last_data); diff --git a/libmysql/libmysql.def b/libmysql/libmysql.def index c15d6be61f4..a7fb4d378e5 100644 --- a/libmysql/libmysql.def +++ b/libmysql/libmysql.def @@ -1,6 +1,6 @@ LIBRARY LIBMYSQL -DESCRIPTION 'MySQL 4.0 Client Library' -VERSION 5.0 +DESCRIPTION 'MySQL 4.1 Client Library' +VERSION 6.0 EXPORTS mysql_affected_rows mysql_close @@ -59,7 +59,6 @@ EXPORTS list_add list_delete max_allowed_packet - my_casecmp my_init my_end my_strdup diff --git a/sql/ha_innodb.cc b/sql/ha_innodb.cc index b684d9dd4dd..824169467af 100644 --- a/sql/ha_innodb.cc +++ b/sql/ha_innodb.cc @@ -3155,8 +3155,8 @@ innobase_drop_database( memcpy(namebuf, ptr, len); namebuf[len] = '/'; namebuf[len + 1] = '\0'; -#ifdef __WIN__ - casedn_str(namebuf); +#ifdef FN_NO_CASE_SENCE + my_casedn_str(system_charset_info, namebuf); #endif trx = trx_allocate_for_mysql(); diff --git a/sql/init.cc b/sql/init.cc index 052ee16925e..8834fd3a89c 100644 --- a/sql/init.cc +++ b/sql/init.cc @@ -24,7 +24,6 @@ void unireg_init(ulong options) { uint i; double nr; - CHARSET_INFO *cs; DBUG_ENTER("unireg_init"); MYSYS_PROGRAM_DONT_USE_CURSES(); diff --git a/sql/log.cc b/sql/log.cc index 59f99e3460e..8cb1577d745 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -973,7 +973,6 @@ bool MYSQL_LOG::write(THD *thd,enum enum_server_command command, last_time=skr; struct tm tm_tmp; struct tm *start; - ulong length; localtime_r(&skr,&tm_tmp); start=&tm_tmp; /* Note that my_b_write() assumes it knows the length for this */ diff --git a/sql/net_pkg.cc b/sql/net_pkg.cc index 9f91db95052..1da625e776f 100644 --- a/sql/net_pkg.cc +++ b/sql/net_pkg.cc @@ -273,12 +273,12 @@ send_eof(THD *thd, bool no_flush) { if (!no_flush && (thd->client_capabilities & CLIENT_PROTOCOL_41)) { - char buff[5]; + uchar buff[5]; uint tmp= min(thd->total_warn_count, 65535); buff[0]=254; int2store(buff+1, tmp); int2store(buff+3, 0); // No flags yet - VOID(my_net_write(net,buff,5)); + VOID(my_net_write(net,(char*) buff,5)); VOID(net_flush(net)); } else diff --git a/sql/sql_db.cc b/sql/sql_db.cc index 1d843b78d4e..58b12bca00d 100644 --- a/sql/sql_db.cc +++ b/sql/sql_db.cc @@ -69,7 +69,6 @@ static bool write_db_opt(const char *path, HA_CREATE_INFO *create) error=0; my_close(file,MYF(0)); } -exit: return error; } @@ -104,7 +103,7 @@ static bool load_db_opt(const char *path, HA_CREATE_INFO *create) IO_CACHE cache; init_io_cache(&cache, file, IO_SIZE, READ_CACHE, 0, 0, MYF(0)); - while ((int) (nbytes= my_b_gets(&cache, (byte*) buf, sizeof(buf))) > 0) + while ((int) (nbytes= my_b_gets(&cache, (char*) buf, sizeof(buf))) > 0) { char *pos= buf+nbytes-1; /* Remove end space and control characters */ @@ -251,10 +250,8 @@ exit2: int mysql_alter_db(THD *thd, const char *db, HA_CREATE_INFO *create_info) { char path[FN_REFLEN+16]; - MY_DIR *dirp; long result=1; int error = 0; - register File file; uint create_options = create_info ? create_info->options : 0; DBUG_ENTER("mysql_alter_db"); @@ -602,7 +599,7 @@ bool mysql_change_db(THD *thd, const char *name) int mysqld_show_create_db(THD *thd, const char *dbname) { - int length, db_length; + int length; char path[FN_REFLEN], *to; uint db_access; bool found_libchar; diff --git a/sql/sql_lex.h b/sql/sql_lex.h index acf73f34d5d..16c45c8300e 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -210,7 +210,7 @@ private: SELECT_LEX_UNIT - unit of selects (UNION, INTERSECT, ...) group SELECT_LEXs */ -class st_lex; +struct st_lex; class st_select_lex; class THD; class select_result; diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 7902e66043d..e096ef7869e 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1287,6 +1287,7 @@ mysql_execute_command(THD *thd) int res= 0; LEX *lex= &thd->lex; TABLE_LIST *tables= (TABLE_LIST*) lex->select_lex.table_list.first; + TABLE_LIST *cursor; SELECT_LEX *select_lex= &lex->select_lex; SELECT_LEX_UNIT *unit= &lex->unit; DBUG_ENTER("mysql_execute_command"); @@ -1343,7 +1344,7 @@ mysql_execute_command(THD *thd) DBUG_VOID_RETURN; } //check rights - for (TABLE_LIST *cursor= tables; + for (cursor= tables; cursor; cursor= cursor->next) if (cursor->derived) @@ -1361,7 +1362,7 @@ mysql_execute_command(THD *thd) } thd->send_explain_fields(explain_result); // EXPLAIN derived tables - for (TABLE_LIST *cursor= tables; + for (cursor= tables; cursor; cursor= cursor->next) if (cursor->derived) diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index a085795fa76..bd115f0fc1e 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -634,7 +634,6 @@ bool mysql_stmt_prepare(THD *thd, char *packet, uint packet_length) { MEM_ROOT thd_root = thd->mem_root; PREP_STMT stmt; - bool error; DBUG_ENTER("mysql_stmt_prepare"); bzero((char*) &stmt, sizeof(stmt)); diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 09d41e2891b..801a3e556d5 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -171,7 +171,7 @@ int handle_select(THD *thd, LEX *lex, select_result *result) result->abort(); if (res || thd->net.report_error) { - send_error(thd, 0, MYF(0)); + send_error(thd, 0, NullS); res= 1; } delete result; @@ -7176,7 +7176,6 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order, bool distinct,const char *message) { List field_list; - Item *item; List item_list; THD *thd=join->thd; SELECT_LEX *select_lex = &(join->thd->lex.select_lex); @@ -7190,7 +7189,7 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order, if (message) { - item_list.push_back(new Item_int((int)thd->lex.select->select_number)); + item_list.push_back(new Item_int((int32) thd->lex.select->select_number)); item_list.push_back(new Item_string(thd->lex.select->type, strlen(thd->lex.select->type), default_charset_info)); @@ -7217,7 +7216,7 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order, tmp2.length(0); item_list.empty(); - item_list.push_back(new Item_int((int)thd->lex.select->select_number)); + item_list.push_back(new Item_int((int32) thd->lex.select->select_number)); item_list.push_back(new Item_string(thd->lex.select->type, strlen(thd->lex.select->type), default_charset_info)); diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 827067c27d7..8c4c104d180 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -230,7 +230,7 @@ int mysqld_show_table_types(THD *thd) const char *option_name= show_comp_option_name[(int) *types->value]; if (*types->value == SHOW_OPTION_YES && - !strcasecmp(default_type_name, types->type)) + !my_strcasecmp(system_charset_info, default_type_name, types->type)) option_name= "DEFAULT"; net_store_data(packet, option_name); net_store_data(packet, types->comment); @@ -1398,7 +1398,6 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose) int mysqld_show_charsets(THD *thd, const char *wild) { - uint i; char buff[8192]; String packet2(buff,sizeof(buff),default_charset_info); List field_list; @@ -1425,7 +1424,7 @@ int mysqld_show_charsets(THD *thd, const char *wild) net_store_data(&packet2,convert,cs->name); net_store_data(&packet2,(uint32) cs->number); net_store_data(&packet2,(uint32) cs->strxfrm_multiply); - net_store_data(&packet2,(uint32) cs->mbmaxlen ? cs->mbmaxlen : 1); + net_store_data(&packet2,(uint32) (cs->mbmaxlen ? cs->mbmaxlen : 1)); if (my_net_write(&thd->net, (char*) packet2.ptr(),packet2.length())) goto err; diff --git a/sql/sql_union.cc b/sql/sql_union.cc index 1a18759eb5b..c2ef25ce6a1 100644 --- a/sql/sql_union.cc +++ b/sql/sql_union.cc @@ -111,7 +111,7 @@ int st_select_lex_unit::prepare(THD *thd, select_result *result) DBUG_ENTER("st_select_lex_unit::prepare"); this->thd= thd; this->result= result; - SELECT_LEX *lex_select_save= thd->lex.select; + SELECT_LEX *lex_select_save= thd->lex.select, *sl; /* Global option */ if (((void*)(global_parameters)) == ((void*)this)) @@ -179,7 +179,7 @@ int st_select_lex_unit::prepare(THD *thd, select_result *result) // prepare selects joins.empty(); - for (SELECT_LEX *sl= first_select(); sl; sl= sl->next_select()) + for (sl= first_select(); sl; sl= sl->next_select()) { JOIN *join= new JOIN(thd, sl->item_list, sl->options | thd->options | SELECT_NO_UNLOCK | From 8290f609a7a407a86c4442c3c4a0322b736b871e Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 14 Oct 2002 14:33:42 +0300 Subject: [PATCH 2/5] fixed cteate temporary field of subselect bug mysql-test/r/subselect.result: test of cteate temporary field of subselect bug mysql-test/t/subselect.test: test of cteate temporary field of subselect bug --- mysql-test/r/subselect.result | 4 ++++ mysql-test/t/subselect.test | 1 + sql/sql_select.cc | 1 + 3 files changed, 6 insertions(+) diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result index b5b944583da..c365c2ed434 100644 --- a/mysql-test/r/subselect.result +++ b/mysql-test/r/subselect.result @@ -1,6 +1,10 @@ select (select 2); (select 2) 2 +SELECT (SELECT 1) UNION SELECT (SELECT 2); +(SELECT 1) +1 +2 drop table if exists t1,t2,t3,t4,t5,attend,clinic,inscrit; create table t1 (a int); create table t2 (a int, b int); diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test index 120cbcbc05f..dbf45262a1e 100644 --- a/mysql-test/t/subselect.test +++ b/mysql-test/t/subselect.test @@ -1,5 +1,6 @@ select (select 2); +SELECT (SELECT 1) UNION SELECT (SELECT 2); drop table if exists t1,t2,t3,t4,t5,attend,clinic,inscrit; create table t1 (a int); create table t2 (a int, b int); diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 09d41e2891b..f7d585e85f8 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -3605,6 +3605,7 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type, case Item::COND_ITEM: case Item::FIELD_AVG_ITEM: case Item::FIELD_STD_ITEM: + case Item::SUBSELECT_ITEM: /* The following can only happen with 'CREATE TABLE ... SELECT' */ case Item::INT_ITEM: case Item::REAL_ITEM: From 5dcaaf4e04f19f9dc6a4ae4e1ef9746a3ff3cf6b Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 14 Oct 2002 22:41:42 +0300 Subject: [PATCH 3/5] removed annecessary assignment found by Monty --- sql/item_subselect.cc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index de9c7e11313..456ce5f22ba 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -152,9 +152,7 @@ String *Item_singleval_subselect::val_str (String *str) assign_null(); return 0; } - // Assign temporary buffer with stored value - str_value.set(string_value, 0, string_value.length()); - return &str_value; + return &string_value; } Item_exists_subselect::Item_exists_subselect(THD *thd, From 103330a3c03bb7c2652129bb87ec085e566aa67a Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 16 Oct 2002 00:42:59 +0300 Subject: [PATCH 4/5] fixed subselect explain bug mysql-test/r/subselect.result: test for subselect explain bug mysql-test/t/subselect.test: test for subselect explain bug --- mysql-test/r/subselect.result | 24 +++++++-- mysql-test/t/subselect.test | 20 ++++++-- sql/mysql_priv.h | 2 + sql/sql_lex.cc | 2 +- sql/sql_parse.cc | 19 +------ sql/sql_select.cc | 94 ++++++++++++++++++++++++++++------- 6 files changed, 116 insertions(+), 45 deletions(-) diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result index c365c2ed434..2dcafe2c9cb 100644 --- a/mysql-test/r/subselect.result +++ b/mysql-test/r/subselect.result @@ -54,9 +54,9 @@ explain select * from t2 where t2.b=(select a from t3 order by 1 desc limit 1) union (select * from t4 where t4.b=(select max(t2.a)*4 from t2) order by a); id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t2 ALL NULL NULL NULL NULL 2 where used +2 SUBSELECT t3 ALL NULL NULL NULL NULL 3 Using filesort 3 UNION t4 ALL NULL NULL NULL NULL 3 where used; Using filesort 4 SUBSELECT t2 ALL NULL NULL NULL NULL 2 -2 SUBSELECT t3 ALL NULL NULL NULL NULL 3 Using filesort select (select a from t3 where a &list,COND *conds, SELECT_LEX_UNIT *unit, SELECT_LEX *select_lex, bool fake_select_lex); void fix_tables_pointers(SELECT_LEX *select_lex); +int mysql_explain_union(THD *thd, SELECT_LEX_UNIT *unit, + select_result *result); int mysql_explain_select(THD *thd, SELECT_LEX *sl, char const *type, select_result *result); int mysql_union(THD *thd, LEX *lex,select_result *result); diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 46206079084..9f09afc78a6 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -955,6 +955,7 @@ void st_select_lex::init_query() table_list.first= 0; table_list.next= (byte**) &table_list.first; item_list.empty(); + join= 0; } void st_select_lex::init_select() @@ -973,7 +974,6 @@ void st_select_lex::init_select() ftfunc_list= &ftfunc_list_alloc; linkage= UNSPECIFIED_TYPE; depended= having_fix_field= 0; - } /* diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 7902e66043d..bb2fe838546 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1484,24 +1484,7 @@ mysql_execute_command(THD *thd) else thd->send_explain_fields(explain_result); fix_tables_pointers(select_lex); - for ( SELECT_LEX *sl= select_lex; - sl && res == 0; - sl= sl->next_select_in_list()) - { - SELECT_LEX *first= sl->master_unit()->first_select(); - res= mysql_explain_select(thd, sl, - ((select_lex==sl)? - ((sl->next_select_in_list())?"PRIMARY": - "SIMPLE"): - ((sl == first)? - ((sl->depended)?"DEPENDENT SUBSELECT": - "SUBSELECT"): - ((sl->depended)?"DEPENDENT UNION": - "UNION"))), - explain_result); - } - if (res > 0) - res= -res; // mysql_explain_select do not report error + res= mysql_explain_union(thd, &thd->lex.unit, explain_result); MYSQL_LOCK *save_lock= thd->lock; thd->lock= (MYSQL_LOCK *)0; explain_result->send_eof(); diff --git a/sql/sql_select.cc b/sql/sql_select.cc index f7d585e85f8..ac5f922d3a3 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -213,7 +213,7 @@ JOIN::prepare(TABLE_LIST *tables_init, SELECT_LEX_UNIT *unit, bool fake_select_lex) { DBUG_ENTER("JOIN::prepare"); - + conds= conds_init; order= order_init; group_list= group_init; @@ -348,7 +348,7 @@ int JOIN::optimize() { DBUG_ENTER("JOIN::optimize"); - + #ifdef HAVE_REF_TO_FIELDS // Not done yet /* Add HAVING to WHERE if possible */ if (having && !group_list && ! sum_func_count) @@ -1018,36 +1018,60 @@ mysql_select(THD *thd, TABLE_LIST *tables, List &fields, COND *conds, SELECT_LEX_UNIT *unit, SELECT_LEX *select_lex, bool fake_select_lex) { - JOIN *join = new JOIN(thd, fields, select_options, result); - DBUG_ENTER("mysql_select"); - thd->proc_info="init"; - thd->used_tables=0; // Updated by setup_fields - if (join->prepare(tables, conds, order, group, having, proc_param, - select_lex, unit, fake_select_lex)) + bool free_join= 1; + JOIN *join; + if (!fake_select_lex && select_lex->join != 0) { - DBUG_RETURN(-1); + //here is EXPLAIN of subselect or derived table + join= select_lex->join; + join->result= result; + if (!join->procedure && result->prepare(join->fields_list, unit)) + { + DBUG_RETURN(-1); + } + join->select_options= select_options; + free_join= 0; } - switch (join->optimize()) { + else + { + join= new JOIN(thd, fields, select_options, result); + thd->proc_info="init"; + thd->used_tables=0; // Updated by setup_fields + + if (join->prepare(tables, conds, order, group, having, proc_param, + select_lex, unit, fake_select_lex)) + { + DBUG_RETURN(-1); + } + } + + switch (join->optimize()) + { case 1: DBUG_RETURN(join->error); case -1: goto err; - } + } - if (join->global_optimize()) + if (free_join && join->global_optimize()) goto err; join->exec(); err: - thd->limit_found_rows = join->send_records; - thd->examined_row_count = join->examined_rows; - thd->proc_info="end"; - int error= (fake_select_lex?0:join->cleanup(thd)) || thd->net.report_error; - delete join; - DBUG_RETURN(error); + if (free_join) + { + thd->limit_found_rows = join->send_records; + thd->examined_row_count = join->examined_rows; + thd->proc_info="end"; + int error= (fake_select_lex?0:join->cleanup(thd)) || thd->net.report_error; + delete join; + DBUG_RETURN(error); + } + else + DBUG_RETURN(0); } /***************************************************************************** @@ -7366,9 +7390,43 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order, result->send_error(0,NullS); } } + for (SELECT_LEX_UNIT *unit= join->select_lex->first_inner_unit(); + unit; + unit= unit->next_unit()) + { + if (mysql_explain_union(thd, unit, result)) + DBUG_VOID_RETURN; + } DBUG_VOID_RETURN; } +int mysql_explain_union(THD *thd, SELECT_LEX_UNIT *unit, select_result *result) +{ + int res= 0; + SELECT_LEX *first= unit->first_select(); + for (SELECT_LEX *sl= first; + sl; + sl= sl->next_select()) + { + res= mysql_explain_select(thd, sl, + (((&thd->lex.select_lex)==sl)? + ((sl->next_select_in_list())?"PRIMARY": + "SIMPLE"): + ((sl == first)? + ((sl->depended)?"DEPENDENT SUBSELECT": + "SUBSELECT"): + ((sl->depended)?"DEPENDENT UNION": + "UNION"))), + result); + if (res) + break; + + } + if (res > 0) + res= -res; // mysql_explain_select do not report error + return res; +} + int mysql_explain_select(THD *thd, SELECT_LEX *select_lex, char const *type, select_result *result) { From 7bc272a1a9db41d35151a28f5e02d7004cfb10f3 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 16 Oct 2002 08:07:41 +1000 Subject: [PATCH 5/5] Name fix. --- Docs/world.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Docs/world.sql b/Docs/world.sql index 7ddd3787ec6..f253819da2e 100644 --- a/Docs/world.sql +++ b/Docs/world.sql @@ -4334,7 +4334,7 @@ INSERT INTO Country VALUES ('SWZ','Swaziland','Africa','Southern Africa',17364.0 INSERT INTO Country VALUES ('CHE','Switzerland','Europe','Western Europe',41284.00,1499,7160400,79.6,264478.00,256092.00,'Schweiz/Suisse/Svizzera/Svizra','Federation','Adolf Ogi',3248,'CH'); INSERT INTO Country VALUES ('SYR','Syria','Asia','Middle East',185180.00,1941,16125000,68.5,65984.00,64926.00,'Suriya','Republic','Bashar al-Assad',3250,'SY'); INSERT INTO Country VALUES ('TJK','Tajikistan','Asia','Southern and Central Asia',143100.00,1991,6188000,64.1,1990.00,1056.00,'Toçikiston','Republic','Emomali Rahmonov',3261,'TJ'); -INSERT INTO Country VALUES ('TWN','Taiwan, Province of China','Asia','Eastern Asia',36188.00,1945,22256000,76.4,256254.00,263451.00,'T’ai-wan','Republic','Chen Shui-bian',3263,'TW'); +INSERT INTO Country VALUES ('TWN','Taiwan','Asia','Eastern Asia',36188.00,1945,22256000,76.4,256254.00,263451.00,'T’ai-wan','Republic','Chen Shui-bian',3263,'TW'); INSERT INTO Country VALUES ('TZA','Tanzania','Africa','Eastern Africa',883749.00,1961,33517000,52.3,8005.00,7388.00,'Tanzania','Republic','Benjamin William Mkapa',3306,'TZ'); INSERT INTO Country VALUES ('DNK','Denmark','Europe','Nordic Countries',43094.00,800,5330000,76.5,174099.00,169264.00,'Danmark','Constitutional Monarchy','Margrethe II',3315,'DK'); INSERT INTO Country VALUES ('THA','Thailand','Asia','Southeast Asia',513115.00,1350,61399000,68.6,116416.00,153907.00,'Prathet Thai','Constitutional Monarchy','Bhumibol Adulyadej',3320,'TH');