mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
Merge mysql.com:/home/mydev/mysql-5.0
into mysql.com:/home/mydev/mysql-5.0-bug11527
This commit is contained in:
commit
6dcecacf62
190 changed files with 16616 additions and 1772 deletions
|
@ -1273,3 +1273,4 @@ vio/viotest-sslconnect.cpp
|
|||
vio/viotest.cpp
|
||||
zlib/*.ds?
|
||||
zlib/*.vcproj
|
||||
scripts/mysql_upgrade
|
||||
|
|
|
@ -290,6 +290,13 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mysqlmanager", "server-tool
|
|||
{FC369DF4-AEB7-4531-BF34-A638C4363BFE} = {FC369DF4-AEB7-4531-BF34-A638C4363BFE}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gen_lex_hash", "sql\gen_lex_hash.vcproj", "{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{EEC1300B-85A5-497C-B3E1-F708021DF859} = {EEC1300B-85A5-497C-B3E1-F708021DF859}
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF} = {44D9C7DC-6636-4B82-BD01-6876C64017DF}
|
||||
{FC369DF4-AEB7-4531-BF34-A638C4363BFE} = {FC369DF4-AEB7-4531-BF34-A638C4363BFE}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfiguration) = preSolution
|
||||
classic = classic
|
||||
|
@ -298,15 +305,15 @@ Global
|
|||
Embedded_Classic = Embedded_Classic
|
||||
Embedded_Debug = Embedded_Debug
|
||||
Embedded_Pro = Embedded_Pro
|
||||
Embedded_Release = Embedded_Release
|
||||
Embedded_ProGPL = Embedded_ProGPL
|
||||
Embedded_Release = Embedded_Release
|
||||
Max = Max
|
||||
Max nt = Max nt
|
||||
nt = nt
|
||||
pro = pro
|
||||
pro nt = pro nt
|
||||
pro gpl = pro gpl
|
||||
pro gpl nt = pro gpl nt
|
||||
pro nt = pro nt
|
||||
Release = Release
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfiguration) = postSolution
|
||||
|
@ -329,11 +336,11 @@ Global
|
|||
{6EEF697A-3772-48D8-A5BA-EF11B9AC46E3}.nt.ActiveCfg = Max|Win32
|
||||
{6EEF697A-3772-48D8-A5BA-EF11B9AC46E3}.nt.Build.0 = Max|Win32
|
||||
{6EEF697A-3772-48D8-A5BA-EF11B9AC46E3}.pro.ActiveCfg = Max|Win32
|
||||
{6EEF697A-3772-48D8-A5BA-EF11B9AC46E3}.pro nt.ActiveCfg = Max|Win32
|
||||
{6EEF697A-3772-48D8-A5BA-EF11B9AC46E3}.pro gpl.ActiveCfg = Max|Win32
|
||||
{6EEF697A-3772-48D8-A5BA-EF11B9AC46E3}.pro gpl.Build.0 = Max|Win32
|
||||
{6EEF697A-3772-48D8-A5BA-EF11B9AC46E3}.pro gpl nt.ActiveCfg = Max|Win32
|
||||
{6EEF697A-3772-48D8-A5BA-EF11B9AC46E3}.pro gpl nt.Build.0 = Max|Win32
|
||||
{6EEF697A-3772-48D8-A5BA-EF11B9AC46E3}.pro nt.ActiveCfg = Max|Win32
|
||||
{6EEF697A-3772-48D8-A5BA-EF11B9AC46E3}.Release.ActiveCfg = Max|Win32
|
||||
{6EEF697A-3772-48D8-A5BA-EF11B9AC46E3}.Release.Build.0 = Max|Win32
|
||||
{1FD8A136-B86A-4B54-95B0-FA4E2EE2CCBC}.classic.ActiveCfg = Release|Win32
|
||||
|
@ -353,12 +360,12 @@ Global
|
|||
{1FD8A136-B86A-4B54-95B0-FA4E2EE2CCBC}.nt.Build.0 = Release|Win32
|
||||
{1FD8A136-B86A-4B54-95B0-FA4E2EE2CCBC}.pro.ActiveCfg = Release|Win32
|
||||
{1FD8A136-B86A-4B54-95B0-FA4E2EE2CCBC}.pro.Build.0 = Release|Win32
|
||||
{1FD8A136-B86A-4B54-95B0-FA4E2EE2CCBC}.pro nt.ActiveCfg = Release|Win32
|
||||
{1FD8A136-B86A-4B54-95B0-FA4E2EE2CCBC}.pro nt.Build.0 = Release|Win32
|
||||
{1FD8A136-B86A-4B54-95B0-FA4E2EE2CCBC}.pro gpl.ActiveCfg = Release|Win32
|
||||
{1FD8A136-B86A-4B54-95B0-FA4E2EE2CCBC}.pro gpl.Build.0 = Release|Win32
|
||||
{1FD8A136-B86A-4B54-95B0-FA4E2EE2CCBC}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{1FD8A136-B86A-4B54-95B0-FA4E2EE2CCBC}.pro gpl nt.Build.0 = Release|Win32
|
||||
{1FD8A136-B86A-4B54-95B0-FA4E2EE2CCBC}.pro nt.ActiveCfg = Release|Win32
|
||||
{1FD8A136-B86A-4B54-95B0-FA4E2EE2CCBC}.pro nt.Build.0 = Release|Win32
|
||||
{1FD8A136-B86A-4B54-95B0-FA4E2EE2CCBC}.Release.ActiveCfg = Release|Win32
|
||||
{1FD8A136-B86A-4B54-95B0-FA4E2EE2CCBC}.Release.Build.0 = Release|Win32
|
||||
{FC369DF4-AEB7-4531-BF34-A638C4363BFE}.classic.ActiveCfg = Release|Win32
|
||||
|
@ -385,12 +392,12 @@ Global
|
|||
{FC369DF4-AEB7-4531-BF34-A638C4363BFE}.nt.Build.0 = Release|Win32
|
||||
{FC369DF4-AEB7-4531-BF34-A638C4363BFE}.pro.ActiveCfg = Release|Win32
|
||||
{FC369DF4-AEB7-4531-BF34-A638C4363BFE}.pro.Build.0 = Release|Win32
|
||||
{FC369DF4-AEB7-4531-BF34-A638C4363BFE}.pro nt.ActiveCfg = Release|Win32
|
||||
{FC369DF4-AEB7-4531-BF34-A638C4363BFE}.pro nt.Build.0 = Release|Win32
|
||||
{FC369DF4-AEB7-4531-BF34-A638C4363BFE}.pro gpl.ActiveCfg = Release|Win32
|
||||
{FC369DF4-AEB7-4531-BF34-A638C4363BFE}.pro gpl.Build.0 = Release|Win32
|
||||
{FC369DF4-AEB7-4531-BF34-A638C4363BFE}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{FC369DF4-AEB7-4531-BF34-A638C4363BFE}.pro gpl nt.Build.0 = Release|Win32
|
||||
{FC369DF4-AEB7-4531-BF34-A638C4363BFE}.pro nt.ActiveCfg = Release|Win32
|
||||
{FC369DF4-AEB7-4531-BF34-A638C4363BFE}.pro nt.Build.0 = Release|Win32
|
||||
{FC369DF4-AEB7-4531-BF34-A638C4363BFE}.Release.ActiveCfg = Release|Win32
|
||||
{FC369DF4-AEB7-4531-BF34-A638C4363BFE}.Release.Build.0 = Release|Win32
|
||||
{C70A6DC7-7D45-4C16-8654-7E57713A4C04}.classic.ActiveCfg = Release|Win32
|
||||
|
@ -417,12 +424,12 @@ Global
|
|||
{C70A6DC7-7D45-4C16-8654-7E57713A4C04}.nt.Build.0 = Release|Win32
|
||||
{C70A6DC7-7D45-4C16-8654-7E57713A4C04}.pro.ActiveCfg = Release|Win32
|
||||
{C70A6DC7-7D45-4C16-8654-7E57713A4C04}.pro.Build.0 = Release|Win32
|
||||
{C70A6DC7-7D45-4C16-8654-7E57713A4C04}.pro nt.ActiveCfg = Release|Win32
|
||||
{C70A6DC7-7D45-4C16-8654-7E57713A4C04}.pro nt.Build.0 = Release|Win32
|
||||
{C70A6DC7-7D45-4C16-8654-7E57713A4C04}.pro gpl.ActiveCfg = Release|Win32
|
||||
{C70A6DC7-7D45-4C16-8654-7E57713A4C04}.pro gpl.Build.0 = Release|Win32
|
||||
{C70A6DC7-7D45-4C16-8654-7E57713A4C04}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{C70A6DC7-7D45-4C16-8654-7E57713A4C04}.pro gpl nt.Build.0 = Release|Win32
|
||||
{C70A6DC7-7D45-4C16-8654-7E57713A4C04}.pro nt.ActiveCfg = Release|Win32
|
||||
{C70A6DC7-7D45-4C16-8654-7E57713A4C04}.pro nt.Build.0 = Release|Win32
|
||||
{C70A6DC7-7D45-4C16-8654-7E57713A4C04}.Release.ActiveCfg = Release|Win32
|
||||
{C70A6DC7-7D45-4C16-8654-7E57713A4C04}.Release.Build.0 = Release|Win32
|
||||
{13D37150-54D0-46C5-9519-03923243C7C7}.classic.ActiveCfg = Release|Win32
|
||||
|
@ -449,12 +456,12 @@ Global
|
|||
{13D37150-54D0-46C5-9519-03923243C7C7}.nt.Build.0 = nt|Win32
|
||||
{13D37150-54D0-46C5-9519-03923243C7C7}.pro.ActiveCfg = Release|Win32
|
||||
{13D37150-54D0-46C5-9519-03923243C7C7}.pro.Build.0 = Release|Win32
|
||||
{13D37150-54D0-46C5-9519-03923243C7C7}.pro nt.ActiveCfg = nt|Win32
|
||||
{13D37150-54D0-46C5-9519-03923243C7C7}.pro nt.Build.0 = nt|Win32
|
||||
{13D37150-54D0-46C5-9519-03923243C7C7}.pro gpl.ActiveCfg = Release|Win32
|
||||
{13D37150-54D0-46C5-9519-03923243C7C7}.pro gpl.Build.0 = Release|Win32
|
||||
{13D37150-54D0-46C5-9519-03923243C7C7}.pro gpl nt.ActiveCfg = nt|Win32
|
||||
{13D37150-54D0-46C5-9519-03923243C7C7}.pro gpl nt.Build.0 = nt|Win32
|
||||
{13D37150-54D0-46C5-9519-03923243C7C7}.pro nt.ActiveCfg = nt|Win32
|
||||
{13D37150-54D0-46C5-9519-03923243C7C7}.pro nt.Build.0 = nt|Win32
|
||||
{13D37150-54D0-46C5-9519-03923243C7C7}.Release.ActiveCfg = Release|Win32
|
||||
{13D37150-54D0-46C5-9519-03923243C7C7}.Release.Build.0 = Release|Win32
|
||||
{1FC6EB72-1D0F-4E40-8851-1CC5DEB94F0F}.classic.ActiveCfg = Release|Win32
|
||||
|
@ -467,7 +474,6 @@ Global
|
|||
{1FC6EB72-1D0F-4E40-8851-1CC5DEB94F0F}.Embedded_Debug.ActiveCfg = Debug|Win32
|
||||
{1FC6EB72-1D0F-4E40-8851-1CC5DEB94F0F}.Embedded_Pro.ActiveCfg = Release|Win32
|
||||
{1FC6EB72-1D0F-4E40-8851-1CC5DEB94F0F}.Embedded_ProGPL.ActiveCfg = Release|Win32
|
||||
{1FC6EB72-1D0F-4E40-8851-1CC5DEB94F0F}.Embedded_ProGPL.ActiveCfg = Release|Win32
|
||||
{1FC6EB72-1D0F-4E40-8851-1CC5DEB94F0F}.Embedded_Release.ActiveCfg = Release|Win32
|
||||
{1FC6EB72-1D0F-4E40-8851-1CC5DEB94F0F}.Max.ActiveCfg = Release|Win32
|
||||
{1FC6EB72-1D0F-4E40-8851-1CC5DEB94F0F}.Max.Build.0 = Release|Win32
|
||||
|
@ -477,12 +483,12 @@ Global
|
|||
{1FC6EB72-1D0F-4E40-8851-1CC5DEB94F0F}.nt.Build.0 = Release|Win32
|
||||
{1FC6EB72-1D0F-4E40-8851-1CC5DEB94F0F}.pro.ActiveCfg = Release|Win32
|
||||
{1FC6EB72-1D0F-4E40-8851-1CC5DEB94F0F}.pro.Build.0 = Release|Win32
|
||||
{1FC6EB72-1D0F-4E40-8851-1CC5DEB94F0F}.pro nt.ActiveCfg = Release|Win32
|
||||
{1FC6EB72-1D0F-4E40-8851-1CC5DEB94F0F}.pro nt.Build.0 = Release|Win32
|
||||
{1FC6EB72-1D0F-4E40-8851-1CC5DEB94F0F}.pro gpl.ActiveCfg = Release|Win32
|
||||
{1FC6EB72-1D0F-4E40-8851-1CC5DEB94F0F}.pro gpl.Build.0 = Release|Win32
|
||||
{1FC6EB72-1D0F-4E40-8851-1CC5DEB94F0F}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{1FC6EB72-1D0F-4E40-8851-1CC5DEB94F0F}.pro gpl nt.Build.0 = Release|Win32
|
||||
{1FC6EB72-1D0F-4E40-8851-1CC5DEB94F0F}.pro nt.ActiveCfg = Release|Win32
|
||||
{1FC6EB72-1D0F-4E40-8851-1CC5DEB94F0F}.pro nt.Build.0 = Release|Win32
|
||||
{1FC6EB72-1D0F-4E40-8851-1CC5DEB94F0F}.Release.ActiveCfg = Release|Win32
|
||||
{1FC6EB72-1D0F-4E40-8851-1CC5DEB94F0F}.Release.Build.0 = Release|Win32
|
||||
{93CA92A0-D7B8-4FAE-9EBB-D92EFBF631C9}.classic.ActiveCfg = classic|Win32
|
||||
|
@ -502,9 +508,9 @@ Global
|
|||
{93CA92A0-D7B8-4FAE-9EBB-D92EFBF631C9}.Max nt.ActiveCfg = classic|Win32
|
||||
{93CA92A0-D7B8-4FAE-9EBB-D92EFBF631C9}.nt.ActiveCfg = classic|Win32
|
||||
{93CA92A0-D7B8-4FAE-9EBB-D92EFBF631C9}.pro.ActiveCfg = pro|Win32
|
||||
{93CA92A0-D7B8-4FAE-9EBB-D92EFBF631C9}.pro nt.ActiveCfg = pro|Win32
|
||||
{93CA92A0-D7B8-4FAE-9EBB-D92EFBF631C9}.pro gpl.ActiveCfg = Release|Win32
|
||||
{93CA92A0-D7B8-4FAE-9EBB-D92EFBF631C9}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{93CA92A0-D7B8-4FAE-9EBB-D92EFBF631C9}.pro nt.ActiveCfg = pro|Win32
|
||||
{93CA92A0-D7B8-4FAE-9EBB-D92EFBF631C9}.Release.ActiveCfg = Release|Win32
|
||||
{2794E434-7CCE-44DB-B2FB-789ABE53D6B9}.classic.ActiveCfg = Release|Win32
|
||||
{2794E434-7CCE-44DB-B2FB-789ABE53D6B9}.classic.Build.0 = Release|Win32
|
||||
|
@ -525,12 +531,12 @@ Global
|
|||
{2794E434-7CCE-44DB-B2FB-789ABE53D6B9}.nt.Build.0 = Release|Win32
|
||||
{2794E434-7CCE-44DB-B2FB-789ABE53D6B9}.pro.ActiveCfg = Release|Win32
|
||||
{2794E434-7CCE-44DB-B2FB-789ABE53D6B9}.pro.Build.0 = Release|Win32
|
||||
{2794E434-7CCE-44DB-B2FB-789ABE53D6B9}.pro nt.ActiveCfg = Release|Win32
|
||||
{2794E434-7CCE-44DB-B2FB-789ABE53D6B9}.pro nt.Build.0 = Release|Win32
|
||||
{2794E434-7CCE-44DB-B2FB-789ABE53D6B9}.pro gpl.ActiveCfg = Release|Win32
|
||||
{2794E434-7CCE-44DB-B2FB-789ABE53D6B9}.pro gpl.Build.0 = Release|Win32
|
||||
{2794E434-7CCE-44DB-B2FB-789ABE53D6B9}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{2794E434-7CCE-44DB-B2FB-789ABE53D6B9}.pro gpl nt.Build.0 = Release|Win32
|
||||
{2794E434-7CCE-44DB-B2FB-789ABE53D6B9}.pro nt.ActiveCfg = Release|Win32
|
||||
{2794E434-7CCE-44DB-B2FB-789ABE53D6B9}.pro nt.Build.0 = Release|Win32
|
||||
{2794E434-7CCE-44DB-B2FB-789ABE53D6B9}.Release.ActiveCfg = Release|Win32
|
||||
{2794E434-7CCE-44DB-B2FB-789ABE53D6B9}.Release.Build.0 = Release|Win32
|
||||
{B0EC3594-CD67-4364-826E-BA75EF2050F8}.classic.ActiveCfg = classic|Win32
|
||||
|
@ -552,12 +558,12 @@ Global
|
|||
{B0EC3594-CD67-4364-826E-BA75EF2050F8}.nt.Build.0 = Release|Win32
|
||||
{B0EC3594-CD67-4364-826E-BA75EF2050F8}.pro.ActiveCfg = Release|Win32
|
||||
{B0EC3594-CD67-4364-826E-BA75EF2050F8}.pro.Build.0 = Release|Win32
|
||||
{B0EC3594-CD67-4364-826E-BA75EF2050F8}.pro nt.ActiveCfg = Release|Win32
|
||||
{B0EC3594-CD67-4364-826E-BA75EF2050F8}.pro nt.Build.0 = Release|Win32
|
||||
{B0EC3594-CD67-4364-826E-BA75EF2050F8}.pro gpl.ActiveCfg = Release|Win32
|
||||
{B0EC3594-CD67-4364-826E-BA75EF2050F8}.pro gpl.Build.0 = Release|Win32
|
||||
{B0EC3594-CD67-4364-826E-BA75EF2050F8}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{B0EC3594-CD67-4364-826E-BA75EF2050F8}.pro gpl nt.Build.0 = Release|Win32
|
||||
{B0EC3594-CD67-4364-826E-BA75EF2050F8}.pro nt.ActiveCfg = Release|Win32
|
||||
{B0EC3594-CD67-4364-826E-BA75EF2050F8}.pro nt.Build.0 = Release|Win32
|
||||
{B0EC3594-CD67-4364-826E-BA75EF2050F8}.Release.ActiveCfg = Release|Win32
|
||||
{B0EC3594-CD67-4364-826E-BA75EF2050F8}.Release.Build.0 = Release|Win32
|
||||
{262280A8-37D5-4037-BDFB-242468DFB3D2}.classic.ActiveCfg = Release|Win32
|
||||
|
@ -584,12 +590,12 @@ Global
|
|||
{262280A8-37D5-4037-BDFB-242468DFB3D2}.nt.Build.0 = Release|Win32
|
||||
{262280A8-37D5-4037-BDFB-242468DFB3D2}.pro.ActiveCfg = Release|Win32
|
||||
{262280A8-37D5-4037-BDFB-242468DFB3D2}.pro.Build.0 = Release|Win32
|
||||
{262280A8-37D5-4037-BDFB-242468DFB3D2}.pro nt.ActiveCfg = Release|Win32
|
||||
{262280A8-37D5-4037-BDFB-242468DFB3D2}.pro nt.Build.0 = Release|Win32
|
||||
{262280A8-37D5-4037-BDFB-242468DFB3D2}.pro gpl.ActiveCfg = Release|Win32
|
||||
{262280A8-37D5-4037-BDFB-242468DFB3D2}.pro gpl.Build.0 = Release|Win32
|
||||
{262280A8-37D5-4037-BDFB-242468DFB3D2}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{262280A8-37D5-4037-BDFB-242468DFB3D2}.pro gpl nt.Build.0 = Release|Win32
|
||||
{262280A8-37D5-4037-BDFB-242468DFB3D2}.pro nt.ActiveCfg = Release|Win32
|
||||
{262280A8-37D5-4037-BDFB-242468DFB3D2}.pro nt.Build.0 = Release|Win32
|
||||
{262280A8-37D5-4037-BDFB-242468DFB3D2}.Release.ActiveCfg = Release|Win32
|
||||
{262280A8-37D5-4037-BDFB-242468DFB3D2}.Release.Build.0 = Release|Win32
|
||||
{4C5D0EB1-B953-4BE9-A48B-4F3A874E6635}.classic.ActiveCfg = Release|Win32
|
||||
|
@ -611,12 +617,12 @@ Global
|
|||
{4C5D0EB1-B953-4BE9-A48B-4F3A874E6635}.nt.Build.0 = Release|Win32
|
||||
{4C5D0EB1-B953-4BE9-A48B-4F3A874E6635}.pro.ActiveCfg = Release|Win32
|
||||
{4C5D0EB1-B953-4BE9-A48B-4F3A874E6635}.pro.Build.0 = Release|Win32
|
||||
{4C5D0EB1-B953-4BE9-A48B-4F3A874E6635}.pro nt.ActiveCfg = Release|Win32
|
||||
{4C5D0EB1-B953-4BE9-A48B-4F3A874E6635}.pro nt.Build.0 = Release|Win32
|
||||
{4C5D0EB1-B953-4BE9-A48B-4F3A874E6635}.pro gpl.ActiveCfg = Release|Win32
|
||||
{4C5D0EB1-B953-4BE9-A48B-4F3A874E6635}.pro gpl.Build.0 = Release|Win32
|
||||
{4C5D0EB1-B953-4BE9-A48B-4F3A874E6635}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{4C5D0EB1-B953-4BE9-A48B-4F3A874E6635}.pro gpl nt.Build.0 = Release|Win32
|
||||
{4C5D0EB1-B953-4BE9-A48B-4F3A874E6635}.pro nt.ActiveCfg = Release|Win32
|
||||
{4C5D0EB1-B953-4BE9-A48B-4F3A874E6635}.pro nt.Build.0 = Release|Win32
|
||||
{4C5D0EB1-B953-4BE9-A48B-4F3A874E6635}.Release.ActiveCfg = Release|Win32
|
||||
{4C5D0EB1-B953-4BE9-A48B-4F3A874E6635}.Release.Build.0 = Release|Win32
|
||||
{87CD9881-D234-4306-BBC6-0668C6168C0F}.classic.ActiveCfg = classic|Win32
|
||||
|
@ -638,12 +644,12 @@ Global
|
|||
{87CD9881-D234-4306-BBC6-0668C6168C0F}.nt.Build.0 = Release|Win32
|
||||
{87CD9881-D234-4306-BBC6-0668C6168C0F}.pro.ActiveCfg = Release|Win32
|
||||
{87CD9881-D234-4306-BBC6-0668C6168C0F}.pro.Build.0 = Release|Win32
|
||||
{87CD9881-D234-4306-BBC6-0668C6168C0F}.pro nt.ActiveCfg = Release|Win32
|
||||
{87CD9881-D234-4306-BBC6-0668C6168C0F}.pro nt.Build.0 = Release|Win32
|
||||
{87CD9881-D234-4306-BBC6-0668C6168C0F}.pro gpl.ActiveCfg = Release|Win32
|
||||
{87CD9881-D234-4306-BBC6-0668C6168C0F}.pro gpl.Build.0 = Release|Win32
|
||||
{87CD9881-D234-4306-BBC6-0668C6168C0F}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{87CD9881-D234-4306-BBC6-0668C6168C0F}.pro gpl nt.Build.0 = Release|Win32
|
||||
{87CD9881-D234-4306-BBC6-0668C6168C0F}.pro nt.ActiveCfg = Release|Win32
|
||||
{87CD9881-D234-4306-BBC6-0668C6168C0F}.pro nt.Build.0 = Release|Win32
|
||||
{87CD9881-D234-4306-BBC6-0668C6168C0F}.Release.ActiveCfg = Release|Win32
|
||||
{87CD9881-D234-4306-BBC6-0668C6168C0F}.Release.Build.0 = Release|Win32
|
||||
{194F5EE6-9440-4298-A6FE-A9B4B480B44C}.classic.ActiveCfg = classic|Win32
|
||||
|
@ -665,12 +671,12 @@ Global
|
|||
{194F5EE6-9440-4298-A6FE-A9B4B480B44C}.nt.Build.0 = Release|Win32
|
||||
{194F5EE6-9440-4298-A6FE-A9B4B480B44C}.pro.ActiveCfg = Release|Win32
|
||||
{194F5EE6-9440-4298-A6FE-A9B4B480B44C}.pro.Build.0 = Release|Win32
|
||||
{194F5EE6-9440-4298-A6FE-A9B4B480B44C}.pro nt.ActiveCfg = Release|Win32
|
||||
{194F5EE6-9440-4298-A6FE-A9B4B480B44C}.pro nt.Build.0 = Release|Win32
|
||||
{194F5EE6-9440-4298-A6FE-A9B4B480B44C}.pro gpl.ActiveCfg = Release|Win32
|
||||
{194F5EE6-9440-4298-A6FE-A9B4B480B44C}.pro gpl.Build.0 = Release|Win32
|
||||
{194F5EE6-9440-4298-A6FE-A9B4B480B44C}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{194F5EE6-9440-4298-A6FE-A9B4B480B44C}.pro gpl nt.Build.0 = Release|Win32
|
||||
{194F5EE6-9440-4298-A6FE-A9B4B480B44C}.pro nt.ActiveCfg = Release|Win32
|
||||
{194F5EE6-9440-4298-A6FE-A9B4B480B44C}.pro nt.Build.0 = Release|Win32
|
||||
{194F5EE6-9440-4298-A6FE-A9B4B480B44C}.Release.ActiveCfg = Release|Win32
|
||||
{194F5EE6-9440-4298-A6FE-A9B4B480B44C}.Release.Build.0 = Release|Win32
|
||||
{D8E4B489-C5DD-407D-99DB-FE7C7A5A83A0}.classic.ActiveCfg = Release|Win32
|
||||
|
@ -697,12 +703,12 @@ Global
|
|||
{D8E4B489-C5DD-407D-99DB-FE7C7A5A83A0}.nt.Build.0 = Release|Win32
|
||||
{D8E4B489-C5DD-407D-99DB-FE7C7A5A83A0}.pro.ActiveCfg = Release|Win32
|
||||
{D8E4B489-C5DD-407D-99DB-FE7C7A5A83A0}.pro.Build.0 = Release|Win32
|
||||
{D8E4B489-C5DD-407D-99DB-FE7C7A5A83A0}.pro nt.ActiveCfg = Release|Win32
|
||||
{D8E4B489-C5DD-407D-99DB-FE7C7A5A83A0}.pro nt.Build.0 = Release|Win32
|
||||
{D8E4B489-C5DD-407D-99DB-FE7C7A5A83A0}.pro gpl.ActiveCfg = Release|Win32
|
||||
{D8E4B489-C5DD-407D-99DB-FE7C7A5A83A0}.pro gpl.Build.0 = Release|Win32
|
||||
{D8E4B489-C5DD-407D-99DB-FE7C7A5A83A0}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{D8E4B489-C5DD-407D-99DB-FE7C7A5A83A0}.pro gpl nt.Build.0 = Release|Win32
|
||||
{D8E4B489-C5DD-407D-99DB-FE7C7A5A83A0}.pro nt.ActiveCfg = Release|Win32
|
||||
{D8E4B489-C5DD-407D-99DB-FE7C7A5A83A0}.pro nt.Build.0 = Release|Win32
|
||||
{D8E4B489-C5DD-407D-99DB-FE7C7A5A83A0}.Release.ActiveCfg = Release|Win32
|
||||
{D8E4B489-C5DD-407D-99DB-FE7C7A5A83A0}.Release.Build.0 = Release|Win32
|
||||
{EF833A1E-E358-4B6C-9C27-9489E85041CC}.classic.ActiveCfg = classic|Win32
|
||||
|
@ -724,12 +730,12 @@ Global
|
|||
{EF833A1E-E358-4B6C-9C27-9489E85041CC}.nt.Build.0 = Release|Win32
|
||||
{EF833A1E-E358-4B6C-9C27-9489E85041CC}.pro.ActiveCfg = Release|Win32
|
||||
{EF833A1E-E358-4B6C-9C27-9489E85041CC}.pro.Build.0 = Release|Win32
|
||||
{EF833A1E-E358-4B6C-9C27-9489E85041CC}.pro nt.ActiveCfg = Release|Win32
|
||||
{EF833A1E-E358-4B6C-9C27-9489E85041CC}.pro nt.Build.0 = Release|Win32
|
||||
{EF833A1E-E358-4B6C-9C27-9489E85041CC}.pro gpl.ActiveCfg = Release|Win32
|
||||
{EF833A1E-E358-4B6C-9C27-9489E85041CC}.pro gpl.Build.0 = Release|Win32
|
||||
{EF833A1E-E358-4B6C-9C27-9489E85041CC}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{EF833A1E-E358-4B6C-9C27-9489E85041CC}.pro gpl nt.Build.0 = Release|Win32
|
||||
{EF833A1E-E358-4B6C-9C27-9489E85041CC}.pro nt.ActiveCfg = Release|Win32
|
||||
{EF833A1E-E358-4B6C-9C27-9489E85041CC}.pro nt.Build.0 = Release|Win32
|
||||
{EF833A1E-E358-4B6C-9C27-9489E85041CC}.Release.ActiveCfg = Release|Win32
|
||||
{EF833A1E-E358-4B6C-9C27-9489E85041CC}.Release.Build.0 = Release|Win32
|
||||
{F9868FD3-7AE2-486D-BAB3-A299E11F6AC1}.classic.ActiveCfg = classic|Win32
|
||||
|
@ -751,12 +757,12 @@ Global
|
|||
{F9868FD3-7AE2-486D-BAB3-A299E11F6AC1}.nt.Build.0 = Release|Win32
|
||||
{F9868FD3-7AE2-486D-BAB3-A299E11F6AC1}.pro.ActiveCfg = Release|Win32
|
||||
{F9868FD3-7AE2-486D-BAB3-A299E11F6AC1}.pro.Build.0 = Release|Win32
|
||||
{F9868FD3-7AE2-486D-BAB3-A299E11F6AC1}.pro nt.ActiveCfg = Release|Win32
|
||||
{F9868FD3-7AE2-486D-BAB3-A299E11F6AC1}.pro nt.Build.0 = Release|Win32
|
||||
{F9868FD3-7AE2-486D-BAB3-A299E11F6AC1}.pro gpl.ActiveCfg = Release|Win32
|
||||
{F9868FD3-7AE2-486D-BAB3-A299E11F6AC1}.pro gpl.Build.0 = Release|Win32
|
||||
{F9868FD3-7AE2-486D-BAB3-A299E11F6AC1}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{F9868FD3-7AE2-486D-BAB3-A299E11F6AC1}.pro gpl nt.Build.0 = Release|Win32
|
||||
{F9868FD3-7AE2-486D-BAB3-A299E11F6AC1}.pro nt.ActiveCfg = Release|Win32
|
||||
{F9868FD3-7AE2-486D-BAB3-A299E11F6AC1}.pro nt.Build.0 = Release|Win32
|
||||
{F9868FD3-7AE2-486D-BAB3-A299E11F6AC1}.Release.ActiveCfg = Release|Win32
|
||||
{F9868FD3-7AE2-486D-BAB3-A299E11F6AC1}.Release.Build.0 = Release|Win32
|
||||
{D2B00DE0-F6E9-40AF-B90D-A257D014F098}.classic.ActiveCfg = classic|Win32
|
||||
|
@ -778,12 +784,12 @@ Global
|
|||
{D2B00DE0-F6E9-40AF-B90D-A257D014F098}.nt.Build.0 = Release|Win32
|
||||
{D2B00DE0-F6E9-40AF-B90D-A257D014F098}.pro.ActiveCfg = Release|Win32
|
||||
{D2B00DE0-F6E9-40AF-B90D-A257D014F098}.pro.Build.0 = Release|Win32
|
||||
{D2B00DE0-F6E9-40AF-B90D-A257D014F098}.pro nt.ActiveCfg = Release|Win32
|
||||
{D2B00DE0-F6E9-40AF-B90D-A257D014F098}.pro nt.Build.0 = Release|Win32
|
||||
{D2B00DE0-F6E9-40AF-B90D-A257D014F098}.pro gpl.ActiveCfg = Release|Win32
|
||||
{D2B00DE0-F6E9-40AF-B90D-A257D014F098}.pro gpl.Build.0 = Release|Win32
|
||||
{D2B00DE0-F6E9-40AF-B90D-A257D014F098}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{D2B00DE0-F6E9-40AF-B90D-A257D014F098}.pro gpl nt.Build.0 = Release|Win32
|
||||
{D2B00DE0-F6E9-40AF-B90D-A257D014F098}.pro nt.ActiveCfg = Release|Win32
|
||||
{D2B00DE0-F6E9-40AF-B90D-A257D014F098}.pro nt.Build.0 = Release|Win32
|
||||
{D2B00DE0-F6E9-40AF-B90D-A257D014F098}.Release.ActiveCfg = Release|Win32
|
||||
{D2B00DE0-F6E9-40AF-B90D-A257D014F098}.Release.Build.0 = Release|Win32
|
||||
{DC3A4D26-B533-465B-A3C7-9DBBC06DC8BB}.classic.ActiveCfg = classic|Win32
|
||||
|
@ -805,12 +811,12 @@ Global
|
|||
{DC3A4D26-B533-465B-A3C7-9DBBC06DC8BB}.nt.Build.0 = Release|Win32
|
||||
{DC3A4D26-B533-465B-A3C7-9DBBC06DC8BB}.pro.ActiveCfg = Release|Win32
|
||||
{DC3A4D26-B533-465B-A3C7-9DBBC06DC8BB}.pro.Build.0 = Release|Win32
|
||||
{DC3A4D26-B533-465B-A3C7-9DBBC06DC8BB}.pro nt.ActiveCfg = Release|Win32
|
||||
{DC3A4D26-B533-465B-A3C7-9DBBC06DC8BB}.pro nt.Build.0 = Release|Win32
|
||||
{DC3A4D26-B533-465B-A3C7-9DBBC06DC8BB}.pro gpl.ActiveCfg = Release|Win32
|
||||
{DC3A4D26-B533-465B-A3C7-9DBBC06DC8BB}.pro gpl.Build.0 = Release|Win32
|
||||
{DC3A4D26-B533-465B-A3C7-9DBBC06DC8BB}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{DC3A4D26-B533-465B-A3C7-9DBBC06DC8BB}.pro gpl nt.Build.0 = Release|Win32
|
||||
{DC3A4D26-B533-465B-A3C7-9DBBC06DC8BB}.pro nt.ActiveCfg = Release|Win32
|
||||
{DC3A4D26-B533-465B-A3C7-9DBBC06DC8BB}.pro nt.Build.0 = Release|Win32
|
||||
{DC3A4D26-B533-465B-A3C7-9DBBC06DC8BB}.Release.ActiveCfg = Release|Win32
|
||||
{DC3A4D26-B533-465B-A3C7-9DBBC06DC8BB}.Release.Build.0 = Release|Win32
|
||||
{67154F28-D076-419E-B149-819EF548E670}.classic.ActiveCfg = classic|Win32
|
||||
|
@ -832,12 +838,12 @@ Global
|
|||
{67154F28-D076-419E-B149-819EF548E670}.nt.Build.0 = Release|Win32
|
||||
{67154F28-D076-419E-B149-819EF548E670}.pro.ActiveCfg = Release|Win32
|
||||
{67154F28-D076-419E-B149-819EF548E670}.pro.Build.0 = Release|Win32
|
||||
{67154F28-D076-419E-B149-819EF548E670}.pro nt.ActiveCfg = Release|Win32
|
||||
{67154F28-D076-419E-B149-819EF548E670}.pro nt.Build.0 = Release|Win32
|
||||
{67154F28-D076-419E-B149-819EF548E670}.pro gpl.ActiveCfg = Release|Win32
|
||||
{67154F28-D076-419E-B149-819EF548E670}.pro gpl.Build.0 = Release|Win32
|
||||
{67154F28-D076-419E-B149-819EF548E670}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{67154F28-D076-419E-B149-819EF548E670}.pro gpl nt.Build.0 = Release|Win32
|
||||
{67154F28-D076-419E-B149-819EF548E670}.pro nt.ActiveCfg = Release|Win32
|
||||
{67154F28-D076-419E-B149-819EF548E670}.pro nt.Build.0 = Release|Win32
|
||||
{67154F28-D076-419E-B149-819EF548E670}.Release.ActiveCfg = Release|Win32
|
||||
{67154F28-D076-419E-B149-819EF548E670}.Release.Build.0 = Release|Win32
|
||||
{26383276-4843-494B-8BE0-8936ED3EBAAB}.classic.ActiveCfg = Release|Win32
|
||||
|
@ -859,12 +865,12 @@ Global
|
|||
{26383276-4843-494B-8BE0-8936ED3EBAAB}.nt.Build.0 = Release|Win32
|
||||
{26383276-4843-494B-8BE0-8936ED3EBAAB}.pro.ActiveCfg = Release|Win32
|
||||
{26383276-4843-494B-8BE0-8936ED3EBAAB}.pro.Build.0 = Release|Win32
|
||||
{26383276-4843-494B-8BE0-8936ED3EBAAB}.pro nt.ActiveCfg = Release|Win32
|
||||
{26383276-4843-494B-8BE0-8936ED3EBAAB}.pro nt.Build.0 = Release|Win32
|
||||
{26383276-4843-494B-8BE0-8936ED3EBAAB}.pro gpl.ActiveCfg = Release|Win32
|
||||
{26383276-4843-494B-8BE0-8936ED3EBAAB}.pro gpl.Build.0 = Release|Win32
|
||||
{26383276-4843-494B-8BE0-8936ED3EBAAB}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{26383276-4843-494B-8BE0-8936ED3EBAAB}.pro gpl nt.Build.0 = Release|Win32
|
||||
{26383276-4843-494B-8BE0-8936ED3EBAAB}.pro nt.ActiveCfg = Release|Win32
|
||||
{26383276-4843-494B-8BE0-8936ED3EBAAB}.pro nt.Build.0 = Release|Win32
|
||||
{26383276-4843-494B-8BE0-8936ED3EBAAB}.Release.ActiveCfg = Release|Win32
|
||||
{26383276-4843-494B-8BE0-8936ED3EBAAB}.Release.Build.0 = Release|Win32
|
||||
{62E85884-3ACF-4F4C-873B-60B878147890}.classic.ActiveCfg = classic|Win32
|
||||
|
@ -886,12 +892,12 @@ Global
|
|||
{62E85884-3ACF-4F4C-873B-60B878147890}.nt.Build.0 = nt|Win32
|
||||
{62E85884-3ACF-4F4C-873B-60B878147890}.pro.ActiveCfg = pro|Win32
|
||||
{62E85884-3ACF-4F4C-873B-60B878147890}.pro.Build.0 = pro|Win32
|
||||
{62E85884-3ACF-4F4C-873B-60B878147890}.pro nt.ActiveCfg = pro nt|Win32
|
||||
{62E85884-3ACF-4F4C-873B-60B878147890}.pro nt.Build.0 = pro nt|Win32
|
||||
{62E85884-3ACF-4F4C-873B-60B878147890}.pro gpl.ActiveCfg = Release|Win32
|
||||
{62E85884-3ACF-4F4C-873B-60B878147890}.pro gpl.Build.0 = Release|Win32
|
||||
{62E85884-3ACF-4F4C-873B-60B878147890}.pro gpl nt.ActiveCfg = nt|Win32
|
||||
{62E85884-3ACF-4F4C-873B-60B878147890}.pro gpl nt.Build.0 = nt|Win32
|
||||
{62E85884-3ACF-4F4C-873B-60B878147890}.pro nt.ActiveCfg = pro nt|Win32
|
||||
{62E85884-3ACF-4F4C-873B-60B878147890}.pro nt.Build.0 = pro nt|Win32
|
||||
{62E85884-3ACF-4F4C-873B-60B878147890}.Release.ActiveCfg = Release|Win32
|
||||
{62E85884-3ACF-4F4C-873B-60B878147890}.Release.Build.0 = Release|Win32
|
||||
{37D9BA79-302E-4582-A545-CB5FF7982EA3}.classic.ActiveCfg = classic|Win32
|
||||
|
@ -913,12 +919,12 @@ Global
|
|||
{37D9BA79-302E-4582-A545-CB5FF7982EA3}.nt.Build.0 = Release|Win32
|
||||
{37D9BA79-302E-4582-A545-CB5FF7982EA3}.pro.ActiveCfg = pro|Win32
|
||||
{37D9BA79-302E-4582-A545-CB5FF7982EA3}.pro.Build.0 = pro|Win32
|
||||
{37D9BA79-302E-4582-A545-CB5FF7982EA3}.pro nt.ActiveCfg = pro|Win32
|
||||
{37D9BA79-302E-4582-A545-CB5FF7982EA3}.pro nt.Build.0 = pro|Win32
|
||||
{37D9BA79-302E-4582-A545-CB5FF7982EA3}.pro gpl.ActiveCfg = Release|Win32
|
||||
{37D9BA79-302E-4582-A545-CB5FF7982EA3}.pro gpl.Build.0 = Release|Win32
|
||||
{37D9BA79-302E-4582-A545-CB5FF7982EA3}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{37D9BA79-302E-4582-A545-CB5FF7982EA3}.pro gpl nt.Build.0 = Release|Win32
|
||||
{37D9BA79-302E-4582-A545-CB5FF7982EA3}.pro nt.ActiveCfg = pro|Win32
|
||||
{37D9BA79-302E-4582-A545-CB5FF7982EA3}.pro nt.Build.0 = pro|Win32
|
||||
{37D9BA79-302E-4582-A545-CB5FF7982EA3}.Release.ActiveCfg = Release|Win32
|
||||
{37D9BA79-302E-4582-A545-CB5FF7982EA3}.Release.Build.0 = Release|Win32
|
||||
{89F24ECE-9953-40EF-BDF4-B41F5631E92B}.classic.ActiveCfg = classic|Win32
|
||||
|
@ -940,12 +946,12 @@ Global
|
|||
{89F24ECE-9953-40EF-BDF4-B41F5631E92B}.nt.Build.0 = Release|Win32
|
||||
{89F24ECE-9953-40EF-BDF4-B41F5631E92B}.pro.ActiveCfg = Release|Win32
|
||||
{89F24ECE-9953-40EF-BDF4-B41F5631E92B}.pro.Build.0 = Release|Win32
|
||||
{89F24ECE-9953-40EF-BDF4-B41F5631E92B}.pro nt.ActiveCfg = Release|Win32
|
||||
{89F24ECE-9953-40EF-BDF4-B41F5631E92B}.pro nt.Build.0 = Release|Win32
|
||||
{89F24ECE-9953-40EF-BDF4-B41F5631E92B}.pro gpl.ActiveCfg = Release|Win32
|
||||
{89F24ECE-9953-40EF-BDF4-B41F5631E92B}.pro gpl.Build.0 = Release|Win32
|
||||
{89F24ECE-9953-40EF-BDF4-B41F5631E92B}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{89F24ECE-9953-40EF-BDF4-B41F5631E92B}.pro gpl nt.Build.0 = Release|Win32
|
||||
{89F24ECE-9953-40EF-BDF4-B41F5631E92B}.pro nt.ActiveCfg = Release|Win32
|
||||
{89F24ECE-9953-40EF-BDF4-B41F5631E92B}.pro nt.Build.0 = Release|Win32
|
||||
{89F24ECE-9953-40EF-BDF4-B41F5631E92B}.Release.ActiveCfg = Release|Win32
|
||||
{89F24ECE-9953-40EF-BDF4-B41F5631E92B}.Release.Build.0 = Release|Win32
|
||||
{AD95DAD3-6DB9-4F8B-A345-7A39A83AAD3D}.classic.ActiveCfg = classic|Win32
|
||||
|
@ -967,12 +973,12 @@ Global
|
|||
{AD95DAD3-6DB9-4F8B-A345-7A39A83AAD3D}.nt.Build.0 = Release|Win32
|
||||
{AD95DAD3-6DB9-4F8B-A345-7A39A83AAD3D}.pro.ActiveCfg = Release|Win32
|
||||
{AD95DAD3-6DB9-4F8B-A345-7A39A83AAD3D}.pro.Build.0 = Release|Win32
|
||||
{AD95DAD3-6DB9-4F8B-A345-7A39A83AAD3D}.pro nt.ActiveCfg = Release|Win32
|
||||
{AD95DAD3-6DB9-4F8B-A345-7A39A83AAD3D}.pro nt.Build.0 = Release|Win32
|
||||
{AD95DAD3-6DB9-4F8B-A345-7A39A83AAD3D}.pro gpl.ActiveCfg = Release|Win32
|
||||
{AD95DAD3-6DB9-4F8B-A345-7A39A83AAD3D}.pro gpl.Build.0 = Release|Win32
|
||||
{AD95DAD3-6DB9-4F8B-A345-7A39A83AAD3D}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{AD95DAD3-6DB9-4F8B-A345-7A39A83AAD3D}.pro gpl nt.Build.0 = Release|Win32
|
||||
{AD95DAD3-6DB9-4F8B-A345-7A39A83AAD3D}.pro nt.ActiveCfg = Release|Win32
|
||||
{AD95DAD3-6DB9-4F8B-A345-7A39A83AAD3D}.pro nt.Build.0 = Release|Win32
|
||||
{AD95DAD3-6DB9-4F8B-A345-7A39A83AAD3D}.Release.ActiveCfg = Release|Win32
|
||||
{AD95DAD3-6DB9-4F8B-A345-7A39A83AAD3D}.Release.Build.0 = Release|Win32
|
||||
{94B86159-C581-42CD-825D-C69CBC237E5C}.classic.ActiveCfg = Release|Win32
|
||||
|
@ -994,12 +1000,12 @@ Global
|
|||
{94B86159-C581-42CD-825D-C69CBC237E5C}.nt.Build.0 = Release|Win32
|
||||
{94B86159-C581-42CD-825D-C69CBC237E5C}.pro.ActiveCfg = Release|Win32
|
||||
{94B86159-C581-42CD-825D-C69CBC237E5C}.pro.Build.0 = Release|Win32
|
||||
{94B86159-C581-42CD-825D-C69CBC237E5C}.pro nt.ActiveCfg = Release|Win32
|
||||
{94B86159-C581-42CD-825D-C69CBC237E5C}.pro nt.Build.0 = Release|Win32
|
||||
{94B86159-C581-42CD-825D-C69CBC237E5C}.pro gpl.ActiveCfg = Release|Win32
|
||||
{94B86159-C581-42CD-825D-C69CBC237E5C}.pro gpl.Build.0 = Release|Win32
|
||||
{94B86159-C581-42CD-825D-C69CBC237E5C}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{94B86159-C581-42CD-825D-C69CBC237E5C}.pro gpl nt.Build.0 = Release|Win32
|
||||
{94B86159-C581-42CD-825D-C69CBC237E5C}.pro nt.ActiveCfg = Release|Win32
|
||||
{94B86159-C581-42CD-825D-C69CBC237E5C}.pro nt.Build.0 = Release|Win32
|
||||
{94B86159-C581-42CD-825D-C69CBC237E5C}.Release.ActiveCfg = Release|Win32
|
||||
{94B86159-C581-42CD-825D-C69CBC237E5C}.Release.Build.0 = Release|Win32
|
||||
{3737BFE2-EF25-464F-994D-BD28A9F84528}.classic.ActiveCfg = classic|Win32
|
||||
|
@ -1021,12 +1027,12 @@ Global
|
|||
{3737BFE2-EF25-464F-994D-BD28A9F84528}.nt.Build.0 = Release|Win32
|
||||
{3737BFE2-EF25-464F-994D-BD28A9F84528}.pro.ActiveCfg = Release|Win32
|
||||
{3737BFE2-EF25-464F-994D-BD28A9F84528}.pro.Build.0 = Release|Win32
|
||||
{3737BFE2-EF25-464F-994D-BD28A9F84528}.pro nt.ActiveCfg = Release|Win32
|
||||
{3737BFE2-EF25-464F-994D-BD28A9F84528}.pro nt.Build.0 = Release|Win32
|
||||
{3737BFE2-EF25-464F-994D-BD28A9F84528}.pro gpl.ActiveCfg = Release|Win32
|
||||
{3737BFE2-EF25-464F-994D-BD28A9F84528}.pro gpl.Build.0 = Release|Win32
|
||||
{3737BFE2-EF25-464F-994D-BD28A9F84528}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{3737BFE2-EF25-464F-994D-BD28A9F84528}.pro gpl nt.Build.0 = Release|Win32
|
||||
{3737BFE2-EF25-464F-994D-BD28A9F84528}.pro nt.ActiveCfg = Release|Win32
|
||||
{3737BFE2-EF25-464F-994D-BD28A9F84528}.pro nt.Build.0 = Release|Win32
|
||||
{3737BFE2-EF25-464F-994D-BD28A9F84528}.Release.ActiveCfg = Release|Win32
|
||||
{3737BFE2-EF25-464F-994D-BD28A9F84528}.Release.Build.0 = Release|Win32
|
||||
{BA86AE72-0CF5-423D-BBA2-E12B0D72EBFB}.classic.ActiveCfg = Release|Win32
|
||||
|
@ -1053,12 +1059,12 @@ Global
|
|||
{BA86AE72-0CF5-423D-BBA2-E12B0D72EBFB}.nt.Build.0 = Release|Win32
|
||||
{BA86AE72-0CF5-423D-BBA2-E12B0D72EBFB}.pro.ActiveCfg = Release|Win32
|
||||
{BA86AE72-0CF5-423D-BBA2-E12B0D72EBFB}.pro.Build.0 = Release|Win32
|
||||
{BA86AE72-0CF5-423D-BBA2-E12B0D72EBFB}.pro nt.ActiveCfg = Release|Win32
|
||||
{BA86AE72-0CF5-423D-BBA2-E12B0D72EBFB}.pro nt.Build.0 = Release|Win32
|
||||
{BA86AE72-0CF5-423D-BBA2-E12B0D72EBFB}.pro gpl.ActiveCfg = Release|Win32
|
||||
{BA86AE72-0CF5-423D-BBA2-E12B0D72EBFB}.pro gpl.Build.0 = Release|Win32
|
||||
{BA86AE72-0CF5-423D-BBA2-E12B0D72EBFB}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{BA86AE72-0CF5-423D-BBA2-E12B0D72EBFB}.pro gpl nt.Build.0 = Release|Win32
|
||||
{BA86AE72-0CF5-423D-BBA2-E12B0D72EBFB}.pro nt.ActiveCfg = Release|Win32
|
||||
{BA86AE72-0CF5-423D-BBA2-E12B0D72EBFB}.pro nt.Build.0 = Release|Win32
|
||||
{BA86AE72-0CF5-423D-BBA2-E12B0D72EBFB}.Release.ActiveCfg = Release|Win32
|
||||
{BA86AE72-0CF5-423D-BBA2-E12B0D72EBFB}.Release.Build.0 = Release|Win32
|
||||
{DB28DE80-837F-4497-9AA9-CC0A20584C98}.classic.ActiveCfg = Release|Win32
|
||||
|
@ -1085,12 +1091,12 @@ Global
|
|||
{DB28DE80-837F-4497-9AA9-CC0A20584C98}.nt.Build.0 = Release|Win32
|
||||
{DB28DE80-837F-4497-9AA9-CC0A20584C98}.pro.ActiveCfg = Release|Win32
|
||||
{DB28DE80-837F-4497-9AA9-CC0A20584C98}.pro.Build.0 = Release|Win32
|
||||
{DB28DE80-837F-4497-9AA9-CC0A20584C98}.pro nt.ActiveCfg = Release|Win32
|
||||
{DB28DE80-837F-4497-9AA9-CC0A20584C98}.pro nt.Build.0 = Release|Win32
|
||||
{DB28DE80-837F-4497-9AA9-CC0A20584C98}.pro gpl.ActiveCfg = Release|Win32
|
||||
{DB28DE80-837F-4497-9AA9-CC0A20584C98}.pro gpl.Build.0 = Release|Win32
|
||||
{DB28DE80-837F-4497-9AA9-CC0A20584C98}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{DB28DE80-837F-4497-9AA9-CC0A20584C98}.pro gpl nt.Build.0 = Release|Win32
|
||||
{DB28DE80-837F-4497-9AA9-CC0A20584C98}.pro nt.ActiveCfg = Release|Win32
|
||||
{DB28DE80-837F-4497-9AA9-CC0A20584C98}.pro nt.Build.0 = Release|Win32
|
||||
{DB28DE80-837F-4497-9AA9-CC0A20584C98}.Release.ActiveCfg = Release|Win32
|
||||
{DB28DE80-837F-4497-9AA9-CC0A20584C98}.Release.Build.0 = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.classic.ActiveCfg = TLS|Win32
|
||||
|
@ -1117,12 +1123,12 @@ Global
|
|||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.nt.Build.0 = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.pro.ActiveCfg = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.pro.Build.0 = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.pro nt.ActiveCfg = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.pro nt.Build.0 = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.pro gpl.ActiveCfg = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.pro gpl.Build.0 = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.pro gpl nt.Build.0 = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.pro nt.ActiveCfg = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.pro nt.Build.0 = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.Release.ActiveCfg = Release|Win32
|
||||
{44D9C7DC-6636-4B82-BD01-6876C64017DF}.Release.Build.0 = Release|Win32
|
||||
{AC47623D-933C-4A80-83BB-B6AF7CB28B4B}.classic.ActiveCfg = classic|Win32
|
||||
|
@ -1144,12 +1150,12 @@ Global
|
|||
{AC47623D-933C-4A80-83BB-B6AF7CB28B4B}.nt.Build.0 = Release|Win32
|
||||
{AC47623D-933C-4A80-83BB-B6AF7CB28B4B}.pro.ActiveCfg = Release|Win32
|
||||
{AC47623D-933C-4A80-83BB-B6AF7CB28B4B}.pro.Build.0 = Release|Win32
|
||||
{AC47623D-933C-4A80-83BB-B6AF7CB28B4B}.pro nt.ActiveCfg = Release|Win32
|
||||
{AC47623D-933C-4A80-83BB-B6AF7CB28B4B}.pro nt.Build.0 = Release|Win32
|
||||
{AC47623D-933C-4A80-83BB-B6AF7CB28B4B}.pro gpl.ActiveCfg = Release|Win32
|
||||
{AC47623D-933C-4A80-83BB-B6AF7CB28B4B}.pro gpl.Build.0 = Release|Win32
|
||||
{AC47623D-933C-4A80-83BB-B6AF7CB28B4B}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{AC47623D-933C-4A80-83BB-B6AF7CB28B4B}.pro gpl nt.Build.0 = Release|Win32
|
||||
{AC47623D-933C-4A80-83BB-B6AF7CB28B4B}.pro nt.ActiveCfg = Release|Win32
|
||||
{AC47623D-933C-4A80-83BB-B6AF7CB28B4B}.pro nt.Build.0 = Release|Win32
|
||||
{AC47623D-933C-4A80-83BB-B6AF7CB28B4B}.Release.ActiveCfg = Release|Win32
|
||||
{AC47623D-933C-4A80-83BB-B6AF7CB28B4B}.Release.Build.0 = Release|Win32
|
||||
{207E9014-C4D1-4F6D-B76F-BC7DD7E31113}.classic.ActiveCfg = Release|Win32
|
||||
|
@ -1176,12 +1182,12 @@ Global
|
|||
{207E9014-C4D1-4F6D-B76F-BC7DD7E31113}.nt.Build.0 = Release|Win32
|
||||
{207E9014-C4D1-4F6D-B76F-BC7DD7E31113}.pro.ActiveCfg = Release|Win32
|
||||
{207E9014-C4D1-4F6D-B76F-BC7DD7E31113}.pro.Build.0 = Release|Win32
|
||||
{207E9014-C4D1-4F6D-B76F-BC7DD7E31113}.pro nt.ActiveCfg = Release|Win32
|
||||
{207E9014-C4D1-4F6D-B76F-BC7DD7E31113}.pro nt.Build.0 = Release|Win32
|
||||
{207E9014-C4D1-4F6D-B76F-BC7DD7E31113}.pro gpl.ActiveCfg = Release|Win32
|
||||
{207E9014-C4D1-4F6D-B76F-BC7DD7E31113}.pro gpl.Build.0 = Release|Win32
|
||||
{207E9014-C4D1-4F6D-B76F-BC7DD7E31113}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{207E9014-C4D1-4F6D-B76F-BC7DD7E31113}.pro gpl nt.Build.0 = Release|Win32
|
||||
{207E9014-C4D1-4F6D-B76F-BC7DD7E31113}.pro nt.ActiveCfg = Release|Win32
|
||||
{207E9014-C4D1-4F6D-B76F-BC7DD7E31113}.pro nt.Build.0 = Release|Win32
|
||||
{207E9014-C4D1-4F6D-B76F-BC7DD7E31113}.Release.ActiveCfg = Release|Win32
|
||||
{207E9014-C4D1-4F6D-B76F-BC7DD7E31113}.Release.Build.0 = Release|Win32
|
||||
{16699B52-ECC6-4A96-A99F-A043059BA2E7}.classic.ActiveCfg = classic|Win32
|
||||
|
@ -1203,12 +1209,12 @@ Global
|
|||
{16699B52-ECC6-4A96-A99F-A043059BA2E7}.nt.Build.0 = Release|Win32
|
||||
{16699B52-ECC6-4A96-A99F-A043059BA2E7}.pro.ActiveCfg = Release|Win32
|
||||
{16699B52-ECC6-4A96-A99F-A043059BA2E7}.pro.Build.0 = Release|Win32
|
||||
{16699B52-ECC6-4A96-A99F-A043059BA2E7}.pro nt.ActiveCfg = Release|Win32
|
||||
{16699B52-ECC6-4A96-A99F-A043059BA2E7}.pro nt.Build.0 = Release|Win32
|
||||
{16699B52-ECC6-4A96-A99F-A043059BA2E7}.pro gpl.ActiveCfg = Release|Win32
|
||||
{16699B52-ECC6-4A96-A99F-A043059BA2E7}.pro gpl.Build.0 = Release|Win32
|
||||
{16699B52-ECC6-4A96-A99F-A043059BA2E7}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{16699B52-ECC6-4A96-A99F-A043059BA2E7}.pro gpl nt.Build.0 = Release|Win32
|
||||
{16699B52-ECC6-4A96-A99F-A043059BA2E7}.pro nt.ActiveCfg = Release|Win32
|
||||
{16699B52-ECC6-4A96-A99F-A043059BA2E7}.pro nt.Build.0 = Release|Win32
|
||||
{16699B52-ECC6-4A96-A99F-A043059BA2E7}.Release.ActiveCfg = Release|Win32
|
||||
{16699B52-ECC6-4A96-A99F-A043059BA2E7}.Release.Build.0 = Release|Win32
|
||||
{EEC1300B-85A5-497C-B3E1-F708021DF859}.classic.ActiveCfg = Release|Win32
|
||||
|
@ -1235,12 +1241,12 @@ Global
|
|||
{EEC1300B-85A5-497C-B3E1-F708021DF859}.nt.Build.0 = Release|Win32
|
||||
{EEC1300B-85A5-497C-B3E1-F708021DF859}.pro.ActiveCfg = Release|Win32
|
||||
{EEC1300B-85A5-497C-B3E1-F708021DF859}.pro.Build.0 = Release|Win32
|
||||
{EEC1300B-85A5-497C-B3E1-F708021DF859}.pro nt.ActiveCfg = Release|Win32
|
||||
{EEC1300B-85A5-497C-B3E1-F708021DF859}.pro nt.Build.0 = Release|Win32
|
||||
{EEC1300B-85A5-497C-B3E1-F708021DF859}.pro gpl.ActiveCfg = Release|Win32
|
||||
{EEC1300B-85A5-497C-B3E1-F708021DF859}.pro gpl.Build.0 = Release|Win32
|
||||
{EEC1300B-85A5-497C-B3E1-F708021DF859}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{EEC1300B-85A5-497C-B3E1-F708021DF859}.pro gpl nt.Build.0 = Release|Win32
|
||||
{EEC1300B-85A5-497C-B3E1-F708021DF859}.pro nt.ActiveCfg = Release|Win32
|
||||
{EEC1300B-85A5-497C-B3E1-F708021DF859}.pro nt.Build.0 = Release|Win32
|
||||
{EEC1300B-85A5-497C-B3E1-F708021DF859}.Release.ActiveCfg = Release|Win32
|
||||
{EEC1300B-85A5-497C-B3E1-F708021DF859}.Release.Build.0 = Release|Win32
|
||||
{8CB5AB80-05DA-49DA-BC9F-EAC20667E0D0}.classic.ActiveCfg = Release|Win32
|
||||
|
@ -1257,11 +1263,11 @@ Global
|
|||
{8CB5AB80-05DA-49DA-BC9F-EAC20667E0D0}.Max nt.ActiveCfg = Release|Win32
|
||||
{8CB5AB80-05DA-49DA-BC9F-EAC20667E0D0}.nt.ActiveCfg = Release|Win32
|
||||
{8CB5AB80-05DA-49DA-BC9F-EAC20667E0D0}.pro.ActiveCfg = Release|Win32
|
||||
{8CB5AB80-05DA-49DA-BC9F-EAC20667E0D0}.pro nt.ActiveCfg = Release|Win32
|
||||
{8CB5AB80-05DA-49DA-BC9F-EAC20667E0D0}.pro gpl.ActiveCfg = Release|Win32
|
||||
{8CB5AB80-05DA-49DA-BC9F-EAC20667E0D0}.pro gpl.Build.0 = Release|Win32
|
||||
{8CB5AB80-05DA-49DA-BC9F-EAC20667E0D0}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{8CB5AB80-05DA-49DA-BC9F-EAC20667E0D0}.pro gpl nt.Build.0 = Release|Win32
|
||||
{8CB5AB80-05DA-49DA-BC9F-EAC20667E0D0}.pro nt.ActiveCfg = Release|Win32
|
||||
{8CB5AB80-05DA-49DA-BC9F-EAC20667E0D0}.Release.ActiveCfg = Release|Win32
|
||||
{8CB5AB80-05DA-49DA-BC9F-EAC20667E0D0}.Release.Build.0 = Release|Win32
|
||||
{6F01B69C-B1A5-4C45-B3A9-744E1EB0BED5}.classic.ActiveCfg = Release|Win32
|
||||
|
@ -1276,9 +1282,9 @@ Global
|
|||
{6F01B69C-B1A5-4C45-B3A9-744E1EB0BED5}.Max nt.ActiveCfg = Release|Win32
|
||||
{6F01B69C-B1A5-4C45-B3A9-744E1EB0BED5}.nt.ActiveCfg = Release|Win32
|
||||
{6F01B69C-B1A5-4C45-B3A9-744E1EB0BED5}.pro.ActiveCfg = Release|Win32
|
||||
{6F01B69C-B1A5-4C45-B3A9-744E1EB0BED5}.pro nt.ActiveCfg = Release|Win32
|
||||
{6F01B69C-B1A5-4C45-B3A9-744E1EB0BED5}.pro gpl.ActiveCfg = Release|Win32
|
||||
{6F01B69C-B1A5-4C45-B3A9-744E1EB0BED5}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{6F01B69C-B1A5-4C45-B3A9-744E1EB0BED5}.pro nt.ActiveCfg = Release|Win32
|
||||
{6F01B69C-B1A5-4C45-B3A9-744E1EB0BED5}.Release.ActiveCfg = Release|Win32
|
||||
{7FFA3009-E0E1-4E4E-9CDF-F408AA108CC8}.classic.ActiveCfg = Release|Win32
|
||||
{7FFA3009-E0E1-4E4E-9CDF-F408AA108CC8}.classic.Build.0 = Release|Win32
|
||||
|
@ -1299,12 +1305,12 @@ Global
|
|||
{7FFA3009-E0E1-4E4E-9CDF-F408AA108CC8}.nt.Build.0 = Release|Win32
|
||||
{7FFA3009-E0E1-4E4E-9CDF-F408AA108CC8}.pro.ActiveCfg = Release|Win32
|
||||
{7FFA3009-E0E1-4E4E-9CDF-F408AA108CC8}.pro.Build.0 = Release|Win32
|
||||
{7FFA3009-E0E1-4E4E-9CDF-F408AA108CC8}.pro nt.ActiveCfg = Release|Win32
|
||||
{7FFA3009-E0E1-4E4E-9CDF-F408AA108CC8}.pro nt.Build.0 = Release|Win32
|
||||
{7FFA3009-E0E1-4E4E-9CDF-F408AA108CC8}.pro gpl.ActiveCfg = Release|Win32
|
||||
{7FFA3009-E0E1-4E4E-9CDF-F408AA108CC8}.pro gpl.Build.0 = Release|Win32
|
||||
{7FFA3009-E0E1-4E4E-9CDF-F408AA108CC8}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{7FFA3009-E0E1-4E4E-9CDF-F408AA108CC8}.pro gpl nt.Build.0 = Release|Win32
|
||||
{7FFA3009-E0E1-4E4E-9CDF-F408AA108CC8}.pro nt.ActiveCfg = Release|Win32
|
||||
{7FFA3009-E0E1-4E4E-9CDF-F408AA108CC8}.pro nt.Build.0 = Release|Win32
|
||||
{7FFA3009-E0E1-4E4E-9CDF-F408AA108CC8}.Release.ActiveCfg = Release|Win32
|
||||
{7FFA3009-E0E1-4E4E-9CDF-F408AA108CC8}.Release.Build.0 = Release|Win32
|
||||
{F74653C4-8003-4A79-8F53-FC69E0AD7A9B}.classic.ActiveCfg = Release|Win32
|
||||
|
@ -1331,12 +1337,12 @@ Global
|
|||
{F74653C4-8003-4A79-8F53-FC69E0AD7A9B}.nt.Build.0 = Release|Win32
|
||||
{F74653C4-8003-4A79-8F53-FC69E0AD7A9B}.pro.ActiveCfg = Release|Win32
|
||||
{F74653C4-8003-4A79-8F53-FC69E0AD7A9B}.pro.Build.0 = Release|Win32
|
||||
{F74653C4-8003-4A79-8F53-FC69E0AD7A9B}.pro nt.ActiveCfg = Release|Win32
|
||||
{F74653C4-8003-4A79-8F53-FC69E0AD7A9B}.pro nt.Build.0 = Release|Win32
|
||||
{F74653C4-8003-4A79-8F53-FC69E0AD7A9B}.pro gpl.ActiveCfg = Release|Win32
|
||||
{F74653C4-8003-4A79-8F53-FC69E0AD7A9B}.pro gpl.Build.0 = Release|Win32
|
||||
{F74653C4-8003-4A79-8F53-FC69E0AD7A9B}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{F74653C4-8003-4A79-8F53-FC69E0AD7A9B}.pro gpl nt.Build.0 = Release|Win32
|
||||
{F74653C4-8003-4A79-8F53-FC69E0AD7A9B}.pro nt.ActiveCfg = Release|Win32
|
||||
{F74653C4-8003-4A79-8F53-FC69E0AD7A9B}.pro nt.Build.0 = Release|Win32
|
||||
{F74653C4-8003-4A79-8F53-FC69E0AD7A9B}.Release.ActiveCfg = Release|Win32
|
||||
{F74653C4-8003-4A79-8F53-FC69E0AD7A9B}.Release.Build.0 = Release|Win32
|
||||
{8762A9B8-72A9-462E-A9A2-F3265081F8AF}.classic.ActiveCfg = Release|Win32
|
||||
|
@ -1363,12 +1369,12 @@ Global
|
|||
{8762A9B8-72A9-462E-A9A2-F3265081F8AF}.nt.Build.0 = Release|Win32
|
||||
{8762A9B8-72A9-462E-A9A2-F3265081F8AF}.pro.ActiveCfg = Release|Win32
|
||||
{8762A9B8-72A9-462E-A9A2-F3265081F8AF}.pro.Build.0 = Release|Win32
|
||||
{8762A9B8-72A9-462E-A9A2-F3265081F8AF}.pro nt.ActiveCfg = Release|Win32
|
||||
{8762A9B8-72A9-462E-A9A2-F3265081F8AF}.pro nt.Build.0 = Release|Win32
|
||||
{8762A9B8-72A9-462E-A9A2-F3265081F8AF}.pro gpl.ActiveCfg = Release|Win32
|
||||
{8762A9B8-72A9-462E-A9A2-F3265081F8AF}.pro gpl.Build.0 = Release|Win32
|
||||
{8762A9B8-72A9-462E-A9A2-F3265081F8AF}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{8762A9B8-72A9-462E-A9A2-F3265081F8AF}.pro gpl nt.Build.0 = Release|Win32
|
||||
{8762A9B8-72A9-462E-A9A2-F3265081F8AF}.pro nt.ActiveCfg = Release|Win32
|
||||
{8762A9B8-72A9-462E-A9A2-F3265081F8AF}.pro nt.Build.0 = Release|Win32
|
||||
{8762A9B8-72A9-462E-A9A2-F3265081F8AF}.Release.ActiveCfg = Release|Win32
|
||||
{8762A9B8-72A9-462E-A9A2-F3265081F8AF}.Release.Build.0 = Release|Win32
|
||||
{8961F149-C68A-4154-A499-A2AB39E607E8}.classic.ActiveCfg = classic|Win32
|
||||
|
@ -1390,12 +1396,12 @@ Global
|
|||
{8961F149-C68A-4154-A499-A2AB39E607E8}.nt.Build.0 = Release|Win32
|
||||
{8961F149-C68A-4154-A499-A2AB39E607E8}.pro.ActiveCfg = Release|Win32
|
||||
{8961F149-C68A-4154-A499-A2AB39E607E8}.pro.Build.0 = Release|Win32
|
||||
{8961F149-C68A-4154-A499-A2AB39E607E8}.pro nt.ActiveCfg = Release|Win32
|
||||
{8961F149-C68A-4154-A499-A2AB39E607E8}.pro nt.Build.0 = Release|Win32
|
||||
{8961F149-C68A-4154-A499-A2AB39E607E8}.pro gpl.ActiveCfg = Release|Win32
|
||||
{8961F149-C68A-4154-A499-A2AB39E607E8}.pro gpl.Build.0 = Release|Win32
|
||||
{8961F149-C68A-4154-A499-A2AB39E607E8}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{8961F149-C68A-4154-A499-A2AB39E607E8}.pro gpl nt.Build.0 = Release|Win32
|
||||
{8961F149-C68A-4154-A499-A2AB39E607E8}.pro nt.ActiveCfg = Release|Win32
|
||||
{8961F149-C68A-4154-A499-A2AB39E607E8}.pro nt.Build.0 = Release|Win32
|
||||
{8961F149-C68A-4154-A499-A2AB39E607E8}.Release.ActiveCfg = Release|Win32
|
||||
{8961F149-C68A-4154-A499-A2AB39E607E8}.Release.Build.0 = Release|Win32
|
||||
{DA224DAB-5006-42BE-BB77-16E8BE5326D5}.classic.ActiveCfg = Release|Win32
|
||||
|
@ -1416,12 +1422,12 @@ Global
|
|||
{DA224DAB-5006-42BE-BB77-16E8BE5326D5}.nt.Build.0 = Release|Win32
|
||||
{DA224DAB-5006-42BE-BB77-16E8BE5326D5}.pro.ActiveCfg = Release|Win32
|
||||
{DA224DAB-5006-42BE-BB77-16E8BE5326D5}.pro.Build.0 = Release|Win32
|
||||
{DA224DAB-5006-42BE-BB77-16E8BE5326D5}.pro nt.ActiveCfg = Release|Win32
|
||||
{DA224DAB-5006-42BE-BB77-16E8BE5326D5}.pro nt.Build.0 = Release|Win32
|
||||
{DA224DAB-5006-42BE-BB77-16E8BE5326D5}.pro gpl.ActiveCfg = Release|Win32
|
||||
{DA224DAB-5006-42BE-BB77-16E8BE5326D5}.pro gpl.Build.0 = Release|Win32
|
||||
{DA224DAB-5006-42BE-BB77-16E8BE5326D5}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{DA224DAB-5006-42BE-BB77-16E8BE5326D5}.pro gpl nt.Build.0 = Release|Win32
|
||||
{DA224DAB-5006-42BE-BB77-16E8BE5326D5}.pro nt.ActiveCfg = Release|Win32
|
||||
{DA224DAB-5006-42BE-BB77-16E8BE5326D5}.pro nt.Build.0 = Release|Win32
|
||||
{DA224DAB-5006-42BE-BB77-16E8BE5326D5}.Release.ActiveCfg = Release|Win32
|
||||
{DA224DAB-5006-42BE-BB77-16E8BE5326D5}.Release.Build.0 = Release|Win32
|
||||
{6189F838-21C6-42A1-B2D0-9146316573F7}.classic.ActiveCfg = Release|Win32
|
||||
|
@ -1443,12 +1449,12 @@ Global
|
|||
{6189F838-21C6-42A1-B2D0-9146316573F7}.nt.Build.0 = Release|Win32
|
||||
{6189F838-21C6-42A1-B2D0-9146316573F7}.pro.ActiveCfg = Release|Win32
|
||||
{6189F838-21C6-42A1-B2D0-9146316573F7}.pro.Build.0 = Release|Win32
|
||||
{6189F838-21C6-42A1-B2D0-9146316573F7}.pro nt.ActiveCfg = Release|Win32
|
||||
{6189F838-21C6-42A1-B2D0-9146316573F7}.pro nt.Build.0 = Release|Win32
|
||||
{6189F838-21C6-42A1-B2D0-9146316573F7}.pro gpl.ActiveCfg = Release|Win32
|
||||
{6189F838-21C6-42A1-B2D0-9146316573F7}.pro gpl.Build.0 = Release|Win32
|
||||
{6189F838-21C6-42A1-B2D0-9146316573F7}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{6189F838-21C6-42A1-B2D0-9146316573F7}.pro gpl nt.Build.0 = Release|Win32
|
||||
{6189F838-21C6-42A1-B2D0-9146316573F7}.pro nt.ActiveCfg = Release|Win32
|
||||
{6189F838-21C6-42A1-B2D0-9146316573F7}.pro nt.Build.0 = Release|Win32
|
||||
{6189F838-21C6-42A1-B2D0-9146316573F7}.Release.ActiveCfg = Release|Win32
|
||||
{6189F838-21C6-42A1-B2D0-9146316573F7}.Release.Build.0 = Release|Win32
|
||||
{6D524B3E-210A-4FCD-8D41-FEC0D21E83AC}.classic.ActiveCfg = Release|Win32
|
||||
|
@ -1475,14 +1481,46 @@ Global
|
|||
{6D524B3E-210A-4FCD-8D41-FEC0D21E83AC}.nt.Build.0 = Release|Win32
|
||||
{6D524B3E-210A-4FCD-8D41-FEC0D21E83AC}.pro.ActiveCfg = Release|Win32
|
||||
{6D524B3E-210A-4FCD-8D41-FEC0D21E83AC}.pro.Build.0 = Release|Win32
|
||||
{6D524B3E-210A-4FCD-8D41-FEC0D21E83AC}.pro nt.ActiveCfg = Release|Win32
|
||||
{6D524B3E-210A-4FCD-8D41-FEC0D21E83AC}.pro nt.Build.0 = Release|Win32
|
||||
{6D524B3E-210A-4FCD-8D41-FEC0D21E83AC}.pro gpl.ActiveCfg = Release|Win32
|
||||
{6D524B3E-210A-4FCD-8D41-FEC0D21E83AC}.pro gpl.Build.0 = Release|Win32
|
||||
{6D524B3E-210A-4FCD-8D41-FEC0D21E83AC}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{6D524B3E-210A-4FCD-8D41-FEC0D21E83AC}.pro gpl nt.Build.0 = Release|Win32
|
||||
{6D524B3E-210A-4FCD-8D41-FEC0D21E83AC}.pro nt.ActiveCfg = Release|Win32
|
||||
{6D524B3E-210A-4FCD-8D41-FEC0D21E83AC}.pro nt.Build.0 = Release|Win32
|
||||
{6D524B3E-210A-4FCD-8D41-FEC0D21E83AC}.Release.ActiveCfg = Release|Win32
|
||||
{6D524B3E-210A-4FCD-8D41-FEC0D21E83AC}.Release.Build.0 = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.classic.ActiveCfg = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.classic.Build.0 = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.classic nt.ActiveCfg = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.classic nt.Build.0 = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.Debug.ActiveCfg = Debug|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.Debug.Build.0 = Debug|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.Embedded_Classic.ActiveCfg = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.Embedded_Classic.Build.0 = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.Embedded_Debug.ActiveCfg = Debug|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.Embedded_Debug.Build.0 = Debug|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.Embedded_Pro.ActiveCfg = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.Embedded_Pro.Build.0 = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.Embedded_ProGPL.ActiveCfg = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.Embedded_ProGPL.Build.0 = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.Embedded_Release.ActiveCfg = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.Embedded_Release.Build.0 = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.Max.ActiveCfg = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.Max.Build.0 = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.Max nt.ActiveCfg = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.Max nt.Build.0 = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.nt.ActiveCfg = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.nt.Build.0 = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.pro.ActiveCfg = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.pro.Build.0 = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.pro gpl.ActiveCfg = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.pro gpl.Build.0 = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.pro gpl nt.ActiveCfg = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.pro gpl nt.Build.0 = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.pro nt.ActiveCfg = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.pro nt.Build.0 = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.Release.ActiveCfg = Release|Win32
|
||||
{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}.Release.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
EndGlobalSection
|
||||
|
|
98
VC++Files/sql/gen_lex_hash.dsp
Normal file
98
VC++Files/sql/gen_lex_hash.dsp
Normal file
|
@ -0,0 +1,98 @@
|
|||
# Microsoft Developer Studio Project File - Name="gen_lex_hash" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Console Application" 0x0103
|
||||
|
||||
CFG=gen_lex_hash - Win32 Debug
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "gen_lex_hash.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "gen_lex_hash.mak" CFG="gen_lex_hash - Win32 Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "gen_lex_hash - Win32 Release" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE "gen_lex_hash - Win32 Debug" (based on "Win32 (x86) Console Application")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "gen_lex_hash - Win32 Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "gen_lex_hash___Win32_Release"
|
||||
# PROP BASE Intermediate_Dir "gen_lex_hash___Win32_Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "gen_lex_hash___Win32_Release"
|
||||
# PROP Intermediate_Dir "gen_lex_hash___Win32_Release"
|
||||
# PROP Target_Dir ""
|
||||
MTL=midl.exe
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD BASE RSC /l 0x419 /d "NDEBUG"
|
||||
# ADD RSC /l 0x419 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# 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 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 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
|
||||
|
||||
!ELSEIF "$(CFG)" == "gen_lex_hash - Win32 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "Debug"
|
||||
# PROP BASE Intermediate_Dir "Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Debug"
|
||||
# PROP Intermediate_Dir "Debug"
|
||||
# PROP Target_Dir ""
|
||||
MTL=midl.exe
|
||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
||||
# ADD BASE RSC /l 0x419 /d "_DEBUG"
|
||||
# ADD RSC /l 0x419 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# 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 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 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
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "gen_lex_hash - Win32 Release"
|
||||
# Name "gen_lex_hash - Win32 Debug"
|
||||
# Begin Group "Source Files"
|
||||
|
||||
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
|
||||
# End Group
|
||||
# Begin Group "Header Files"
|
||||
|
||||
# PROP Default_Filter "h;hpp;hxx;hm;inl"
|
||||
# End Group
|
||||
# Begin Group "Resource Files"
|
||||
|
||||
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||
# End Group
|
||||
# End Target
|
||||
# End Project
|
158
VC++Files/sql/gen_lex_hash.vcproj
Normal file
158
VC++Files/sql/gen_lex_hash.vcproj
Normal file
|
@ -0,0 +1,158 @@
|
|||
<?xml version="1.0" encoding="windows-1251"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="7.10"
|
||||
Name="gen_lex_hash"
|
||||
ProjectGUID="{D593B5D1-8EFC-44FE-9937-A5AAD1E619A1}"
|
||||
SccProjectName=""
|
||||
SccLocalPath="">
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"/>
|
||||
</Platforms>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory=".\Debug"
|
||||
IntermediateDirectory=".\Debug"
|
||||
ConfigurationType="1"
|
||||
UseOfMFC="0"
|
||||
ATLMinimizesCRunTimeLibraryUsage="FALSE"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="../include"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="1"
|
||||
UsePrecompiledHeader="2"
|
||||
PrecompiledHeaderFile=".\Debug/gen_lex_hash.pch"
|
||||
AssemblerListingLocation=".\Debug/"
|
||||
ObjectFile=".\Debug/"
|
||||
ProgramDataBaseFileName=".\Debug/"
|
||||
WarningLevel="3"
|
||||
SuppressStartupBanner="TRUE"
|
||||
DebugInformationFormat="4"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="Ws2_32.lib"
|
||||
OutputFile="../sql/gen_lex_hash.exe"
|
||||
LinkIncremental="1"
|
||||
SuppressStartupBanner="TRUE"
|
||||
AdditionalLibraryDirectories="../lib_release"
|
||||
GenerateDebugInformation="TRUE"
|
||||
ProgramDatabaseFile=".\Debug/gen_lex_hash.pdb"
|
||||
SubSystem="1"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TypeLibraryName=".\Debug/gen_lex_hash.tlb"
|
||||
HeaderFileName=""/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="_DEBUG"
|
||||
Culture="1049"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory=".\gen_lex_hash___Win32_Release"
|
||||
IntermediateDirectory=".\gen_lex_hash___Win32_Release"
|
||||
ConfigurationType="1"
|
||||
UseOfMFC="0"
|
||||
ATLMinimizesCRunTimeLibraryUsage="FALSE"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
InlineFunctionExpansion="1"
|
||||
AdditionalIncludeDirectories="../include"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||
StringPooling="TRUE"
|
||||
RuntimeLibrary="0"
|
||||
EnableFunctionLevelLinking="TRUE"
|
||||
UsePrecompiledHeader="2"
|
||||
PrecompiledHeaderFile=".\gen_lex_hash___Win32_Release/gen_lex_hash.pch"
|
||||
AssemblerListingLocation=".\gen_lex_hash___Win32_Release/"
|
||||
ObjectFile=".\gen_lex_hash___Win32_Release/"
|
||||
ProgramDataBaseFileName=".\gen_lex_hash___Win32_Release/"
|
||||
WarningLevel="3"
|
||||
SuppressStartupBanner="TRUE"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="Ws2_32.lib"
|
||||
OutputFile="../sql/gen_lex_hash.exe"
|
||||
LinkIncremental="1"
|
||||
SuppressStartupBanner="TRUE"
|
||||
AdditionalLibraryDirectories="../lib_release"
|
||||
ProgramDatabaseFile=".\gen_lex_hash___Win32_Release/gen_lex_hash.pdb"
|
||||
SubSystem="1"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TypeLibraryName=".\gen_lex_hash___Win32_Release/gen_lex_hash.tlb"
|
||||
HeaderFileName=""/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="NDEBUG"
|
||||
Culture="1049"/>
|
||||
<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;rc;def;r;odl;idl;hpj;bat">
|
||||
<File
|
||||
RelativePath=".\gen_lex_hash.cpp">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl">
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
|
@ -34,7 +34,7 @@ static my_bool opt_alldbs = 0, opt_check_only_changed = 0, opt_extended = 0,
|
|||
opt_compress = 0, opt_databases = 0, opt_fast = 0,
|
||||
opt_medium_check = 0, opt_quick = 0, opt_all_in_1 = 0,
|
||||
opt_silent = 0, opt_auto_repair = 0, ignore_errors = 0,
|
||||
tty_password = 0, opt_frm = 0;
|
||||
tty_password = 0, opt_frm = 0, opt_upgrade= 0;
|
||||
static uint verbose = 0, opt_mysql_port=0;
|
||||
static my_string opt_mysql_unix_port = 0;
|
||||
static char *opt_password = 0, *current_user = 0,
|
||||
|
@ -78,6 +78,9 @@ static struct my_option my_long_options[] =
|
|||
{"check-only-changed", 'C',
|
||||
"Check only tables that have changed since last check or haven't been closed properly.",
|
||||
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"check-upgrade", 'g',
|
||||
"Check tables for version-dependent changes. May be used with --auto-repair to correct tables requiring version-dependent updates.",
|
||||
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"compress", OPT_COMPRESS, "Use compression in server/client protocol.",
|
||||
(gptr*) &opt_compress, (gptr*) &opt_compress, 0, GET_BOOL, NO_ARG, 0, 0, 0,
|
||||
0, 0, 0},
|
||||
|
@ -268,6 +271,10 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
|||
case 'r':
|
||||
what_to_do = DO_REPAIR;
|
||||
break;
|
||||
case 'g':
|
||||
what_to_do= DO_CHECK;
|
||||
opt_upgrade= 1;
|
||||
break;
|
||||
case 'W':
|
||||
#ifdef __WIN__
|
||||
opt_protocol = MYSQL_PROTOCOL_PIPE;
|
||||
|
@ -525,6 +532,7 @@ static int handle_request_for_tables(char *tables, uint length)
|
|||
if (opt_medium_check) end = strmov(end, " MEDIUM"); /* Default */
|
||||
if (opt_extended) end = strmov(end, " EXTENDED");
|
||||
if (opt_check_only_changed) end = strmov(end, " CHANGED");
|
||||
if (opt_upgrade) end = strmov(end, " FOR UPGRADE");
|
||||
break;
|
||||
case DO_REPAIR:
|
||||
op = "REPAIR";
|
||||
|
|
|
@ -851,6 +851,27 @@ static int mysql_query_with_error_report(MYSQL *mysql_con, MYSQL_RES **res,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
Open a new .sql file to dump the table or view into
|
||||
|
||||
SYNOPSIS
|
||||
open_sql_file_for_table
|
||||
name name of the table or view
|
||||
|
||||
RETURN VALUES
|
||||
0 Failed to open file
|
||||
> 0 Handle of the open file
|
||||
*/
|
||||
static FILE* open_sql_file_for_table(const char* table)
|
||||
{
|
||||
FILE* res;
|
||||
char filename[FN_REFLEN], tmp_path[FN_REFLEN];
|
||||
convert_dirname(tmp_path,path,NullS);
|
||||
res= my_fopen(fn_format(filename, table, tmp_path, ".sql", 4),
|
||||
O_WRONLY, MYF(MY_WME));
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
static void safe_exit(int error)
|
||||
{
|
||||
|
@ -1402,11 +1423,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||
|
||||
if (path)
|
||||
{
|
||||
char filename[FN_REFLEN], tmp_path[FN_REFLEN];
|
||||
convert_dirname(tmp_path,path,NullS);
|
||||
sql_file= my_fopen(fn_format(filename, table, tmp_path, ".sql", 4),
|
||||
O_WRONLY, MYF(MY_WME));
|
||||
if (!sql_file) /* If file couldn't be opened */
|
||||
if (!(sql_file= open_sql_file_for_table(table)))
|
||||
{
|
||||
safe_exit(EX_MYSQLERR);
|
||||
DBUG_RETURN(0);
|
||||
|
@ -1568,11 +1585,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||
{
|
||||
if (path)
|
||||
{
|
||||
char filename[FN_REFLEN], tmp_path[FN_REFLEN];
|
||||
convert_dirname(tmp_path,path,NullS);
|
||||
sql_file= my_fopen(fn_format(filename, table, tmp_path, ".sql", 4),
|
||||
O_WRONLY, MYF(MY_WME));
|
||||
if (!sql_file) /* If file couldn't be opened */
|
||||
if (!(sql_file= open_sql_file_for_table(table)))
|
||||
{
|
||||
safe_exit(EX_MYSQLERR);
|
||||
DBUG_RETURN(0);
|
||||
|
@ -3205,6 +3218,41 @@ cleanup:
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
Replace a substring
|
||||
|
||||
SYNOPSIS
|
||||
replace
|
||||
ds_str The string to search and perform the replace in
|
||||
search_str The string to search for
|
||||
search_len Length of the string to search for
|
||||
replace_str The string to replace with
|
||||
replace_len Length of the string to replace with
|
||||
|
||||
RETURN
|
||||
0 String replaced
|
||||
1 Could not find search_str in str
|
||||
*/
|
||||
|
||||
static int replace(DYNAMIC_STRING *ds_str,
|
||||
const char *search_str, ulong search_len,
|
||||
const char *replace_str, ulong replace_len)
|
||||
{
|
||||
DYNAMIC_STRING ds_tmp;
|
||||
const char *start= strstr(ds_str->str, search_str);
|
||||
if (!start)
|
||||
return 1;
|
||||
init_dynamic_string(&ds_tmp, "",
|
||||
ds_str->length + replace_len, 256);
|
||||
dynstr_append_mem(&ds_tmp, ds_str->str, start - ds_str->str);
|
||||
dynstr_append_mem(&ds_tmp, replace_str, replace_len);
|
||||
dynstr_append(&ds_tmp, start + search_len);
|
||||
dynstr_set(ds_str, ds_tmp.str);
|
||||
dynstr_free(&ds_tmp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Getting VIEW structure
|
||||
|
||||
|
@ -3226,11 +3274,11 @@ static my_bool get_view_structure(char *table, char* db)
|
|||
char *result_table, *opt_quoted_table;
|
||||
char table_buff[NAME_LEN*2+3];
|
||||
char table_buff2[NAME_LEN*2+3];
|
||||
char buff[20+FN_REFLEN];
|
||||
char query[QUERY_LENGTH];
|
||||
FILE *sql_file = md_result_file;
|
||||
DBUG_ENTER("get_view_structure");
|
||||
|
||||
if (tFlag)
|
||||
if (tFlag) /* Don't write table creation info */
|
||||
DBUG_RETURN(0);
|
||||
|
||||
if (verbose)
|
||||
|
@ -3244,29 +3292,14 @@ static my_bool get_view_structure(char *table, char* db)
|
|||
result_table= quote_name(table, table_buff, 1);
|
||||
opt_quoted_table= quote_name(table, table_buff2, 0);
|
||||
|
||||
sprintf(buff,"show create table %s", result_table);
|
||||
if (mysql_query(sock, buff))
|
||||
my_snprintf(query, sizeof(query), "SHOW CREATE TABLE %s", result_table);
|
||||
if (mysql_query_with_error_report(sock, &table_res, query))
|
||||
{
|
||||
fprintf(stderr, "%s: Can't get CREATE TABLE for view %s (%s)\n",
|
||||
my_progname, result_table, mysql_error(sock));
|
||||
safe_exit(EX_MYSQLERR);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
if (path)
|
||||
{
|
||||
char filename[FN_REFLEN], tmp_path[FN_REFLEN];
|
||||
convert_dirname(tmp_path,path,NullS);
|
||||
sql_file= my_fopen(fn_format(filename, table, tmp_path, ".sql", 4),
|
||||
O_WRONLY, MYF(MY_WME));
|
||||
if (!sql_file) /* If file couldn't be opened */
|
||||
{
|
||||
safe_exit(EX_MYSQLERR);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
write_header(sql_file, db);
|
||||
}
|
||||
table_res= mysql_store_result(sock);
|
||||
/* Check if this is a view */
|
||||
field= mysql_fetch_field_direct(table_res, 0);
|
||||
if (strcmp(field->name, "View") != 0)
|
||||
{
|
||||
|
@ -3275,6 +3308,17 @@ static my_bool get_view_structure(char *table, char* db)
|
|||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
/* If requested, open separate .sql file for this view */
|
||||
if (path)
|
||||
{
|
||||
if (!(sql_file= open_sql_file_for_table(table)))
|
||||
{
|
||||
safe_exit(EX_MYSQLERR);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
write_header(sql_file, db);
|
||||
}
|
||||
|
||||
if (!opt_xml && opt_comments)
|
||||
{
|
||||
fprintf(sql_file, "\n--\n-- View structure for view %s\n--\n\n",
|
||||
|
@ -3290,11 +3334,102 @@ static my_bool get_view_structure(char *table, char* db)
|
|||
check_io(sql_file);
|
||||
}
|
||||
|
||||
row= mysql_fetch_row(table_res);
|
||||
fprintf(sql_file, "/*!50001 %s*/;\n", row[1]);
|
||||
check_io(sql_file);
|
||||
mysql_free_result(table_res);
|
||||
|
||||
my_snprintf(query, sizeof(query),
|
||||
"SELECT CHECK_OPTION, DEFINER, SECURITY_TYPE " \
|
||||
"FROM information_schema.views " \
|
||||
"WHERE table_name=\"%s\" AND table_schema=\"%s\"", table, db);
|
||||
if (mysql_query(sock, query))
|
||||
{
|
||||
/*
|
||||
Use the raw output from SHOW CREATE TABLE if
|
||||
information_schema query fails.
|
||||
*/
|
||||
row= mysql_fetch_row(table_res);
|
||||
fprintf(sql_file, "/*!50001 %s */;\n", row[1]);
|
||||
check_io(sql_file);
|
||||
mysql_free_result(table_res);
|
||||
}
|
||||
else
|
||||
{
|
||||
char *ptr;
|
||||
ulong *lengths;
|
||||
char search_buf[256], replace_buf[256];
|
||||
ulong search_len, replace_len;
|
||||
DYNAMIC_STRING ds_view;
|
||||
|
||||
/* Save the result of SHOW CREATE TABLE in ds_view */
|
||||
row= mysql_fetch_row(table_res);
|
||||
lengths= mysql_fetch_lengths(table_res);
|
||||
init_dynamic_string(&ds_view, row[1], lengths[1] + 1, 1024);
|
||||
mysql_free_result(table_res);
|
||||
|
||||
/* Get the result from "select ... information_schema" */
|
||||
if (!(table_res= mysql_store_result(sock)))
|
||||
{
|
||||
safe_exit(EX_MYSQLERR);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
row= mysql_fetch_row(table_res);
|
||||
lengths= mysql_fetch_lengths(table_res);
|
||||
|
||||
/*
|
||||
"WITH %s CHECK OPTION" is available from 5.0.2
|
||||
Surround it with !50002 comments
|
||||
*/
|
||||
if (strcmp(row[0], "NONE"))
|
||||
{
|
||||
|
||||
ptr= search_buf;
|
||||
search_len= (ulong)(strxmov(ptr, "WITH ", row[0],
|
||||
" CHECK OPTION", NullS) - ptr);
|
||||
ptr= replace_buf;
|
||||
replace_len=(ulong)(strxmov(ptr, "*/\n/*!50002 WITH ", row[0],
|
||||
" CHECK OPTION", NullS) - ptr);
|
||||
replace(&ds_view, search_buf, search_len, replace_buf, replace_len);
|
||||
}
|
||||
|
||||
/*
|
||||
"DEFINER=%s SQL SECURITY %s" is available from 5.0.13
|
||||
Surround it with !50013 comments
|
||||
*/
|
||||
{
|
||||
uint user_name_len;
|
||||
char user_name_str[USERNAME_LENGTH + 1];
|
||||
char quoted_user_name_str[USERNAME_LENGTH * 2 + 3];
|
||||
uint host_name_len;
|
||||
char host_name_str[HOSTNAME_LENGTH + 1];
|
||||
char quoted_host_name_str[HOSTNAME_LENGTH * 2 + 3];
|
||||
|
||||
parse_user(row[1], lengths[1], user_name_str, &user_name_len,
|
||||
host_name_str, &host_name_len);
|
||||
|
||||
ptr= search_buf;
|
||||
search_len=
|
||||
(ulong)(strxmov(ptr, "DEFINER=",
|
||||
quote_name(user_name_str, quoted_user_name_str, FALSE),
|
||||
"@",
|
||||
quote_name(host_name_str, quoted_host_name_str, FALSE),
|
||||
" SQL SECURITY ", row[2], NullS) - ptr);
|
||||
ptr= replace_buf;
|
||||
replace_len=
|
||||
(ulong)(strxmov(ptr, "*/\n/*!50013 DEFINER=",
|
||||
quote_name(user_name_str, quoted_user_name_str, FALSE),
|
||||
"@",
|
||||
quote_name(host_name_str, quoted_host_name_str, FALSE),
|
||||
" SQL SECURITY ", row[2],
|
||||
" */\n/*!50001", NullS) - ptr);
|
||||
replace(&ds_view, search_buf, search_len, replace_buf, replace_len);
|
||||
}
|
||||
|
||||
/* Dump view structure to file */
|
||||
fprintf(sql_file, "/*!50001 %s */;\n", ds_view.str);
|
||||
check_io(sql_file);
|
||||
mysql_free_result(table_res);
|
||||
dynstr_free(&ds_view);
|
||||
}
|
||||
|
||||
/* If a separate .sql file was opened, close it now */
|
||||
if (sql_file != md_result_file)
|
||||
{
|
||||
fputs("\n", sql_file);
|
||||
|
|
|
@ -74,7 +74,6 @@
|
|||
#define MAX_QUERY (256*1024)
|
||||
#define MAX_VAR_NAME 256
|
||||
#define MAX_COLUMNS 256
|
||||
#define PAD_SIZE 128
|
||||
#define MAX_CONS 128
|
||||
#define MAX_INCLUDE_DEPTH 16
|
||||
#define INIT_Q_LINES 1024
|
||||
|
@ -116,8 +115,8 @@ enum {OPT_MANAGER_USER=256,OPT_MANAGER_HOST,OPT_MANAGER_PASSWD,
|
|||
The list of error codes to --error are stored in an internal array of
|
||||
structs. This struct can hold numeric SQL error codes or SQLSTATE codes
|
||||
as strings. The element next to the last active element in the list is
|
||||
set to type ERR_EMPTY. When an SQL statement return an error we use
|
||||
this list to check if this is an expected error.
|
||||
set to type ERR_EMPTY. When an SQL statement returns an error, we use
|
||||
this list to check if this is an expected error.
|
||||
*/
|
||||
|
||||
enum match_err_type
|
||||
|
@ -275,18 +274,6 @@ typedef struct
|
|||
int alloced;
|
||||
} VAR;
|
||||
|
||||
#if defined(__NETWARE__) || defined(__WIN__)
|
||||
/*
|
||||
Netware doesn't proved environment variable substitution that is done
|
||||
by the shell in unix environments. We do this in the following function:
|
||||
*/
|
||||
|
||||
static char *subst_env_var(const char *cmd);
|
||||
static FILE *my_popen(const char *cmd, const char *mode);
|
||||
#undef popen
|
||||
#define popen(A,B) my_popen((A),(B))
|
||||
#endif /* __NETWARE__ */
|
||||
|
||||
VAR var_reg[10];
|
||||
/*Perl/shell-like variable registers */
|
||||
HASH var_hash;
|
||||
|
@ -358,13 +345,6 @@ const char *command_names[]=
|
|||
"connection",
|
||||
"query",
|
||||
"connect",
|
||||
/* the difference between sleep and real_sleep is that sleep will use
|
||||
the delay from command line (--sleep) if there is one.
|
||||
real_sleep always uses delay from mysqltest's command line argument.
|
||||
the logic is that sometimes delays are cpu-dependent (and --sleep
|
||||
can be used to set this delay. real_sleep is used for cpu-independent
|
||||
delays
|
||||
*/
|
||||
"sleep",
|
||||
"real_sleep",
|
||||
"inc",
|
||||
|
@ -465,19 +445,20 @@ typedef struct st_pointer_array { /* when using array-strings */
|
|||
struct st_replace;
|
||||
struct st_replace *init_replace(my_string *from, my_string *to, uint count,
|
||||
my_string word_end_chars);
|
||||
uint replace_strings(struct st_replace *rep, my_string *start,
|
||||
uint *max_length, const char *from);
|
||||
void free_replace();
|
||||
static int insert_pointer_name(reg1 POINTER_ARRAY *pa,my_string name);
|
||||
static void replace_strings_append(struct st_replace *rep, DYNAMIC_STRING* ds,
|
||||
const char *from, int len);
|
||||
void free_pointer_array(POINTER_ARRAY *pa);
|
||||
static int initialize_replace_buffer(void);
|
||||
static void do_eval(DYNAMIC_STRING *query_eval, const char *query);
|
||||
static void do_eval(DYNAMIC_STRING *query_eval, const char *query,
|
||||
my_bool pass_through_escape_chars);
|
||||
static void str_to_file(const char *fname, char *str, int size);
|
||||
int do_server_op(struct st_query *q,const char *op);
|
||||
|
||||
#ifdef __WIN__
|
||||
static void free_win_path_patterns();
|
||||
#endif
|
||||
|
||||
struct st_replace *glob_replace;
|
||||
static char *out_buff;
|
||||
static uint out_length;
|
||||
static int eval_result = 0;
|
||||
|
||||
/* For column replace */
|
||||
|
@ -502,10 +483,11 @@ static void handle_error(const char *query, struct st_query *q,
|
|||
const char *err_sqlstate, DYNAMIC_STRING *ds);
|
||||
static void handle_no_error(struct st_query *q);
|
||||
|
||||
static void do_eval(DYNAMIC_STRING* query_eval, const char *query)
|
||||
static void do_eval(DYNAMIC_STRING* query_eval, const char *query,
|
||||
my_bool pass_through_escape_chars)
|
||||
{
|
||||
const char *p;
|
||||
register char c;
|
||||
register char c, next_c;
|
||||
register int escaped = 0;
|
||||
VAR* v;
|
||||
DBUG_ENTER("do_eval");
|
||||
|
@ -527,13 +509,25 @@ static void do_eval(DYNAMIC_STRING* query_eval, const char *query)
|
|||
}
|
||||
break;
|
||||
case '\\':
|
||||
next_c= *(p+1);
|
||||
if (escaped)
|
||||
{
|
||||
escaped = 0;
|
||||
dynstr_append_mem(query_eval, p, 1);
|
||||
}
|
||||
else
|
||||
else if (next_c == '\\' || next_c == '$')
|
||||
{
|
||||
/* Set escaped only if next char is \ or $ */
|
||||
escaped = 1;
|
||||
|
||||
if (pass_through_escape_chars)
|
||||
{
|
||||
/* The escape char should be added to the output string. */
|
||||
dynstr_append_mem(query_eval, p, 1);
|
||||
}
|
||||
}
|
||||
else
|
||||
dynstr_append_mem(query_eval, p, 1);
|
||||
break;
|
||||
default:
|
||||
dynstr_append_mem(query_eval, p, 1);
|
||||
|
@ -609,6 +603,9 @@ static void free_used_memory()
|
|||
free_defaults(default_argv);
|
||||
mysql_server_end();
|
||||
free_re();
|
||||
#ifdef __WIN__
|
||||
free_win_path_patterns();
|
||||
#endif
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
@ -717,7 +714,7 @@ static int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname)
|
|||
init_dynamic_string(&res_ds, "", 0, 65536);
|
||||
if (eval_result)
|
||||
{
|
||||
do_eval(&res_ds, tmp);
|
||||
do_eval(&res_ds, tmp, FALSE);
|
||||
res_ptr = res_ds.str;
|
||||
if ((res_len = res_ds.length) != ds->length)
|
||||
{
|
||||
|
@ -971,17 +968,7 @@ int do_require_manager(struct st_query *query __attribute__((unused)) )
|
|||
}
|
||||
|
||||
#ifndef EMBEDDED_LIBRARY
|
||||
int do_server_start(struct st_query *q)
|
||||
{
|
||||
return do_server_op(q, "start");
|
||||
}
|
||||
|
||||
int do_server_stop(struct st_query *q)
|
||||
{
|
||||
return do_server_op(q, "stop");
|
||||
}
|
||||
|
||||
int do_server_op(struct st_query *q, const char *op)
|
||||
static int do_server_op(struct st_query *q, const char *op)
|
||||
{
|
||||
char *p= q->first_argument;
|
||||
char com_buf[256], *com_p;
|
||||
|
@ -1011,6 +998,17 @@ int do_server_op(struct st_query *q, const char *op)
|
|||
q->last_argument= p;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int do_server_start(struct st_query *q)
|
||||
{
|
||||
return do_server_op(q, "start");
|
||||
}
|
||||
|
||||
int do_server_stop(struct st_query *q)
|
||||
{
|
||||
return do_server_op(q, "stop");
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -1040,8 +1038,8 @@ int do_source(struct st_query *query)
|
|||
*p++= 0;
|
||||
query->last_argument= p;
|
||||
/*
|
||||
If this file has already been sourced, dont source it again.
|
||||
It's already available in the q_lines cache
|
||||
If this file has already been sourced, don't source it again.
|
||||
It's already available in the q_lines cache.
|
||||
*/
|
||||
if (parser.current_line < (parser.read_lines - 1))
|
||||
return 0;
|
||||
|
@ -1064,16 +1062,21 @@ int do_source(struct st_query *query)
|
|||
expected error array, previously set with the --error command.
|
||||
It can thus be used to execute a command that shall fail.
|
||||
|
||||
NOTE
|
||||
Although mysqltest is executed from cygwin shell, the command will be
|
||||
executed in "cmd.exe". Thus commands like "rm" etc can NOT be used, use
|
||||
system for those commands.
|
||||
*/
|
||||
|
||||
static void do_exec(struct st_query *query)
|
||||
{
|
||||
int error;
|
||||
DYNAMIC_STRING *ds= NULL;
|
||||
char buf[1024];
|
||||
FILE *res_file;
|
||||
char *cmd= query->first_argument;
|
||||
DYNAMIC_STRING ds_cmd;
|
||||
DBUG_ENTER("do_exec");
|
||||
DBUG_PRINT("enter", ("cmd: '%s'", cmd));
|
||||
|
||||
while (*cmd && my_isspace(charset_info, *cmd))
|
||||
cmd++;
|
||||
|
@ -1081,24 +1084,28 @@ static void do_exec(struct st_query *query)
|
|||
die("Missing argument in exec");
|
||||
query->last_argument= query->end;
|
||||
|
||||
DBUG_PRINT("info", ("Executing '%s'", cmd));
|
||||
init_dynamic_string(&ds_cmd, 0, strlen(cmd)+256, 256);
|
||||
/* Eval the command, thus replacing all environment variables */
|
||||
do_eval(&ds_cmd, cmd, TRUE);
|
||||
cmd= ds_cmd.str;
|
||||
|
||||
DBUG_PRINT("info", ("Executing '%s' as '%s'",
|
||||
query->first_argument, cmd));
|
||||
|
||||
if (!(res_file= popen(cmd, "r")) && query->abort_on_error)
|
||||
die("popen(\"%s\", \"r\") failed", cmd);
|
||||
die("popen(\"%s\", \"r\") failed", query->first_argument);
|
||||
|
||||
if (disable_result_log)
|
||||
while (fgets(buf, sizeof(buf), res_file))
|
||||
{
|
||||
while (fgets(buf, sizeof(buf), res_file))
|
||||
if (disable_result_log)
|
||||
{
|
||||
buf[strlen(buf)-1]=0;
|
||||
DBUG_PRINT("exec_result",("%s", buf));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ds= &ds_res;
|
||||
while (fgets(buf, sizeof(buf), res_file))
|
||||
replace_dynstr_append(ds, buf);
|
||||
else
|
||||
{
|
||||
replace_dynstr_append(&ds_res, buf);
|
||||
}
|
||||
}
|
||||
error= pclose(res_file);
|
||||
if (error != 0)
|
||||
|
@ -1107,7 +1114,7 @@ static void do_exec(struct st_query *query)
|
|||
my_bool ok= 0;
|
||||
|
||||
if (query->abort_on_error)
|
||||
die("command \"%s\" failed", cmd);
|
||||
die("command \"%s\" failed", query->first_argument);
|
||||
|
||||
DBUG_PRINT("info",
|
||||
("error: %d, status: %d", error, status));
|
||||
|
@ -1122,19 +1129,19 @@ static void do_exec(struct st_query *query)
|
|||
{
|
||||
ok= 1;
|
||||
DBUG_PRINT("info", ("command \"%s\" failed with expected error: %d",
|
||||
cmd, status));
|
||||
query->first_argument, status));
|
||||
}
|
||||
}
|
||||
if (!ok)
|
||||
die("command \"%s\" failed with wrong error: %d",
|
||||
cmd, status);
|
||||
query->first_argument, status);
|
||||
}
|
||||
else if (query->expected_errno[0].type == ERR_ERRNO &&
|
||||
query->expected_errno[0].code.errnum != 0)
|
||||
{
|
||||
/* Error code we wanted was != 0, i.e. not an expected success */
|
||||
die("command \"%s\" succeeded - should have failed with errno %d...",
|
||||
cmd, query->expected_errno[0].code.errnum);
|
||||
query->first_argument, query->expected_errno[0].code.errnum);
|
||||
}
|
||||
|
||||
free_replace();
|
||||
|
@ -1346,38 +1353,49 @@ int do_modify_var(struct st_query *query, const char *name,
|
|||
}
|
||||
|
||||
|
||||
int do_system(struct st_query *q)
|
||||
/*
|
||||
|
||||
SYNOPSIS
|
||||
do_system
|
||||
command called command
|
||||
|
||||
DESCRIPTION
|
||||
system <command>
|
||||
|
||||
Eval the query to expand any $variables in the command.
|
||||
Execute the command with the "system" command.
|
||||
|
||||
NOTE
|
||||
If mysqltest is executed from cygwin shell, the command will be
|
||||
executed in cygwin shell. Thus commands like "rm" etc can be used.
|
||||
*/
|
||||
|
||||
int do_system(struct st_query *command)
|
||||
{
|
||||
DYNAMIC_STRING *ds;
|
||||
char *p=q->first_argument;
|
||||
VAR v;
|
||||
var_init(&v, 0, 0, 0, 0);
|
||||
eval_expr(&v, p, 0); /* NULL terminated */
|
||||
ds= &ds_res;
|
||||
DYNAMIC_STRING ds_cmd;
|
||||
|
||||
if (v.str_val_len)
|
||||
{
|
||||
char expr_buf[1024];
|
||||
if ((uint)v.str_val_len > sizeof(expr_buf) - 1)
|
||||
v.str_val_len = sizeof(expr_buf) - 1;
|
||||
memcpy(expr_buf, v.str_val, v.str_val_len);
|
||||
expr_buf[v.str_val_len] = 0;
|
||||
DBUG_PRINT("info", ("running system command '%s'", expr_buf));
|
||||
if (system(expr_buf))
|
||||
{
|
||||
if (q->abort_on_error)
|
||||
die("system command '%s' failed", expr_buf);
|
||||
|
||||
/* If ! abort_on_error, log message and continue */
|
||||
dynstr_append(ds, "system command '");
|
||||
replace_dynstr_append(ds, expr_buf);
|
||||
dynstr_append(ds, "' failed\n");
|
||||
}
|
||||
}
|
||||
else
|
||||
if (strlen(command->first_argument) == 0)
|
||||
die("Missing arguments to system, nothing to do!");
|
||||
var_free(&v);
|
||||
q->last_argument= q->end;
|
||||
|
||||
init_dynamic_string(&ds_cmd, 0, strlen(command->first_argument) + 64, 256);
|
||||
|
||||
/* Eval the system command, thus replacing all environment variables */
|
||||
do_eval(&ds_cmd, command->first_argument, TRUE);
|
||||
|
||||
DBUG_PRINT("info", ("running system command '%s' as '%s'",
|
||||
command->first_argument, ds_cmd.str));
|
||||
if (system(ds_cmd.str))
|
||||
{
|
||||
if (command->abort_on_error)
|
||||
die("system command '%s' failed", command->first_argument);
|
||||
|
||||
/* If ! abort_on_error, log message and continue */
|
||||
dynstr_append(&ds_res, "system command '");
|
||||
replace_dynstr_append(&ds_res, command->first_argument);
|
||||
dynstr_append(&ds_res, "' failed\n");
|
||||
}
|
||||
|
||||
command->last_argument= command->end;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1413,7 +1431,7 @@ int do_echo(struct st_query *command)
|
|||
ds= &ds_res;
|
||||
|
||||
init_dynamic_string(&ds_echo, "", 256, 256);
|
||||
do_eval(&ds_echo, command->first_argument);
|
||||
do_eval(&ds_echo, command->first_argument, FALSE);
|
||||
dynstr_append_mem(ds, ds_echo.str, ds_echo.length);
|
||||
dynstr_append_mem(ds, "\n", 1);
|
||||
dynstr_free(&ds_echo);
|
||||
|
@ -1608,11 +1626,19 @@ int do_disable_rpl_parse(struct st_query *query __attribute__((unused)))
|
|||
do_sleep()
|
||||
q called command
|
||||
real_sleep use the value from opt_sleep as number of seconds to sleep
|
||||
if real_sleep is false
|
||||
|
||||
DESCRIPTION
|
||||
sleep <seconds>
|
||||
real_sleep
|
||||
real_sleep <seconds>
|
||||
|
||||
The difference between the sleep and real_sleep commands is that sleep
|
||||
uses the delay from the --sleep command-line option if there is one.
|
||||
(If the --sleep option is not given, the sleep command uses the delay
|
||||
specified by its argument.) The real_sleep command always uses the
|
||||
delay specified by its argument. The logic is that sometimes delays are
|
||||
cpu-dependent, and --sleep can be used to set this delay. real_sleep is
|
||||
used for cpu-independent delays.
|
||||
*/
|
||||
|
||||
int do_sleep(struct st_query *query, my_bool real_sleep)
|
||||
|
@ -1621,18 +1647,19 @@ int do_sleep(struct st_query *query, my_bool real_sleep)
|
|||
char *p= query->first_argument;
|
||||
char *sleep_start, *sleep_end= query->end;
|
||||
double sleep_val;
|
||||
char *cmd = (real_sleep ? "real_sleep" : "sleep");
|
||||
|
||||
while (my_isspace(charset_info, *p))
|
||||
p++;
|
||||
if (!*p)
|
||||
die("Missing argument to sleep");
|
||||
die("Missing argument to %s", cmd);
|
||||
sleep_start= p;
|
||||
/* Check that arg starts with a digit, not handled by my_strtod */
|
||||
if (!my_isdigit(charset_info, *sleep_start))
|
||||
die("Invalid argument to sleep \"%s\"", query->first_argument);
|
||||
die("Invalid argument to %s \"%s\"", cmd, query->first_argument);
|
||||
sleep_val= my_strtod(sleep_start, &sleep_end, &error);
|
||||
if (error)
|
||||
die("Invalid argument to sleep \"%s\"", query->first_argument);
|
||||
die("Invalid argument to %s \"%s\"", cmd, query->first_argument);
|
||||
|
||||
/* Fixed sleep time selected by --sleep option */
|
||||
if (opt_sleep && !real_sleep)
|
||||
|
@ -1859,8 +1886,7 @@ static void get_replace(struct st_query *q)
|
|||
if (!(glob_replace=init_replace((char**) from_array.typelib.type_names,
|
||||
(char**) to_array.typelib.type_names,
|
||||
(uint) from_array.typelib.count,
|
||||
word_end_chars)) ||
|
||||
initialize_replace_buffer())
|
||||
word_end_chars)))
|
||||
die("Can't initialize replace from '%s'", q->query);
|
||||
free_pointer_array(&from_array);
|
||||
free_pointer_array(&to_array);
|
||||
|
@ -1876,7 +1902,6 @@ void free_replace()
|
|||
{
|
||||
my_free((char*) glob_replace,MYF(0));
|
||||
glob_replace=0;
|
||||
my_free(out_buff,MYF(MY_WME));
|
||||
}
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
@ -2076,7 +2101,7 @@ int safe_connect(MYSQL* mysql, const char *host, const char *user,
|
|||
|
||||
|
||||
/*
|
||||
Connect to a server and handle connection errors in case when they occur.
|
||||
Connect to a server and handle connection errors in case they occur.
|
||||
|
||||
SYNOPSIS
|
||||
connect_n_handle_errors()
|
||||
|
@ -2353,12 +2378,41 @@ int do_done(struct st_query *q)
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
Process start of a "if" or "while" statement
|
||||
|
||||
SYNOPSIS
|
||||
do_block()
|
||||
cmd Type of block
|
||||
q called command
|
||||
|
||||
DESCRIPTION
|
||||
if ([!]<expr>)
|
||||
{
|
||||
<block statements>
|
||||
}
|
||||
|
||||
while ([!]<expr>)
|
||||
{
|
||||
<block statements>
|
||||
}
|
||||
|
||||
Evaluates the <expr> and if it evaluates to
|
||||
greater than zero executes the following code block.
|
||||
A '!' can be used before the <expr> to indicate it should
|
||||
be executed if it evaluates to zero.
|
||||
|
||||
*/
|
||||
|
||||
int do_block(enum block_cmd cmd, struct st_query* q)
|
||||
{
|
||||
char *p= q->first_argument;
|
||||
const char *expr_start, *expr_end;
|
||||
VAR v;
|
||||
const char *cmd_name= (cmd == cmd_while ? "while" : "if");
|
||||
my_bool not_expr= FALSE;
|
||||
DBUG_ENTER("do_block");
|
||||
DBUG_PRINT("enter", ("%s", cmd_name));
|
||||
|
||||
/* Check stack overflow */
|
||||
if (cur_block == block_stack_end)
|
||||
|
@ -2379,8 +2433,16 @@ int do_block(enum block_cmd cmd, struct st_query* q)
|
|||
|
||||
/* Parse and evaluate test expression */
|
||||
expr_start= strchr(p, '(');
|
||||
if (!expr_start)
|
||||
if (!expr_start++)
|
||||
die("missing '(' in %s", cmd_name);
|
||||
|
||||
/* Check for !<expr> */
|
||||
if (*expr_start == '!')
|
||||
{
|
||||
not_expr= TRUE;
|
||||
expr_start++; /* Step past the '!' */
|
||||
}
|
||||
/* Find ending ')' */
|
||||
expr_end= strrchr(expr_start, ')');
|
||||
if (!expr_end)
|
||||
die("missing ')' in %s", cmd_name);
|
||||
|
@ -2394,15 +2456,20 @@ int do_block(enum block_cmd cmd, struct st_query* q)
|
|||
die("Missing '{' after %s. Found \"%s\"", cmd_name, p);
|
||||
|
||||
var_init(&v,0,0,0,0);
|
||||
eval_expr(&v, ++expr_start, &expr_end);
|
||||
eval_expr(&v, expr_start, &expr_end);
|
||||
|
||||
/* Define inner block */
|
||||
cur_block++;
|
||||
cur_block->cmd= cmd;
|
||||
cur_block->ok= (v.int_val ? TRUE : FALSE);
|
||||
|
||||
if (not_expr)
|
||||
cur_block->ok = !cur_block->ok;
|
||||
|
||||
DBUG_PRINT("info", ("OK: %d", cur_block->ok));
|
||||
|
||||
var_free(&v);
|
||||
return 0;
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
||||
|
@ -2469,7 +2536,7 @@ my_bool end_of_query(int c)
|
|||
Normally that means it will read lines until it reaches the
|
||||
"delimiter" that marks end of query. Default delimiter is ';'
|
||||
The function should be smart enough not to detect delimiter's
|
||||
found inside strings sorrounded with '"' and '\'' escaped strings.
|
||||
found inside strings surrounded with '"' and '\'' escaped strings.
|
||||
|
||||
If the first line in a query starts with '#' or '-' this line is treated
|
||||
as a comment. A comment is always terminated when end of line '\n' is
|
||||
|
@ -2519,10 +2586,16 @@ int read_line(char *buf, int size)
|
|||
continue;
|
||||
}
|
||||
|
||||
/* Line counting is independent of state */
|
||||
if (c == '\n')
|
||||
{
|
||||
/* Line counting is independent of state */
|
||||
cur_file->lineno++;
|
||||
|
||||
/* Convert cr/lf to lf */
|
||||
if (p != buf && *(p-1) == '\r')
|
||||
*(p-1)= 0;
|
||||
}
|
||||
|
||||
switch(state) {
|
||||
case R_NORMAL:
|
||||
/* Only accept '{' in the beginning of a line */
|
||||
|
@ -2691,7 +2764,7 @@ int read_query(struct st_query** q_ptr)
|
|||
check_eol_junk(read_query_buf);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
|
||||
|
||||
DBUG_PRINT("info", ("query: %s", read_query_buf));
|
||||
if (*p == '#')
|
||||
{
|
||||
|
@ -2748,6 +2821,9 @@ static struct my_option my_long_options[] =
|
|||
{"compress", 'C', "Use the compressed server/client protocol.",
|
||||
(gptr*) &opt_compress, (gptr*) &opt_compress, 0, GET_BOOL, NO_ARG, 0, 0, 0,
|
||||
0, 0, 0},
|
||||
{"cursor-protocol", OPT_CURSOR_PROTOCOL, "Use cursors for prepared statements.",
|
||||
(gptr*) &cursor_protocol, (gptr*) &cursor_protocol, 0,
|
||||
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"database", 'D', "Database to use.", (gptr*) &db, (gptr*) &db, 0,
|
||||
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
#ifdef DBUG_OFF
|
||||
|
@ -2780,15 +2856,6 @@ static struct my_option my_long_options[] =
|
|||
{"ps-protocol", OPT_PS_PROTOCOL, "Use prepared statements protocol for communication",
|
||||
(gptr*) &ps_protocol, (gptr*) &ps_protocol, 0,
|
||||
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"sp-protocol", OPT_SP_PROTOCOL, "Use stored procedures for select",
|
||||
(gptr*) &sp_protocol, (gptr*) &sp_protocol, 0,
|
||||
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"cursor-protocol", OPT_CURSOR_PROTOCOL, "Use cursors for prepared statment",
|
||||
(gptr*) &cursor_protocol, (gptr*) &cursor_protocol, 0,
|
||||
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"view-protocol", OPT_VIEW_PROTOCOL, "Use views for select",
|
||||
(gptr*) &view_protocol, (gptr*) &view_protocol, 0,
|
||||
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"quiet", 's', "Suppress all normal output.", (gptr*) &silent,
|
||||
(gptr*) &silent, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"record", 'r', "Record output of test_file into result file.",
|
||||
|
@ -2796,7 +2863,7 @@ static struct my_option my_long_options[] =
|
|||
{"result-file", 'R', "Read/Store result from/in this file.",
|
||||
(gptr*) &result_file, (gptr*) &result_file, 0, GET_STR, REQUIRED_ARG,
|
||||
0, 0, 0, 0, 0, 0},
|
||||
{"server-arg", 'A', "Send enbedded server this as a paramenter.",
|
||||
{"server-arg", 'A', "Send option value to embedded server as a parameter.",
|
||||
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"server-file", 'F', "Read embedded server arguments from file.",
|
||||
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
|
@ -2811,6 +2878,9 @@ static struct my_option my_long_options[] =
|
|||
{"socket", 'S', "Socket file to use for connection.",
|
||||
(gptr*) &unix_sock, (gptr*) &unix_sock, 0, GET_STR, REQUIRED_ARG, 0, 0, 0,
|
||||
0, 0, 0},
|
||||
{"sp-protocol", OPT_SP_PROTOCOL, "Use stored procedures for select",
|
||||
(gptr*) &sp_protocol, (gptr*) &sp_protocol, 0,
|
||||
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
#include "sslopt-longopts.h"
|
||||
{"test-file", 'x', "Read test from/in this file (default stdin).",
|
||||
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
|
@ -2824,6 +2894,9 @@ static struct my_option my_long_options[] =
|
|||
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"version", 'V', "Output version information and exit.",
|
||||
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"view-protocol", OPT_VIEW_PROTOCOL, "Use views for select",
|
||||
(gptr*) &view_protocol, (gptr*) &view_protocol, 0,
|
||||
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{ 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
|
||||
};
|
||||
|
||||
|
@ -3006,24 +3079,129 @@ void dump_result_to_reject_file(const char *record_file, char *buf, int size)
|
|||
}
|
||||
|
||||
|
||||
/* Append the string to ds, with optional replace */
|
||||
#ifdef __WIN__
|
||||
|
||||
static void replace_dynstr_append_mem(DYNAMIC_STRING *ds, const char *val,
|
||||
int len)
|
||||
DYNAMIC_ARRAY patterns;
|
||||
|
||||
/*
|
||||
init_win_path_patterns
|
||||
|
||||
DESCRIPTION
|
||||
Setup string patterns that will be used to detect filenames that
|
||||
needs to be converted from Win to Unix format
|
||||
|
||||
*/
|
||||
|
||||
static void init_win_path_patterns()
|
||||
{
|
||||
if (glob_replace)
|
||||
/* List of string patterns to match in order to find paths */
|
||||
const char* paths[] = { "$MYSQL_TEST_DIR",
|
||||
"$MYSQL_TMP_DIR",
|
||||
"./test/", 0 };
|
||||
int num_paths= 3;
|
||||
int i;
|
||||
char* p;
|
||||
|
||||
DBUG_ENTER("init_win_path_patterns");
|
||||
|
||||
my_init_dynamic_array(&patterns, sizeof(const char*), 16, 16);
|
||||
|
||||
/* Loop through all paths in the array */
|
||||
for (i= 0; i < num_paths; i++)
|
||||
{
|
||||
len=(int) replace_strings(glob_replace, &out_buff, &out_length, val);
|
||||
if (len == -1)
|
||||
die("Out of memory in replace");
|
||||
val=out_buff;
|
||||
VAR* v;
|
||||
if (*(paths[i]) == '$')
|
||||
{
|
||||
v= var_get(paths[i], 0, 0, 0);
|
||||
p= my_strdup(v->str_val, MYF(MY_FAE));
|
||||
}
|
||||
else
|
||||
p= my_strdup(paths[i], MYF(MY_FAE));
|
||||
|
||||
if (insert_dynamic(&patterns, (gptr) &p))
|
||||
die(NullS);
|
||||
|
||||
DBUG_PRINT("info", ("p: %s", p));
|
||||
while (*p)
|
||||
{
|
||||
if (*p == '/')
|
||||
*p='\\';
|
||||
p++;
|
||||
}
|
||||
}
|
||||
dynstr_append_mem(ds, val, len);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
static void free_win_path_patterns()
|
||||
{
|
||||
int i= 0;
|
||||
for (i=0 ; i < patterns.elements ; i++)
|
||||
{
|
||||
const char** pattern= dynamic_element(&patterns, i, const char**);
|
||||
my_free((gptr) *pattern, MYF(0));
|
||||
}
|
||||
delete_dynamic(&patterns);
|
||||
}
|
||||
|
||||
/*
|
||||
fix_win_paths
|
||||
|
||||
DESCRIPTION
|
||||
Search the string 'val' for the patterns that are known to be
|
||||
strings that contain filenames. Convert all \ to / in the
|
||||
filenames that are found.
|
||||
|
||||
Ex:
|
||||
val = 'Error "c:\mysql\mysql-test\var\test\t1.frm" didn't exist'
|
||||
=> $MYSQL_TEST_DIR is found by strstr
|
||||
=> all \ from c:\mysql\m... until next space is converted into /
|
||||
*/
|
||||
|
||||
static void fix_win_paths(const char* val, int len)
|
||||
{
|
||||
uint i;
|
||||
char *p;
|
||||
|
||||
DBUG_ENTER("fix_win_paths");
|
||||
for (i= 0; i < patterns.elements; i++)
|
||||
{
|
||||
const char** pattern= dynamic_element(&patterns, i, const char**);
|
||||
DBUG_PRINT("info", ("pattern: %s", *pattern));
|
||||
/* Search for the path in string */
|
||||
while ((p= strstr(val, *pattern)))
|
||||
{
|
||||
DBUG_PRINT("info", ("Found %s in val p: %s", *pattern, p));
|
||||
|
||||
while (*p && !my_isspace(charset_info, *p))
|
||||
{
|
||||
if (*p == '\\')
|
||||
*p= '/';
|
||||
p++;
|
||||
}
|
||||
DBUG_PRINT("info", ("Converted \\ to /, p: %s", p));
|
||||
}
|
||||
}
|
||||
DBUG_PRINT("exit", (" val: %s, len: %d", val, len));
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Append the string to ds, with optional replace */
|
||||
static void replace_dynstr_append_mem(DYNAMIC_STRING *ds,
|
||||
const char *val, int len)
|
||||
{
|
||||
#ifdef __WIN__
|
||||
fix_win_paths(val, len);
|
||||
#endif
|
||||
|
||||
if (glob_replace)
|
||||
replace_strings_append(glob_replace, ds, val, len);
|
||||
else
|
||||
dynstr_append_mem(ds, val, len);
|
||||
}
|
||||
|
||||
|
||||
/* Append zero-terminated string to ds, with optional replace */
|
||||
|
||||
static void replace_dynstr_append(DYNAMIC_STRING *ds, const char *val)
|
||||
{
|
||||
replace_dynstr_append_mem(ds, val, strlen(val));
|
||||
|
@ -3037,8 +3215,6 @@ static void replace_dynstr_append(DYNAMIC_STRING *ds, const char *val)
|
|||
static void append_field(DYNAMIC_STRING *ds, uint col_idx, MYSQL_FIELD* field,
|
||||
const char* val, ulonglong len, bool is_null)
|
||||
{
|
||||
|
||||
char buf[256];
|
||||
if (col_idx < max_replace_column && replace_column[col_idx])
|
||||
{
|
||||
val= replace_column[col_idx];
|
||||
|
@ -3844,7 +4020,7 @@ static void run_query(MYSQL *mysql, struct st_query *command, int flags)
|
|||
if (command->type == Q_EVAL)
|
||||
{
|
||||
init_dynamic_string(&eval_query, "", 16384, 65536);
|
||||
do_eval(&eval_query, command->query);
|
||||
do_eval(&eval_query, command->query, FALSE);
|
||||
query = eval_query.str;
|
||||
query_len = eval_query.length;
|
||||
}
|
||||
|
@ -4141,7 +4317,7 @@ void get_query_type(struct st_query* q)
|
|||
q->type=(enum enum_commands) type; /* Found command */
|
||||
/*
|
||||
If queries are disabled, only recognize
|
||||
--enable-queries and --disable-queries
|
||||
--enable_parsing and --disable_parsing
|
||||
*/
|
||||
if (parsing_disabled && q->type != Q_ENABLE_PARSING &&
|
||||
q->type != Q_DISABLE_PARSING)
|
||||
|
@ -4335,6 +4511,10 @@ int main(int argc, char **argv)
|
|||
|
||||
init_var_hash(&cur_con->mysql);
|
||||
|
||||
#ifdef __WIN__
|
||||
init_win_path_patterns();
|
||||
#endif
|
||||
|
||||
/*
|
||||
Initialize $mysql_errno with -1, so we can
|
||||
- distinguish it from valid values ( >= 0 ) and
|
||||
|
@ -4635,8 +4815,8 @@ int main(int argc, char **argv)
|
|||
/*
|
||||
my_stat() successful on result file. Check if we have not run a
|
||||
single query, but we do have a result file that contains data.
|
||||
Note that we don't care, if my_stat() fails. For example for
|
||||
non-existing or non-readable file we assume it's fine to have
|
||||
Note that we don't care, if my_stat() fails. For example, for a
|
||||
non-existing or non-readable file, we assume it's fine to have
|
||||
no query output from the test file, e.g. regarded as no error.
|
||||
*/
|
||||
die("No queries executed but result file found!");
|
||||
|
@ -5396,60 +5576,57 @@ static uint replace_len(my_string str)
|
|||
}
|
||||
|
||||
|
||||
/* Replace strings; Return length of result string */
|
||||
|
||||
uint replace_strings(REPLACE *rep, my_string *start,uint *max_length,
|
||||
const char *from)
|
||||
/* Replace strings while appending to ds */
|
||||
void replace_strings_append(REPLACE *rep, DYNAMIC_STRING* ds,
|
||||
const char *str, int len)
|
||||
{
|
||||
reg1 REPLACE *rep_pos;
|
||||
reg2 REPLACE_STRING *rep_str;
|
||||
my_string to,end,pos,new_str;
|
||||
const char *start, *from;
|
||||
DBUG_ENTER("replace_strings_append");
|
||||
|
||||
end=(to= *start) + *max_length-1;
|
||||
start= from= str;
|
||||
rep_pos=rep+1;
|
||||
for (;;)
|
||||
{
|
||||
/* Loop through states */
|
||||
DBUG_PRINT("info", ("Looping through states"));
|
||||
while (!rep_pos->found)
|
||||
{
|
||||
rep_pos= rep_pos->next[(uchar) *from];
|
||||
if (to == end)
|
||||
{
|
||||
(*max_length)+=8192;
|
||||
if (!(new_str=my_realloc(*start,*max_length,MYF(MY_WME))))
|
||||
return (uint) -1;
|
||||
to=new_str+(to - *start);
|
||||
end=(*start=new_str)+ *max_length-1;
|
||||
}
|
||||
*to++= *from++;
|
||||
}
|
||||
rep_pos= rep_pos->next[(uchar) *from++];
|
||||
|
||||
/* Does this state contain a string to be replaced */
|
||||
if (!(rep_str = ((REPLACE_STRING*) rep_pos))->replace_string)
|
||||
return (uint) (to - *start)-1;
|
||||
to-=rep_str->to_offset;
|
||||
for (pos=rep_str->replace_string; *pos ; pos++)
|
||||
{
|
||||
if (to == end)
|
||||
{
|
||||
(*max_length)*=2;
|
||||
if (!(new_str=my_realloc(*start,*max_length,MYF(MY_WME))))
|
||||
return (uint) -1;
|
||||
to=new_str+(to - *start);
|
||||
end=(*start=new_str)+ *max_length-1;
|
||||
}
|
||||
*to++= *pos;
|
||||
/* No match found */
|
||||
dynstr_append_mem(ds, start, from - start - 1);
|
||||
DBUG_PRINT("exit", ("Found no more string to replace, appended: %s", start));
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
/* Found a string that needs to be replaced */
|
||||
DBUG_PRINT("info", ("found: %d, to_offset: %d, from_offset: %d, string: %s",
|
||||
rep_str->found, rep_str->to_offset,
|
||||
rep_str->from_offset, rep_str->replace_string));
|
||||
|
||||
/* Append part of original string before replace string */
|
||||
dynstr_append_mem(ds, start, (from - rep_str->to_offset) - start);
|
||||
|
||||
/* Append replace string */
|
||||
dynstr_append_mem(ds, rep_str->replace_string,
|
||||
strlen(rep_str->replace_string));
|
||||
|
||||
if (!*(from-=rep_str->from_offset) && rep_pos->found != 2)
|
||||
return (uint) (to - *start);
|
||||
{
|
||||
/* End of from string */
|
||||
DBUG_PRINT("exit", ("Found end of from string"));
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
DBUG_ASSERT(from <= str+len);
|
||||
start= from;
|
||||
rep_pos=rep;
|
||||
}
|
||||
}
|
||||
|
||||
static int initialize_replace_buffer(void)
|
||||
{
|
||||
out_length=8192;
|
||||
if (!(out_buff=my_malloc(out_length,MYF(MY_WME))))
|
||||
return(1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Replace results for a column
|
||||
|
@ -5508,105 +5685,6 @@ static void get_replace_column(struct st_query *q)
|
|||
q->last_argument= q->end;
|
||||
}
|
||||
|
||||
#if defined(__NETWARE__) || defined(__WIN__)
|
||||
/*
|
||||
Substitute environment variables with text.
|
||||
|
||||
SYNOPSIS
|
||||
subst_env_var()
|
||||
arg String that should be substitute
|
||||
|
||||
DESCRIPTION
|
||||
This function takes a string as an input and replaces the
|
||||
environment variables, that starts with '$' character, with it value.
|
||||
|
||||
NOTES
|
||||
Return string must be freed with my_free()
|
||||
|
||||
RETURN
|
||||
String with environment variables replaced.
|
||||
*/
|
||||
|
||||
static char *subst_env_var(const char *str)
|
||||
{
|
||||
char *result;
|
||||
char *pos;
|
||||
|
||||
result= pos= my_malloc(MAX_QUERY, MYF(MY_FAE));
|
||||
while (*str)
|
||||
{
|
||||
/*
|
||||
need this only when we want to provide the functionality of
|
||||
escaping through \ 'backslash'
|
||||
if ((result == pos && *str=='$') ||
|
||||
(result != pos && *str=='$' && str[-1] !='\\'))
|
||||
*/
|
||||
if (*str == '$')
|
||||
{
|
||||
char env_var[256], *env_pos= env_var, *subst;
|
||||
|
||||
/* Search for end of environment variable */
|
||||
for (str++;
|
||||
*str && !isspace(*str) && *str != '\\' && *str != '/' &&
|
||||
*str != '$';
|
||||
str++)
|
||||
*env_pos++= *str;
|
||||
*env_pos= 0;
|
||||
|
||||
if (!(subst= getenv(env_var)))
|
||||
{
|
||||
my_free(result, MYF(0));
|
||||
die("MYSQLTEST.NLM: Environment variable %s is not defined",
|
||||
env_var);
|
||||
}
|
||||
|
||||
/* get the string to be substitued for env_var */
|
||||
pos= strmov(pos, subst);
|
||||
/* Process delimiter in *str again */
|
||||
}
|
||||
else
|
||||
*pos++= *str++;
|
||||
}
|
||||
*pos= 0;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
popen replacement for Netware
|
||||
|
||||
SYNPOSIS
|
||||
my_popen()
|
||||
name Command to execute (with possible env variables)
|
||||
mode Mode for popen.
|
||||
|
||||
NOTES
|
||||
Environment variable expansion does not take place for popen function
|
||||
on NetWare, so we use this function to wrap around popen to do this.
|
||||
|
||||
For the moment we ignore 'mode' and always use 'r0'
|
||||
|
||||
RETURN
|
||||
# >= 0 File handle
|
||||
-1 Error
|
||||
*/
|
||||
|
||||
#undef popen /* Remove wrapper */
|
||||
#ifdef __WIN__
|
||||
#define popen _popen /* redefine for windows */
|
||||
#endif
|
||||
|
||||
FILE *my_popen(const char *cmd, const char *mode __attribute__((unused)))
|
||||
{
|
||||
char *subst_cmd;
|
||||
FILE *res_file;
|
||||
|
||||
subst_cmd= subst_env_var(cmd);
|
||||
res_file= popen(subst_cmd, "r0");
|
||||
my_free(subst_cmd, MYF(0));
|
||||
return res_file;
|
||||
}
|
||||
|
||||
#endif /* __NETWARE__ or __WIN__*/
|
||||
|
||||
|
||||
|
|
|
@ -1109,7 +1109,7 @@ read_history(const char *filename)
|
|||
|
||||
if (h == NULL || e == NULL)
|
||||
rl_initialize();
|
||||
return (history(h, &ev, H_LOAD, filename));
|
||||
return (history(h, &ev, H_LOAD, filename) == -1);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1123,7 +1123,7 @@ write_history(const char *filename)
|
|||
|
||||
if (h == NULL || e == NULL)
|
||||
rl_initialize();
|
||||
return (history(h, &ev, H_SAVE, filename));
|
||||
return (history(h, &ev, H_SAVE, filename) == -1);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ AC_INIT(sql/mysqld.cc)
|
|||
AC_CANONICAL_SYSTEM
|
||||
# The Docs Makefile.am parses this line!
|
||||
# remember to also change ndb version below and update version.c in ndb
|
||||
AM_INIT_AUTOMAKE(mysql, 5.0.19)
|
||||
AM_INIT_AUTOMAKE(mysql, 5.0.20)
|
||||
AM_CONFIG_HEADER(config.h)
|
||||
|
||||
PROTOCOL_VERSION=10
|
||||
|
@ -19,7 +19,7 @@ SHARED_LIB_VERSION=$SHARED_LIB_MAJOR_VERSION:0:0
|
|||
# ndb version
|
||||
NDB_VERSION_MAJOR=5
|
||||
NDB_VERSION_MINOR=0
|
||||
NDB_VERSION_BUILD=19
|
||||
NDB_VERSION_BUILD=20
|
||||
NDB_VERSION_STATUS=""
|
||||
|
||||
# Set all version vars based on $VERSION. How do we do this more elegant ?
|
||||
|
@ -356,6 +356,9 @@ then
|
|||
# mysqld requires -fno-implicit-templates.
|
||||
# Disable exceptions as they seams to create problems with gcc and threads.
|
||||
# mysqld doesn't use run-time-type-checking, so we disable it.
|
||||
# We should use -Wno-invalid-offsetof flag to disable some warnings from gcc
|
||||
# regarding offset() usage in C++ which are done in a safe manner in the
|
||||
# server
|
||||
CXXFLAGS="$CXXFLAGS -fno-implicit-templates -fno-exceptions -fno-rtti"
|
||||
AC_DEFINE([HAVE_EXPLICIT_TEMPLATE_INSTANTIATION],
|
||||
[1], [Defined by configure. Use explicit template instantiation.])
|
||||
|
|
|
@ -211,7 +211,7 @@ typedef uint rf_SetTimer;
|
|||
#define my_sigset(A,B) signal((A),(B))
|
||||
#define finite(A) _finite(A)
|
||||
#define sleep(A) Sleep((A)*1000)
|
||||
#define popen(A) popen(A,B) _popen((A),(B))
|
||||
#define popen(A,B) _popen((A),(B))
|
||||
#define pclose(A) _pclose(A)
|
||||
|
||||
#ifndef __BORLANDC__
|
||||
|
|
|
@ -346,8 +346,9 @@ enum ha_base_keytype {
|
|||
#define HA_ERR_NO_CONNECTION 157 /* Could not connect to storage engine */
|
||||
#define HA_ERR_NULL_IN_SPATIAL 158 /* NULLs are not supported in spatial index */
|
||||
#define HA_ERR_TABLE_DEF_CHANGED 159 /* The table changed in storage engine */
|
||||
#define HA_ERR_TABLE_NEEDS_UPGRADE 160 /* The table changed in storage engine */
|
||||
|
||||
#define HA_ERR_LAST 159 /*Copy last error nr.*/
|
||||
#define HA_ERR_LAST 160 /*Copy last error nr.*/
|
||||
/* Add error numbers before HA_ERR_LAST and change it accordingly. */
|
||||
#define HA_ERR_ERRORS (HA_ERR_LAST - HA_ERR_FIRST + 1)
|
||||
|
||||
|
|
|
@ -43,6 +43,15 @@
|
|||
#define HAVE_ERRNO_AS_DEFINE
|
||||
#endif /* __CYGWIN__ */
|
||||
|
||||
#if defined(__QNXNTO__) && !defined(FD_SETSIZE)
|
||||
#define FD_SETSIZE 1024 /* Max number of file descriptor bits in
|
||||
fd_set, used when calling 'select'
|
||||
Must be defined before including
|
||||
"sys/select.h" and "sys/time.h"
|
||||
*/
|
||||
#endif
|
||||
|
||||
|
||||
/* to make command line shorter we'll define USE_PRAGMA_INTERFACE here */
|
||||
#ifdef USE_PRAGMA_IMPLEMENTATION
|
||||
#define USE_PRAGMA_INTERFACE
|
||||
|
|
|
@ -368,6 +368,7 @@ extern uint mi_get_pointer_length(ulonglong file_length, uint def);
|
|||
*/
|
||||
|
||||
#define TT_USEFRM 1
|
||||
#define TT_FOR_UPGRADE 2
|
||||
|
||||
#define O_NEW_INDEX 1 /* Bits set in out_flag */
|
||||
#define O_NEW_DATA 2
|
||||
|
|
|
@ -130,14 +130,14 @@ typedef MYSQL_ROWS *MYSQL_ROW_OFFSET; /* offset to current row */
|
|||
|
||||
#include "my_alloc.h"
|
||||
|
||||
typedef struct embedded_query_result EMBEDDED_QUERY_RESULT;
|
||||
typedef struct st_mysql_data {
|
||||
my_ulonglong rows;
|
||||
unsigned int fields;
|
||||
MYSQL_ROWS *data;
|
||||
MEM_ROOT alloc;
|
||||
#if !defined(CHECK_EMBEDDED_DIFFERENCES) || defined(EMBEDDED_LIBRARY)
|
||||
MYSQL_ROWS **prev_ptr;
|
||||
#endif
|
||||
/* extra info for embedded library */
|
||||
struct embedded_query_result *embedded_info;
|
||||
} MYSQL_DATA;
|
||||
|
||||
enum mysql_option
|
||||
|
@ -287,6 +287,8 @@ typedef struct st_mysql
|
|||
from mysql_stmt_close if close had to cancel result set of this object.
|
||||
*/
|
||||
my_bool *unbuffered_fetch_owner;
|
||||
/* needed for embedded server - no net buffer to store the 'info' */
|
||||
char *info_buffer;
|
||||
} MYSQL;
|
||||
|
||||
typedef struct st_mysql_res {
|
||||
|
@ -755,6 +757,7 @@ typedef struct st_mysql_methods
|
|||
const char *(*read_statistics)(MYSQL *mysql);
|
||||
my_bool (*next_result)(MYSQL *mysql);
|
||||
int (*read_change_user_result)(MYSQL *mysql, char *buff, const char *passwd);
|
||||
int (*read_rows_from_cursor)(MYSQL_STMT *stmt);
|
||||
#endif
|
||||
} MYSQL_METHODS;
|
||||
|
||||
|
|
|
@ -1370,8 +1370,12 @@ mysql_stat(MYSQL *mysql)
|
|||
int STDCALL
|
||||
mysql_ping(MYSQL *mysql)
|
||||
{
|
||||
int res;
|
||||
DBUG_ENTER("mysql_ping");
|
||||
DBUG_RETURN(simple_command(mysql,COM_PING,0,0,0));
|
||||
res= simple_command(mysql,COM_PING,0,0,0);
|
||||
if (res == CR_SERVER_LOST && mysql->reconnect)
|
||||
res= simple_command(mysql,COM_PING,0,0,0);
|
||||
DBUG_RETURN(res);
|
||||
}
|
||||
|
||||
|
||||
|
@ -2723,13 +2727,13 @@ stmt_read_row_from_cursor(MYSQL_STMT *stmt, unsigned char **row)
|
|||
/* Send row request to the server */
|
||||
int4store(buff, stmt->stmt_id);
|
||||
int4store(buff + 4, stmt->prefetch_rows); /* number of rows to fetch */
|
||||
if (cli_advanced_command(mysql, COM_STMT_FETCH, buff, sizeof(buff),
|
||||
NullS, 0, 1))
|
||||
if ((*mysql->methods->advanced_command)(mysql, COM_STMT_FETCH,
|
||||
buff, sizeof(buff), NullS, 0, 1))
|
||||
{
|
||||
set_stmt_errmsg(stmt, net->last_error, net->last_errno, net->sqlstate);
|
||||
return 1;
|
||||
}
|
||||
if (cli_read_binary_rows(stmt))
|
||||
if ((*mysql->methods->read_rows_from_cursor)(stmt))
|
||||
return 1;
|
||||
stmt->server_status= mysql->server_status;
|
||||
|
||||
|
@ -5139,9 +5143,9 @@ my_bool STDCALL mysql_autocommit(MYSQL * mysql, my_bool auto_mode)
|
|||
DBUG_ENTER("mysql_autocommit");
|
||||
DBUG_PRINT("enter", ("mode : %d", auto_mode));
|
||||
|
||||
if (auto_mode) /* set to true */
|
||||
DBUG_RETURN((my_bool) mysql_real_query(mysql, "set autocommit=1", 16));
|
||||
DBUG_RETURN((my_bool) mysql_real_query(mysql, "set autocommit=0", 16));
|
||||
DBUG_RETURN((my_bool) mysql_real_query(mysql, auto_mode ?
|
||||
"set autocommit=1":"set autocommit=0",
|
||||
16));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#ifdef HAVE_QUERY_CACHE
|
||||
#include <mysql.h>
|
||||
#include "emb_qcache.h"
|
||||
#include "embedded_priv.h"
|
||||
|
||||
void Querycache_stream::store_char(char c)
|
||||
{
|
||||
|
@ -284,22 +285,25 @@ int Querycache_stream::load_column(MEM_ROOT *alloc, char** column)
|
|||
|
||||
uint emb_count_querycache_size(THD *thd)
|
||||
{
|
||||
uint result;
|
||||
MYSQL *mysql= thd->mysql;
|
||||
MYSQL_FIELD *field= mysql->fields;
|
||||
MYSQL_FIELD *field_end= field + mysql->field_count;
|
||||
MYSQL_ROWS *cur_row=NULL;
|
||||
my_ulonglong n_rows=0;
|
||||
uint result= 0;
|
||||
MYSQL_FIELD *field;
|
||||
MYSQL_FIELD *field_end;
|
||||
MYSQL_ROWS *cur_row;
|
||||
my_ulonglong n_rows;
|
||||
MYSQL_DATA *data= thd->first_data;
|
||||
|
||||
while (data->embedded_info->next)
|
||||
data= data->embedded_info->next;
|
||||
field= data->embedded_info->fields_list;
|
||||
field_end= field + data->fields;
|
||||
|
||||
if (!field)
|
||||
return 0;
|
||||
if (thd->data)
|
||||
{
|
||||
*thd->data->prev_ptr= NULL; // this marks the last record
|
||||
cur_row= thd->data->data;
|
||||
n_rows= thd->data->rows;
|
||||
}
|
||||
result= (uint) (4+8 + (42 + 4*n_rows)*mysql->field_count);
|
||||
return result;
|
||||
*data->embedded_info->prev_ptr= NULL; // this marks the last record
|
||||
cur_row= data->data;
|
||||
n_rows= data->rows;
|
||||
/* n_fields + n_rows + (field_info + strlen * n_rows) * n_fields */
|
||||
result+= (uint) (4+8 + (42 + 4*n_rows)*data->fields);
|
||||
|
||||
for(; field < field_end; field++)
|
||||
{
|
||||
|
@ -313,34 +317,38 @@ uint emb_count_querycache_size(THD *thd)
|
|||
for (; cur_row; cur_row=cur_row->next)
|
||||
{
|
||||
MYSQL_ROW col= cur_row->data;
|
||||
MYSQL_ROW col_end= col + mysql->field_count;
|
||||
MYSQL_ROW col_end= col + data->fields;
|
||||
for (; col < col_end; col++)
|
||||
if (*col)
|
||||
result+= *(uint *)((*col) - sizeof(uint));
|
||||
result+= *(uint *)((*col) - sizeof(uint));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void emb_store_querycache_result(Querycache_stream *dst, THD *thd)
|
||||
{
|
||||
MYSQL *mysql= thd->mysql;
|
||||
MYSQL_FIELD *field= mysql->fields;
|
||||
MYSQL_FIELD *field_end= field + mysql->field_count;
|
||||
MYSQL_ROWS *cur_row= NULL;
|
||||
my_ulonglong n_rows= 0;
|
||||
MYSQL_FIELD *field;
|
||||
MYSQL_FIELD *field_end;
|
||||
MYSQL_ROWS *cur_row;
|
||||
my_ulonglong n_rows;
|
||||
MYSQL_DATA *data= thd->first_data;
|
||||
|
||||
DBUG_ENTER("emb_store_querycache_result");
|
||||
|
||||
while (data->embedded_info->next)
|
||||
data= data->embedded_info->next;
|
||||
field= data->embedded_info->fields_list;
|
||||
field_end= field + data->fields;
|
||||
|
||||
if (!field)
|
||||
return;
|
||||
DBUG_VOID_RETURN;
|
||||
|
||||
if (thd->data)
|
||||
{
|
||||
*thd->data->prev_ptr= NULL; // this marks the last record
|
||||
cur_row= thd->data->data;
|
||||
n_rows= thd->data->rows;
|
||||
}
|
||||
*data->embedded_info->prev_ptr= NULL; // this marks the last record
|
||||
cur_row= data->data;
|
||||
n_rows= data->rows;
|
||||
|
||||
dst->store_int((uint)mysql->field_count);
|
||||
dst->store_ll((uint)n_rows);
|
||||
dst->store_int((uint)data->fields);
|
||||
dst->store_ll((ulonglong)n_rows);
|
||||
|
||||
for(; field < field_end; field++)
|
||||
{
|
||||
|
@ -356,14 +364,13 @@ void emb_store_querycache_result(Querycache_stream *dst, THD *thd)
|
|||
dst->store_str(field->org_table, field->org_table_length);
|
||||
dst->store_str(field->db, field->db_length);
|
||||
dst->store_str(field->catalog, field->catalog_length);
|
||||
|
||||
dst->store_safe_str(field->def, field->def_length);
|
||||
}
|
||||
|
||||
for (; cur_row; cur_row=cur_row->next)
|
||||
{
|
||||
MYSQL_ROW col= cur_row->data;
|
||||
MYSQL_ROW col_end= col + mysql->field_count;
|
||||
MYSQL_ROW col_end= col + data->fields;
|
||||
for (; col < col_end; col++)
|
||||
{
|
||||
uint len= *col ? *(uint *)((*col) - sizeof(uint)) : 0;
|
||||
|
@ -371,28 +378,34 @@ void emb_store_querycache_result(Querycache_stream *dst, THD *thd)
|
|||
}
|
||||
}
|
||||
DBUG_ASSERT(emb_count_querycache_size(thd) == dst->stored_size);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
int emb_load_querycache_result(THD *thd, Querycache_stream *src)
|
||||
{
|
||||
MYSQL *mysql= thd->mysql;
|
||||
MYSQL_DATA *data;
|
||||
MYSQL_DATA *data= thd->alloc_new_dataset();
|
||||
MYSQL_FIELD *field;
|
||||
MYSQL_FIELD *field_end;
|
||||
MEM_ROOT *f_alloc= &mysql->field_alloc;
|
||||
MEM_ROOT *f_alloc;
|
||||
MYSQL_ROWS *row, *end_row;
|
||||
MYSQL_ROWS **prev_row;
|
||||
ulonglong rows;
|
||||
MYSQL_ROW columns;
|
||||
DBUG_ENTER("emb_load_querycache_result");
|
||||
|
||||
mysql->field_count= src->load_int();
|
||||
if (!data)
|
||||
goto err;
|
||||
init_alloc_root(&data->alloc, 8192,0);
|
||||
f_alloc= &data->alloc;
|
||||
|
||||
data->fields= src->load_int();
|
||||
rows= src->load_ll();
|
||||
|
||||
if (!(field= (MYSQL_FIELD *)
|
||||
alloc_root(&mysql->field_alloc,mysql->field_count*sizeof(MYSQL_FIELD))))
|
||||
alloc_root(f_alloc,data->fields*sizeof(MYSQL_FIELD))))
|
||||
goto err;
|
||||
mysql->fields= field;
|
||||
for(field_end= field+mysql->field_count; field < field_end; field++)
|
||||
data->embedded_info->fields_list= field;
|
||||
for(field_end= field+data->fields; field < field_end; field++)
|
||||
{
|
||||
field->length= src->load_int();
|
||||
field->max_length= (unsigned int)src->load_int();
|
||||
|
@ -402,47 +415,43 @@ int emb_load_querycache_result(THD *thd, Querycache_stream *src)
|
|||
field->decimals= (unsigned int)src->load_char();
|
||||
|
||||
if (!(field->name= src->load_str(f_alloc, &field->name_length)) ||
|
||||
!(field->table= src->load_str(f_alloc,&field->table_length)) ||
|
||||
!(field->org_name= src->load_str(f_alloc, &field->org_name_length)) ||
|
||||
!(field->org_table= src->load_str(f_alloc, &field->org_table_length))||
|
||||
!(field->db= src->load_str(f_alloc, &field->db_length)) ||
|
||||
!(field->catalog= src->load_str(f_alloc, &field->catalog_length)) ||
|
||||
src->load_safe_str(f_alloc, &field->def, &field->def_length))
|
||||
!(field->table= src->load_str(f_alloc,&field->table_length)) ||
|
||||
!(field->org_name= src->load_str(f_alloc, &field->org_name_length)) ||
|
||||
!(field->org_table= src->load_str(f_alloc, &field->org_table_length))||
|
||||
!(field->db= src->load_str(f_alloc, &field->db_length)) ||
|
||||
!(field->catalog= src->load_str(f_alloc, &field->catalog_length)) ||
|
||||
src->load_safe_str(f_alloc, &field->def, &field->def_length))
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!rows)
|
||||
return 0;
|
||||
if (!(data= (MYSQL_DATA*)my_malloc(sizeof(MYSQL_DATA),
|
||||
MYF(MY_WME | MY_ZEROFILL))))
|
||||
goto err;
|
||||
thd->data= data;
|
||||
init_alloc_root(&data->alloc, 8192,0);
|
||||
row= (MYSQL_ROWS *)alloc_root(&data->alloc, (uint) (rows * sizeof(MYSQL_ROWS) +
|
||||
rows * (mysql->field_count+1)*sizeof(char*)));
|
||||
row= (MYSQL_ROWS *)alloc_root(&data->alloc,
|
||||
(uint) (rows * sizeof(MYSQL_ROWS) +
|
||||
rows*(data->fields+1)*sizeof(char*)));
|
||||
end_row= row + rows;
|
||||
columns= (MYSQL_ROW)end_row;
|
||||
|
||||
data->rows= rows;
|
||||
data->fields= mysql->field_count;
|
||||
data->data= row;
|
||||
if (!rows)
|
||||
goto return_ok;
|
||||
|
||||
for (prev_row= &row->next; row < end_row; prev_row= &row->next, row++)
|
||||
{
|
||||
*prev_row= row;
|
||||
row->data= columns;
|
||||
MYSQL_ROW col_end= columns + mysql->field_count;
|
||||
MYSQL_ROW col_end= columns + data->fields;
|
||||
for (; columns < col_end; columns++)
|
||||
src->load_column(&data->alloc, columns);
|
||||
|
||||
*(columns++)= NULL;
|
||||
}
|
||||
*prev_row= NULL;
|
||||
data->prev_ptr= prev_row;
|
||||
|
||||
return 0;
|
||||
data->embedded_info->prev_ptr= prev_row;
|
||||
return_ok:
|
||||
send_eof(thd);
|
||||
DBUG_RETURN(0);
|
||||
err:
|
||||
return 1;
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
|
||||
#endif /*HAVE_QUERY_CACHE*/
|
||||
|
|
|
@ -16,18 +16,25 @@
|
|||
|
||||
/* Prototypes for the embedded version of MySQL */
|
||||
|
||||
#include <my_global.h>
|
||||
#include <mysql.h>
|
||||
#include <mysql_embed.h>
|
||||
#include <mysqld_error.h>
|
||||
#include <my_pthread.h>
|
||||
|
||||
C_MODE_START
|
||||
void lib_connection_phase(NET *net, int phase);
|
||||
void init_embedded_mysql(MYSQL *mysql, int client_flag, char *db);
|
||||
void *create_embedded_thd(int client_flag, char *db);
|
||||
int check_embedded_connection(MYSQL *mysql);
|
||||
void free_old_query(MYSQL *mysql);
|
||||
void embedded_get_error(MYSQL *mysql);
|
||||
extern MYSQL_METHODS embedded_methods;
|
||||
|
||||
/* This one is used by embedded library to gather returning data */
|
||||
typedef struct embedded_query_result
|
||||
{
|
||||
MYSQL_ROWS **prev_ptr;
|
||||
unsigned int warning_count, server_status;
|
||||
struct st_mysql_data *next;
|
||||
my_ulonglong affected_rows, insert_id;
|
||||
char info[MYSQL_ERRMSG_SIZE];
|
||||
MYSQL_FIELD *fields_list;
|
||||
unsigned int last_errno;
|
||||
char sqlstate[SQLSTATE_LENGTH+1];
|
||||
} EQR;
|
||||
|
||||
C_MODE_END
|
||||
|
|
|
@ -42,21 +42,48 @@ C_MODE_START
|
|||
#undef ER
|
||||
#include "errmsg.h"
|
||||
#include <sql_common.h>
|
||||
#include "embedded_priv.h"
|
||||
|
||||
void embedded_get_error(MYSQL *mysql)
|
||||
static my_bool emb_read_query_result(MYSQL *mysql);
|
||||
|
||||
void THD::clear_data_list()
|
||||
{
|
||||
while (first_data)
|
||||
{
|
||||
MYSQL_DATA *data= first_data;
|
||||
first_data= data->embedded_info->next;
|
||||
free_rows(data);
|
||||
}
|
||||
data_tail= &first_data;
|
||||
free_rows(cur_data);
|
||||
cur_data= 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Reads error information from the MYSQL_DATA and puts
|
||||
it into proper MYSQL members
|
||||
|
||||
SYNOPSIS
|
||||
embedded_get_error()
|
||||
mysql connection handler
|
||||
data query result
|
||||
|
||||
NOTES
|
||||
after that function error information will be accessible
|
||||
with usual functions like mysql_error()
|
||||
data is my_free-d in this function
|
||||
most of the data is stored in data->embedded_info structure
|
||||
*/
|
||||
|
||||
void embedded_get_error(MYSQL *mysql, MYSQL_DATA *data)
|
||||
{
|
||||
THD *thd=(THD *) mysql->thd;
|
||||
NET *net= &mysql->net;
|
||||
if ((net->last_errno= thd->net.last_errno))
|
||||
{
|
||||
memcpy(net->last_error, thd->net.last_error, sizeof(net->last_error));
|
||||
memcpy(net->sqlstate, thd->net.sqlstate, sizeof(net->sqlstate));
|
||||
}
|
||||
else
|
||||
{
|
||||
net->last_error[0]= 0;
|
||||
strmov(net->sqlstate, not_error_sqlstate);
|
||||
}
|
||||
struct embedded_query_result *ei= data->embedded_info;
|
||||
net->last_errno= ei->last_errno;
|
||||
strmake(net->last_error, ei->info, sizeof(net->last_error));
|
||||
memcpy(net->sqlstate, ei->sqlstate, sizeof(net->sqlstate));
|
||||
my_free((gptr) data, MYF(0));
|
||||
}
|
||||
|
||||
static my_bool
|
||||
|
@ -68,11 +95,7 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
|
|||
THD *thd=(THD *) mysql->thd;
|
||||
NET *net= &mysql->net;
|
||||
|
||||
if (thd->data)
|
||||
{
|
||||
free_rows(thd->data);
|
||||
thd->data= 0;
|
||||
}
|
||||
thd->clear_data_list();
|
||||
/* Check that we are calling the client functions in right order */
|
||||
if (mysql->status != MYSQL_STATUS_READY)
|
||||
{
|
||||
|
@ -104,83 +127,101 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
|
|||
arg_length= header_length;
|
||||
}
|
||||
|
||||
thd->net.no_send_error= 0;
|
||||
result= dispatch_command(command, thd, (char *) arg, arg_length + 1);
|
||||
thd->cur_data= 0;
|
||||
|
||||
if (!skip_check)
|
||||
result= thd->net.last_errno ? -1 : 0;
|
||||
|
||||
/*
|
||||
If mysql->field_count is set it means the parsing of the query was OK
|
||||
and metadata was returned (see Protocol::send_fields).
|
||||
In this case we postpone the error to be returned in mysql_stmt_store_result
|
||||
(see emb_read_rows) to behave just as standalone server.
|
||||
*/
|
||||
if (!mysql->field_count)
|
||||
embedded_get_error(mysql);
|
||||
mysql->server_status= thd->server_status;
|
||||
mysql->warning_count= ((THD*)mysql->thd)->total_warn_count;
|
||||
return result;
|
||||
}
|
||||
|
||||
static void emb_flush_use_result(MYSQL *mysql)
|
||||
{
|
||||
MYSQL_DATA *data= ((THD*)(mysql->thd))->data;
|
||||
|
||||
if (data)
|
||||
THD *thd= (THD*) mysql->thd;
|
||||
if (thd->cur_data)
|
||||
{
|
||||
free_rows(thd->cur_data);
|
||||
thd->cur_data= 0;
|
||||
}
|
||||
else if (thd->first_data)
|
||||
{
|
||||
MYSQL_DATA *data= thd->first_data;
|
||||
thd->first_data= data->embedded_info->next;
|
||||
free_rows(data);
|
||||
((THD*)(mysql->thd))->data= NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
reads dataset from the next query result
|
||||
|
||||
SYNOPSIS
|
||||
emb_read_rows()
|
||||
mysql connection handle
|
||||
other parameters are not used
|
||||
|
||||
NOTES
|
||||
It just gets next MYSQL_DATA from the result's queue
|
||||
|
||||
RETURN
|
||||
pointer to MYSQL_DATA with the coming recordset
|
||||
*/
|
||||
|
||||
static MYSQL_DATA *
|
||||
emb_read_rows(MYSQL *mysql, MYSQL_FIELD *mysql_fields __attribute__((unused)),
|
||||
unsigned int fields __attribute__((unused)))
|
||||
{
|
||||
MYSQL_DATA *result= ((THD*)mysql->thd)->data;
|
||||
embedded_get_error(mysql);
|
||||
if (mysql->net.last_errno)
|
||||
return NULL;
|
||||
if (!result)
|
||||
MYSQL_DATA *result= ((THD*)mysql->thd)->cur_data;
|
||||
((THD*)mysql->thd)->cur_data= 0;
|
||||
if (result->embedded_info->last_errno)
|
||||
{
|
||||
if (!(result=(MYSQL_DATA*) my_malloc(sizeof(MYSQL_DATA),
|
||||
MYF(MY_WME | MY_ZEROFILL))))
|
||||
{
|
||||
NET *net = &mysql->net;
|
||||
net->last_errno=CR_OUT_OF_MEMORY;
|
||||
strmov(net->sqlstate, unknown_sqlstate);
|
||||
strmov(net->last_error,ER(net->last_errno));
|
||||
return NULL;
|
||||
}
|
||||
return result;
|
||||
embedded_get_error(mysql, result);
|
||||
return NULL;
|
||||
}
|
||||
*result->prev_ptr= NULL;
|
||||
((THD*)mysql->thd)->data= NULL;
|
||||
*result->embedded_info->prev_ptr= NULL;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
static MYSQL_FIELD *emb_list_fields(MYSQL *mysql)
|
||||
{
|
||||
MYSQL_DATA *res;
|
||||
if (emb_read_query_result(mysql))
|
||||
return 0;
|
||||
res= ((THD*) mysql->thd)->cur_data;
|
||||
((THD*) mysql->thd)->cur_data= 0;
|
||||
mysql->field_alloc= res->alloc;
|
||||
my_free((gptr) res,MYF(0));
|
||||
mysql->status= MYSQL_STATUS_READY;
|
||||
return mysql->fields;
|
||||
}
|
||||
|
||||
static my_bool emb_read_prepare_result(MYSQL *mysql, MYSQL_STMT *stmt)
|
||||
{
|
||||
THD *thd= (THD*)mysql->thd;
|
||||
if (mysql->net.last_errno)
|
||||
return 1;
|
||||
THD *thd= (THD*) mysql->thd;
|
||||
MYSQL_DATA *res;
|
||||
|
||||
stmt->stmt_id= thd->client_stmt_id;
|
||||
stmt->param_count= thd->client_param_count;
|
||||
stmt->field_count= mysql->field_count;
|
||||
stmt->field_count= 0;
|
||||
|
||||
if (stmt->field_count != 0)
|
||||
if (thd->first_data)
|
||||
{
|
||||
if (emb_read_query_result(mysql))
|
||||
return 1;
|
||||
stmt->field_count= mysql->field_count;
|
||||
mysql->status= MYSQL_STATUS_READY;
|
||||
res= thd->cur_data;
|
||||
thd->cur_data= NULL;
|
||||
if (!(mysql->server_status & SERVER_STATUS_AUTOCOMMIT))
|
||||
mysql->server_status|= SERVER_STATUS_IN_TRANS;
|
||||
|
||||
stmt->fields= mysql->fields;
|
||||
stmt->mem_root= mysql->field_alloc;
|
||||
stmt->mem_root= res->alloc;
|
||||
mysql->fields= NULL;
|
||||
my_free((gptr) res,MYF(0));
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -201,13 +242,42 @@ static void emb_fetch_lengths(ulong *to, MYSQL_ROW column,
|
|||
*to= *column ? *(uint *)((*column) - sizeof(uint)) : 0;
|
||||
}
|
||||
|
||||
static my_bool emb_mysql_read_query_result(MYSQL *mysql)
|
||||
static my_bool emb_read_query_result(MYSQL *mysql)
|
||||
{
|
||||
if (mysql->net.last_errno)
|
||||
return -1;
|
||||
THD *thd= (THD*) mysql->thd;
|
||||
MYSQL_DATA *res= thd->first_data;
|
||||
DBUG_ASSERT(!thd->cur_data);
|
||||
thd->first_data= res->embedded_info->next;
|
||||
if (res->embedded_info->last_errno &&
|
||||
!res->embedded_info->fields_list)
|
||||
{
|
||||
embedded_get_error(mysql, res);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (mysql->field_count)
|
||||
mysql->warning_count= res->embedded_info->warning_count;
|
||||
mysql->server_status= res->embedded_info->server_status;
|
||||
mysql->field_count= res->fields;
|
||||
mysql->fields= res->embedded_info->fields_list;
|
||||
mysql->affected_rows= res->embedded_info->affected_rows;
|
||||
mysql->insert_id= res->embedded_info->insert_id;
|
||||
mysql->net.last_errno= 0;
|
||||
mysql->net.last_error[0]= 0;
|
||||
mysql->info= 0;
|
||||
|
||||
if (res->embedded_info->info[0])
|
||||
{
|
||||
strmake(mysql->info_buffer, res->embedded_info->info, MYSQL_ERRMSG_SIZE-1);
|
||||
mysql->info= mysql->info_buffer;
|
||||
}
|
||||
|
||||
if (res->embedded_info->fields_list)
|
||||
{
|
||||
mysql->status=MYSQL_STATUS_GET_RESULT;
|
||||
thd->cur_data= res;
|
||||
}
|
||||
else
|
||||
my_free((gptr) res, MYF(0));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -215,14 +285,18 @@ static my_bool emb_mysql_read_query_result(MYSQL *mysql)
|
|||
static int emb_stmt_execute(MYSQL_STMT *stmt)
|
||||
{
|
||||
DBUG_ENTER("emb_stmt_execute");
|
||||
char header[4];
|
||||
char header[5];
|
||||
MYSQL_DATA *res;
|
||||
THD *thd;
|
||||
|
||||
int4store(header, stmt->stmt_id);
|
||||
THD *thd= (THD*)stmt->mysql->thd;
|
||||
header[4]= stmt->flags;
|
||||
thd= (THD*)stmt->mysql->thd;
|
||||
thd->client_param_count= stmt->param_count;
|
||||
thd->client_params= stmt->params;
|
||||
if (emb_advanced_command(stmt->mysql, COM_STMT_EXECUTE,0,0,
|
||||
header, sizeof(header), 1) ||
|
||||
emb_mysql_read_query_result(stmt->mysql))
|
||||
emb_read_query_result(stmt->mysql))
|
||||
{
|
||||
NET *net= &stmt->mysql->net;
|
||||
set_stmt_errmsg(stmt, net->last_error, net->last_errno, net->sqlstate);
|
||||
|
@ -230,6 +304,8 @@ static int emb_stmt_execute(MYSQL_STMT *stmt)
|
|||
}
|
||||
stmt->affected_rows= stmt->mysql->affected_rows;
|
||||
stmt->insert_id= stmt->mysql->insert_id;
|
||||
stmt->server_status= stmt->mysql->server_status;
|
||||
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
|
@ -240,22 +316,53 @@ int emb_read_binary_rows(MYSQL_STMT *stmt)
|
|||
return 1;
|
||||
stmt->result= *data;
|
||||
my_free((char *) data, MYF(0));
|
||||
set_stmt_errmsg(stmt, stmt->mysql->net.last_error,
|
||||
stmt->mysql->net.last_errno, stmt->mysql->net.sqlstate);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int emb_read_rows_from_cursor(MYSQL_STMT *stmt)
|
||||
{
|
||||
MYSQL *mysql= stmt->mysql;
|
||||
THD *thd= (THD*) mysql->thd;
|
||||
MYSQL_DATA *res= thd->first_data;
|
||||
DBUG_ASSERT(!thd->first_data->embedded_info->next);
|
||||
thd->first_data= 0;
|
||||
if (res->embedded_info->last_errno)
|
||||
{
|
||||
embedded_get_error(mysql, res);
|
||||
set_stmt_errmsg(stmt, mysql->net.last_error,
|
||||
mysql->net.last_errno, mysql->net.sqlstate);
|
||||
return 1;
|
||||
}
|
||||
|
||||
thd->cur_data= res;
|
||||
mysql->warning_count= res->embedded_info->warning_count;
|
||||
mysql->server_status= res->embedded_info->server_status;
|
||||
mysql->net.last_errno= 0;
|
||||
mysql->net.last_error[0]= 0;
|
||||
|
||||
return emb_read_binary_rows(stmt);
|
||||
}
|
||||
|
||||
int emb_unbuffered_fetch(MYSQL *mysql, char **row)
|
||||
{
|
||||
MYSQL_DATA *data= ((THD*)mysql->thd)->data;
|
||||
embedded_get_error(mysql);
|
||||
if (mysql->net.last_errno)
|
||||
return mysql->net.last_errno;
|
||||
THD *thd= (THD*) mysql->thd;
|
||||
MYSQL_DATA *data= thd->cur_data;
|
||||
if (data && data->embedded_info->last_errno)
|
||||
{
|
||||
embedded_get_error(mysql, data);
|
||||
thd->cur_data= 0;
|
||||
return 1;
|
||||
}
|
||||
if (!data || !data->data)
|
||||
{
|
||||
*row= NULL;
|
||||
if (data)
|
||||
{
|
||||
thd->cur_data= thd->first_data;
|
||||
thd->first_data= data->embedded_info->next;
|
||||
free_rows(data);
|
||||
((THD*)mysql->thd)->data= NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -269,9 +376,9 @@ int emb_unbuffered_fetch(MYSQL *mysql, char **row)
|
|||
static void emb_free_embedded_thd(MYSQL *mysql)
|
||||
{
|
||||
THD *thd= (THD*)mysql->thd;
|
||||
if (thd->data)
|
||||
free_rows(thd->data);
|
||||
thd->clear_data_list();
|
||||
thread_count--;
|
||||
thd->store_globals();
|
||||
delete thd;
|
||||
mysql->thd=0;
|
||||
}
|
||||
|
@ -283,23 +390,11 @@ static const char * emb_read_statistics(MYSQL *mysql)
|
|||
}
|
||||
|
||||
|
||||
static MYSQL_RES * emb_mysql_store_result(MYSQL *mysql)
|
||||
static MYSQL_RES * emb_store_result(MYSQL *mysql)
|
||||
{
|
||||
return mysql_store_result(mysql);
|
||||
}
|
||||
|
||||
my_bool emb_next_result(MYSQL *mysql)
|
||||
{
|
||||
THD *thd= (THD*)mysql->thd;
|
||||
DBUG_ENTER("emb_next_result");
|
||||
|
||||
if (emb_advanced_command(mysql, COM_QUERY,0,0,
|
||||
thd->query_rest.ptr(),thd->query_rest.length(),1) ||
|
||||
emb_mysql_read_query_result(mysql))
|
||||
DBUG_RETURN(1);
|
||||
|
||||
DBUG_RETURN(0); /* No more results */
|
||||
}
|
||||
|
||||
int emb_read_change_user_result(MYSQL *mysql,
|
||||
char *buff __attribute__((unused)),
|
||||
|
@ -310,10 +405,10 @@ int emb_read_change_user_result(MYSQL *mysql,
|
|||
|
||||
MYSQL_METHODS embedded_methods=
|
||||
{
|
||||
emb_mysql_read_query_result,
|
||||
emb_read_query_result,
|
||||
emb_advanced_command,
|
||||
emb_read_rows,
|
||||
emb_mysql_store_result,
|
||||
emb_store_result,
|
||||
emb_fetch_lengths,
|
||||
emb_flush_use_result,
|
||||
emb_list_fields,
|
||||
|
@ -323,8 +418,9 @@ MYSQL_METHODS embedded_methods=
|
|||
emb_unbuffered_fetch,
|
||||
emb_free_embedded_thd,
|
||||
emb_read_statistics,
|
||||
emb_next_result,
|
||||
emb_read_change_user_result
|
||||
emb_read_query_result,
|
||||
emb_read_change_user_result,
|
||||
emb_read_rows_from_cursor
|
||||
};
|
||||
|
||||
C_MODE_END
|
||||
|
@ -483,6 +579,7 @@ void init_embedded_mysql(MYSQL *mysql, int client_flag, char *db)
|
|||
THD *thd = (THD *)mysql->thd;
|
||||
thd->mysql= mysql;
|
||||
mysql->server_version= server_version;
|
||||
init_alloc_root(&mysql->field_alloc, 8192, 0);
|
||||
}
|
||||
|
||||
void *create_embedded_thd(int client_flag, char *db)
|
||||
|
@ -490,6 +587,7 @@ void *create_embedded_thd(int client_flag, char *db)
|
|||
THD * thd= new THD;
|
||||
thd->thread_id= thread_id++;
|
||||
|
||||
thd->thread_stack= (char*) &thd;
|
||||
if (thd->store_globals())
|
||||
{
|
||||
fprintf(stderr,"store_globals failed.\n");
|
||||
|
@ -517,9 +615,10 @@ void *create_embedded_thd(int client_flag, char *db)
|
|||
thd->security_ctx->db_access= DB_ACLS;
|
||||
thd->security_ctx->master_access= ~NO_ACCESS;
|
||||
#endif
|
||||
thd->net.query_cache_query= 0;
|
||||
|
||||
thd->data= 0;
|
||||
thd->cur_data= 0;
|
||||
thd->first_data= 0;
|
||||
thd->data_tail= &thd->first_data;
|
||||
bzero((char*) &thd->net, sizeof(thd->net));
|
||||
|
||||
thread_count++;
|
||||
return thd;
|
||||
|
@ -531,11 +630,15 @@ err:
|
|||
#ifdef NO_EMBEDDED_ACCESS_CHECKS
|
||||
int check_embedded_connection(MYSQL *mysql)
|
||||
{
|
||||
int result;
|
||||
THD *thd= (THD*)mysql->thd;
|
||||
Security_context *sctx= thd->security_ctx;
|
||||
sctx->host_or_ip= sctx->host= (char*)my_localhost;
|
||||
sctx->host_or_ip= sctx->host= (char*) my_localhost;
|
||||
strmake(sctx->priv_host, (char*) my_localhost, MAX_HOSTNAME-1);
|
||||
sctx->priv_user= sctx->user= my_strdup(mysql->user, MYF(0));
|
||||
return check_user(thd, COM_CONNECT, NULL, 0, thd->db, true);
|
||||
result= check_user(thd, COM_CONNECT, NULL, 0, thd->db, true);
|
||||
emb_read_query_result(mysql);
|
||||
return result;
|
||||
}
|
||||
|
||||
#else
|
||||
|
@ -616,26 +719,147 @@ static char *dup_str_aux(MEM_ROOT *root, const char *from, uint length,
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
creates new result and hooks it to the list
|
||||
|
||||
SYNOPSIS
|
||||
alloc_new_dataset()
|
||||
|
||||
NOTES
|
||||
allocs the MYSQL_DATA + embedded_query_result couple
|
||||
to store the next query result,
|
||||
links these two and attach it to the THD::data_tail
|
||||
|
||||
RETURN
|
||||
pointer to the newly created query result
|
||||
*/
|
||||
|
||||
MYSQL_DATA *THD::alloc_new_dataset()
|
||||
{
|
||||
MYSQL_DATA *data;
|
||||
struct embedded_query_result *emb_data;
|
||||
if (!my_multi_malloc(MYF(MY_WME | MY_ZEROFILL),
|
||||
&data, sizeof(*data),
|
||||
&emb_data, sizeof(*emb_data),
|
||||
NULL))
|
||||
return NULL;
|
||||
|
||||
emb_data->prev_ptr= &data->data;
|
||||
cur_data= data;
|
||||
*data_tail= data;
|
||||
data_tail= &emb_data->next;
|
||||
data->embedded_info= emb_data;
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
stores server_status and warning_count in the current
|
||||
query result structures
|
||||
|
||||
SYNOPSIS
|
||||
write_eof_packet()
|
||||
thd current thread
|
||||
|
||||
NOTES
|
||||
should be called to after we get the recordset-result
|
||||
|
||||
*/
|
||||
|
||||
static void write_eof_packet(THD *thd)
|
||||
{
|
||||
/*
|
||||
The following test should never be true, but it's better to do it
|
||||
because if 'is_fatal_error' is set the server is not going to execute
|
||||
other queries (see the if test in dispatch_command / COM_QUERY)
|
||||
*/
|
||||
if (thd->is_fatal_error)
|
||||
thd->server_status&= ~SERVER_MORE_RESULTS_EXISTS;
|
||||
thd->cur_data->embedded_info->server_status= thd->server_status;
|
||||
/*
|
||||
Don't send warn count during SP execution, as the warn_list
|
||||
is cleared between substatements, and mysqltest gets confused
|
||||
*/
|
||||
thd->cur_data->embedded_info->warning_count=
|
||||
(thd->spcont ? 0 : min(thd->total_warn_count, 65535));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
allocs new query result and initialises Protocol::alloc
|
||||
|
||||
SYNOPSIS
|
||||
Protocol::begin_dataset()
|
||||
|
||||
RETURN
|
||||
0 if success
|
||||
1 if memory allocation failed
|
||||
*/
|
||||
|
||||
int Protocol::begin_dataset()
|
||||
{
|
||||
MYSQL_DATA *data= thd->alloc_new_dataset();
|
||||
if (!data)
|
||||
return 1;
|
||||
alloc= &data->alloc;
|
||||
init_alloc_root(alloc,8192,0); /* Assume rowlength < 8192 */
|
||||
alloc->min_malloc=sizeof(MYSQL_ROWS);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
remove last row of current recordset
|
||||
|
||||
SYNOPSIS
|
||||
Protocol_simple::remove_last_row()
|
||||
|
||||
NOTES
|
||||
does the loop from the beginning of the current recordset to
|
||||
the last record and cuts it off.
|
||||
Not supposed to be frequently called.
|
||||
*/
|
||||
|
||||
void Protocol_simple::remove_last_row()
|
||||
{
|
||||
MYSQL_DATA *data= thd->cur_data;
|
||||
MYSQL_ROWS **last_row_hook= &data->data;
|
||||
uint count= data->rows;
|
||||
DBUG_ENTER("Protocol_simple::remove_last_row");
|
||||
while (--count)
|
||||
last_row_hook= &(*last_row_hook)->next;
|
||||
|
||||
*last_row_hook= 0;
|
||||
data->embedded_info->prev_ptr= last_row_hook;
|
||||
data->rows--;
|
||||
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
||||
bool Protocol::send_fields(List<Item> *list, uint flags)
|
||||
{
|
||||
List_iterator_fast<Item> it(*list);
|
||||
Item *item;
|
||||
MYSQL_FIELD *client_field;
|
||||
MYSQL *mysql= thd->mysql;
|
||||
MEM_ROOT *field_alloc;
|
||||
CHARSET_INFO *thd_cs= thd->variables.character_set_results;
|
||||
CHARSET_INFO *cs= system_charset_info;
|
||||
|
||||
MYSQL_DATA *data;
|
||||
DBUG_ENTER("send_fields");
|
||||
|
||||
if (!mysql) // bootstrap file handling
|
||||
if (!thd->mysql) // bootstrap file handling
|
||||
DBUG_RETURN(0);
|
||||
|
||||
field_count= list->elements;
|
||||
field_alloc= &mysql->field_alloc;
|
||||
if (!(client_field= thd->mysql->fields=
|
||||
(MYSQL_FIELD *)alloc_root(field_alloc,
|
||||
sizeof(MYSQL_FIELD) * field_count)))
|
||||
if (begin_dataset())
|
||||
goto err;
|
||||
|
||||
data= thd->cur_data;
|
||||
data->fields= field_count= list->elements;
|
||||
field_alloc= &data->alloc;
|
||||
|
||||
if (!(client_field= data->embedded_info->fields_list=
|
||||
(MYSQL_FIELD*)alloc_root(field_alloc, sizeof(MYSQL_FIELD)*field_count)))
|
||||
goto err;
|
||||
|
||||
while ((item= it++))
|
||||
|
@ -643,6 +867,10 @@ bool Protocol::send_fields(List<Item> *list, uint flags)
|
|||
Send_field server_field;
|
||||
item->make_field(&server_field);
|
||||
|
||||
/* Keep things compatible for old clients */
|
||||
if (server_field.type == MYSQL_TYPE_VARCHAR)
|
||||
server_field.type= MYSQL_TYPE_VAR_STRING;
|
||||
|
||||
client_field->db= dup_str_aux(field_alloc, server_field.db_name,
|
||||
strlen(server_field.db_name), cs, thd_cs);
|
||||
client_field->table= dup_str_aux(field_alloc, server_field.table_name,
|
||||
|
@ -703,7 +931,9 @@ bool Protocol::send_fields(List<Item> *list, uint flags)
|
|||
client_field->max_length= 0;
|
||||
++client_field;
|
||||
}
|
||||
thd->mysql->field_count= field_count;
|
||||
|
||||
if (flags & SEND_EOF)
|
||||
write_eof_packet(thd);
|
||||
|
||||
DBUG_RETURN(prepare_for_send(list));
|
||||
err:
|
||||
|
@ -723,25 +953,11 @@ bool Protocol::write()
|
|||
bool Protocol_prep::write()
|
||||
{
|
||||
MYSQL_ROWS *cur;
|
||||
MYSQL_DATA *data= thd->data;
|
||||
|
||||
if (!data)
|
||||
{
|
||||
if (!(data= (MYSQL_DATA*) my_malloc(sizeof(MYSQL_DATA),
|
||||
MYF(MY_WME | MY_ZEROFILL))))
|
||||
return true;
|
||||
|
||||
alloc= &data->alloc;
|
||||
init_alloc_root(alloc,8192,0); /* Assume rowlength < 8192 */
|
||||
alloc->min_malloc=sizeof(MYSQL_ROWS);
|
||||
data->rows=0;
|
||||
data->fields=field_count;
|
||||
data->prev_ptr= &data->data;
|
||||
thd->data= data;
|
||||
}
|
||||
MYSQL_DATA *data= thd->cur_data;
|
||||
|
||||
data->rows++;
|
||||
if (!(cur= (MYSQL_ROWS *)alloc_root(alloc, sizeof(MYSQL_ROWS)+packet->length())))
|
||||
if (!(cur= (MYSQL_ROWS *)alloc_root(alloc,
|
||||
sizeof(MYSQL_ROWS)+packet->length())))
|
||||
{
|
||||
my_error(ER_OUT_OF_RESOURCES,MYF(0));
|
||||
return true;
|
||||
|
@ -750,8 +966,8 @@ bool Protocol_prep::write()
|
|||
memcpy(cur->data, packet->ptr()+1, packet->length()-1);
|
||||
cur->length= packet->length(); /* To allow us to do sanity checks */
|
||||
|
||||
*data->prev_ptr= cur;
|
||||
data->prev_ptr= &cur->next;
|
||||
*data->embedded_info->prev_ptr= cur;
|
||||
data->embedded_info->prev_ptr= &cur->next;
|
||||
cur->next= 0;
|
||||
|
||||
return false;
|
||||
|
@ -761,46 +977,52 @@ void
|
|||
send_ok(THD *thd,ha_rows affected_rows,ulonglong id,const char *message)
|
||||
{
|
||||
DBUG_ENTER("send_ok");
|
||||
MYSQL *mysql= current_thd->mysql;
|
||||
MYSQL_DATA *data;
|
||||
MYSQL *mysql= thd->mysql;
|
||||
|
||||
if (!mysql) // bootstrap file handling
|
||||
DBUG_VOID_RETURN;
|
||||
mysql->affected_rows= affected_rows;
|
||||
mysql->insert_id= id;
|
||||
if (thd->net.no_send_ok) // hack for re-parsing queries
|
||||
DBUG_VOID_RETURN;
|
||||
if (!(data= thd->alloc_new_dataset()))
|
||||
return;
|
||||
data->embedded_info->affected_rows= affected_rows;
|
||||
data->embedded_info->insert_id= id;
|
||||
if (message)
|
||||
{
|
||||
strmake(thd->net.last_error, message, sizeof(thd->net.last_error)-1);
|
||||
mysql->info= thd->net.last_error;
|
||||
}
|
||||
strmake(data->embedded_info->info, message,
|
||||
sizeof(data->embedded_info->info)-1);
|
||||
|
||||
write_eof_packet(thd);
|
||||
thd->cur_data= 0;
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
void
|
||||
send_eof(THD *thd)
|
||||
{
|
||||
write_eof_packet(thd);
|
||||
thd->cur_data= 0;
|
||||
}
|
||||
|
||||
|
||||
void net_send_error_packet(THD *thd, uint sql_errno, const char *err)
|
||||
{
|
||||
MYSQL_DATA *data= thd->cur_data ? thd->cur_data : thd->alloc_new_dataset();
|
||||
struct embedded_query_result *ei= data->embedded_info;
|
||||
|
||||
ei->last_errno= sql_errno;
|
||||
strmake(ei->info, err, sizeof(ei->info)-1);
|
||||
strmov(ei->sqlstate, mysql_errno_to_sqlstate(sql_errno));
|
||||
thd->cur_data= 0;
|
||||
}
|
||||
|
||||
|
||||
void Protocol_simple::prepare_for_resend()
|
||||
{
|
||||
MYSQL_ROWS *cur;
|
||||
MYSQL_DATA *data= thd->data;
|
||||
|
||||
MYSQL_DATA *data= thd->cur_data;
|
||||
DBUG_ENTER("send_data");
|
||||
|
||||
if (!data)
|
||||
{
|
||||
if (!(data= (MYSQL_DATA*) my_malloc(sizeof(MYSQL_DATA),
|
||||
MYF(MY_WME | MY_ZEROFILL))))
|
||||
goto err;
|
||||
|
||||
alloc= &data->alloc;
|
||||
init_alloc_root(alloc,8192,0); /* Assume rowlength < 8192 */
|
||||
alloc->min_malloc=sizeof(MYSQL_ROWS);
|
||||
data->rows=0;
|
||||
data->fields=field_count;
|
||||
data->prev_ptr= &data->data;
|
||||
thd->data= data;
|
||||
}
|
||||
|
||||
data->rows++;
|
||||
if (!(cur= (MYSQL_ROWS *)alloc_root(alloc, sizeof(MYSQL_ROWS)+(field_count + 1) * sizeof(char *))))
|
||||
{
|
||||
|
@ -809,10 +1031,10 @@ void Protocol_simple::prepare_for_resend()
|
|||
}
|
||||
cur->data= (MYSQL_ROW)(((char *)cur) + sizeof(MYSQL_ROWS));
|
||||
|
||||
*data->prev_ptr= cur;
|
||||
data->prev_ptr= &cur->next;
|
||||
*data->embedded_info->prev_ptr= cur;
|
||||
data->embedded_info->prev_ptr= &cur->next;
|
||||
next_field=cur->data;
|
||||
next_mysql_field= thd->mysql->fields;
|
||||
next_mysql_field= data->embedded_info->fields_list;
|
||||
err:
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
|
|
@ -14,6 +14,11 @@
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||
|
||||
#include <my_global.h>
|
||||
#include <mysql.h>
|
||||
#include <mysql_embed.h>
|
||||
#include <mysqld_error.h>
|
||||
#include <my_pthread.h>
|
||||
#include "embedded_priv.h"
|
||||
#include <my_sys.h>
|
||||
#include <mysys_err.h>
|
||||
|
@ -193,7 +198,12 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
|
|||
|
||||
if (!user)
|
||||
user= "";
|
||||
mysql->user=my_strdup(user,MYF(0));
|
||||
/*
|
||||
We need to alloc some space for mysql->info but don't want to
|
||||
put extra 'my_free's in mysql_close.
|
||||
So we alloc it with the 'user' string to be freed at once
|
||||
*/
|
||||
mysql->user= my_strdup(user, MYF(0));
|
||||
|
||||
port=0;
|
||||
unix_socket=0;
|
||||
|
@ -207,6 +217,7 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
|
|||
if (db)
|
||||
client_flag|=CLIENT_CONNECT_WITH_DB;
|
||||
|
||||
mysql->info_buffer= my_malloc(MYSQL_ERRMSG_SIZE, MYF(0));
|
||||
mysql->thd= create_embedded_thd(client_flag, db_name);
|
||||
|
||||
init_embedded_mysql(mysql, client_flag, db_name);
|
||||
|
@ -243,7 +254,6 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
|
|||
DBUG_RETURN(mysql);
|
||||
|
||||
error:
|
||||
embedded_get_error(mysql);
|
||||
DBUG_PRINT("error",("message: %u (%s)", mysql->net.last_errno,
|
||||
mysql->net.last_error));
|
||||
{
|
||||
|
|
|
@ -18,12 +18,26 @@
|
|||
|
||||
static int queue_key_cmp(void *keyseg, byte *a, byte *b)
|
||||
{
|
||||
MI_INFO *aa=((MYRG_TABLE *)a)->table;
|
||||
MI_INFO *bb=((MYRG_TABLE *)b)->table;
|
||||
MYRG_TABLE *ma= (MYRG_TABLE *)a;
|
||||
MYRG_TABLE *mb= (MYRG_TABLE *)b;
|
||||
MI_INFO *aa= ma->table;
|
||||
MI_INFO *bb= mb->table;
|
||||
uint not_used[2];
|
||||
int ret= ha_key_cmp((HA_KEYSEG *)keyseg, aa->lastkey, bb->lastkey,
|
||||
USE_WHOLE_KEY, SEARCH_FIND, not_used);
|
||||
return ret < 0 ? -1 : ret > 0 ? 1 : 0;
|
||||
if (ret < 0)
|
||||
return -1;
|
||||
if (ret > 0)
|
||||
return 1;
|
||||
|
||||
/*
|
||||
If index tuples have the same values, let the record with least rowid
|
||||
value be "smaller", so index scans return records ordered by (keytuple,
|
||||
rowid). This is used by index_merge access method, grep for ROR in
|
||||
sql/opt_range.cc for details.
|
||||
*/
|
||||
return (ma->file_offset < mb->file_offset)? -1 : (ma->file_offset >
|
||||
mb->file_offset) ? 1 : 0;
|
||||
} /* queue_key_cmp */
|
||||
|
||||
|
||||
|
|
|
@ -1,45 +1,51 @@
|
|||
This directory contains a test suite for mysql daemon. To run
|
||||
This directory contains a test suite for the MySQL daemon. To run
|
||||
the currently existing test cases, simply execute ./mysql-test-run in
|
||||
this directory. It will fire up the newly built mysqld and test it.
|
||||
|
||||
If you want to run a test with a running MySQL server use the --extern
|
||||
option to mysql-test-run. Please note that in this mode the test suite
|
||||
expects user to specify test names to run. Otherwise it falls back to the
|
||||
normal "non-extern" behaviour. The reason is that some tests
|
||||
could not run with external server. Here is the sample command
|
||||
to test "alias" and "analyze" tests on external server:
|
||||
|
||||
mysql-test-run --extern alias analyze
|
||||
|
||||
To match your setup you might also need to provide --socket, --user and
|
||||
other relevant options.
|
||||
|
||||
Note that you do not have to have to do make install, and you could
|
||||
actually have a co-existing MySQL installation - the tests will not
|
||||
Note that you do not have to have to do "make install", and you could
|
||||
actually have a co-existing MySQL installation. The tests will not
|
||||
conflict with it.
|
||||
|
||||
All tests must pass. If one or more of them fail on your system, please
|
||||
read the following manual section of how to report the problem:
|
||||
read the following manual section for instructions on how to report the
|
||||
problem:
|
||||
|
||||
http://dev.mysql.com/doc/mysql/en/MySQL_test_suite.html
|
||||
http://dev.mysql.com/doc/mysql/en/mysql-test-suite.html
|
||||
|
||||
If you want to use an already running MySQL server for specific tests,
|
||||
use the --extern option to mysql-test-run. Please note that in this mode,
|
||||
the test suite expects you to provide the names of the tests to run.
|
||||
For example, here is the command to run the "alias" and "analyze" tests
|
||||
with an external server:
|
||||
|
||||
mysql-test-run --extern alias analyze
|
||||
|
||||
To match your setup, you might also need to provide --socket, --user, and
|
||||
other relevant options.
|
||||
|
||||
With no test cases named on the command line, mysql-test-run falls back
|
||||
to the normal "non-extern" behavior. The reason for this is that some
|
||||
tests cannot run with an external server.
|
||||
|
||||
|
||||
You can create your own test cases. To create a test case:
|
||||
You can create your own test cases. To create a test case, create a new
|
||||
file in the t subdirectory using a text editor. The file should have a .test
|
||||
extension. For example:
|
||||
|
||||
xemacs t/test_case_name.test
|
||||
|
||||
in the file, put a set of SQL commands that will create some tables,
|
||||
load test data, run some queries to manipulate it.
|
||||
In the file, put a set of SQL statements that create some tables,
|
||||
load test data, and run some queries to manipulate it.
|
||||
|
||||
We would appreciate if the test tables were called t1, t2, t3 ... (to not
|
||||
We would appreciate it if you name your test tables t1, t2, t3 ... (to not
|
||||
conflict too much with existing tables).
|
||||
|
||||
Your test should begin by dropping the tables you are going to create and
|
||||
end by dropping them again. This will ensure that one can run the test
|
||||
over and over again.
|
||||
end by dropping them again. This ensures that you can run the test over
|
||||
and over again.
|
||||
|
||||
If you are using mysqltest commands (like result file names) in your
|
||||
test case you should do create the result file as follows:
|
||||
test case, you should create the result file as follows:
|
||||
|
||||
mysql-test-run --record test_case_name
|
||||
|
||||
|
@ -47,8 +53,8 @@ You can create your own test cases. To create a test case:
|
|||
|
||||
mysqltest --record < t/test_case_name.test
|
||||
|
||||
If you only have a simple test cases consistent of SQL commands and comments
|
||||
you can create the test case one of the following ways:
|
||||
If you only have a simple test cases consisting of SQL statements and
|
||||
comments, you can create the test case in one of the following ways:
|
||||
|
||||
mysql-test-run --record test_case_name
|
||||
|
||||
|
@ -57,11 +63,11 @@ You can create your own test cases. To create a test case:
|
|||
mysqltest --record --record-file=r/test_case_name.result < t/test_case_name.test
|
||||
|
||||
When this is done, take a look at r/test_case_name.result
|
||||
- If the result is wrong, you have found a bug; In this case you should
|
||||
- If the result is incorrect, you have found a bug. In this case, you should
|
||||
edit the test result to the correct results so that we can verify
|
||||
that the bug is corrected in future releases.
|
||||
|
||||
To submit your test case, put your .test file and .result file(s) into
|
||||
a tar.gz archive, add a README that explains the problem, ftp the
|
||||
archive to ftp://support.mysql.com/pub/mysql/secret/ and send a mail
|
||||
archive to ftp://support.mysql.com/pub/mysql/secret/ and send a mail
|
||||
to bugs@lists.mysql.com
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
To be able to see the level of coverage with the current test suite,
|
||||
do the following:
|
||||
|
||||
- make sure gcov is installed
|
||||
- compile with BUILD/compile-pentium-gcov ( if your machine is not pentium, hack
|
||||
this script, or just live with the pentium-specific stuff)
|
||||
- ./mysql-test-run -gcov
|
||||
- to see the level of coverage for a given source file:
|
||||
- Make sure gcov is installed
|
||||
- Compile the MySQL distribution with BUILD/compile-pentium-gcov (if your
|
||||
machine does not have a pentium CPU, hack this script, or just live with
|
||||
the pentium-specific stuff)
|
||||
- In the mysql-test directory, run this command: ./mysql-test-run -gcov
|
||||
- To see the level of coverage for a given source file:
|
||||
grep source_file_name /tmp/gcov.out
|
||||
- to see which lines are not yet covered, look at source_file_name.gcov in the source tree. Then think hard about a test case that will cover those
|
||||
lines, and write one!
|
||||
- To see which lines are not yet covered, look at source_file_name.gcov in
|
||||
the source tree. Then think hard about a test case that will cover those
|
||||
lines, and write one!
|
||||
|
|
|
@ -159,6 +159,7 @@ our $path_slave_load_tmpdir; # What is this?!
|
|||
our $path_mysqltest_log;
|
||||
our $path_my_basedir;
|
||||
our $opt_vardir; # A path but set directly on cmd line
|
||||
our $opt_vardir_trace; # unix formatted opt_vardir for trace files
|
||||
our $opt_tmpdir; # A path but set directly on cmd line
|
||||
|
||||
our $opt_usage;
|
||||
|
@ -192,6 +193,7 @@ our $opt_big_test= 0; # Send --big-test to mysqltest
|
|||
|
||||
our @opt_extra_mysqld_opt;
|
||||
|
||||
our $opt_comment;
|
||||
our $opt_compress;
|
||||
our $opt_ssl;
|
||||
our $opt_skip_ssl;
|
||||
|
@ -599,6 +601,7 @@ sub command_line_setup () {
|
|||
|
||||
# Misc
|
||||
'big-test' => \$opt_big_test,
|
||||
'comment=s' => \$opt_comment,
|
||||
'debug' => \$opt_debug,
|
||||
'fast' => \$opt_fast,
|
||||
'local' => \$opt_local,
|
||||
|
@ -632,6 +635,14 @@ sub command_line_setup () {
|
|||
usage("");
|
||||
}
|
||||
|
||||
if ( $opt_comment )
|
||||
{
|
||||
print "\n";
|
||||
print '#' x 78, "\n";
|
||||
print "# $opt_comment\n";
|
||||
print '#' x 78, "\n\n";
|
||||
}
|
||||
|
||||
foreach my $arg ( @ARGV )
|
||||
{
|
||||
if ( $arg =~ /^--skip-/ )
|
||||
|
@ -656,7 +667,7 @@ sub command_line_setup () {
|
|||
{
|
||||
$opt_vardir= "$glob_mysql_test_dir/var";
|
||||
}
|
||||
|
||||
$opt_vardir_trace= $opt_vardir;
|
||||
# We make the path absolute, as the server will do a chdir() before usage
|
||||
unless ( $opt_vardir =~ m,^/, or
|
||||
($glob_win32 and $opt_vardir =~ m,^[a-z]:/,i) )
|
||||
|
@ -954,7 +965,8 @@ sub executable_setup () {
|
|||
if ( $glob_win32 )
|
||||
{
|
||||
$path_client_bindir= mtr_path_exists("$glob_basedir/client_release",
|
||||
"$glob_basedir/bin");
|
||||
"$glob_basedir/client_debug",
|
||||
"$glob_basedir/bin",);
|
||||
$exe_mysqld= mtr_exe_exists ("$path_client_bindir/mysqld-max",
|
||||
"$path_client_bindir/mysqld-nt",
|
||||
"$path_client_bindir/mysqld",
|
||||
|
@ -1002,6 +1014,7 @@ sub executable_setup () {
|
|||
}
|
||||
$exe_mysql_client_test=
|
||||
mtr_exe_exists("$glob_basedir/tests/mysql_client_test",
|
||||
"$path_client_bindir/mysql_client_test",
|
||||
"/usr/bin/false");
|
||||
}
|
||||
$exe_mysqlcheck= mtr_exe_exists("$path_client_bindir/mysqlcheck");
|
||||
|
@ -1113,9 +1126,8 @@ sub environment_setup () {
|
|||
$ENV{'LC_COLLATE'}= "C";
|
||||
$ENV{'USE_RUNNING_SERVER'}= $glob_use_running_server;
|
||||
$ENV{'MYSQL_TEST_DIR'}= $glob_mysql_test_dir;
|
||||
$ENV{'MYSQL_TEST_WINDIR'}= $glob_mysql_test_dir;
|
||||
$ENV{'MYSQLTEST_VARDIR'}= $opt_vardir;
|
||||
$ENV{'MASTER_WINMYSOCK'}= $master->[0]->{'path_mysock'};
|
||||
$ENV{'MYSQL_TMP_DIR'}= $opt_tmpdir;
|
||||
$ENV{'MASTER_MYSOCK'}= $master->[0]->{'path_mysock'};
|
||||
$ENV{'MASTER_MYSOCK1'}= $master->[1]->{'path_mysock'};
|
||||
$ENV{'MASTER_MYPORT'}= $master->[0]->{'path_myport'};
|
||||
|
@ -1138,16 +1150,6 @@ sub environment_setup () {
|
|||
$ENV{'IM_MYSQLD2_PORT'}= $instance_manager->{instances}->[1]->{port};
|
||||
$ENV{'IM_MYSQLD2_PATH_PID'}=$instance_manager->{instances}->[1]->{path_pid};
|
||||
|
||||
if ( $glob_cygwin_perl )
|
||||
{
|
||||
foreach my $key ('MYSQL_TEST_WINDIR','MASTER_MYSOCK')
|
||||
{
|
||||
$ENV{$key}= `cygpath -w $ENV{$key}`;
|
||||
$ENV{$key} =~ s,\\,\\\\,g;
|
||||
chomp($ENV{$key});
|
||||
}
|
||||
}
|
||||
|
||||
$ENV{MTR_BUILD_THREAD}= 0 unless $ENV{MTR_BUILD_THREAD}; # Set if not set
|
||||
|
||||
# We are nice and report a bit about our settings
|
||||
|
@ -2279,12 +2281,12 @@ sub mysqld_arguments ($$$$$$) {
|
|||
if ( $type eq 'master' )
|
||||
{
|
||||
mtr_add_arg($args, "%s--debug=d:t:i:A,%s/log/master%s.trace",
|
||||
$prefix, $opt_vardir, $sidx);
|
||||
$prefix, $opt_vardir_trace, $sidx);
|
||||
}
|
||||
if ( $type eq 'slave' )
|
||||
{
|
||||
mtr_add_arg($args, "%s--debug=d:t:i:A,%s/log/slave%s.trace",
|
||||
$prefix, $opt_vardir, $sidx);
|
||||
$prefix, $opt_vardir_trace, $sidx);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2658,7 +2660,7 @@ sub run_mysqltest ($) {
|
|||
if ( $opt_debug )
|
||||
{
|
||||
$cmdline_mysqlcheck .=
|
||||
" --debug=d:t:A,$opt_vardir/log/mysqldump.trace";
|
||||
" --debug=d:t:A,$opt_vardir_trace/log/mysqlcheck.trace";
|
||||
}
|
||||
|
||||
my $cmdline_mysqldump= "$exe_mysqldump --no-defaults -uroot " .
|
||||
|
@ -2667,7 +2669,7 @@ sub run_mysqltest ($) {
|
|||
if ( $opt_debug )
|
||||
{
|
||||
$cmdline_mysqldump .=
|
||||
" --debug=d:t:A,$opt_vardir/log/mysqldump.trace";
|
||||
" --debug=d:t:A,$opt_vardir_trace/log/mysqldump.trace";
|
||||
}
|
||||
my $cmdline_mysqlimport= "$exe_mysqlimport -uroot " .
|
||||
"--port=$master->[0]->{'path_myport'} " .
|
||||
|
@ -2675,7 +2677,7 @@ sub run_mysqltest ($) {
|
|||
if ( $opt_debug )
|
||||
{
|
||||
$cmdline_mysqlimport .=
|
||||
" --debug=d:t:A,$opt_vardir/log/mysqlimport.trace";
|
||||
" --debug=d:t:A,$opt_vardir_trace/log/mysqlimport.trace";
|
||||
}
|
||||
|
||||
my $cmdline_mysqlshow= "$exe_mysqlshow -uroot " .
|
||||
|
@ -2684,7 +2686,7 @@ sub run_mysqltest ($) {
|
|||
if ( $opt_debug )
|
||||
{
|
||||
$cmdline_mysqlshow .=
|
||||
" --debug=d:t:A,$opt_vardir/log/mysqlshow.trace";
|
||||
" --debug=d:t:A,$opt_vardir_trace/log/mysqlshow.trace";
|
||||
}
|
||||
|
||||
my $cmdline_mysqlbinlog=
|
||||
|
@ -2695,7 +2697,7 @@ sub run_mysqltest ($) {
|
|||
if ( $opt_debug )
|
||||
{
|
||||
$cmdline_mysqlbinlog .=
|
||||
" --debug=d:t:A,$opt_vardir/log/mysqlbinlog.trace";
|
||||
" --debug=d:t:A,$opt_vardir_trace/log/mysqlbinlog.trace";
|
||||
}
|
||||
|
||||
my $cmdline_mysql=
|
||||
|
@ -2827,7 +2829,7 @@ sub run_mysqltest ($) {
|
|||
|
||||
if ( $opt_debug )
|
||||
{
|
||||
mtr_add_arg($args, "--debug=d:t:A,%s/log/mysqltest.trace", $opt_vardir);
|
||||
mtr_add_arg($args, "--debug=d:t:A,%s/log/mysqltest.trace", $opt_vardir_trace);
|
||||
}
|
||||
|
||||
if ( $opt_ssl_supported )
|
||||
|
@ -3005,6 +3007,7 @@ Options for coverage, profiling etc
|
|||
|
||||
Misc options
|
||||
|
||||
comment=STR Write STR to the output
|
||||
verbose Verbose output from this script
|
||||
script-debug Debug this script itself
|
||||
timer Show test case execution time
|
||||
|
|
|
@ -202,6 +202,7 @@ SYST=0
|
|||
REALT=0
|
||||
FAST_START=""
|
||||
MYSQL_TMP_DIR=$MYSQL_TEST_DIR/var/tmp
|
||||
export MYSQL_TMP_DIR
|
||||
|
||||
# Use a relative path for where the slave will find the dumps
|
||||
# generated by "LOAD DATA" on the master. The path is relative
|
||||
|
@ -318,6 +319,7 @@ while test $# -gt 0; do
|
|||
USE_EMBEDDED_SERVER=1
|
||||
USE_MANAGER=0 NO_SLAVE=1
|
||||
USE_RUNNING_SERVER=0
|
||||
USE_NDBCLUSTER=""
|
||||
TEST_MODE="$TEST_MODE embedded" ;;
|
||||
--purify)
|
||||
USE_PURIFY=1
|
||||
|
@ -553,7 +555,14 @@ while test $# -gt 0; do
|
|||
FAST_START=1
|
||||
;;
|
||||
--use-old-data)
|
||||
USE_OLD_DATA=1;
|
||||
USE_OLD_DATA=1
|
||||
;;
|
||||
--comment=*)
|
||||
TMP=`$ECHO "$1" | $SED -e "s;--comment=;;"`
|
||||
echo
|
||||
echo '############################################'
|
||||
echo "# $TMP"
|
||||
echo '############################################'
|
||||
;;
|
||||
-- ) shift; break ;;
|
||||
--* ) $ECHO "Unrecognized option: $1"; exit 1 ;;
|
||||
|
@ -892,7 +901,7 @@ show_failed_diff ()
|
|||
$DIFF -c $result_file $reject_file
|
||||
echo "-------------------------------------------------------"
|
||||
echo "Please follow the instructions outlined at"
|
||||
echo "http://www.mysql.com/doc/en/Reporting_mysqltest_bugs.html"
|
||||
echo "http://dev.mysql.com/doc/mysql/en/reporting-mysqltest-bugs.html"
|
||||
echo "to find the reason to this problem and how to report this."
|
||||
echo ""
|
||||
fi
|
||||
|
@ -988,7 +997,7 @@ report_stats () {
|
|||
$ECHO "The log files in $MY_LOG_DIR may give you some hint"
|
||||
$ECHO "of what went wrong."
|
||||
$ECHO "If you want to report this error, please read first the documentation at"
|
||||
$ECHO "http://www.mysql.com/doc/en/MySQL_test_suite.html"
|
||||
$ECHO "http://dev.mysql.com/doc/mysql/en/mysql-test-suite.html"
|
||||
fi
|
||||
|
||||
if [ $USE_RUNNING_SERVER -eq 0 ]
|
||||
|
|
|
@ -332,3 +332,12 @@ SELECT * FROM t1;
|
|||
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15 col16 col17 col18 col19 col20 col21 col22 col23 col24 col25 col26 col27 col28 col29 col30 col31 col32 col33 col34 col35 col36 col37 col38 fix1 fix2 fix3 fix4 fix5 fix6 fix7 fix8 fix9 fix10 fix11 fix12 fix13 fix14 fix15 fix16 fix17 fix18 fix19 fix20 fix21 fix22 fix23 fix24 fix25 fix26 fix27 fix28 fix29 fix30
|
||||
9 99 999 9999 99999 999999 9999999 99999999 999999999 9999999999 99999999999 999999999999 9999999999999 99999999999999 999999999999999 9999999999999999 99999999999999999 999999999999999999 9999999999999999999 99999999999999999999 999999999999999999999 9999999999999999999999 99999999999999999999999 999999999999999999999999 9999999999999999999999999 99999999999999999999999999 999999999999999999999999999 9999999999999999999999999999 99999999999999999999999999999 999999999999999999999999999999 9999999999999999999999999999999 99999999999999999999999999999999 999999999999999999999999999999999 9999999999999999999999999999999999 99999999999999999999999999999999999 999999999999999999999999999999999999 9999999999999999999999999999999999999 99999999999999999999999999999999999999 9999999999999999999999999999999999999.9 999999999999999999999999999999999999.99 99999999999999999999999999999999999.999 9999999999999999999999999999999999.9999 999999999999999999999999999999999.99999 99999999999999999999999999999999.999999 9999999999999999999999999999999.9999999 999999999999999999999999999999.99999999 99999999999999999999999999999.999999999 9999999999999999999999999999.9999999999 999999999999999999999999999.99999999999 99999999999999999999999999.999999999999 9999999999999999999999999.9999999999999 999999999999999999999999.99999999999999 99999999999999999999999.999999999999999 9999999999999999999999.9999999999999999 999999999999999999999.99999999999999999 99999999999999999999.999999999999999999 9999999999999999999.9999999999999999999 999999999999999999.99999999999999999999 99999999999999999.999999999999999999999 9999999999999999.9999999999999999999999 999999999999999.99999999999999999999999 99999999999999.999999999999999999999999 9999999999999.9999999999999999999999999 999999999999.99999999999999999999999999 99999999999.999999999999999999999999999 9999999999.9999999999999999999999999999 999999999.99999999999999999999999999999 99999999.999999999999999999999999999999
|
||||
DROP TABLE t1;
|
||||
create table t1 (bigint_col bigint unsigned);
|
||||
insert into t1 values (17666000000000000000);
|
||||
select * from t1 where bigint_col=17666000000000000000;
|
||||
bigint_col
|
||||
17666000000000000000
|
||||
select * from t1 where bigint_col='17666000000000000000';
|
||||
bigint_col
|
||||
17666000000000000000
|
||||
drop table t1;
|
||||
|
|
|
@ -141,3 +141,22 @@ t1 CREATE TABLE `t1` (
|
|||
`a` binary(1) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
create table t1 (col1 binary(4));
|
||||
insert into t1 values ('a'),('a ');
|
||||
select hex(col1) from t1;
|
||||
hex(col1)
|
||||
61000000
|
||||
61200000
|
||||
alter table t1 modify col1 binary(10);
|
||||
select hex(col1) from t1;
|
||||
hex(col1)
|
||||
61000000000000000000
|
||||
61200000000000000000
|
||||
insert into t1 values ('b'),('b ');
|
||||
select hex(col1) from t1;
|
||||
hex(col1)
|
||||
61000000000000000000
|
||||
61200000000000000000
|
||||
62000000000000000000
|
||||
62200000000000000000
|
||||
drop table t1;
|
||||
|
|
|
@ -17,7 +17,7 @@ master-bin.000001 # Query 1 # use `test`; insert t1 values (5)
|
|||
master-bin.000001 # Query 1 # use `test`; COMMIT
|
||||
master-bin.000001 # Query 1 # use `test`; BEGIN
|
||||
master-bin.000001 # Query 1 # use `test`; insert t2 values (5)
|
||||
master-bin.000001 # Xid 1 # COMMIT /* xid=11 */
|
||||
master-bin.000001 # Xid 1 # COMMIT /* xid=12 */
|
||||
drop table t1,t2;
|
||||
reset master;
|
||||
create table t1 (n int) engine=innodb;
|
||||
|
@ -128,7 +128,7 @@ master-bin.000001 # Query 1 # use `test`; insert into t1 values(4 + 4)
|
|||
master-bin.000001 # Query 1 # use `test`; insert into t1 values(3 + 4)
|
||||
master-bin.000001 # Query 1 # use `test`; insert into t1 values(2 + 4)
|
||||
master-bin.000001 # Query 1 # use `test`; insert into t1 values(1 + 4)
|
||||
master-bin.000001 # Xid 1 # COMMIT /* xid=18 */
|
||||
master-bin.000001 # Xid 1 # COMMIT /* xid=19 */
|
||||
master-bin.000001 # Rotate 1 # master-bin.000002;pos=4
|
||||
show binlog events in 'master-bin.000002' from 98;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
|
|
|
@ -765,3 +765,9 @@ t1 CREATE TABLE `t1` (
|
|||
`i` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 MAX_ROWS=4294967295
|
||||
drop table t1;
|
||||
create table t1(f1 varchar(800) binary not null, key(f1)) engine = innodb
|
||||
character set utf8 collate utf8_general_ci;
|
||||
Warnings:
|
||||
Warning 1071 Specified key was too long; max key length is 765 bytes
|
||||
insert into t1 values('aaa');
|
||||
drop table t1;
|
||||
|
|
|
@ -11315,20 +11315,6 @@ DROP TABLE t1;
|
|||
DROP TABLE t2;
|
||||
DROP TABLE t3;
|
||||
DROP TABLE t4;
|
||||
RESET MASTER;
|
||||
CREATE TABLE t1(f1 blob);
|
||||
PREPARE stmt1 FROM 'INSERT INTO t1 VALUES(?)';
|
||||
SET @var1= x'8300';
|
||||
EXECUTE stmt1 USING @var1;
|
||||
SHOW BINLOG EVENTS FROM 98;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 98 Query 1 185 use `test`; CREATE TABLE t1(f1 blob)
|
||||
master-bin.000001 185 User var 1 224 @`var1`=_binary 0x8300 COLLATE binary
|
||||
master-bin.000001 224 Query 1 317 use `test`; INSERT INTO t1 VALUES(@'var1')
|
||||
SELECT HEX(f1) FROM t1;
|
||||
HEX(f1)
|
||||
8300
|
||||
DROP table t1;
|
||||
SET collation_connection='cp932_japanese_ci';
|
||||
create table t1 select repeat('a',4000) a;
|
||||
delete from t1;
|
||||
|
|
17
mysql-test/r/ctype_cp932_notembedded.result
Normal file
17
mysql-test/r/ctype_cp932_notembedded.result
Normal file
|
@ -0,0 +1,17 @@
|
|||
drop table if exists t1;
|
||||
set names cp932;
|
||||
set character_set_database = cp932;
|
||||
RESET MASTER;
|
||||
CREATE TABLE t1(f1 blob);
|
||||
PREPARE stmt1 FROM 'INSERT INTO t1 VALUES(?)';
|
||||
SET @var1= x'8300';
|
||||
EXECUTE stmt1 USING @var1;
|
||||
SHOW BINLOG EVENTS FROM 98;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 98 Query 1 185 use `test`; CREATE TABLE t1(f1 blob)
|
||||
master-bin.000001 185 User var 1 224 @`var1`=_binary 0x8300 COLLATE binary
|
||||
master-bin.000001 224 Query 1 317 use `test`; INSERT INTO t1 VALUES(@'var1')
|
||||
SELECT HEX(f1) FROM t1;
|
||||
HEX(f1)
|
||||
8300
|
||||
DROP table t1;
|
|
@ -1023,3 +1023,10 @@ select format(d, 2) from t1;
|
|||
format(d, 2)
|
||||
NULL
|
||||
drop table t1;
|
||||
create table t1 (c varchar(40));
|
||||
insert into t1 values ('y,abc'),('y,abc');
|
||||
select c, substring_index(lcase(c), @q:=',', -1) as res from t1;
|
||||
c res
|
||||
y,abc abc
|
||||
y,abc abc
|
||||
drop table t1;
|
||||
|
|
|
@ -334,3 +334,25 @@ lock table mysql.user write;
|
|||
revoke all on *.* from 'mysqltest_1'@'localhost';
|
||||
unlock tables;
|
||||
drop user 'mysqltest_1'@'localhost';
|
||||
create database TESTDB;
|
||||
create table t2(a int);
|
||||
create temporary table t1 as select * from mysql.user;
|
||||
delete from mysql.user where host='localhost';
|
||||
INSERT INTO mysql.user VALUES
|
||||
('%','mysqltest_1',password('password'),'N','N','N','N','N','N',
|
||||
'N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N',
|
||||
'','','','',0,0,0,0);
|
||||
INSERT INTO mysql.db VALUES
|
||||
('%','TESTDB','mysqltest_1','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','N','Y','Y','Y','
|
||||
Y','N');
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'Alter_routine_priv' at row 1
|
||||
FLUSH PRIVILEGES;
|
||||
create database TEStdb;
|
||||
Got one of the listed errors
|
||||
delete from mysql.user;
|
||||
delete from mysql.db where host='%' and user='mysqltest_1' and db='TESTDB';
|
||||
insert into mysql.user select * from t1;
|
||||
drop table t1, t2;
|
||||
drop database TESTDB;
|
||||
flush privileges;
|
||||
|
|
|
@ -64,3 +64,7 @@ mysqld1 online
|
|||
mysqld2 offline
|
||||
SHOW INSTANCE STATUS;
|
||||
ERROR 42000: You have an error in your command syntax. Check the manual that corresponds to your MySQL Instance Manager version for the right syntax to use
|
||||
START INSTANCE mysqld1,mysqld2,mysqld3;
|
||||
ERROR 42000: You have an error in your command syntax. Check the manual that corresponds to your MySQL Instance Manager version for the right syntax to use
|
||||
STOP INSTANCE mysqld1,mysqld2,mysqld3;
|
||||
ERROR 42000: You have an error in your command syntax. Check the manual that corresponds to your MySQL Instance Manager version for the right syntax to use
|
||||
|
|
|
@ -402,3 +402,25 @@ explain select * from t1 force index(cola,colb) WHERE cola = 'foo' AND colb = 'b
|
|||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index_merge cola,colb cola,colb 3,3 NULL 24 Using intersect(cola,colb); Using where
|
||||
drop table t1;
|
||||
create table t0 (a int);
|
||||
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
create table t1 (
|
||||
a int, b int,
|
||||
filler1 char(200), filler2 char(200),
|
||||
key(a),key(b)
|
||||
);
|
||||
insert into t1 select @v:= A.a, @v, 't1', 'filler2' from t0 A, t0 B, t0 C;
|
||||
create table t2 like t1;
|
||||
create table t3 (
|
||||
a int, b int,
|
||||
filler1 char(200), filler2 char(200),
|
||||
key(a),key(b)
|
||||
) engine=merge union=(t1,t2);
|
||||
explain select * from t1 where a=1 and b=1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index_merge a,b a,b 5,5 NULL # Using intersect(a,b); Using where
|
||||
explain select * from t3 where a=1 and b=1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t3 index_merge a,b a,b 5,5 NULL # Using intersect(a,b); Using where
|
||||
drop table t3;
|
||||
drop table t0, t1, t2;
|
||||
|
|
|
@ -2673,25 +2673,6 @@ checksum table t1;
|
|||
Table Checksum
|
||||
test.t1 2050879373
|
||||
drop table t1;
|
||||
create table t1 (col1 integer primary key, col2 integer) engine=innodb;
|
||||
insert t1 values (1,100);
|
||||
create function f1 () returns integer begin
|
||||
declare var1 int;
|
||||
select col2 into var1 from t1 where col1=1 for update;
|
||||
return var1;
|
||||
end|
|
||||
start transaction;
|
||||
select f1();
|
||||
f1()
|
||||
100
|
||||
update t1 set col2=0 where col1=1;
|
||||
select * from t1;
|
||||
col1 col2
|
||||
1 100
|
||||
rollback;
|
||||
rollback;
|
||||
drop table t1;
|
||||
drop function f1;
|
||||
create table t1 (
|
||||
a int, b char(10), c char(10), filler char(10), primary key(a, b(2)), unique key (a, c(2))
|
||||
) character set utf8 engine = innodb;
|
||||
|
|
20
mysql-test/r/innodb_notembedded.result
Normal file
20
mysql-test/r/innodb_notembedded.result
Normal file
|
@ -0,0 +1,20 @@
|
|||
drop table if exists t1;
|
||||
create table t1 (col1 integer primary key, col2 integer) engine=innodb;
|
||||
insert t1 values (1,100);
|
||||
create function f1 () returns integer begin
|
||||
declare var1 int;
|
||||
select col2 into var1 from t1 where col1=1 for update;
|
||||
return var1;
|
||||
end|
|
||||
start transaction;
|
||||
select f1();
|
||||
f1()
|
||||
100
|
||||
update t1 set col2=0 where col1=1;
|
||||
select * from t1;
|
||||
col1 col2
|
||||
1 100
|
||||
rollback;
|
||||
rollback;
|
||||
drop table t1;
|
||||
drop function f1;
|
|
@ -677,6 +677,11 @@ select t1.b from v1a;
|
|||
ERROR 42S22: Unknown column 't1.b' in 'field list'
|
||||
select * from v1a join v1b on t1.b = t2.b;
|
||||
ERROR 42S22: Unknown column 't1.b' in 'on clause'
|
||||
select * from information_schema.statistics join information_schema.columns
|
||||
using(table_name,column_name) where table_name='user';
|
||||
TABLE_NAME COLUMN_NAME TABLE_CATALOG TABLE_SCHEMA NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT TABLE_CATALOG TABLE_SCHEMA ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT
|
||||
user Host NULL mysql 0 mysql PRIMARY 1 A NULL NULL NULL BTREE NULL mysql 1 NO char 20 60 NULL NULL utf8 utf8_bin char(60) PRI select,insert,update,references
|
||||
user User NULL mysql 0 mysql PRIMARY 2 A 5 NULL NULL BTREE NULL mysql 2 NO char 5 16 NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
drop table t3;
|
||||
|
|
|
@ -56,8 +56,8 @@ a b
|
|||
4 Testing
|
||||
5 table
|
||||
5 table
|
||||
6 t1
|
||||
6 t2
|
||||
6 t1
|
||||
7 Testing
|
||||
7 Testing
|
||||
8 table
|
||||
|
|
|
@ -256,3 +256,27 @@ master-bin.000001 1648 Query 1 # use `test`; create table t2 (n int) engine=inno
|
|||
master-bin.000001 1748 Query 1 # use `test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `test`.`t1`,`test`.`ti`
|
||||
do release_lock("lock1");
|
||||
drop table t0,t2;
|
||||
reset master;
|
||||
create table t1 (a int) engine=innodb;
|
||||
create table t2 (a int) engine=myisam;
|
||||
select get_lock("a",10);
|
||||
get_lock("a",10)
|
||||
1
|
||||
begin;
|
||||
insert into t1 values(8);
|
||||
insert into t2 select * from t1;
|
||||
select get_lock("a",10);
|
||||
get_lock("a",10)
|
||||
1
|
||||
select
|
||||
(@a:=load_file("MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output"))
|
||||
is not null;
|
||||
(@a:=load_file("MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output"))
|
||||
is not null
|
||||
1
|
||||
select
|
||||
@a like "%#%error_code=0%ROLLBACK;%ROLLBACK /* added by mysqlbinlog */;%",
|
||||
@a not like "%#%error_code=%error_code=%";
|
||||
@a like "%#%error_code=0%ROLLBACK;%ROLLBACK /* added by mysqlbinlog */;%" @a not like "%#%error_code=%error_code=%"
|
||||
1 1
|
||||
drop table t1, t2;
|
||||
|
|
|
@ -1464,7 +1464,10 @@ DROP TABLE IF EXISTS `v2`;
|
|||
) */;
|
||||
/*!50001 DROP TABLE IF EXISTS `v2`*/;
|
||||
/*!50001 DROP VIEW IF EXISTS `v2`*/;
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `t2`.`a` AS `a` from `t2` where (`t2`.`a` like _latin1'a%') WITH CASCADED CHECK OPTION*/;
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED */
|
||||
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
|
||||
/*!50001 VIEW `v2` AS select `t2`.`a` AS `a` from `t2` where (`t2`.`a` like _latin1'a%') */
|
||||
/*!50002 WITH CASCADED CHECK OPTION */;
|
||||
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||
|
||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||
|
@ -1728,7 +1731,9 @@ DROP TABLE IF EXISTS `v1`;
|
|||
) */;
|
||||
/*!50001 DROP TABLE IF EXISTS `v1`*/;
|
||||
/*!50001 DROP VIEW IF EXISTS `v1`*/;
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a` from `t1`*/;
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED */
|
||||
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
|
||||
/*!50001 VIEW `v1` AS select `t1`.`a` AS `a` from `t1` */;
|
||||
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||
|
||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||
|
@ -1784,7 +1789,10 @@ DROP TABLE IF EXISTS `v2`;
|
|||
) */;
|
||||
/*!50001 DROP TABLE IF EXISTS `v2`*/;
|
||||
/*!50001 DROP VIEW IF EXISTS `v2`*/;
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `t2`.`a` AS `a` from `t2` where (`t2`.`a` like _latin1'a%') WITH CASCADED CHECK OPTION*/;
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED */
|
||||
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
|
||||
/*!50001 VIEW `v2` AS select `t2`.`a` AS `a` from `t2` where (`t2`.`a` like _latin1'a%') */
|
||||
/*!50002 WITH CASCADED CHECK OPTION */;
|
||||
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||
|
||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||
|
@ -1890,13 +1898,19 @@ DROP TABLE IF EXISTS `v3`;
|
|||
) */;
|
||||
/*!50001 DROP TABLE IF EXISTS `v1`*/;
|
||||
/*!50001 DROP VIEW IF EXISTS `v1`*/;
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `v3`.`a` AS `a`,`v3`.`b` AS `b`,`v3`.`c` AS `c` from `v3` where (`v3`.`b` in (1,2,3,4,5,6,7))*/;
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED */
|
||||
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
|
||||
/*!50001 VIEW `v1` AS select `v3`.`a` AS `a`,`v3`.`b` AS `b`,`v3`.`c` AS `c` from `v3` where (`v3`.`b` in (1,2,3,4,5,6,7)) */;
|
||||
/*!50001 DROP TABLE IF EXISTS `v2`*/;
|
||||
/*!50001 DROP VIEW IF EXISTS `v2`*/;
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `v3`.`a` AS `a` from (`v3` join `v1`) where ((`v1`.`a` = `v3`.`a`) and (`v3`.`b` = 3)) limit 1*/;
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED */
|
||||
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
|
||||
/*!50001 VIEW `v2` AS select `v3`.`a` AS `a` from (`v3` join `v1`) where ((`v1`.`a` = `v3`.`a`) and (`v3`.`b` = 3)) limit 1 */;
|
||||
/*!50001 DROP TABLE IF EXISTS `v3`*/;
|
||||
/*!50001 DROP VIEW IF EXISTS `v3`*/;
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b`,`t1`.`c` AS `c` from `t1`*/;
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED */
|
||||
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
|
||||
/*!50001 VIEW `v3` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b`,`t1`.`c` AS `c` from `t1` */;
|
||||
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||
|
||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||
|
@ -2330,10 +2344,10 @@ drop table t1;
|
|||
set global time_zone=default;
|
||||
set time_zone=default;
|
||||
DROP TABLE IF EXISTS `t1 test`;
|
||||
DROP TABLE IF EXISTS `t2 test`;
|
||||
CREATE TABLE `t1 test` (
|
||||
`a1` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
DROP TABLE IF EXISTS `t2 test`;
|
||||
CREATE TABLE `t2 test` (
|
||||
`a2` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
|
@ -2465,13 +2479,19 @@ CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET l
|
|||
USE `test`;
|
||||
/*!50001 DROP TABLE IF EXISTS `v0`*/;
|
||||
/*!50001 DROP VIEW IF EXISTS `v0`*/;
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v0` AS select `v1`.`a` AS `a`,`v1`.`b` AS `b`,`v1`.`c` AS `c` from `v1`*/;
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED */
|
||||
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
|
||||
/*!50001 VIEW `v0` AS select `v1`.`a` AS `a`,`v1`.`b` AS `b`,`v1`.`c` AS `c` from `v1` */;
|
||||
/*!50001 DROP TABLE IF EXISTS `v1`*/;
|
||||
/*!50001 DROP VIEW IF EXISTS `v1`*/;
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b`,`t1`.`c` AS `c` from `t1`*/;
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED */
|
||||
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
|
||||
/*!50001 VIEW `v1` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b`,`t1`.`c` AS `c` from `t1` */;
|
||||
/*!50001 DROP TABLE IF EXISTS `v2`*/;
|
||||
/*!50001 DROP VIEW IF EXISTS `v2`*/;
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `v0`.`a` AS `a`,`v0`.`b` AS `b`,`v0`.`c` AS `c` from `v0`*/;
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED */
|
||||
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
|
||||
/*!50001 VIEW `v2` AS select `v0`.`a` AS `a`,`v0`.`b` AS `b`,`v0`.`c` AS `c` from `v0` */;
|
||||
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||
|
||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||
|
@ -2611,3 +2631,65 @@ UNLOCK TABLES;
|
|||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||
|
||||
drop table t1;
|
||||
create table t1 (a int);
|
||||
insert into t1 values (289), (298), (234), (456), (789);
|
||||
create definer = CURRENT_USER view v1 as select * from t1;
|
||||
create SQL SECURITY INVOKER view v2 as select * from t1;
|
||||
create view v3 as select * from t1 with local check option;
|
||||
create algorithm=merge view v4 as select * from t1 with cascaded check option;
|
||||
create algorithm =temptable view v5 as select * from t1;
|
||||
drop table t1;
|
||||
drop view v1, v2, v3, v4, v5;
|
||||
show tables;
|
||||
Tables_in_test
|
||||
t1
|
||||
v1
|
||||
v2
|
||||
v3
|
||||
v4
|
||||
v5
|
||||
select * from v3 order by a;
|
||||
a
|
||||
234
|
||||
289
|
||||
298
|
||||
456
|
||||
789
|
||||
drop table t1;
|
||||
drop view v1, v2, v3, v4, v5;
|
||||
create table t1 (a int, created datetime);
|
||||
create table t2 (b int, created datetime);
|
||||
create trigger tr1 before insert on t1 for each row set
|
||||
new.created=now();
|
||||
create trigger tr2 after insert on t1
|
||||
for each row
|
||||
begin
|
||||
insert into t2 set b=new.a and created=new.created;
|
||||
end|
|
||||
drop trigger tr1;
|
||||
drop trigger tr2;
|
||||
drop table t1, t2;
|
||||
show triggers;
|
||||
Trigger Event Table Statement Timing Created sql_mode Definer
|
||||
tr1 INSERT t1 set
|
||||
new.created=now() BEFORE # root@localhost
|
||||
tr2 INSERT t1 begin
|
||||
insert into t2 set b=new.a and created=new.created;
|
||||
end AFTER # root@localhost
|
||||
drop trigger tr1;
|
||||
drop trigger tr2;
|
||||
drop table t1, t2;
|
||||
/*!50003 CREATE FUNCTION `f`() RETURNS bigint(20)
|
||||
return 42 */|
|
||||
/*!50003 CREATE PROCEDURE `p`()
|
||||
select 42 */|
|
||||
show create function f;
|
||||
Function sql_mode Create Function
|
||||
f CREATE FUNCTION `f`() RETURNS bigint(20)
|
||||
return 42
|
||||
show create procedure p;
|
||||
Procedure sql_mode Create Procedure
|
||||
p CREATE PROCEDURE `p`()
|
||||
select 42
|
||||
drop function f;
|
||||
drop procedure p;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
select -1 as "before_use_test" ;
|
||||
select 0 as "before_use_test" ;
|
||||
before_use_test
|
||||
-1
|
||||
0
|
||||
select otto from (select 1 as otto) as t1;
|
||||
otto
|
||||
1
|
||||
|
@ -224,7 +224,7 @@ mysqltest: At line 1: Missing variable name in let
|
|||
mysqltest: At line 1: Variable name in hi=hi does not start with '$'
|
||||
mysqltest: At line 1: Missing assignment operator in let
|
||||
mysqltest: At line 1: Missing assignment operator in let
|
||||
mysqltest: At line 1: Missing arguments to let
|
||||
mysqltest: At line 1: Missing assignment operator in let
|
||||
mysqltest: At line 1: Missing variable name in let
|
||||
mysqltest: At line 1: Variable name in =hi does not start with '$'
|
||||
mysqltest: At line 1: Missing assignment operator in let
|
||||
|
@ -297,7 +297,9 @@ here is the sourced script
|
|||
In loop
|
||||
here is the sourced script
|
||||
mysqltest: At line 1: Missing argument to sleep
|
||||
mysqltest: At line 1: Missing argument to real_sleep
|
||||
mysqltest: At line 1: Invalid argument to sleep "abc"
|
||||
mysqltest: At line 1: Invalid argument to real_sleep "abc"
|
||||
1
|
||||
2
|
||||
101
|
||||
|
@ -324,7 +326,10 @@ test
|
|||
test2
|
||||
test3
|
||||
test4
|
||||
Counter is greater than 0, (counter=10)
|
||||
Counter is not 0, (counter=0)
|
||||
1
|
||||
Testing while with not
|
||||
mysqltest: In included file "./include/mysqltest_while.inc": At line 64: Nesting too deeply
|
||||
mysqltest: At line 1: missing '(' in while
|
||||
mysqltest: At line 1: missing ')' in while
|
||||
|
|
|
@ -1,14 +1,17 @@
|
|||
drop table if exists t1, t2;
|
||||
== Connected to server1 ==
|
||||
set GLOBAL query_cache_type=on;
|
||||
set GLOBAL query_cache_size=1355776;
|
||||
set GLOBAL ndb_cache_check_time=1;
|
||||
reset query cache;
|
||||
flush status;
|
||||
== Connected to server2 ==
|
||||
set GLOBAL query_cache_type=on;
|
||||
set GLOBAL query_cache_size=1355776;
|
||||
set GLOBAL ndb_cache_check_time=1;
|
||||
reset query cache;
|
||||
flush status;
|
||||
== Connected to server1 ==
|
||||
create table t1 (a int) engine=ndbcluster;
|
||||
create table t2 (a int) engine=ndbcluster;
|
||||
insert into t1 value (2);
|
||||
|
@ -16,18 +19,22 @@ insert into t2 value (3);
|
|||
select * from t1;
|
||||
a
|
||||
2
|
||||
select a != 3 from t1;
|
||||
a != 3
|
||||
1
|
||||
select * from t2;
|
||||
a
|
||||
3
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 2
|
||||
Qcache_queries_in_cache 3
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 2
|
||||
Qcache_inserts 3
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 0
|
||||
== Connected to server2 ==
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 0
|
||||
|
@ -50,27 +57,13 @@ show status like "Qcache_hits";
|
|||
Variable_name Value
|
||||
Qcache_hits 0
|
||||
update t1 set a=3 where a=2;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 2
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 2
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 0
|
||||
== Connected to server1 ==
|
||||
select * from t1;
|
||||
a
|
||||
3
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 2
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 3
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 0
|
||||
Qcache_queries_in_cache 3
|
||||
drop table t1, t2;
|
||||
set GLOBAL query_cache_size=0;
|
||||
set GLOBAL ndb_cache_check_time=0;
|
||||
|
|
|
@ -859,6 +859,20 @@ count(*)
|
|||
5
|
||||
deallocate prepare stmt;
|
||||
drop table t1;
|
||||
prepare stmt from 'create table t1 (a varchar(10) character set utf8)';
|
||||
execute stmt;
|
||||
insert into t1 (a) values (repeat('a', 20));
|
||||
select length(a) from t1;
|
||||
length(a)
|
||||
10
|
||||
drop table t1;
|
||||
execute stmt;
|
||||
insert into t1 (a) values (repeat('a', 20));
|
||||
select length(a) from t1;
|
||||
length(a)
|
||||
10
|
||||
drop table t1;
|
||||
deallocate prepare stmt;
|
||||
create table t1 (id int);
|
||||
prepare ins_call from "insert into t1 (id) values (1)";
|
||||
execute ins_call;
|
||||
|
|
|
@ -1104,56 +1104,20 @@ call f1();
|
|||
s1
|
||||
s1
|
||||
s1
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 3
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 3
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 0
|
||||
call f1();
|
||||
s1
|
||||
s1
|
||||
s1
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 3
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 3
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 3
|
||||
call f1();
|
||||
s1
|
||||
s1
|
||||
s1
|
||||
select sql_cache * from t1;
|
||||
s1
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 4
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 4
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 6
|
||||
insert into t1 values (1);
|
||||
select sql_cache * from t1;
|
||||
s1
|
||||
1
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 1
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 5
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 6
|
||||
call f1();
|
||||
s1
|
||||
1
|
||||
|
@ -1171,15 +1135,6 @@ s1
|
|||
select sql_cache * from t1;
|
||||
s1
|
||||
1
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 4
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 8
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 10
|
||||
flush query cache;
|
||||
reset query cache;
|
||||
flush status;
|
||||
|
|
|
@ -94,4 +94,224 @@ a
|
|||
SELECT * FROM t1;
|
||||
a
|
||||
drop table t1;
|
||||
flush query cache;
|
||||
reset query cache;
|
||||
flush status;
|
||||
create table t1 (s1 int)//
|
||||
create procedure f1 () begin
|
||||
select sql_cache * from t1;
|
||||
select sql_cache * from t1;
|
||||
select sql_cache * from t1;
|
||||
end;//
|
||||
create procedure f2 () begin
|
||||
select sql_cache * from t1 where s1=1;
|
||||
select sql_cache * from t1;
|
||||
end;//
|
||||
create procedure f3 () begin
|
||||
select sql_cache * from t1;
|
||||
select sql_cache * from t1 where s1=1;
|
||||
end;//
|
||||
create procedure f4 () begin
|
||||
select sql_cache * from t1;
|
||||
select sql_cache * from t1 where s1=1;
|
||||
select sql_cache * from t1;
|
||||
select sql_cache * from t1 where s1=1;
|
||||
select sql_cache * from t1 where s1=1;
|
||||
end;//
|
||||
call f1();
|
||||
s1
|
||||
s1
|
||||
s1
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 3
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 3
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 0
|
||||
call f1();
|
||||
s1
|
||||
s1
|
||||
s1
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 3
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 3
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 3
|
||||
call f1();
|
||||
s1
|
||||
s1
|
||||
s1
|
||||
select sql_cache * from t1;
|
||||
s1
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 4
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 4
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 6
|
||||
insert into t1 values (1);
|
||||
select sql_cache * from t1;
|
||||
s1
|
||||
1
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 1
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 5
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 6
|
||||
call f1();
|
||||
s1
|
||||
1
|
||||
s1
|
||||
1
|
||||
s1
|
||||
1
|
||||
call f1();
|
||||
s1
|
||||
1
|
||||
s1
|
||||
1
|
||||
s1
|
||||
1
|
||||
select sql_cache * from t1;
|
||||
s1
|
||||
1
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 4
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 8
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 10
|
||||
flush query cache;
|
||||
reset query cache;
|
||||
flush status;
|
||||
select sql_cache * from t1;
|
||||
s1
|
||||
1
|
||||
select sql_cache * from t1 where s1=1;
|
||||
s1
|
||||
1
|
||||
call f1();
|
||||
s1
|
||||
1
|
||||
s1
|
||||
1
|
||||
s1
|
||||
1
|
||||
call f2();
|
||||
s1
|
||||
1
|
||||
s1
|
||||
1
|
||||
call f3();
|
||||
s1
|
||||
1
|
||||
s1
|
||||
1
|
||||
call f4();
|
||||
s1
|
||||
1
|
||||
s1
|
||||
1
|
||||
s1
|
||||
1
|
||||
s1
|
||||
1
|
||||
s1
|
||||
1
|
||||
call f4();
|
||||
s1
|
||||
1
|
||||
s1
|
||||
1
|
||||
s1
|
||||
1
|
||||
s1
|
||||
1
|
||||
s1
|
||||
1
|
||||
call f3();
|
||||
s1
|
||||
1
|
||||
s1
|
||||
1
|
||||
call f2();
|
||||
s1
|
||||
1
|
||||
s1
|
||||
1
|
||||
select sql_cache * from t1 where s1=1;
|
||||
s1
|
||||
1
|
||||
insert into t1 values (2);
|
||||
call f1();
|
||||
s1
|
||||
1
|
||||
2
|
||||
s1
|
||||
1
|
||||
2
|
||||
s1
|
||||
1
|
||||
2
|
||||
select sql_cache * from t1 where s1=1;
|
||||
s1
|
||||
1
|
||||
select sql_cache * from t1;
|
||||
s1
|
||||
1
|
||||
2
|
||||
call f1();
|
||||
s1
|
||||
1
|
||||
2
|
||||
s1
|
||||
1
|
||||
2
|
||||
s1
|
||||
1
|
||||
2
|
||||
call f3();
|
||||
s1
|
||||
1
|
||||
2
|
||||
s1
|
||||
1
|
||||
call f3();
|
||||
s1
|
||||
1
|
||||
2
|
||||
s1
|
||||
1
|
||||
call f1();
|
||||
s1
|
||||
1
|
||||
2
|
||||
s1
|
||||
1
|
||||
2
|
||||
s1
|
||||
1
|
||||
2
|
||||
drop procedure f1;
|
||||
drop procedure f2;
|
||||
drop procedure f3;
|
||||
drop procedure f4;
|
||||
drop table t1;
|
||||
set GLOBAL query_cache_size=0;
|
||||
|
|
|
@ -233,20 +233,25 @@ end @ # #
|
|||
delete from t2;
|
||||
alter table t2 add unique (a);
|
||||
drop function fn1;
|
||||
create function fn1()
|
||||
create function fn1(x int)
|
||||
returns int
|
||||
begin
|
||||
insert into t2 values(20),(20);
|
||||
insert into t2 values(x),(x);
|
||||
return 10;
|
||||
end|
|
||||
select fn1();
|
||||
do fn1(100);
|
||||
Warnings:
|
||||
Error 1062 Duplicate entry '100' for key 1
|
||||
select fn1(20);
|
||||
ERROR 23000: Duplicate entry '20' for key 1
|
||||
select * from t2;
|
||||
a
|
||||
20
|
||||
100
|
||||
select * from t2;
|
||||
a
|
||||
20
|
||||
100
|
||||
create trigger trg before insert on t1 for each row set new.a= 10;
|
||||
ERROR 42000: Access denied; you need the SUPER privilege for this operation
|
||||
delete from t1;
|
||||
|
@ -324,7 +329,7 @@ insert into t1 values (x);
|
|||
return x+2;
|
||||
end
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; delete t1,t2 from t1,t2
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; DO `fn1`(20)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `fn1`(20)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t2 values(fn1(21))
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop function fn1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; create function fn1()
|
||||
|
@ -351,13 +356,14 @@ end
|
|||
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t2
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; alter table t2 add unique (a)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; drop function fn1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; create function fn1()
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; create function fn1(x int)
|
||||
returns int
|
||||
begin
|
||||
insert into t2 values(20),(20);
|
||||
insert into t2 values(x),(x);
|
||||
return 10;
|
||||
end
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; DO `fn1`()
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `fn1`(100)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `fn1`(20)
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t1
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` trigger trg before insert on t1 for each row set new.a= 10
|
||||
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (1)
|
||||
|
@ -415,4 +421,3 @@ col
|
|||
test
|
||||
DROP PROCEDURE p1;
|
||||
drop table t1;
|
||||
reset master;
|
||||
|
|
|
@ -12,3 +12,6 @@ create table t1 (a int);
|
|||
create definer='user'@'host' sql security definer view v1 as select * from t1;
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
drop function if exists f1;
|
||||
Warnings:
|
||||
Note 1305 FUNCTION f1 does not exist
|
||||
|
|
|
@ -464,19 +464,6 @@ create table t5 (x int)|
|
|||
call bug3294()|
|
||||
ERROR 42S02: Unknown table 't5'
|
||||
drop procedure bug3294|
|
||||
drop procedure if exists bug6807|
|
||||
create procedure bug6807()
|
||||
begin
|
||||
declare id int;
|
||||
set id = connection_id();
|
||||
kill query id;
|
||||
select 'Not reached';
|
||||
end|
|
||||
call bug6807()|
|
||||
ERROR 70100: Query execution was interrupted
|
||||
call bug6807()|
|
||||
ERROR 70100: Query execution was interrupted
|
||||
drop procedure bug6807|
|
||||
drop procedure if exists bug8776_1|
|
||||
drop procedure if exists bug8776_2|
|
||||
drop procedure if exists bug8776_3|
|
||||
|
@ -1176,3 +1163,6 @@ end|
|
|||
call bug15091();
|
||||
ERROR 42S02: Unknown table 'c' in field list
|
||||
drop procedure bug15091;
|
||||
drop function if exists bug16896;
|
||||
create aggregate function bug16896() returns int return 1;
|
||||
ERROR 42000: AGGREGATE is not supported for stored functions
|
||||
|
|
|
@ -314,3 +314,12 @@ select * from db_bug14533.t1;
|
|||
ERROR 42000: SELECT command denied to user 'user_bug14533'@'localhost' for table 't1'
|
||||
drop user user_bug14533@localhost;
|
||||
drop database db_bug14533;
|
||||
CREATE DATABASE db_bug7787;
|
||||
use db_bug7787;
|
||||
CREATE PROCEDURE p1()
|
||||
SHOW INNODB STATUS;
|
||||
Warnings:
|
||||
Warning 1287 'SHOW INNODB STATUS' is deprecated; use 'SHOW ENGINE INNODB STATUS' instead
|
||||
GRANT EXECUTE ON PROCEDURE p1 TO user_bug7787@localhost;
|
||||
DROP DATABASE db_bug7787;
|
||||
use test;
|
||||
|
|
|
@ -539,7 +539,7 @@ drop procedure if exists into_outfile|
|
|||
create procedure into_outfile(x char(16), y int)
|
||||
begin
|
||||
insert into test.t1 values (x, y);
|
||||
select * into outfile "/tmp/spout" from test.t1;
|
||||
select * into outfile "../tmp/spout" from test.t1;
|
||||
insert into test.t1 values (concat(x, "2"), y+2);
|
||||
end|
|
||||
call into_outfile("ofile", 1)|
|
||||
|
@ -549,7 +549,7 @@ drop procedure if exists into_dumpfile|
|
|||
create procedure into_dumpfile(x char(16), y int)
|
||||
begin
|
||||
insert into test.t1 values (x, y);
|
||||
select * into dumpfile "/tmp/spdump" from test.t1 limit 1;
|
||||
select * into dumpfile "../tmp/spdump" from test.t1 limit 1;
|
||||
insert into test.t1 values (concat(x, "2"), y+2);
|
||||
end|
|
||||
call into_dumpfile("dfile", 1)|
|
||||
|
@ -1413,8 +1413,6 @@ select `foo` ()|
|
|||
5
|
||||
drop function `foo`|
|
||||
drop function if exists t1max|
|
||||
Warnings:
|
||||
Note 1305 FUNCTION t1max does not exist
|
||||
create function t1max() returns int
|
||||
begin
|
||||
declare x int;
|
||||
|
@ -1470,6 +1468,339 @@ zip 3
|
|||
foo 1
|
||||
drop table t3|
|
||||
drop function getcount|
|
||||
drop table if exists t3|
|
||||
drop procedure if exists h_ee|
|
||||
drop procedure if exists h_es|
|
||||
drop procedure if exists h_en|
|
||||
drop procedure if exists h_ew|
|
||||
drop procedure if exists h_ex|
|
||||
drop procedure if exists h_se|
|
||||
drop procedure if exists h_ss|
|
||||
drop procedure if exists h_sn|
|
||||
drop procedure if exists h_sw|
|
||||
drop procedure if exists h_sx|
|
||||
drop procedure if exists h_ne|
|
||||
drop procedure if exists h_ns|
|
||||
drop procedure if exists h_nn|
|
||||
drop procedure if exists h_we|
|
||||
drop procedure if exists h_ws|
|
||||
drop procedure if exists h_ww|
|
||||
drop procedure if exists h_xe|
|
||||
drop procedure if exists h_xs|
|
||||
drop procedure if exists h_xx|
|
||||
create table t3 (a smallint primary key)|
|
||||
insert into t3 (a) values (1)|
|
||||
create procedure h_ee()
|
||||
deterministic
|
||||
begin
|
||||
declare continue handler for 1062 -- ER_DUP_ENTRY
|
||||
select 'Outer (bad)' as 'h_ee';
|
||||
begin
|
||||
declare continue handler for 1062 -- ER_DUP_ENTRY
|
||||
select 'Inner (good)' as 'h_ee';
|
||||
insert into t3 values (1);
|
||||
end;
|
||||
end|
|
||||
create procedure h_es()
|
||||
deterministic
|
||||
begin
|
||||
declare continue handler for 1062 -- ER_DUP_ENTRY
|
||||
select 'Outer (good)' as 'h_es';
|
||||
begin
|
||||
-- integrity constraint violation
|
||||
declare continue handler for sqlstate '23000'
|
||||
select 'Inner (bad)' as 'h_es';
|
||||
insert into t3 values (1);
|
||||
end;
|
||||
end|
|
||||
create procedure h_en()
|
||||
deterministic
|
||||
begin
|
||||
declare continue handler for 1329 -- ER_SP_FETCH_NO_DATA
|
||||
select 'Outer (good)' as 'h_en';
|
||||
begin
|
||||
declare x int;
|
||||
declare continue handler for sqlstate '02000' -- no data
|
||||
select 'Inner (bad)' as 'h_en';
|
||||
select a into x from t3 where a = 42;
|
||||
end;
|
||||
end|
|
||||
create procedure h_ew()
|
||||
deterministic
|
||||
begin
|
||||
declare continue handler for 1264 -- ER_WARN_DATA_OUT_OF_RANGE
|
||||
select 'Outer (good)' as 'h_ew';
|
||||
begin
|
||||
declare continue handler for sqlwarning
|
||||
select 'Inner (bad)' as 'h_ew';
|
||||
insert into t3 values (123456789012);
|
||||
end;
|
||||
delete from t3;
|
||||
insert into t3 values (1);
|
||||
end|
|
||||
create procedure h_ex()
|
||||
deterministic
|
||||
begin
|
||||
declare continue handler for 1062 -- ER_DUP_ENTRY
|
||||
select 'Outer (good)' as 'h_ex';
|
||||
begin
|
||||
declare continue handler for sqlexception
|
||||
select 'Inner (bad)' as 'h_ex';
|
||||
insert into t3 values (1);
|
||||
end;
|
||||
end|
|
||||
create procedure h_se()
|
||||
deterministic
|
||||
begin
|
||||
-- integrity constraint violation
|
||||
declare continue handler for sqlstate '23000'
|
||||
select 'Outer (bad)' as 'h_se';
|
||||
begin
|
||||
declare continue handler for 1062 -- ER_DUP_ENTRY
|
||||
select 'Inner (good)' as 'h_se';
|
||||
insert into t3 values (1);
|
||||
end;
|
||||
end|
|
||||
create procedure h_ss()
|
||||
deterministic
|
||||
begin
|
||||
-- integrity constraint violation
|
||||
declare continue handler for sqlstate '23000'
|
||||
select 'Outer (bad)' as 'h_ss';
|
||||
begin
|
||||
-- integrity constraint violation
|
||||
declare continue handler for sqlstate '23000'
|
||||
select 'Inner (good)' as 'h_ss';
|
||||
insert into t3 values (1);
|
||||
end;
|
||||
end|
|
||||
create procedure h_sn()
|
||||
deterministic
|
||||
begin
|
||||
-- Note: '02000' is more specific than NOT FOUND ;
|
||||
-- there might be other not found states
|
||||
declare continue handler for sqlstate '02000' -- no data
|
||||
select 'Outer (good)' as 'h_sn';
|
||||
begin
|
||||
declare x int;
|
||||
declare continue handler for not found
|
||||
select 'Inner (bad)' as 'h_sn';
|
||||
select a into x from t3 where a = 42;
|
||||
end;
|
||||
end|
|
||||
create procedure h_sw()
|
||||
deterministic
|
||||
begin
|
||||
-- data exception - numeric value out of range
|
||||
declare continue handler for sqlstate '22003'
|
||||
select 'Outer (good)' as 'h_sw';
|
||||
begin
|
||||
declare continue handler for sqlwarning
|
||||
select 'Inner (bad)' as 'h_sw';
|
||||
insert into t3 values (123456789012);
|
||||
end;
|
||||
delete from t3;
|
||||
insert into t3 values (1);
|
||||
end|
|
||||
create procedure h_sx()
|
||||
deterministic
|
||||
begin
|
||||
-- integrity constraint violation
|
||||
declare continue handler for sqlstate '23000'
|
||||
select 'Outer (good)' as 'h_sx';
|
||||
begin
|
||||
declare continue handler for sqlexception
|
||||
select 'Inner (bad)' as 'h_sx';
|
||||
insert into t3 values (1);
|
||||
end;
|
||||
end|
|
||||
create procedure h_ne()
|
||||
deterministic
|
||||
begin
|
||||
declare continue handler for not found
|
||||
select 'Outer (bad)' as 'h_ne';
|
||||
begin
|
||||
declare x int;
|
||||
declare continue handler for 1329 -- ER_SP_FETCH_NO_DATA
|
||||
select 'Inner (good)' as 'h_ne';
|
||||
select a into x from t3 where a = 42;
|
||||
end;
|
||||
end|
|
||||
create procedure h_ns()
|
||||
deterministic
|
||||
begin
|
||||
declare continue handler for not found
|
||||
select 'Outer (bad)' as 'h_ns';
|
||||
begin
|
||||
declare x int;
|
||||
declare continue handler for sqlstate '02000' -- no data
|
||||
select 'Inner (good)' as 'h_ns';
|
||||
select a into x from t3 where a = 42;
|
||||
end;
|
||||
end|
|
||||
create procedure h_nn()
|
||||
deterministic
|
||||
begin
|
||||
declare continue handler for not found
|
||||
select 'Outer (bad)' as 'h_nn';
|
||||
begin
|
||||
declare x int;
|
||||
declare continue handler for not found
|
||||
select 'Inner (good)' as 'h_nn';
|
||||
select a into x from t3 where a = 42;
|
||||
end;
|
||||
end|
|
||||
create procedure h_we()
|
||||
deterministic
|
||||
begin
|
||||
declare continue handler for sqlwarning
|
||||
select 'Outer (bad)' as 'h_we';
|
||||
begin
|
||||
declare continue handler for 1264 -- ER_WARN_DATA_OUT_OF_RANGE
|
||||
select 'Inner (good)' as 'h_we';
|
||||
insert into t3 values (123456789012);
|
||||
end;
|
||||
delete from t3;
|
||||
insert into t3 values (1);
|
||||
end|
|
||||
create procedure h_ws()
|
||||
deterministic
|
||||
begin
|
||||
declare continue handler for sqlwarning
|
||||
select 'Outer (bad)' as 'h_ws';
|
||||
begin
|
||||
-- data exception - numeric value out of range
|
||||
declare continue handler for sqlstate '22003'
|
||||
select 'Inner (good)' as 'h_ws';
|
||||
insert into t3 values (123456789012);
|
||||
end;
|
||||
delete from t3;
|
||||
insert into t3 values (1);
|
||||
end|
|
||||
create procedure h_ww()
|
||||
deterministic
|
||||
begin
|
||||
declare continue handler for sqlwarning
|
||||
select 'Outer (bad)' as 'h_ww';
|
||||
begin
|
||||
declare continue handler for sqlwarning
|
||||
select 'Inner (good)' as 'h_ww';
|
||||
insert into t3 values (123456789012);
|
||||
end;
|
||||
delete from t3;
|
||||
insert into t3 values (1);
|
||||
end|
|
||||
create procedure h_xe()
|
||||
deterministic
|
||||
begin
|
||||
declare continue handler for sqlexception
|
||||
select 'Outer (bad)' as 'h_xe';
|
||||
begin
|
||||
declare continue handler for 1062 -- ER_DUP_ENTRY
|
||||
select 'Inner (good)' as 'h_xe';
|
||||
insert into t3 values (1);
|
||||
end;
|
||||
end|
|
||||
create procedure h_xs()
|
||||
deterministic
|
||||
begin
|
||||
declare continue handler for sqlexception
|
||||
select 'Outer (bad)' as 'h_xs';
|
||||
begin
|
||||
-- integrity constraint violation
|
||||
declare continue handler for sqlstate '23000'
|
||||
select 'Inner (good)' as 'h_xs';
|
||||
insert into t3 values (1);
|
||||
end;
|
||||
end|
|
||||
create procedure h_xx()
|
||||
deterministic
|
||||
begin
|
||||
declare continue handler for sqlexception
|
||||
select 'Outer (bad)' as 'h_xx';
|
||||
begin
|
||||
declare continue handler for sqlexception
|
||||
select 'Inner (good)' as 'h_xx';
|
||||
insert into t3 values (1);
|
||||
end;
|
||||
end|
|
||||
call h_ee()|
|
||||
h_ee
|
||||
Inner (good)
|
||||
call h_es()|
|
||||
h_es
|
||||
Outer (good)
|
||||
call h_en()|
|
||||
h_en
|
||||
Outer (good)
|
||||
call h_ew()|
|
||||
h_ew
|
||||
Outer (good)
|
||||
call h_ex()|
|
||||
h_ex
|
||||
Outer (good)
|
||||
call h_se()|
|
||||
h_se
|
||||
Inner (good)
|
||||
call h_ss()|
|
||||
h_ss
|
||||
Inner (good)
|
||||
call h_sn()|
|
||||
h_sn
|
||||
Outer (good)
|
||||
call h_sw()|
|
||||
h_sw
|
||||
Outer (good)
|
||||
call h_sx()|
|
||||
h_sx
|
||||
Outer (good)
|
||||
call h_ne()|
|
||||
h_ne
|
||||
Inner (good)
|
||||
call h_ns()|
|
||||
h_ns
|
||||
Inner (good)
|
||||
call h_nn()|
|
||||
h_nn
|
||||
Inner (good)
|
||||
call h_we()|
|
||||
h_we
|
||||
Inner (good)
|
||||
call h_ws()|
|
||||
h_ws
|
||||
Inner (good)
|
||||
call h_ww()|
|
||||
h_ww
|
||||
Inner (good)
|
||||
call h_xe()|
|
||||
h_xe
|
||||
Inner (good)
|
||||
call h_xs()|
|
||||
h_xs
|
||||
Inner (good)
|
||||
call h_xx()|
|
||||
h_xx
|
||||
Inner (good)
|
||||
drop table t3|
|
||||
drop procedure h_ee|
|
||||
drop procedure h_es|
|
||||
drop procedure h_en|
|
||||
drop procedure h_ew|
|
||||
drop procedure h_ex|
|
||||
drop procedure h_se|
|
||||
drop procedure h_ss|
|
||||
drop procedure h_sn|
|
||||
drop procedure h_sw|
|
||||
drop procedure h_sx|
|
||||
drop procedure h_ne|
|
||||
drop procedure h_ns|
|
||||
drop procedure h_nn|
|
||||
drop procedure h_we|
|
||||
drop procedure h_ws|
|
||||
drop procedure h_ww|
|
||||
drop procedure h_xe|
|
||||
drop procedure h_xs|
|
||||
drop procedure h_xx|
|
||||
drop procedure if exists bug822|
|
||||
create procedure bug822(a_id char(16), a_data int)
|
||||
begin
|
||||
|
@ -2132,7 +2463,6 @@ show create database test;
|
|||
show databases like 'foo';
|
||||
show errors;
|
||||
show columns from t1;
|
||||
show grants for 'root'@'localhost';
|
||||
show keys from t1;
|
||||
show open tables like 'foo';
|
||||
show privileges;
|
||||
|
@ -2159,8 +2489,6 @@ Level Code Message
|
|||
Field Type Null Key Default Extra
|
||||
id char(16) NO
|
||||
data int(11) NO
|
||||
Grants for root@localhost
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION
|
||||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
||||
Database Table In_use Name_locked
|
||||
Privilege Context Comment
|
||||
|
@ -2213,8 +2541,6 @@ Level Code Message
|
|||
Field Type Null Key Default Extra
|
||||
id char(16) NO
|
||||
data int(11) NO
|
||||
Grants for root@localhost
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION
|
||||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
||||
Database Table In_use Name_locked
|
||||
Privilege Context Comment
|
||||
|
@ -2250,18 +2576,6 @@ Tables_in_test (foo)
|
|||
Variable_name Value
|
||||
Level Code Message
|
||||
drop procedure bug4902|
|
||||
drop procedure if exists bug4902_2|
|
||||
create procedure bug4902_2()
|
||||
begin
|
||||
show processlist;
|
||||
end|
|
||||
call bug4902_2()|
|
||||
Id User Host db Command Time State Info
|
||||
# root localhost test Query # NULL show processlist
|
||||
call bug4902_2()|
|
||||
Id User Host db Command Time State Info
|
||||
# root localhost test Query # NULL show processlist
|
||||
drop procedure bug4902_2|
|
||||
drop procedure if exists bug4904|
|
||||
create procedure bug4904()
|
||||
begin
|
||||
|
@ -2404,52 +2718,6 @@ select @x|
|
|||
NULL
|
||||
delete from t1|
|
||||
drop procedure bug4941|
|
||||
drop procedure if exists bug3583|
|
||||
drop procedure if exists bug3583|
|
||||
create procedure bug3583()
|
||||
begin
|
||||
declare c int;
|
||||
select * from t1;
|
||||
select count(*) into c from t1;
|
||||
select c;
|
||||
end|
|
||||
insert into t1 values ("x", 3), ("y", 5)|
|
||||
set @x = @@query_cache_size|
|
||||
set global query_cache_size = 10*1024*1024|
|
||||
flush status|
|
||||
flush query cache|
|
||||
show status like 'Qcache_hits'|
|
||||
Variable_name Value
|
||||
Qcache_hits 0
|
||||
call bug3583()|
|
||||
id data
|
||||
x 3
|
||||
y 5
|
||||
c
|
||||
2
|
||||
show status like 'Qcache_hits'|
|
||||
Variable_name Value
|
||||
Qcache_hits 0
|
||||
call bug3583()|
|
||||
id data
|
||||
x 3
|
||||
y 5
|
||||
c
|
||||
2
|
||||
call bug3583()|
|
||||
id data
|
||||
x 3
|
||||
y 5
|
||||
c
|
||||
2
|
||||
show status like 'Qcache_hits'|
|
||||
Variable_name Value
|
||||
Qcache_hits 2
|
||||
set global query_cache_size = @x|
|
||||
flush status|
|
||||
flush query cache|
|
||||
delete from t1|
|
||||
drop procedure bug3583|
|
||||
drop procedure if exists bug4905|
|
||||
create table t3 (s1 int,primary key (s1))|
|
||||
drop procedure if exists bug4905|
|
||||
|
@ -2665,17 +2933,6 @@ select id, bug5240() from t1|
|
|||
id bug5240()
|
||||
answer 42
|
||||
drop function bug5240|
|
||||
drop function if exists bug5278|
|
||||
create function bug5278 () returns char
|
||||
begin
|
||||
SET PASSWORD FOR 'bob'@'%.loc.gov' = PASSWORD('newpass');
|
||||
return 'okay';
|
||||
end|
|
||||
select bug5278()|
|
||||
ERROR 42000: Can't find any matching row in the user table
|
||||
select bug5278()|
|
||||
ERROR 42000: Can't find any matching row in the user table
|
||||
drop function bug5278|
|
||||
drop procedure if exists p1|
|
||||
create table t3(id int)|
|
||||
insert into t3 values(1)|
|
||||
|
@ -4021,14 +4278,6 @@ select bug10100f(5)|
|
|||
ERROR HY000: Recursive stored functions and triggers are not allowed.
|
||||
call bug10100t(5)|
|
||||
ERROR HY000: Recursive limit 0 (as set by the max_sp_recursion_depth variable) was exceeded for routine bug10100p
|
||||
set @@max_sp_recursion_depth=255|
|
||||
set @var=1|
|
||||
call bug10100p(255, @var)|
|
||||
call bug10100pt(1,255)|
|
||||
call bug10100pv(1,255)|
|
||||
call bug10100pd(1,255)|
|
||||
call bug10100pc(1,255)|
|
||||
set @@max_sp_recursion_depth=0|
|
||||
deallocate prepare stmt2|
|
||||
drop function bug10100f|
|
||||
drop procedure bug10100p|
|
||||
|
@ -4519,4 +4768,37 @@ Handler
|
|||
Inner
|
||||
drop procedure bug15011|
|
||||
drop table t3|
|
||||
drop function if exists bug17615|
|
||||
create table t3 (a varchar(256) unicode)|
|
||||
create function bug17615() returns varchar(256) unicode
|
||||
begin
|
||||
declare tmp_res varchar(256) unicode;
|
||||
set tmp_res= 'foo string';
|
||||
return tmp_res;
|
||||
end|
|
||||
insert into t3 values(bug17615())|
|
||||
select * from t3|
|
||||
a
|
||||
foo string
|
||||
drop function bug17615|
|
||||
drop table t3|
|
||||
drop procedure if exists bug17476|
|
||||
create table t3 ( d date )|
|
||||
insert into t3 values
|
||||
( '2005-01-01' ), ( '2005-01-02' ), ( '2005-01-03' ),
|
||||
( '2005-01-04' ), ( '2005-02-01' ), ( '2005-02-02' )|
|
||||
create procedure bug17476(pDateFormat varchar(10))
|
||||
select date_format(t3.d, pDateFormat), count(*)
|
||||
from t3
|
||||
group by date_format(t3.d, pDateFormat)|
|
||||
call bug17476('%Y-%m')|
|
||||
date_format(t3.d, pDateFormat) count(*)
|
||||
2005-01 4
|
||||
2005-02 2
|
||||
call bug17476('%Y-%m')|
|
||||
date_format(t3.d, pDateFormat) count(*)
|
||||
2005-01 4
|
||||
2005-02 2
|
||||
drop table t3|
|
||||
drop procedure bug17476|
|
||||
drop table t1,t2;
|
||||
|
|
4853
mysql-test/r/sp.result.orig
Normal file
4853
mysql-test/r/sp.result.orig
Normal file
File diff suppressed because it is too large
Load diff
206
mysql-test/r/sp_notembedded.result
Normal file
206
mysql-test/r/sp_notembedded.result
Normal file
|
@ -0,0 +1,206 @@
|
|||
drop procedure if exists bug4902|
|
||||
create procedure bug4902()
|
||||
begin
|
||||
show grants for 'root'@'localhost';
|
||||
end|
|
||||
call bug4902()|
|
||||
Grants for root@localhost
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION
|
||||
call bug4902()|
|
||||
Grants for root@localhost
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION
|
||||
drop procedure bug4902|
|
||||
drop procedure if exists bug4902_2|
|
||||
create procedure bug4902_2()
|
||||
begin
|
||||
show processlist;
|
||||
end|
|
||||
call bug4902_2()|
|
||||
Id User Host db Command Time State Info
|
||||
# root localhost test Query # NULL show processlist
|
||||
call bug4902_2()|
|
||||
Id User Host db Command Time State Info
|
||||
# root localhost test Query # NULL show processlist
|
||||
drop procedure bug4902_2|
|
||||
drop function if exists bug5278|
|
||||
create function bug5278 () returns char
|
||||
begin
|
||||
SET PASSWORD FOR 'bob'@'%.loc.gov' = PASSWORD('newpass');
|
||||
return 'okay';
|
||||
end|
|
||||
select bug5278()|
|
||||
ERROR 42000: Can't find any matching row in the user table
|
||||
select bug5278()|
|
||||
ERROR 42000: Can't find any matching row in the user table
|
||||
drop function bug5278|
|
||||
drop table if exists t1|
|
||||
create table t1 (
|
||||
id char(16) not null default '',
|
||||
data int not null
|
||||
)|
|
||||
drop procedure if exists bug3583|
|
||||
drop procedure if exists bug3583|
|
||||
create procedure bug3583()
|
||||
begin
|
||||
declare c int;
|
||||
select * from t1;
|
||||
select count(*) into c from t1;
|
||||
select c;
|
||||
end|
|
||||
insert into t1 values ("x", 3), ("y", 5)|
|
||||
set @x = @@query_cache_size|
|
||||
set global query_cache_size = 10*1024*1024|
|
||||
flush status|
|
||||
flush query cache|
|
||||
show status like 'Qcache_hits'|
|
||||
Variable_name Value
|
||||
Qcache_hits 0
|
||||
call bug3583()|
|
||||
id data
|
||||
x 3
|
||||
y 5
|
||||
c
|
||||
2
|
||||
show status like 'Qcache_hits'|
|
||||
Variable_name Value
|
||||
Qcache_hits 0
|
||||
call bug3583()|
|
||||
id data
|
||||
x 3
|
||||
y 5
|
||||
c
|
||||
2
|
||||
call bug3583()|
|
||||
id data
|
||||
x 3
|
||||
y 5
|
||||
c
|
||||
2
|
||||
show status like 'Qcache_hits'|
|
||||
Variable_name Value
|
||||
Qcache_hits 2
|
||||
set global query_cache_size = @x|
|
||||
flush status|
|
||||
flush query cache|
|
||||
delete from t1|
|
||||
drop procedure bug3583|
|
||||
drop table t1;
|
||||
#|
|
||||
drop procedure if exists bug6807|
|
||||
create procedure bug6807()
|
||||
begin
|
||||
declare id int;
|
||||
set id = connection_id();
|
||||
kill query id;
|
||||
select 'Not reached';
|
||||
end|
|
||||
call bug6807()|
|
||||
ERROR 70100: Query execution was interrupted
|
||||
call bug6807()|
|
||||
ERROR 70100: Query execution was interrupted
|
||||
drop procedure bug6807|
|
||||
drop function if exists bug10100f|
|
||||
drop procedure if exists bug10100p|
|
||||
drop procedure if exists bug10100t|
|
||||
drop procedure if exists bug10100pt|
|
||||
drop procedure if exists bug10100pv|
|
||||
drop procedure if exists bug10100pd|
|
||||
drop procedure if exists bug10100pc|
|
||||
create function bug10100f(prm int) returns int
|
||||
begin
|
||||
if prm > 1 then
|
||||
return prm * bug10100f(prm - 1);
|
||||
end if;
|
||||
return 1;
|
||||
end|
|
||||
create procedure bug10100p(prm int, inout res int)
|
||||
begin
|
||||
set res = res * prm;
|
||||
if prm > 1 then
|
||||
call bug10100p(prm - 1, res);
|
||||
end if;
|
||||
end|
|
||||
create procedure bug10100t(prm int)
|
||||
begin
|
||||
declare res int;
|
||||
set res = 1;
|
||||
call bug10100p(prm, res);
|
||||
select res;
|
||||
end|
|
||||
create table t3 (a int)|
|
||||
insert into t3 values (0)|
|
||||
create view v1 as select a from t3;
|
||||
create procedure bug10100pt(level int, lim int)
|
||||
begin
|
||||
if level < lim then
|
||||
update t3 set a=level;
|
||||
FLUSH TABLES;
|
||||
call bug10100pt(level+1, lim);
|
||||
else
|
||||
select * from t3;
|
||||
end if;
|
||||
end|
|
||||
create procedure bug10100pv(level int, lim int)
|
||||
begin
|
||||
if level < lim then
|
||||
update v1 set a=level;
|
||||
FLUSH TABLES;
|
||||
call bug10100pv(level+1, lim);
|
||||
else
|
||||
select * from v1;
|
||||
end if;
|
||||
end|
|
||||
prepare stmt2 from "select * from t3;";
|
||||
create procedure bug10100pd(level int, lim int)
|
||||
begin
|
||||
if level < lim then
|
||||
select level;
|
||||
prepare stmt1 from "update t3 set a=a+2";
|
||||
execute stmt1;
|
||||
FLUSH TABLES;
|
||||
execute stmt1;
|
||||
FLUSH TABLES;
|
||||
execute stmt1;
|
||||
FLUSH TABLES;
|
||||
deallocate prepare stmt1;
|
||||
execute stmt2;
|
||||
select * from t3;
|
||||
call bug10100pd(level+1, lim);
|
||||
else
|
||||
execute stmt2;
|
||||
end if;
|
||||
end|
|
||||
create procedure bug10100pc(level int, lim int)
|
||||
begin
|
||||
declare lv int;
|
||||
declare c cursor for select a from t3;
|
||||
open c;
|
||||
if level < lim then
|
||||
select level;
|
||||
fetch c into lv;
|
||||
select lv;
|
||||
update t3 set a=level+lv;
|
||||
FLUSH TABLES;
|
||||
call bug10100pc(level+1, lim);
|
||||
else
|
||||
select * from t3;
|
||||
end if;
|
||||
close c;
|
||||
end|
|
||||
set @@max_sp_recursion_depth=255|
|
||||
set @var=1|
|
||||
call bug10100p(255, @var)|
|
||||
call bug10100pt(1,255)|
|
||||
call bug10100pv(1,255)|
|
||||
call bug10100pd(1,255)|
|
||||
call bug10100pc(1,255)|
|
||||
set @@max_sp_recursion_depth=0|
|
||||
deallocate prepare stmt2|
|
||||
drop function bug10100f|
|
||||
drop procedure bug10100p|
|
||||
drop procedure bug10100t|
|
||||
drop procedure bug10100pt|
|
||||
drop procedure bug10100pv|
|
||||
drop procedure bug10100pd|
|
||||
drop procedure bug10100pc|
|
||||
drop view v1|
|
|
@ -478,4 +478,20 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER="root"@"localhost" SQL SECURITY DEFINER VI
|
|||
create view v2 as select a from t2 where a in (select a from v1);
|
||||
drop view v2, v1;
|
||||
drop table t1, t2;
|
||||
select @@sql_mode;
|
||||
@@sql_mode
|
||||
ANSI_QUOTES
|
||||
set sql_mode=2097152;
|
||||
select @@sql_mode;
|
||||
@@sql_mode
|
||||
STRICT_TRANS_TABLES
|
||||
set sql_mode=16384+(65536*4);
|
||||
select @@sql_mode;
|
||||
@@sql_mode
|
||||
REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,NO_TABLE_OPTIONS,ANSI
|
||||
set sql_mode=2147483648;
|
||||
ERROR 42000: Variable 'sql_mode' can't be set to the value of '2147483648'
|
||||
select @@sql_mode;
|
||||
@@sql_mode
|
||||
REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,NO_TABLE_OPTIONS,ANSI
|
||||
SET @@SQL_MODE=@OLD_SQL_MODE;
|
||||
|
|
|
@ -215,9 +215,9 @@ select * from t1 where t1.a=(select t2.a from t2 where t2.b=(select max(a) from
|
|||
a
|
||||
select b,(select avg(t2.a+(select min(t3.a) from t3 where t3.a >= t4.a)) from t2) from t4;
|
||||
b (select avg(t2.a+(select min(t3.a) from t3 where t3.a >= t4.a)) from t2)
|
||||
8 7.5
|
||||
8 4.5
|
||||
9 7.5
|
||||
8 7.5000
|
||||
8 4.5000
|
||||
9 7.5000
|
||||
explain extended select b,(select avg(t2.a+(select min(t3.a) from t3 where t3.a >= t4.a)) from t2) from t4;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t4 ALL NULL NULL NULL NULL 3
|
||||
|
@ -2987,7 +2987,6 @@ select * from (select max(fld) from t1) as foo;
|
|||
max(fld)
|
||||
1
|
||||
drop table t1;
|
||||
purge master logs before (select adddate(current_timestamp(), interval -4 day));
|
||||
CREATE TABLE t1 (a int, b int);
|
||||
CREATE TABLE t2 (c int, d int);
|
||||
CREATE TABLE t3 (e int);
|
||||
|
@ -3131,3 +3130,29 @@ a sum
|
|||
3 20
|
||||
4 40
|
||||
DROP TABLE t1,t2,t3;
|
||||
CREATE TABLE t1 (a varchar(5), b varchar(10));
|
||||
INSERT INTO t1 VALUES
|
||||
('AAA', 5), ('BBB', 4), ('BBB', 1), ('CCC', 2),
|
||||
('CCC', 7), ('AAA', 2), ('AAA', 4), ('BBB', 3), ('AAA', 8);
|
||||
SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
|
||||
a b
|
||||
BBB 4
|
||||
CCC 7
|
||||
AAA 8
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 9 Using where
|
||||
2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 9 Using temporary; Using filesort
|
||||
ALTER TABLE t1 ADD INDEX(a);
|
||||
SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
|
||||
a b
|
||||
BBB 4
|
||||
CCC 7
|
||||
AAA 8
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 9 Using where
|
||||
2 DEPENDENT SUBQUERY t1 index NULL a 8 NULL 9 Using filesort
|
||||
DROP TABLE t1;
|
||||
|
|
1
mysql-test/r/subselect_notembedded.result
Normal file
1
mysql-test/r/subselect_notembedded.result
Normal file
|
@ -0,0 +1 @@
|
|||
purge master logs before (select adddate(current_timestamp(), interval -4 day));
|
|
@ -1,4 +1,4 @@
|
|||
drop table if exists t1, t2, t3;
|
||||
drop table if exists t1, t2, t3, t4;
|
||||
drop view if exists v1;
|
||||
drop database if exists mysqltest;
|
||||
drop function if exists f1;
|
||||
|
@ -785,6 +785,107 @@ create trigger test.t1_bi before insert on t1 for each row set @a:=0;
|
|||
ERROR 3D000: No database selected
|
||||
drop trigger t1_bi;
|
||||
ERROR 3D000: No database selected
|
||||
create table t1 (id int);
|
||||
create trigger t1_bi before insert on t1 for each row set @a:=new.id;
|
||||
insert into t1 values (101);
|
||||
select @a;
|
||||
@a
|
||||
101
|
||||
select trigger_schema, trigger_name, event_object_schema,
|
||||
event_object_table, action_statement from information_schema.triggers
|
||||
where event_object_schema = 'test';
|
||||
trigger_schema trigger_name event_object_schema event_object_table action_statement
|
||||
test t1_bi test t1 set @a:=new.id
|
||||
rename table t1 to t2;
|
||||
insert into t2 values (102);
|
||||
select @a;
|
||||
@a
|
||||
102
|
||||
select trigger_schema, trigger_name, event_object_schema,
|
||||
event_object_table, action_statement from information_schema.triggers
|
||||
where event_object_schema = 'test';
|
||||
trigger_schema trigger_name event_object_schema event_object_table action_statement
|
||||
test t1_bi test t2 set @a:=new.id
|
||||
alter table t2 rename to t3;
|
||||
insert into t3 values (103);
|
||||
select @a;
|
||||
@a
|
||||
103
|
||||
select trigger_schema, trigger_name, event_object_schema,
|
||||
event_object_table, action_statement from information_schema.triggers
|
||||
where event_object_schema = 'test';
|
||||
trigger_schema trigger_name event_object_schema event_object_table action_statement
|
||||
test t1_bi test t3 set @a:=new.id
|
||||
alter table t3 rename to t4, add column val int default 0;
|
||||
insert into t4 values (104, 1);
|
||||
select @a;
|
||||
@a
|
||||
104
|
||||
select trigger_schema, trigger_name, event_object_schema,
|
||||
event_object_table, action_statement from information_schema.triggers
|
||||
where event_object_schema = 'test';
|
||||
trigger_schema trigger_name event_object_schema event_object_table action_statement
|
||||
test t1_bi test t4 set @a:=new.id
|
||||
drop trigger t1_bi;
|
||||
drop table t4;
|
||||
create database mysqltest;
|
||||
use mysqltest;
|
||||
create table t1 (id int);
|
||||
create trigger t1_bi before insert on t1 for each row set @a:=new.id;
|
||||
insert into t1 values (101);
|
||||
select @a;
|
||||
@a
|
||||
101
|
||||
select trigger_schema, trigger_name, event_object_schema,
|
||||
event_object_table, action_statement from information_schema.triggers
|
||||
where event_object_schema = 'test' or event_object_schema = 'mysqltest';
|
||||
trigger_schema trigger_name event_object_schema event_object_table action_statement
|
||||
mysqltest t1_bi mysqltest t1 set @a:=new.id
|
||||
rename table t1 to test.t2;
|
||||
ERROR HY000: Trigger in wrong schema
|
||||
insert into t1 values (102);
|
||||
select @a;
|
||||
@a
|
||||
102
|
||||
select trigger_schema, trigger_name, event_object_schema,
|
||||
event_object_table, action_statement from information_schema.triggers
|
||||
where event_object_schema = 'test' or event_object_schema = 'mysqltest';
|
||||
trigger_schema trigger_name event_object_schema event_object_table action_statement
|
||||
mysqltest t1_bi mysqltest t1 set @a:=new.id
|
||||
drop trigger test.t1_bi;
|
||||
ERROR HY000: Trigger does not exist
|
||||
drop trigger t1_bi;
|
||||
drop table t1;
|
||||
drop database mysqltest;
|
||||
use test;
|
||||
create table t1 (id int);
|
||||
create trigger t1_bi before insert on t1 for each row set @a:=new.id;
|
||||
create trigger t1_ai after insert on t1 for each row set @b:=new.id;
|
||||
insert into t1 values (101);
|
||||
select @a, @b;
|
||||
@a @b
|
||||
101 101
|
||||
select trigger_schema, trigger_name, event_object_schema,
|
||||
event_object_table, action_statement from information_schema.triggers
|
||||
where event_object_schema = 'test';
|
||||
trigger_schema trigger_name event_object_schema event_object_table action_statement
|
||||
test t1_bi test t1 set @a:=new.id
|
||||
test t1_ai test t1 set @b:=new.id
|
||||
rename table t1 to t2;
|
||||
ERROR HY000: Can't create/write to file './test/t1_ai.TRN~' (Errcode: 13)
|
||||
insert into t1 values (102);
|
||||
select @a, @b;
|
||||
@a @b
|
||||
102 102
|
||||
select trigger_schema, trigger_name, event_object_schema,
|
||||
event_object_table, action_statement from information_schema.triggers
|
||||
where event_object_schema = 'test';
|
||||
trigger_schema trigger_name event_object_schema event_object_table action_statement
|
||||
test t1_bi test t1 set @a:=new.id
|
||||
test t1_ai test t1 set @b:=new.id
|
||||
drop trigger t1_bi;
|
||||
drop trigger t1_ai;
|
||||
drop table t1;
|
||||
create table t1 (i int);
|
||||
create trigger t1_bi before insert on t1 for each row return 0;
|
||||
ERROR 42000: RETURN is only allowed in a FUNCTION
|
||||
|
|
|
@ -772,3 +772,10 @@ productid zlevelprice
|
|||
003trans 39.98
|
||||
004trans 31.18
|
||||
drop table t1, t2;
|
||||
create table t1 (f1 decimal(5));
|
||||
insert into t1 values (40);
|
||||
flush tables;
|
||||
select f1 from t1 where f1 in (select f1 from t1);
|
||||
f1
|
||||
40
|
||||
drop table t1;
|
||||
|
|
|
@ -2213,15 +2213,6 @@ r_object_id users_names
|
|||
120001a080000542 guser02
|
||||
drop view v1, v2;
|
||||
drop table t1, t2;
|
||||
create definer=some_user@`` sql security invoker view v1 as select 1;
|
||||
ERROR HY000: Definer is not fully qualified
|
||||
create definer=some_user@localhost sql security invoker view v1 as select 1;
|
||||
Warnings:
|
||||
Note 1449 There is no 'some_user'@'localhost' registered
|
||||
show create view v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`some_user`@`localhost` SQL SECURITY INVOKER VIEW `v1` AS select 1 AS `1`
|
||||
drop view v1;
|
||||
create table t1 (s1 int);
|
||||
create view abc as select * from t1 as abc;
|
||||
drop table t1;
|
||||
|
@ -2538,3 +2529,13 @@ Warnings:
|
|||
Warning 1052 Column 'x' in group statement is ambiguous
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
drop table if exists t1;
|
||||
drop view if exists v1;
|
||||
create table t1 (id int);
|
||||
create view v1 as select * from t1;
|
||||
drop table t1;
|
||||
show create view v1;
|
||||
drop view v1;
|
||||
//
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select sql_no_cache `test`.`t1`.`id` AS `id` from `t1`
|
||||
|
|
|
@ -519,3 +519,12 @@ use test;
|
|||
use test;
|
||||
drop user mysqltest_1@localhost;
|
||||
drop database mysqltest;
|
||||
create definer=some_user@`` sql security invoker view v1 as select 1;
|
||||
ERROR HY000: Definer is not fully qualified
|
||||
create definer=some_user@localhost sql security invoker view v1 as select 1;
|
||||
Warnings:
|
||||
Note 1449 There is no 'some_user'@'localhost' registered
|
||||
show create view v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`some_user`@`localhost` SQL SECURITY INVOKER VIEW `v1` AS select 1 AS `1`
|
||||
drop view v1;
|
||||
|
|
|
@ -6,3 +6,11 @@ ERROR HY000: MySQL server has gone away
|
|||
select 3;
|
||||
3
|
||||
3
|
||||
select 1;
|
||||
1
|
||||
1
|
||||
select 2;
|
||||
ERROR HY000: MySQL server has gone away
|
||||
select 3;
|
||||
3
|
||||
3
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
# This test should work in embedded server after we fix mysqltest
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
#
|
||||
# This test is a bit tricky as we can't use backup table to overwrite an old
|
||||
# table
|
||||
|
|
|
@ -270,3 +270,12 @@ VALUES (9, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999,
|
|||
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
#bug #9088 BIGINT WHERE CLAUSE
|
||||
create table t1 (bigint_col bigint unsigned);
|
||||
insert into t1 values (17666000000000000000);
|
||||
select * from t1 where bigint_col=17666000000000000000;
|
||||
select * from t1 where bigint_col='17666000000000000000';
|
||||
drop table t1;
|
||||
|
||||
|
||||
|
|
|
@ -89,3 +89,15 @@ show create table t1;
|
|||
drop table t1;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
#
|
||||
# Bug#16857
|
||||
#
|
||||
create table t1 (col1 binary(4));
|
||||
insert into t1 values ('a'),('a ');
|
||||
select hex(col1) from t1;
|
||||
alter table t1 modify col1 binary(10);
|
||||
select hex(col1) from t1;
|
||||
insert into t1 values ('b'),('b ');
|
||||
select hex(col1) from t1;
|
||||
drop table t1;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#
|
||||
# misc binlogging tests that do not require a slave running
|
||||
#
|
||||
-- source include/not_embedded.inc
|
||||
-- source include/have_bdb.inc
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
|
@ -18,7 +19,7 @@ begin;
|
|||
insert t2 values (5);
|
||||
commit;
|
||||
# first COMMIT must be Query_log_event, second - Xid_log_event
|
||||
--replace_result "xid=18" "xid=11"
|
||||
--replace_result "xid=21" "xid=12"
|
||||
--replace_column 2 # 5 #
|
||||
show binlog events from 98;
|
||||
drop table t1,t2;
|
||||
|
@ -40,7 +41,7 @@ while ($1)
|
|||
--enable_query_log
|
||||
commit;
|
||||
drop table t1;
|
||||
--replace_result "xid=29" "xid=18"
|
||||
--replace_result "xid=32" "xid=19"
|
||||
--replace_column 2 # 5 #
|
||||
show binlog events in 'master-bin.000001' from 98;
|
||||
--replace_column 2 # 5 #
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
# Simple test for blackhole example
|
||||
# Taken from the select test
|
||||
#
|
||||
-- source include/not_embedded.inc
|
||||
-- source include/have_blackhole.inc
|
||||
|
||||
--disable_warnings
|
||||
|
|
|
@ -9,13 +9,13 @@ create table t1 (
|
|||
`a>b` text
|
||||
);
|
||||
insert into t1 values (1, 2, 'a&b a<b a>b');
|
||||
--exec $MYSQL --xml test -e 'select * from t1'
|
||||
--exec $MYSQL --xml test -e "select * from t1"
|
||||
--exec $MYSQL_DUMP --xml --skip-create test
|
||||
|
||||
--exec $MYSQL --xml test -e 'select count(*) from t1'
|
||||
--exec $MYSQL --xml test -e 'select 1 < 2 from dual'
|
||||
--exec $MYSQL --xml test -e 'select 1 > 2 from dual'
|
||||
--exec $MYSQL --xml test -e 'select 1 & 3 from dual'
|
||||
--exec $MYSQL --xml test -e 'select null from dual'
|
||||
--exec $MYSQL --xml test -e "select count(*) from t1"
|
||||
--exec $MYSQL --xml test -e "select 1 < 2 from dual"
|
||||
--exec $MYSQL --xml test -e "select 1 > 2 from dual"
|
||||
--exec $MYSQL --xml test -e "select 1 & 3 from dual"
|
||||
--exec $MYSQL --xml test -e "select null from dual"
|
||||
|
||||
drop table t1;
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
# Turn on compression between the client and server
|
||||
# and run a number of tests
|
||||
|
||||
# Can't test with embedded server
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
-- source include/have_compress.inc
|
||||
|
||||
connect (comp_con,localhost,root,,,,,COMPRESS);
|
||||
|
|
|
@ -660,4 +660,12 @@ alter table t1 max_rows=100000000000;
|
|||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#17530: Incorrect key truncation on table creation caused server crash.
|
||||
#
|
||||
create table t1(f1 varchar(800) binary not null, key(f1)) engine = innodb
|
||||
character set utf8 collate utf8_general_ci;
|
||||
insert into t1 values('aaa');
|
||||
drop table t1;
|
||||
|
||||
# End of 5.0 tests
|
||||
|
|
|
@ -398,28 +398,6 @@ DROP TABLE t2;
|
|||
DROP TABLE t3;
|
||||
DROP TABLE t4;
|
||||
|
||||
# Test prepared statement with 0x8300 sequence in parameter while
|
||||
# running with cp932 client character set.
|
||||
RESET MASTER;
|
||||
CREATE TABLE t1(f1 blob);
|
||||
PREPARE stmt1 FROM 'INSERT INTO t1 VALUES(?)';
|
||||
SET @var1= x'8300';
|
||||
# TODO: Note that this doesn't actually test the code which was added for
|
||||
# bug#11338 because this syntax for prepared statements causes the PS to
|
||||
# be replicated differently than if we executed the PS from C or Java.
|
||||
# Using this syntax, variable names are inserted into the binlog instead
|
||||
# of values. The real goal of this test is to check the code that was
|
||||
# added to Item_param::query_val_str() in order to do hex encoding of
|
||||
# PS parameters when the client character set is cp932;
|
||||
# Bug#11338 has an example java program which can be used to verify this
|
||||
# code (and I have used it to test the fix) until there is some way to
|
||||
# exercise this code from mysql-test-run.
|
||||
EXECUTE stmt1 USING @var1;
|
||||
SHOW BINLOG EVENTS FROM 98;
|
||||
SELECT HEX(f1) FROM t1;
|
||||
DROP table t1;
|
||||
# end test for bug#11338
|
||||
|
||||
SET collation_connection='cp932_japanese_ci';
|
||||
-- source include/ctype_filesort.inc
|
||||
SET collation_connection='cp932_bin';
|
||||
|
|
32
mysql-test/t/ctype_cp932_notembedded.test
Normal file
32
mysql-test/t/ctype_cp932_notembedded.test
Normal file
|
@ -0,0 +1,32 @@
|
|||
-- source include/not_embedded.inc
|
||||
-- source include/have_cp932.inc
|
||||
|
||||
--character_set cp932
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
set names cp932;
|
||||
set character_set_database = cp932;
|
||||
|
||||
# Test prepared statement with 0x8300 sequence in parameter while
|
||||
# running with cp932 client character set.
|
||||
RESET MASTER;
|
||||
CREATE TABLE t1(f1 blob);
|
||||
PREPARE stmt1 FROM 'INSERT INTO t1 VALUES(?)';
|
||||
SET @var1= x'8300';
|
||||
# TODO: Note that this doesn't actually test the code which was added for
|
||||
# bug#11338 because this syntax for prepared statements causes the PS to
|
||||
# be replicated differently than if we executed the PS from C or Java.
|
||||
# Using this syntax, variable names are inserted into the binlog instead
|
||||
# of values. The real goal of this test is to check the code that was
|
||||
# added to Item_param::query_val_str() in order to do hex encoding of
|
||||
# PS parameters when the client character set is cp932;
|
||||
# Bug#11338 has an example java program which can be used to verify this
|
||||
# code (and I have used it to test the fix) until there is some way to
|
||||
# exercise this code from mysql-test-run.
|
||||
EXECUTE stmt1 USING @var1;
|
||||
SHOW BINLOG EVENTS FROM 98;
|
||||
SELECT HEX(f1) FROM t1;
|
||||
DROP table t1;
|
||||
# end test for bug#11338
|
|
@ -3,6 +3,9 @@
|
|||
# (Can't be tested with purify :( )
|
||||
#
|
||||
|
||||
# This tests not performed with embedded server
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
|
|
@ -11,5 +11,4 @@
|
|||
##############################################################################
|
||||
|
||||
sp-goto : GOTO is currently is disabled - will be fixed in the future
|
||||
subselect : Bug#15706
|
||||
ndb_load : Bug#17233
|
||||
|
|
|
@ -676,4 +676,12 @@ insert into t1 values (null);
|
|||
select format(d, 2) from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #14676: substring_index() returns incorrect results
|
||||
#
|
||||
create table t1 (c varchar(40));
|
||||
insert into t1 values ('y,abc'),('y,abc');
|
||||
select c, substring_index(lcase(c), @q:=',', -1) as res from t1;
|
||||
drop table t1;
|
||||
|
||||
# End of 5.0 tests
|
||||
|
|
|
@ -429,3 +429,39 @@ disconnect con2root;
|
|||
disconnect con3root;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
#
|
||||
# Bug#17279 user with no global privs and with create
|
||||
# priv in db can create databases
|
||||
#
|
||||
|
||||
create database TESTDB;
|
||||
create table t2(a int);
|
||||
create temporary table t1 as select * from mysql.user;
|
||||
delete from mysql.user where host='localhost';
|
||||
INSERT INTO mysql.user VALUES
|
||||
('%','mysqltest_1',password('password'),'N','N','N','N','N','N',
|
||||
'N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N',
|
||||
'','','','',0,0,0,0);
|
||||
INSERT INTO mysql.db VALUES
|
||||
('%','TESTDB','mysqltest_1','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','N','Y','Y','Y','
|
||||
Y','N');
|
||||
FLUSH PRIVILEGES;
|
||||
|
||||
connect (con1,localhost,mysqltest_1,password,TESTDB);
|
||||
|
||||
# The user mysqltest_1 should only be allowed access to
|
||||
# database TESTDB, not TEStdb
|
||||
# On system with "lowercase names" we get error "1007: Can't create db..."
|
||||
--error 1044, 1007
|
||||
create database TEStdb;
|
||||
|
||||
# Clean-up
|
||||
connection default;
|
||||
delete from mysql.user;
|
||||
delete from mysql.db where host='%' and user='mysqltest_1' and db='TESTDB';
|
||||
insert into mysql.user select * from t1;
|
||||
drop table t1, t2;
|
||||
drop database TESTDB;
|
||||
flush privileges;
|
||||
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
# test of HANDLER ...
|
||||
#
|
||||
|
||||
# should work in embedded server after mysqltest is fixed
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1,t3,t4,t5;
|
||||
--enable_warnings
|
||||
|
|
|
@ -149,3 +149,18 @@ SHOW INSTANCES;
|
|||
###########################################################################
|
||||
--error 1149
|
||||
SHOW INSTANCE STATUS;
|
||||
|
||||
#
|
||||
# Tests for bug fixes
|
||||
#
|
||||
|
||||
#
|
||||
# Bug #12813 Instance Manager: START/STOP INSTANCE commands accept
|
||||
# a list as argument.
|
||||
#
|
||||
|
||||
--error 1149
|
||||
START INSTANCE mysqld1,mysqld2,mysqld3;
|
||||
|
||||
--error 1149
|
||||
STOP INSTANCE mysqld1,mysqld2,mysqld3;
|
||||
|
|
|
@ -357,3 +357,29 @@ explain select * from t1 WHERE cola = 'foo' AND colb = 'bar';
|
|||
explain select * from t1 force index(cola,colb) WHERE cola = 'foo' AND colb = 'bar';
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# BUG#17314: Index_merge/intersection not choosen by the optimizer for MERGE tables
|
||||
#
|
||||
create table t0 (a int);
|
||||
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
create table t1 (
|
||||
a int, b int,
|
||||
filler1 char(200), filler2 char(200),
|
||||
key(a),key(b)
|
||||
);
|
||||
insert into t1 select @v:= A.a, @v, 't1', 'filler2' from t0 A, t0 B, t0 C;
|
||||
create table t2 like t1;
|
||||
|
||||
create table t3 (
|
||||
a int, b int,
|
||||
filler1 char(200), filler2 char(200),
|
||||
key(a),key(b)
|
||||
) engine=merge union=(t1,t2);
|
||||
|
||||
--replace_column 9 #
|
||||
explain select * from t1 where a=1 and b=1;
|
||||
--replace_column 9 #
|
||||
explain select * from t3 where a=1 and b=1;
|
||||
|
||||
drop table t3;
|
||||
drop table t0, t1, t2;
|
||||
|
|
|
@ -1619,33 +1619,7 @@ connection a;
|
|||
checksum table t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# BUG#11238 - in prelocking mode SELECT .. FOR UPDATE is changed to
|
||||
# non-blocking SELECT
|
||||
#
|
||||
create table t1 (col1 integer primary key, col2 integer) engine=innodb;
|
||||
insert t1 values (1,100);
|
||||
delimiter |;
|
||||
create function f1 () returns integer begin
|
||||
declare var1 int;
|
||||
select col2 into var1 from t1 where col1=1 for update;
|
||||
return var1;
|
||||
end|
|
||||
delimiter ;|
|
||||
start transaction;
|
||||
select f1();
|
||||
connection b;
|
||||
send update t1 set col2=0 where col1=1;
|
||||
connection default;
|
||||
select * from t1;
|
||||
connection a;
|
||||
rollback;
|
||||
connection b;
|
||||
reap;
|
||||
rollback;
|
||||
connection default;
|
||||
drop table t1;
|
||||
drop function f1;
|
||||
disconnect a;
|
||||
disconnect b;
|
||||
|
||||
|
@ -1788,6 +1762,7 @@ commit;
|
|||
|
||||
set foreign_key_checks=0;
|
||||
create table t2 (a int primary key, b int, foreign key (b) references t1(a)) engine = innodb;
|
||||
--replace_result $MYSQLTEST_VARDIR . master-data/ ''
|
||||
-- error 1005
|
||||
create table t1(a char(10) primary key, b varchar(20)) engine = innodb;
|
||||
set foreign_key_checks=1;
|
||||
|
@ -1798,6 +1773,7 @@ drop table t2;
|
|||
|
||||
set foreign_key_checks=0;
|
||||
create table t1(a varchar(10) primary key) engine = innodb DEFAULT CHARSET=latin1;
|
||||
--replace_result $MYSQLTEST_VARDIR . master-data/ ''
|
||||
-- error 1005
|
||||
create table t2 (a varchar(10), foreign key (a) references t1(a)) engine = innodb DEFAULT CHARSET=utf8;
|
||||
set foreign_key_checks=1;
|
||||
|
@ -1827,6 +1803,7 @@ drop table t2,t1;
|
|||
set foreign_key_checks=0;
|
||||
create table t2 (a varchar(10), foreign key (a) references t1(a)) engine = innodb DEFAULT CHARSET=latin1;
|
||||
create table t3(a varchar(10) primary key) engine = innodb DEFAULT CHARSET=utf8;
|
||||
--replace_result $MYSQLTEST_VARDIR . master-data/ ''
|
||||
-- error 1025
|
||||
rename table t3 to t1;
|
||||
set foreign_key_checks=1;
|
||||
|
|
40
mysql-test/t/innodb_notembedded.test
Normal file
40
mysql-test/t/innodb_notembedded.test
Normal file
|
@ -0,0 +1,40 @@
|
|||
-- source include/not_embedded.inc
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
connect (a,localhost,root,,);
|
||||
connect (b,localhost,root,,);
|
||||
|
||||
|
||||
#
|
||||
# BUG#11238 - in prelocking mode SELECT .. FOR UPDATE is changed to
|
||||
# non-blocking SELECT
|
||||
#
|
||||
create table t1 (col1 integer primary key, col2 integer) engine=innodb;
|
||||
insert t1 values (1,100);
|
||||
delimiter |;
|
||||
create function f1 () returns integer begin
|
||||
declare var1 int;
|
||||
select col2 into var1 from t1 where col1=1 for update;
|
||||
return var1;
|
||||
end|
|
||||
delimiter ;|
|
||||
start transaction;
|
||||
select f1();
|
||||
connection b;
|
||||
send update t1 set col2=0 where col1=1;
|
||||
connection default;
|
||||
select * from t1;
|
||||
connection a;
|
||||
rollback;
|
||||
connection b;
|
||||
reap;
|
||||
rollback;
|
||||
connection default;
|
||||
drop table t1;
|
||||
drop function f1;
|
||||
disconnect a;
|
||||
disconnect b;
|
|
@ -523,6 +523,12 @@ select t1.b from v1a;
|
|||
-- error 1054
|
||||
select * from v1a join v1b on t1.b = t2.b;
|
||||
|
||||
#
|
||||
# Bug #17523 natural join and information_schema
|
||||
#
|
||||
select * from information_schema.statistics join information_schema.columns
|
||||
using(table_name,column_name) where table_name='user';
|
||||
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
drop table t3;
|
||||
|
|
|
@ -259,5 +259,37 @@ show binlog events from 98;
|
|||
do release_lock("lock1");
|
||||
drop table t0,t2;
|
||||
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
# Test for BUG#16559 (ROLLBACK should always have a zero error code in
|
||||
# binlog). Has to be here and not earlier, as the SELECTs influence
|
||||
# XIDs differently between normal and ps-protocol (and SHOW BINLOG
|
||||
# EVENTS above read XIDs).
|
||||
|
||||
connect (con4,localhost,root,,);
|
||||
connection con3;
|
||||
reset master;
|
||||
create table t1 (a int) engine=innodb;
|
||||
create table t2 (a int) engine=myisam;
|
||||
select get_lock("a",10);
|
||||
begin;
|
||||
insert into t1 values(8);
|
||||
insert into t2 select * from t1;
|
||||
disconnect con3;
|
||||
|
||||
connection con4;
|
||||
select get_lock("a",10); # wait for rollback to finish
|
||||
|
||||
# we check that the error code of the "ROLLBACK" event is 0 and not
|
||||
# ER_SERVER_SHUTDOWN (i.e. disconnection just rolls back transaction
|
||||
# and does not make slave to stop)
|
||||
--exec $MYSQL_BINLOG --start-position=547 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval select
|
||||
(@a:=load_file("$MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output"))
|
||||
is not null;
|
||||
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
||||
eval select
|
||||
@a like "%#%error_code=0%ROLLBACK;%ROLLBACK /* added by mysqlbinlog */;%",
|
||||
@a not like "%#%error_code=%error_code=%";
|
||||
drop table t1, t2;
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
# This test should work in embedded server after we fix mysqltest
|
||||
-- source include/not_embedded.inc
|
||||
#
|
||||
# Testing the MySQL command line client(mysql)
|
||||
#
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
# This test should work in embedded server after we fix mysqltest
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
# We run with different binaries for normal and --embedded-server
|
||||
#
|
||||
# If this test fails with "command "$MYSQL_CLIENT_TEST" failed",
|
||||
|
@ -6,7 +9,6 @@
|
|||
# var/log/mysql_client_test.trace
|
||||
|
||||
--disable_result_log
|
||||
--exec echo $MYSQL_CLIENT_TEST --getopt-ll-test=25600M
|
||||
--exec $MYSQL_CLIENT_TEST --getopt-ll-test=25600M
|
||||
|
||||
# End of 4.1 tests
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
# Embedded server doesn't support external clients
|
||||
--source include/not_embedded.inc
|
||||
# Windows does not have SOCKET, but will try to create a PIPE as well as MEMORY
|
||||
--source include/not_windows.inc
|
||||
|
||||
# test for Bug #4998 "--protocol doesn't reject bad values"
|
||||
|
||||
|
|
|
@ -830,11 +830,11 @@ DROP TABLE t1, t2;
|
|||
# Bugs #9136, #12917: problems with --defaults-extra-file option
|
||||
#
|
||||
|
||||
--exec echo "[mysqltest1]" > $MYSQLTEST_VARDIR/tmp/tmp.cnf
|
||||
--exec echo "port=1234" >> $MYSQLTEST_VARDIR/tmp/tmp.cnf
|
||||
--system echo "[mysqltest1]" > $MYSQLTEST_VARDIR/tmp/tmp.cnf
|
||||
--system echo "port=1234" >> $MYSQLTEST_VARDIR/tmp/tmp.cnf
|
||||
--exec $MYSQL_MY_PRINT_DEFAULTS -c $MYSQLTEST_VARDIR/tmp/tmp.cnf mysqltest1
|
||||
--exec $MYSQL_MY_PRINT_DEFAULTS -e $MYSQLTEST_VARDIR/tmp/tmp.cnf mysqltest1 mysqltest1
|
||||
--exec rm $MYSQLTEST_VARDIR/tmp/tmp.cnf
|
||||
--system rm $MYSQLTEST_VARDIR/tmp/tmp.cnf
|
||||
|
||||
#
|
||||
# Test of fix to BUG 12597
|
||||
|
@ -950,15 +950,16 @@ set time_zone=default;
|
|||
#
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS `t1 test`;
|
||||
DROP TABLE IF EXISTS `t2 test`;
|
||||
--enable_warnings
|
||||
|
||||
CREATE TABLE `t1 test` (
|
||||
`a1` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
|
||||
DROP TABLE IF EXISTS `t2 test`;
|
||||
CREATE TABLE `t2 test` (
|
||||
`a2` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
--enable_warnings
|
||||
|
||||
DELIMITER //;
|
||||
CREATE TRIGGER `test trig` BEFORE INSERT ON `t1 test` FOR EACH ROW BEGIN
|
||||
|
@ -973,11 +974,10 @@ SELECT * FROM `t2 test`;
|
|||
# quoted
|
||||
--exec $MYSQL_DUMP --skip-comments --compatible=ansi --triggers test
|
||||
|
||||
--disable_warnings
|
||||
DROP TRIGGER `test trig`;
|
||||
DROP TABLE `t1 test`;
|
||||
DROP TABLE `t2 test`;
|
||||
--enable_warnings
|
||||
|
||||
#
|
||||
# BUG# 12838 mysqldump -x with views exits with error
|
||||
#
|
||||
|
@ -1036,3 +1036,80 @@ insert into t1 values ('','');
|
|||
drop table t1;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
#
|
||||
# Bug 14871 Invalid view dump output
|
||||
#
|
||||
|
||||
create table t1 (a int);
|
||||
insert into t1 values (289), (298), (234), (456), (789);
|
||||
create definer = CURRENT_USER view v1 as select * from t1;
|
||||
create SQL SECURITY INVOKER view v2 as select * from t1;
|
||||
create view v3 as select * from t1 with local check option;
|
||||
create algorithm=merge view v4 as select * from t1 with cascaded check option;
|
||||
create algorithm =temptable view v5 as select * from t1;
|
||||
|
||||
# dump tables and views
|
||||
--exec $MYSQL_DUMP test > $MYSQLTEST_VARDIR/tmp/bug14871.sql
|
||||
|
||||
# drop the db, tables and views
|
||||
drop table t1;
|
||||
drop view v1, v2, v3, v4, v5;
|
||||
|
||||
# Reload dump
|
||||
--exec $MYSQL test < $MYSQLTEST_VARDIR/tmp/bug14871.sql
|
||||
|
||||
# check that all tables and views could be created
|
||||
show tables;
|
||||
select * from v3 order by a;
|
||||
|
||||
drop table t1;
|
||||
drop view v1, v2, v3, v4, v5;
|
||||
|
||||
#
|
||||
# Bug #16878 dump of trigger
|
||||
#
|
||||
|
||||
create table t1 (a int, created datetime);
|
||||
create table t2 (b int, created datetime);
|
||||
create trigger tr1 before insert on t1 for each row set
|
||||
new.created=now();
|
||||
delimiter |;
|
||||
create trigger tr2 after insert on t1
|
||||
for each row
|
||||
begin
|
||||
insert into t2 set b=new.a and created=new.created;
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
# dump table and trigger
|
||||
--exec $MYSQL_DUMP test > $MYSQLTEST_VARDIR/tmp/bug16878.sql
|
||||
drop trigger tr1;
|
||||
drop trigger tr2;
|
||||
drop table t1, t2;
|
||||
|
||||
# reload dump
|
||||
--exec $MYSQL test < $MYSQLTEST_VARDIR/tmp/bug16878.sql
|
||||
--replace_column 6 #
|
||||
show triggers;
|
||||
drop trigger tr1;
|
||||
drop trigger tr2;
|
||||
drop table t1, t2;
|
||||
|
||||
|
||||
#
|
||||
# Bug#14857 Reading dump files with single statement stored routines fails.
|
||||
# fixed by patch for bug#16878
|
||||
#
|
||||
#
|
||||
DELIMITER |;
|
||||
/*!50003 CREATE FUNCTION `f`() RETURNS bigint(20)
|
||||
return 42 */|
|
||||
/*!50003 CREATE PROCEDURE `p`()
|
||||
select 42 */|
|
||||
DELIMITER ;|
|
||||
show create function f;
|
||||
show create procedure p;
|
||||
drop function f;
|
||||
drop procedure p;
|
||||
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
# This test should work in embedded server after mysqltest is fixed
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
# ============================================================================
|
||||
#
|
||||
|
@ -429,7 +431,7 @@ echo ;
|
|||
# Illegal use of echo
|
||||
|
||||
--error 1
|
||||
--exec echo "echo $;" | $MYSQL_TEST 2>&1
|
||||
--exec echo "echo \$;" | $MYSQL_TEST 2>&1
|
||||
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
|
@ -516,22 +518,22 @@ echo $novar1;
|
|||
--exec echo "let ;" | $MYSQL_TEST 2>&1
|
||||
|
||||
--error 1
|
||||
--exec echo "let $=hi;" | $MYSQL_TEST 2>&1
|
||||
--exec echo "let \$=hi;" | $MYSQL_TEST 2>&1
|
||||
|
||||
--error 1
|
||||
--exec echo "let hi=hi;" | $MYSQL_TEST 2>&1
|
||||
|
||||
--error 1
|
||||
--exec echo "let $1 hi;" | $MYSQL_TEST 2>&1
|
||||
--exec echo "let \$1 hi;" | $MYSQL_TEST 2>&1
|
||||
|
||||
--error 1
|
||||
--exec echo "let $m hi;" | $MYSQL_TEST 2>&1
|
||||
--exec echo "let \$m hi;" | $MYSQL_TEST 2>&1
|
||||
|
||||
--error 1
|
||||
--exec echo "let $hi;" | $MYSQL_TEST 2>&1
|
||||
--exec echo "let \$hi;" | $MYSQL_TEST 2>&1
|
||||
|
||||
--error 1
|
||||
--exec echo "let $ hi;" | $MYSQL_TEST 2>&1
|
||||
--exec echo "let \$ hi;" | $MYSQL_TEST 2>&1
|
||||
|
||||
--error 1
|
||||
--exec echo "let =hi;" | $MYSQL_TEST 2>&1
|
||||
|
@ -665,10 +667,14 @@ real_sleep 1;
|
|||
# Missing parameter
|
||||
--error 1
|
||||
--exec echo "sleep ;" | $MYSQL_TEST 2>&1
|
||||
--error 1
|
||||
--exec echo "real_sleep ;" | $MYSQL_TEST 2>&1
|
||||
|
||||
# Illegal parameter
|
||||
--error 1
|
||||
--exec echo "sleep abc;" | $MYSQL_TEST 2>&1
|
||||
--error 1
|
||||
--exec echo "real_sleep abc;" | $MYSQL_TEST 2>&1
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Test inc
|
||||
|
@ -755,6 +761,30 @@ echo test3stop
|
|||
--delimiter ;
|
||||
echo test4;
|
||||
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Test if
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
let $counter=10;
|
||||
if ($counter)
|
||||
{
|
||||
echo Counter is greater than 0, (counter=10);
|
||||
}
|
||||
if (!$counter)
|
||||
{
|
||||
echo Counter is not 0, (counter=10);
|
||||
}
|
||||
let $counter=0;
|
||||
if ($counter)
|
||||
{
|
||||
echo Counter is greater than 0, (counter=0);
|
||||
}
|
||||
if (!$counter)
|
||||
{
|
||||
echo Counter is not 0, (counter=0);
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Test while, { and }
|
||||
# ----------------------------------------------------------------------------
|
||||
|
@ -768,7 +798,12 @@ while ($i)
|
|||
# One liner
|
||||
#let $i=1;while ($i){echo $i;dec $i;}
|
||||
|
||||
|
||||
let $i=0;
|
||||
while (!$i)
|
||||
{
|
||||
echo Testing while with not;
|
||||
inc $i;
|
||||
}
|
||||
|
||||
# Exceed max nesting level
|
||||
--error 1
|
||||
|
|
|
@ -10,6 +10,7 @@ drop table if exists t1, t2;
|
|||
|
||||
# Turn on and reset query cache on server1
|
||||
connection server1;
|
||||
echo == Connected to server1 ==;
|
||||
set GLOBAL query_cache_type=on;
|
||||
set GLOBAL query_cache_size=1355776;
|
||||
set GLOBAL ndb_cache_check_time=1;
|
||||
|
@ -18,24 +19,24 @@ flush status;
|
|||
|
||||
# Turn on and reset query cache on server2
|
||||
connection server2;
|
||||
echo == Connected to server2 ==;
|
||||
set GLOBAL query_cache_type=on;
|
||||
set GLOBAL query_cache_size=1355776;
|
||||
set GLOBAL ndb_cache_check_time=1;
|
||||
reset query cache;
|
||||
flush status;
|
||||
|
||||
# Sleep so that the query cache check thread has time to start
|
||||
sleep 15;
|
||||
|
||||
|
||||
# Create test tables in NDB and load them into cache
|
||||
# on server1
|
||||
connection server1;
|
||||
echo == Connected to server1 ==;
|
||||
create table t1 (a int) engine=ndbcluster;
|
||||
create table t2 (a int) engine=ndbcluster;
|
||||
insert into t1 value (2);
|
||||
insert into t2 value (3);
|
||||
select * from t1;
|
||||
# Run the check query once to load it into qc on server1
|
||||
select a != 3 from t1;
|
||||
select * from t2;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
|
@ -44,6 +45,7 @@ show status like "Qcache_hits";
|
|||
|
||||
# Connect server2, load table in to cache, then update the table
|
||||
connection server2;
|
||||
echo == Connected to server2 ==;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
|
@ -53,19 +55,30 @@ show status like "Qcache_inserts";
|
|||
show status like "Qcache_hits";
|
||||
update t1 set a=3 where a=2;
|
||||
|
||||
# Sleep so that the query cache check thread has time to run
|
||||
sleep 5;
|
||||
|
||||
# Connect to server1 and check that cache is invalidated
|
||||
# Connect to server1 and check that cache is invalidated
|
||||
# and correct data is returned
|
||||
connection server1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
echo == Connected to server1 ==;
|
||||
|
||||
# Loop and wait for max 10 seconds until query cache thread
|
||||
# has invalidated the cache and the column a in t1 is equal to 3
|
||||
let $retries=20;
|
||||
while (`select a != 3 from t1`)
|
||||
{
|
||||
dec $retries;
|
||||
if (!$retries)
|
||||
{
|
||||
The query_cache thread failed to invalidate query_cache in 10 seconds;
|
||||
}
|
||||
sleep 0.5;
|
||||
}
|
||||
|
||||
# Select from t1 one last time for the result file
|
||||
# Column a should be 3
|
||||
select * from t1;
|
||||
|
||||
# There should now be three queries in the cache
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
|
||||
drop table t1, t2;
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
--exec $NDB_TOOLS_DIR/ndb_config --no-defaults --query=type,nodeid,host 2> /dev/null
|
||||
--exec $NDB_TOOLS_DIR/ndb_config --no-defaults --query=nodeid,host,DataMemory,IndexMemory --type=ndbd 2> /dev/null
|
||||
--exec $NDB_TOOLS_DIR/ndb_config --no-defaults -r \\n -f " " --query=nodeid,host,DataMemory,IndexMemory --type=ndbd 2> /dev/null
|
||||
--exec $NDB_TOOLS_DIR/ndb_config --no-defaults -r \\\n -f " " --query=nodeid,host,DataMemory,IndexMemory --type=ndbd 2> /dev/null
|
||||
--exec $NDB_TOOLS_DIR/ndb_config --no-defaults --query=nodeid --type=ndbd --host=localhost 2> /dev/null
|
||||
--exec $NDB_TOOLS_DIR/ndb_config --no-defaults --query=type,nodeid,host --config-file=$NDB_BACKUP_DIR/config.ini 2> /dev/null
|
||||
|
||||
|
|
|
@ -900,6 +900,27 @@ execute stmt using @like;
|
|||
deallocate prepare stmt;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#13134 "Length of VARCHAR() utf8 column is increasing when table is
|
||||
# recreated with PS/SP"
|
||||
#
|
||||
|
||||
prepare stmt from 'create table t1 (a varchar(10) character set utf8)';
|
||||
execute stmt;
|
||||
--disable_warnings
|
||||
insert into t1 (a) values (repeat('a', 20));
|
||||
--enable_warnings
|
||||
select length(a) from t1;
|
||||
drop table t1;
|
||||
execute stmt;
|
||||
--disable_warnings
|
||||
insert into t1 (a) values (repeat('a', 20));
|
||||
--enable_warnings
|
||||
# Check that the data is truncated to the same length
|
||||
select length(a) from t1;
|
||||
drop table t1;
|
||||
deallocate prepare stmt;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
#
|
||||
|
|
|
@ -819,29 +819,14 @@ select sql_cache * from t1 where s1=1;
|
|||
end;//
|
||||
delimiter ;//
|
||||
call f1();
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
call f1();
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
call f1();
|
||||
select sql_cache * from t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
insert into t1 values (1);
|
||||
select sql_cache * from t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
call f1();
|
||||
call f1();
|
||||
select sql_cache * from t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
flush query cache;
|
||||
reset query cache;
|
||||
flush status;
|
||||
|
|
|
@ -97,4 +97,88 @@ connection root;
|
|||
SELECT * FROM t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# query in QC from normal execution and SP (BUG#6897)
|
||||
# improved to also test BUG#3583 and BUG#12990
|
||||
#
|
||||
flush query cache;
|
||||
reset query cache;
|
||||
flush status;
|
||||
delimiter //;
|
||||
create table t1 (s1 int)//
|
||||
create procedure f1 () begin
|
||||
select sql_cache * from t1;
|
||||
select sql_cache * from t1;
|
||||
select sql_cache * from t1;
|
||||
end;//
|
||||
create procedure f2 () begin
|
||||
select sql_cache * from t1 where s1=1;
|
||||
select sql_cache * from t1;
|
||||
end;//
|
||||
create procedure f3 () begin
|
||||
select sql_cache * from t1;
|
||||
select sql_cache * from t1 where s1=1;
|
||||
end;//
|
||||
create procedure f4 () begin
|
||||
select sql_cache * from t1;
|
||||
select sql_cache * from t1 where s1=1;
|
||||
select sql_cache * from t1;
|
||||
select sql_cache * from t1 where s1=1;
|
||||
select sql_cache * from t1 where s1=1;
|
||||
end;//
|
||||
delimiter ;//
|
||||
call f1();
|
||||
--replace_result 1 3
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
call f1();
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
call f1();
|
||||
select sql_cache * from t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
insert into t1 values (1);
|
||||
select sql_cache * from t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
call f1();
|
||||
call f1();
|
||||
select sql_cache * from t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
flush query cache;
|
||||
reset query cache;
|
||||
flush status;
|
||||
select sql_cache * from t1;
|
||||
select sql_cache * from t1 where s1=1;
|
||||
call f1();
|
||||
call f2();
|
||||
call f3();
|
||||
call f4();
|
||||
call f4();
|
||||
call f3();
|
||||
call f2();
|
||||
select sql_cache * from t1 where s1=1;
|
||||
insert into t1 values (2);
|
||||
call f1();
|
||||
select sql_cache * from t1 where s1=1;
|
||||
select sql_cache * from t1;
|
||||
call f1();
|
||||
call f3();
|
||||
call f3();
|
||||
call f1();
|
||||
|
||||
drop procedure f1;
|
||||
drop procedure f2;
|
||||
drop procedure f3;
|
||||
drop procedure f4;
|
||||
drop table t1;
|
||||
|
||||
|
||||
set GLOBAL query_cache_size=0;
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
# Test of the READ_ONLY global variable:
|
||||
# check that it blocks updates unless they are only on temporary tables.
|
||||
|
||||
# should work with embedded server after mysqltest is fixed
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1,t2,t3;
|
||||
--enable_warnings
|
||||
|
|
|
@ -12,7 +12,7 @@ show slave status;
|
|||
|
||||
change master to master_host='127.0.0.1';
|
||||
# The following needs to be cleaned up when change master is fixed
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT $MYSQL_TCP_PORT MASTER_PORT
|
||||
--replace_result $MYSQL_TCP_PORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 23 # 33 #
|
||||
show slave status;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
|
|
|
@ -1 +1 @@
|
|||
--log_bin_trust_routine_creators=0 --slave-skip-errors=1062
|
||||
--log_bin_trust_routine_creators=0
|
||||
|
|
|
@ -294,21 +294,19 @@ alter table t2 add unique (a);
|
|||
drop function fn1;
|
||||
|
||||
delimiter |;
|
||||
create function fn1()
|
||||
create function fn1(x int)
|
||||
returns int
|
||||
begin
|
||||
insert into t2 values(20),(20);
|
||||
insert into t2 values(x),(x);
|
||||
return 10;
|
||||
end|
|
||||
|
||||
delimiter ;|
|
||||
|
||||
# Because of BUG#14769 the following statement requires that we start
|
||||
# slave with --slave-skip-errors=1062. When that bug is fixed, that
|
||||
# option can be removed.
|
||||
do fn1(100);
|
||||
|
||||
--error 1062
|
||||
select fn1();
|
||||
select fn1(20);
|
||||
|
||||
select * from t2;
|
||||
sync_slave_with_master;
|
||||
|
@ -440,4 +438,4 @@ DROP PROCEDURE p1;
|
|||
# cleanup
|
||||
connection master;
|
||||
drop table t1;
|
||||
reset master;
|
||||
sync_slave_with_master;
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
# This tests not performed with embedded server
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1,v1;
|
||||
drop view if exists t1,v1;
|
||||
|
@ -27,3 +30,6 @@ create table t1 (a int);
|
|||
create definer='user'@'host' sql security definer view v1 as select * from t1;
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
|
||||
# BUG#17595: DROP FUNCTION IF EXISTS f1 crashes server
|
||||
drop function if exists f1;
|
||||
|
|
|
@ -46,10 +46,13 @@ flush table mysql.proc;
|
|||
|
||||
# Thrashing the .frm file
|
||||
--system echo 'saljdlfa' > $MYSQLTEST_VARDIR/master-data/mysql/proc.frm
|
||||
--replace_result $MYSQLTEST_VARDIR . master-data// ''
|
||||
--error ER_NOT_FORM_FILE
|
||||
call bug14233();
|
||||
--replace_result $MYSQLTEST_VARDIR . master-data// ''
|
||||
--error ER_NOT_FORM_FILE
|
||||
create view v1 as select bug14233_f();
|
||||
--replace_result $MYSQLTEST_VARDIR . master-data// ''
|
||||
--error ER_NOT_FORM_FILE
|
||||
insert into t1 values (0);
|
||||
|
||||
|
|
|
@ -647,28 +647,6 @@ create table t5 (x int)|
|
|||
call bug3294()|
|
||||
drop procedure bug3294|
|
||||
|
||||
#
|
||||
# BUG#6807: Stored procedure crash if CREATE PROCEDURE ... KILL QUERY
|
||||
#
|
||||
--disable_warnings
|
||||
drop procedure if exists bug6807|
|
||||
--enable_warnings
|
||||
create procedure bug6807()
|
||||
begin
|
||||
declare id int;
|
||||
|
||||
set id = connection_id();
|
||||
kill query id;
|
||||
select 'Not reached';
|
||||
end|
|
||||
|
||||
--error 1317
|
||||
call bug6807()|
|
||||
--error 1317
|
||||
call bug6807()|
|
||||
|
||||
drop procedure bug6807|
|
||||
|
||||
#
|
||||
# BUG#876: Stored Procedures: Invalid SQLSTATE is allowed in
|
||||
# a DECLARE ? HANDLER FOR stmt.
|
||||
|
@ -1703,6 +1681,17 @@ call bug15091();
|
|||
drop procedure bug15091;
|
||||
|
||||
|
||||
#
|
||||
# BUG#16896: Stored function: unused AGGREGATE-clause in CREATE FUNCTION
|
||||
#
|
||||
--disable_warnings
|
||||
drop function if exists bug16896;
|
||||
--enable_warnings
|
||||
|
||||
--error ER_SP_NO_AGGREGATE
|
||||
create aggregate function bug16896() returns int return 1;
|
||||
|
||||
|
||||
#
|
||||
# BUG#NNNN: New bug synopsis
|
||||
#
|
||||
|
@ -1710,3 +1699,4 @@ drop procedure bug15091;
|
|||
#drop procedure if exists bugNNNN|
|
||||
#--enable_warnings
|
||||
#create procedure bugNNNN...
|
||||
|
||||
|
|
|
@ -525,4 +525,26 @@ disconnect user_bug14533;
|
|||
drop user user_bug14533@localhost;
|
||||
drop database db_bug14533;
|
||||
|
||||
|
||||
#
|
||||
# BUG#7787: Stored procedures: improper warning for "grant execute" statement
|
||||
#
|
||||
|
||||
# Prepare.
|
||||
|
||||
CREATE DATABASE db_bug7787;
|
||||
use db_bug7787;
|
||||
|
||||
# Test.
|
||||
|
||||
CREATE PROCEDURE p1()
|
||||
SHOW INNODB STATUS;
|
||||
|
||||
GRANT EXECUTE ON PROCEDURE p1 TO user_bug7787@localhost;
|
||||
|
||||
# Cleanup.
|
||||
|
||||
DROP DATABASE db_bug7787;
|
||||
use test;
|
||||
|
||||
# End of 5.0 bugs.
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
# This test should work in embedded server after mysqltest is fixed
|
||||
-- source include/not_embedded.inc
|
||||
#
|
||||
# Testing stored procedures with multiple connections,
|
||||
# except security/privilege tests, they go to sp-security.test
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue