Commit 015ab71a authored by pem@mysql.com's avatar pem@mysql.com

Merge mysql.com:/extern/mysql/5.0/bug17476/mysql-5.0

into  mysql.com:/extern/mysql/5.1/generic/mysql-5.1-new
parents c7837821 5147bb8e
# 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
<?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>
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 the currently existing test cases, simply execute ./mysql-test-run in
this directory. It will fire up the newly built mysqld and test it. 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 Note that you do not have to have to do "make install", and you could
option to mysql-test-run. Please note that in this mode the test suite actually have a co-existing MySQL installation. The tests will not
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
conflict with it. conflict with it.
All tests must pass. If one or more of them fail on your system, please 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 xemacs t/test_case_name.test
in the file, put a set of SQL commands that will create some tables, In the file, put a set of SQL statements that create some tables,
load test data, run some queries to manipulate it. 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). conflict too much with existing tables).
Your test should begin by dropping the tables you are going to create and 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 end by dropping them again. This ensures that you can run the test over
over and over again. and over again.
If you are using mysqltest commands (like result file names) in your 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 mysql-test-run --record test_case_name
...@@ -47,8 +53,8 @@ You can create your own test cases. To create a test case: ...@@ -47,8 +53,8 @@ You can create your own test cases. To create a test case:
mysqltest --record < t/test_case_name.test mysqltest --record < t/test_case_name.test
If you only have a simple test cases consistent of SQL commands and comments If you only have a simple test cases consisting of SQL statements and
you can create the test case one of the following ways: comments, you can create the test case in one of the following ways:
mysql-test-run --record test_case_name mysql-test-run --record test_case_name
...@@ -57,7 +63,7 @@ You can create your own test cases. To create a test case: ...@@ -57,7 +63,7 @@ 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 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 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 edit the test result to the correct results so that we can verify
that the bug is corrected in future releases. that the bug is corrected in future releases.
......
To be able to see the level of coverage with the current test suite, To be able to see the level of coverage with the current test suite,
do the following: do the following:
- make sure gcov is installed - Make sure gcov is installed
- compile with BUILD/compile-pentium-gcov ( if your machine is not pentium, hack - Compile the MySQL distribution with BUILD/compile-pentium-gcov (if your
this script, or just live with the pentium-specific stuff) machine does not have a pentium CPU, hack this script, or just live with
- ./mysql-test-run -gcov the pentium-specific stuff)
- to see the level of coverage for a given source file: - 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 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 - To see which lines are not yet covered, look at source_file_name.gcov in
lines, and write one! the source tree. Then think hard about a test case that will cover those
lines, and write one!
...@@ -198,6 +198,7 @@ our $opt_big_test= 0; # Send --big-test to mysqltest ...@@ -198,6 +198,7 @@ our $opt_big_test= 0; # Send --big-test to mysqltest
our @opt_extra_mysqld_opt; our @opt_extra_mysqld_opt;
our $opt_comment;
our $opt_compress; our $opt_compress;
our $opt_ssl; our $opt_ssl;
our $opt_skip_ssl; our $opt_skip_ssl;
...@@ -669,6 +670,14 @@ sub command_line_setup () { ...@@ -669,6 +670,14 @@ sub command_line_setup () {
print '#' x 78, "\n\n"; print '#' x 78, "\n\n";
} }
if ( $opt_comment )
{
print "\n";
print '#' x 78, "\n";
print "# $opt_comment\n";
print '#' x 78, "\n\n";
}
foreach my $arg ( @ARGV ) foreach my $arg ( @ARGV )
{ {
if ( $arg =~ /^--skip-/ ) if ( $arg =~ /^--skip-/ )
...@@ -3256,6 +3265,7 @@ Options for coverage, profiling etc ...@@ -3256,6 +3265,7 @@ Options for coverage, profiling etc
Misc options Misc options
comment=STR Write STR to the output
verbose Verbose output from this script verbose Verbose output from this script
script-debug Debug this script itself script-debug Debug this script itself
timer Show test case execution time timer Show test case execution time
......
...@@ -603,7 +603,14 @@ while test $# -gt 0; do ...@@ -603,7 +603,14 @@ while test $# -gt 0; do
FAST_START=1 FAST_START=1
;; ;;
--use-old-data) --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 ;; -- ) shift; break ;;
--* ) $ECHO "Unrecognized option: $1"; exit 1 ;; --* ) $ECHO "Unrecognized option: $1"; exit 1 ;;
......
...@@ -141,3 +141,22 @@ t1 CREATE TABLE `t1` ( ...@@ -141,3 +141,22 @@ t1 CREATE TABLE `t1` (
`a` binary(1) default NULL `a` binary(1) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1; 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;
...@@ -348,7 +348,7 @@ INSERT INTO mysql.db (host, db, user, select_priv) VALUES ...@@ -348,7 +348,7 @@ INSERT INTO mysql.db (host, db, user, select_priv) VALUES
('%','TESTDB','mysqltest_1','Y'); ('%','TESTDB','mysqltest_1','Y');
FLUSH PRIVILEGES; FLUSH PRIVILEGES;
create database TEStdb; create database TEStdb;
ERROR 42000: Access denied for user 'mysqltest_1'@'%' to database 'TEStdb' Got one of the listed errors
delete from mysql.user; delete from mysql.user;
delete from mysql.db where host='%' and user='mysqltest_1' and db='TESTDB'; delete from mysql.db where host='%' and user='mysqltest_1' and db='TESTDB';
insert into mysql.user select * from t1; insert into mysql.user select * from t1;
......
...@@ -677,6 +677,11 @@ select t1.b from v1a; ...@@ -677,6 +677,11 @@ select t1.b from v1a;
ERROR 42S22: Unknown column 't1.b' in 'field list' ERROR 42S22: Unknown column 't1.b' in 'field list'
select * from v1a join v1b on t1.b = t2.b; select * from v1a join v1b on t1.b = t2.b;
ERROR 42S22: Unknown column 't1.b' in 'on clause' 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 t1;
drop table t2; drop table t2;
drop table t3; drop table t3;
......
...@@ -12,3 +12,6 @@ create table t1 (a int); ...@@ -12,3 +12,6 @@ create table t1 (a int);
create definer='user'@'host' sql security definer view v1 as select * from t1; create definer='user'@'host' sql security definer view v1 as select * from t1;
drop view v1; drop view v1;
drop table t1; drop table t1;
drop function if exists f1;
Warnings:
Note 1305 FUNCTION f1 does not exist
...@@ -4778,4 +4778,23 @@ Handler ...@@ -4778,4 +4778,23 @@ Handler
Inner Inner
drop procedure bug15011| drop procedure bug15011|
drop table t3| 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; drop table t1,t2;
...@@ -89,3 +89,15 @@ show create table t1; ...@@ -89,3 +89,15 @@ show create table t1;
drop table t1; drop table t1;
# End of 4.1 tests # 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;
...@@ -449,7 +449,8 @@ connect (con1,localhost,mysqltest_1,password,TESTDB); ...@@ -449,7 +449,8 @@ connect (con1,localhost,mysqltest_1,password,TESTDB);
# The user mysqltest_1 should only be allowed access to # The user mysqltest_1 should only be allowed access to
# database TESTDB, not TEStdb # database TESTDB, not TEStdb
--error 1044 # On system with "lowercase names" we get error "1007: Can't create db..."
--error 1044, 1007
create database TEStdb; create database TEStdb;
# Clean-up # Clean-up
......
...@@ -523,6 +523,12 @@ select t1.b from v1a; ...@@ -523,6 +523,12 @@ select t1.b from v1a;
-- error 1054 -- error 1054
select * from v1a join v1b on t1.b = t2.b; 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 t1;
drop table t2; drop table t2;
drop table t3; drop table t3;
......
...@@ -30,3 +30,6 @@ create table t1 (a int); ...@@ -30,3 +30,6 @@ create table t1 (a int);
create definer='user'@'host' sql security definer view v1 as select * from t1; create definer='user'@'host' sql security definer view v1 as select * from t1;
drop view v1; drop view v1;
drop table t1; drop table t1;
# BUG#17595: DROP FUNCTION IF EXISTS f1 crashes server
drop function if exists f1;
...@@ -5620,6 +5620,31 @@ drop procedure bug15011| ...@@ -5620,6 +5620,31 @@ drop procedure bug15011|
drop table t3| drop table t3|
#
# BUG#17476: Stored procedure not returning data when it is called first
# time per connection
#
--disable_warnings
drop procedure if exists bug17476|
--enable_warnings
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')|
call bug17476('%Y-%m')|
drop table t3|
drop procedure bug17476|
# #
# BUG#NNNN: New bug synopsis # BUG#NNNN: New bug synopsis
# #
......
...@@ -378,6 +378,16 @@ static void do_cut_string_complex(Copy_field *copy) ...@@ -378,6 +378,16 @@ static void do_cut_string_complex(Copy_field *copy)
static void do_expand_binary(Copy_field *copy)
{
CHARSET_INFO *cs= copy->from_field->charset();
memcpy(copy->to_ptr,copy->from_ptr,copy->from_length);
cs->cset->fill(cs, copy->to_ptr+copy->from_length,
copy->to_length-copy->from_length, '\0');
}
static void do_expand_string(Copy_field *copy) static void do_expand_string(Copy_field *copy)
{ {
CHARSET_INFO *cs= copy->from_field->charset(); CHARSET_INFO *cs= copy->from_field->charset();
...@@ -582,8 +592,14 @@ void (*Copy_field::get_copy_func(Field *to,Field *from))(Copy_field*) ...@@ -582,8 +592,14 @@ void (*Copy_field::get_copy_func(Field *to,Field *from))(Copy_field*)
return (from->charset()->mbmaxlen == 1 ? return (from->charset()->mbmaxlen == 1 ?
do_cut_string : do_cut_string_complex); do_cut_string : do_cut_string_complex);
else if (to_length > from_length) else if (to_length > from_length)
{
if ((to->flags & BINARY_FLAG) != 0)
return do_expand_binary;
else
return do_expand_string; return do_expand_string;
} }
}
else if (to->real_type() != from->real_type() || else if (to->real_type() != from->real_type() ||
to_length != from_length || to_length != from_length ||
!compatible_db_low_byte_first) !compatible_db_low_byte_first)
......
...@@ -1629,7 +1629,6 @@ class Item_string :public Item ...@@ -1629,7 +1629,6 @@ class Item_string :public Item
str_value.length(), collation.collation); str_value.length(), collation.collation);
} }
Item *safe_charset_converter(CHARSET_INFO *tocs); Item *safe_charset_converter(CHARSET_INFO *tocs);
String *const_string() { return &str_value; }
inline void append(char *str, uint length) { str_value.append(str, length); } inline void append(char *str, uint length) { str_value.append(str, length); }
void print(String *str); void print(String *str);
// to prevent drop fixed flag (no need parent cleanup call) // to prevent drop fixed flag (no need parent cleanup call)
......
...@@ -1656,9 +1656,15 @@ longlong Item_func_sec_to_time::val_int() ...@@ -1656,9 +1656,15 @@ longlong Item_func_sec_to_time::val_int()
void Item_func_date_format::fix_length_and_dec() void Item_func_date_format::fix_length_and_dec()
{ {
/*
Must use this_item() in case it's a local SP variable
(for ->max_length and ->str_value)
*/
Item *arg1= args[1]->this_item();
decimals=0; decimals=0;
collation.set(&my_charset_bin); collation.set(&my_charset_bin);
if (args[1]->type() == STRING_ITEM) if (arg1->type() == STRING_ITEM)
{ // Optimize the normal case { // Optimize the normal case
fixed_length=1; fixed_length=1;
...@@ -1666,13 +1672,13 @@ void Item_func_date_format::fix_length_and_dec() ...@@ -1666,13 +1672,13 @@ void Item_func_date_format::fix_length_and_dec()
The result is a binary string (no reason to use collation->mbmaxlen The result is a binary string (no reason to use collation->mbmaxlen
This is becasue make_date_time() only returns binary strings This is becasue make_date_time() only returns binary strings
*/ */
max_length= format_length(((Item_string*) args[1])->const_string()); max_length= format_length(&arg1->str_value);
} }
else else
{ {
fixed_length=0; fixed_length=0;
/* The result is a binary string (no reason to use collation->mbmaxlen */ /* The result is a binary string (no reason to use collation->mbmaxlen */
max_length=min(args[1]->max_length,MAX_BLOB_WIDTH) * 10; max_length=min(arg1->max_length, MAX_BLOB_WIDTH) * 10;
set_if_smaller(max_length,MAX_BLOB_WIDTH); set_if_smaller(max_length,MAX_BLOB_WIDTH);
} }
maybe_null=1; // If wrong date maybe_null=1; // If wrong date
...@@ -1682,6 +1688,7 @@ void Item_func_date_format::fix_length_and_dec() ...@@ -1682,6 +1688,7 @@ void Item_func_date_format::fix_length_and_dec()
bool Item_func_date_format::eq(const Item *item, bool binary_cmp) const bool Item_func_date_format::eq(const Item *item, bool binary_cmp) const
{ {
Item_func_date_format *item_func; Item_func_date_format *item_func;
if (item->type() != FUNC_ITEM) if (item->type() != FUNC_ITEM)
return 0; return 0;
if (func_name() != ((Item_func*) item)->func_name()) if (func_name() != ((Item_func*) item)->func_name())
......
...@@ -233,7 +233,7 @@ static int net_data_is_ready(my_socket sd) ...@@ -233,7 +233,7 @@ static int net_data_is_ready(my_socket sd)
/* Windows uses an _array_ of 64 fd's as default, so it's safe */ /* Windows uses an _array_ of 64 fd's as default, so it's safe */
if (sd >= FD_SETSIZE) if (sd >= FD_SETSIZE)
return -1; return -1;
#define NET_DATA_IS_READY_CAN_RETURN_MINUS_ONE #define NET_DATA_IS_READY_CAN_RETURN_MINUS_ONE
#endif #endif
FD_ZERO(&sfds); FD_ZERO(&sfds);
......
...@@ -284,6 +284,10 @@ static void del_udf(udf_func *udf) ...@@ -284,6 +284,10 @@ static void del_udf(udf_func *udf)
void free_udf(udf_func *udf) void free_udf(udf_func *udf)
{ {
DBUG_ENTER("free_udf"); DBUG_ENTER("free_udf");
if (!initialized)
DBUG_VOID_RETURN;
rw_wrlock(&THR_LOCK_udf); rw_wrlock(&THR_LOCK_udf);
if (!--udf->usage_count) if (!--udf->usage_count)
{ {
...@@ -308,6 +312,9 @@ udf_func *find_udf(const char *name,uint length,bool mark_used) ...@@ -308,6 +312,9 @@ udf_func *find_udf(const char *name,uint length,bool mark_used)
udf_func *udf=0; udf_func *udf=0;
DBUG_ENTER("find_udf"); DBUG_ENTER("find_udf");
if (!initialized)
DBUG_RETURN(NULL);
/* TODO: This should be changed to reader locks someday! */ /* TODO: This should be changed to reader locks someday! */
if (mark_used) if (mark_used)
rw_wrlock(&THR_LOCK_udf); /* Called during fix_fields */ rw_wrlock(&THR_LOCK_udf); /* Called during fix_fields */
......
...@@ -3336,8 +3336,15 @@ const char *Natural_join_column::db_name() ...@@ -3336,8 +3336,15 @@ const char *Natural_join_column::db_name()
if (view_field) if (view_field)
return table_ref->view_db.str; return table_ref->view_db.str;
/*
Test that TABLE_LIST::db is the same as st_table_share::db to
ensure consistency. An exception are I_S schema tables, which
are inconsistent in this respect.
*/
DBUG_ASSERT(!strcmp(table_ref->db, DBUG_ASSERT(!strcmp(table_ref->db,
table_ref->table->s->db.str)); table_ref->table->s->db.str) ||
(table_ref->schema_table &&
table_ref->table->s->db.str[0] == 0));
return table_ref->db; return table_ref->db;
} }
...@@ -3539,7 +3546,15 @@ const char *Field_iterator_table_ref::db_name() ...@@ -3539,7 +3546,15 @@ const char *Field_iterator_table_ref::db_name()
else if (table_ref->is_natural_join) else if (table_ref->is_natural_join)
return natural_join_it.column_ref()->db_name(); return natural_join_it.column_ref()->db_name();
DBUG_ASSERT(!strcmp(table_ref->db, table_ref->table->s->db.str)); /*
Test that TABLE_LIST::db is the same as st_table_share::db to
ensure consistency. An exception are I_S schema tables, which
are inconsistent in this respect.
*/
DBUG_ASSERT(!strcmp(table_ref->db, table_ref->table->s->db.str) ||
(table_ref->schema_table &&
table_ref->table->s->db.str[0] == 0));
return table_ref->db; return table_ref->db;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment