mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Merge sinisa@bk-internal.mysql.com:/home/bk/mysql-4.1
into sinisa.nasamreza.org:/mnt/work/mysql-4.1 sql/item.cc: Auto merged
This commit is contained in:
@ -203,7 +203,6 @@ extern int (*fatal_error_handler_hook)(uint my_err, const char *str,
|
|||||||
|
|
||||||
/* charsets */
|
/* charsets */
|
||||||
extern CHARSET_INFO *default_charset_info;
|
extern CHARSET_INFO *default_charset_info;
|
||||||
extern CHARSET_INFO *system_charset_info;
|
|
||||||
extern CHARSET_INFO *all_charsets[256];
|
extern CHARSET_INFO *all_charsets[256];
|
||||||
extern CHARSET_INFO compiled_charsets[];
|
extern CHARSET_INFO compiled_charsets[];
|
||||||
|
|
||||||
|
@ -294,10 +294,10 @@ ha_print_info(
|
|||||||
{
|
{
|
||||||
hash_cell_t* cell;
|
hash_cell_t* cell;
|
||||||
/* ha_node_t* node; */
|
/* ha_node_t* node; */
|
||||||
ulint nodes = 0;
|
/* ulint nodes = 0; */
|
||||||
ulint cells = 0;
|
ulint cells = 0;
|
||||||
ulint len = 0;
|
/* ulint len = 0; */
|
||||||
ulint max_len = 0;
|
/* ulint max_len = 0; */
|
||||||
ulint n_bufs;
|
ulint n_bufs;
|
||||||
ulint i;
|
ulint i;
|
||||||
|
|
||||||
|
@ -262,7 +262,7 @@ show create table t1;
|
|||||||
Table Create Table
|
Table Create Table
|
||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`a` int(11) NOT NULL default '0'
|
`a` int(11) NOT NULL default '0'
|
||||||
) TYPE=HEAP
|
) TYPE=HEAP CHARSET=latin1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
SET SESSION table_type="gemini";
|
SET SESSION table_type="gemini";
|
||||||
SELECT @@table_type;
|
SELECT @@table_type;
|
||||||
@ -273,6 +273,6 @@ show create table t1;
|
|||||||
Table Create Table
|
Table Create Table
|
||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`a` int(11) NOT NULL default '0'
|
`a` int(11) NOT NULL default '0'
|
||||||
) TYPE=MyISAM
|
) TYPE=MyISAM CHARSET=latin1
|
||||||
SET SESSION table_type=default;
|
SET SESSION table_type=default;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
@ -140,13 +140,13 @@ id parent_id level
|
|||||||
1015 102 2
|
1015 102 2
|
||||||
explain select level from t1 where level=1;
|
explain select level from t1 where level=1;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 ref level level 1 const 12 Using where; Using index
|
1 SIMPLE t1 ref level level 1 const # Using where; Using index
|
||||||
explain select level,id from t1 where level=1;
|
explain select level,id from t1 where level=1;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 ref level level 1 const 12 Using where; Using index
|
1 SIMPLE t1 ref level level 1 const # Using where; Using index
|
||||||
explain select level,id,parent_id from t1 where level=1;
|
explain select level,id,parent_id from t1 where level=1;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 ref level level 1 const 12 Using where
|
1 SIMPLE t1 ref level level 1 const # Using where
|
||||||
select level,id from t1 where level=1;
|
select level,id from t1 where level=1;
|
||||||
level id
|
level id
|
||||||
1 1002
|
1 1002
|
||||||
@ -168,9 +168,9 @@ Table Op Msg_type Msg_text
|
|||||||
test.t1 optimize error The handler for the table doesn't support optimize
|
test.t1 optimize error The handler for the table doesn't support optimize
|
||||||
show keys from t1;
|
show keys from t1;
|
||||||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
||||||
t1 0 PRIMARY 1 id A 87 NULL NULL BTREE
|
t1 0 PRIMARY 1 id A # NULL NULL BTREE
|
||||||
t1 1 parent_id 1 parent_id A 43 NULL NULL BTREE
|
t1 1 parent_id 1 parent_id A # NULL NULL BTREE
|
||||||
t1 1 level 1 level A 6 NULL NULL BTREE
|
t1 1 level 1 level A # NULL NULL BTREE
|
||||||
drop table t1;
|
drop table t1;
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
gesuchnr int(11) DEFAULT '0' NOT NULL,
|
gesuchnr int(11) DEFAULT '0' NOT NULL,
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
slave stop;
|
stop slave;
|
||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
reset master;
|
reset master;
|
||||||
reset slave;
|
reset slave;
|
||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
slave start;
|
start slave;
|
||||||
stop slave;
|
stop slave;
|
||||||
create table t1 (a int);
|
create table t1 (a int);
|
||||||
reset slave;
|
reset slave;
|
||||||
|
@ -22,6 +22,8 @@ drop table t1;
|
|||||||
|
|
||||||
#
|
#
|
||||||
# A bit bigger test
|
# A bit bigger test
|
||||||
|
# The 'replace_result' statements are needed because the cardinality calculated
|
||||||
|
# by innodb is not always the same between runs
|
||||||
#
|
#
|
||||||
|
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
@ -43,12 +45,16 @@ update ignore t1 set id=id+1; # This will change all rows
|
|||||||
select * from t1;
|
select * from t1;
|
||||||
update ignore t1 set id=1023 where id=1010;
|
update ignore t1 set id=1023 where id=1010;
|
||||||
select * from t1 where parent_id=102;
|
select * from t1 where parent_id=102;
|
||||||
|
--replace_result 12 # 6 #
|
||||||
explain select level from t1 where level=1;
|
explain select level from t1 where level=1;
|
||||||
|
--replace_result 12 # 6 #
|
||||||
explain select level,id from t1 where level=1;
|
explain select level,id from t1 where level=1;
|
||||||
|
--replace_result 12 # 6 # 5 #
|
||||||
explain select level,id,parent_id from t1 where level=1;
|
explain select level,id,parent_id from t1 where level=1;
|
||||||
select level,id from t1 where level=1;
|
select level,id from t1 where level=1;
|
||||||
select level,id,parent_id from t1 where level=1;
|
select level,id,parent_id from t1 where level=1;
|
||||||
optimize table t1;
|
optimize table t1;
|
||||||
|
--replace_result 87 # 50 # 48 # 43 # 25 # 24 # 6 # 3 #
|
||||||
show keys from t1;
|
show keys from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
@ -58,10 +58,9 @@ EXTRA_SCRIPTS = make_binary_distribution.sh \
|
|||||||
|
|
||||||
EXTRA_DIST = $(EXTRA_SCRIPTS) \
|
EXTRA_DIST = $(EXTRA_SCRIPTS) \
|
||||||
mysqlaccess.conf \
|
mysqlaccess.conf \
|
||||||
mysqlbug \
|
mysqlbug
|
||||||
fill_help_tables.sql
|
|
||||||
|
|
||||||
pkgdata_DATA = make_binary_distribution
|
pkgdata_DATA = fill_help_tables.sql
|
||||||
|
|
||||||
# mysqlbug should be distributed built so that people can report build
|
# mysqlbug should be distributed built so that people can report build
|
||||||
# failures with it.
|
# failures with it.
|
||||||
@ -103,6 +102,7 @@ SUFFIXES = .sh
|
|||||||
-e 's!@''libexecdir''@!$(libexecdir)!g' \
|
-e 's!@''libexecdir''@!$(libexecdir)!g' \
|
||||||
-e 's!@''pkglibdir''@!$(pkglibdir)!g' \
|
-e 's!@''pkglibdir''@!$(pkglibdir)!g' \
|
||||||
-e 's!@''pkgincludedir''@!$(pkgincludedir)!g' \
|
-e 's!@''pkgincludedir''@!$(pkgincludedir)!g' \
|
||||||
|
-e 's!@''pkgdatadir''@!$(pkgdatadir)!g' \
|
||||||
-e 's!@''CC''@!@CC@!'\
|
-e 's!@''CC''@!@CC@!'\
|
||||||
-e 's!@''CXX''@!@CXX@!'\
|
-e 's!@''CXX''@!@CXX@!'\
|
||||||
-e 's!@''GXX''@!@GXX@!'\
|
-e 's!@''GXX''@!@GXX@!'\
|
||||||
@ -137,7 +137,12 @@ SUFFIXES = .sh
|
|||||||
# Don't update the files from bitkeeper
|
# Don't update the files from bitkeeper
|
||||||
%::SCCS/s.%
|
%::SCCS/s.%
|
||||||
|
|
||||||
all: fill_help_tables.sql make_win_src_distribution
|
all: fill_help_tables.sql make_win_src_distribution make_binary_distribution
|
||||||
|
|
||||||
|
# The following rule is here to ensure that build will continue
|
||||||
|
# even if we don't have perl installed. In this case the help tables
|
||||||
|
# will be empty
|
||||||
|
|
||||||
fill_help_tables.sql: fill_help_tables ../Docs/manual.texi
|
fill_help_tables.sql: fill_help_tables ../Docs/manual.texi
|
||||||
./fill_help_tables < ../Docs/manual.texi > fill_help_tables.sql
|
-./fill_help_tables < ../Docs/manual.texi > fill_help_tables.sql
|
||||||
|
echo "" >> fill_help_tables.sql
|
||||||
|
@ -111,12 +111,12 @@ sub flush_all
|
|||||||
$example= prepare_example($example);
|
$example= prepare_example($example);
|
||||||
|
|
||||||
if ($func_name ne "" && $text ne "" && !($func_name =~ /[abcdefghikjlmnopqrstuvwxyz]/)){
|
if ($func_name ne "" && $text ne "" && !($func_name =~ /[abcdefghikjlmnopqrstuvwxyz]/)){
|
||||||
print "INSERT INTO help_topic (name,description,example) VALUES (";
|
print "INSERT IGNORE INTO help_topic (name,description,example) VALUES (";
|
||||||
print "'$func_name',";
|
print "'$func_name',";
|
||||||
print "'$text',";
|
print "'$text',";
|
||||||
print "'$example'";
|
print "'$example'";
|
||||||
print ");\n";
|
print ");\n";
|
||||||
print "INSERT INTO help_relation (help_category_id,help_topic_id) VALUES (\@cur_category,LAST_INSERT_ID());\n";
|
print "INSERT IGNORE INTO help_relation (help_category_id,help_topic_id) VALUES (\@cur_category,LAST_INSERT_ID());\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
$func_name= "";
|
$func_name= "";
|
||||||
@ -131,11 +131,11 @@ sub new_category
|
|||||||
|
|
||||||
$category= prepare_text($category);
|
$category= prepare_text($category);
|
||||||
|
|
||||||
print "INSERT INTO help_category (name) VALUES (\'$category\');\n";
|
print "INSERT IGNORE INTO help_category (name) VALUES (\'$category\');\n";
|
||||||
print "SET \@cur_category=LAST_INSERT_ID();\n";
|
print "SET \@cur_category=LAST_INSERT_ID();\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
#print "INSERT INTO db (Host,DB,User,Select_priv) VALUES ('%','mysql_help','','Y');\n";
|
#print "INSERT IGNORE INTO db (Host,DB,User,Select_priv) VALUES ('%','mysql_help','','Y');\n";
|
||||||
#print "CREATE DATABASE mysql_help;\n";
|
#print "CREATE DATABASE mysql_help;\n";
|
||||||
|
|
||||||
print "USE mysql;\n";
|
print "USE mysql;\n";
|
||||||
@ -236,4 +236,3 @@ print "DELETE help_category ";
|
|||||||
print "FROM help_category ";
|
print "FROM help_category ";
|
||||||
print "LEFT JOIN help_relation ON help_category.help_category_id=help_relation.help_category_id ";
|
print "LEFT JOIN help_relation ON help_category.help_category_id=help_relation.help_category_id ";
|
||||||
print "WHERE help_relation.help_category_id is null;"
|
print "WHERE help_relation.help_category_id is null;"
|
||||||
|
|
||||||
|
@ -160,6 +160,7 @@ if [ $BASE_SYSTEM != "netware" ] ; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
$CP support-files/* $BASE/support-files
|
$CP support-files/* $BASE/support-files
|
||||||
|
$CP scripts/fill_help_tables.sql $BASE/support-files
|
||||||
|
|
||||||
if [ $BASE_SYSTEM = "netware" ] ; then
|
if [ $BASE_SYSTEM = "netware" ] ; then
|
||||||
rm -f $BASE/support-files/magic \
|
rm -f $BASE/support-files/magic \
|
||||||
@ -183,14 +184,14 @@ do
|
|||||||
done
|
done
|
||||||
|
|
||||||
$CP mysql-test/include/*.inc $BASE/mysql-test/include
|
$CP mysql-test/include/*.inc $BASE/mysql-test/include
|
||||||
$CP mysql-test/std_data/*.dat mysql-test/std_data/*.001 $BASE/mysql-test/std_data
|
$CP mysql-test/std_data/*.dat mysql-test/std_data/*.*001 $BASE/mysql-test/std_data
|
||||||
$CP mysql-test/std_data/des_key_file $BASE/mysql-test/std_data
|
$CP mysql-test/std_data/des_key_file $BASE/mysql-test/std_data
|
||||||
$CP mysql-test/t/*test mysql-test/t/*.opt mysql-test/t/*.slave-mi mysql-test/t/*.sh $BASE/mysql-test/t
|
$CP mysql-test/t/*test mysql-test/t/*.opt mysql-test/t/*.slave-mi mysql-test/t/*.sh $BASE/mysql-test/t
|
||||||
$CP mysql-test/r/*result mysql-test/r/*.require $BASE/mysql-test/r
|
$CP mysql-test/r/*result mysql-test/r/*.require $BASE/mysql-test/r
|
||||||
|
|
||||||
if [ $BASE_SYSTEM != "netware" ] ; then
|
if [ $BASE_SYSTEM != "netware" ] ; then
|
||||||
$CP scripts/* $BASE/bin
|
$CP scripts/* $BASE/bin
|
||||||
$BASE/bin/replace \@localstatedir\@ ./data \@bindir\@ ./bin \@scriptdir\@ ./bin \@libexecdir\@ ./bin \@sbindir\@ ./bin \@prefix\@ . \@HOSTNAME\@ @HOSTNAME@ < $SOURCE/scripts/mysql_install_db.sh > $BASE/scripts/mysql_install_db
|
$BASE/bin/replace \@localstatedir\@ ./data \@bindir\@ ./bin \@scriptdir\@ ./bin \@libexecdir\@ ./bin \@sbindir\@ ./bin \@prefix\@ . \@HOSTNAME\@ @HOSTNAME@ \@pkgdatadir\@ ./support-files < $SOURCE/scripts/mysql_install_db.sh > $BASE/scripts/mysql_install_db
|
||||||
$BASE/bin/replace \@prefix\@ /usr/local/mysql \@bindir\@ ./bin \@MYSQLD_USER\@ root \@localstatedir\@ /usr/local/mysql/data \@HOSTNAME\@ @HOSTNAME@ < $SOURCE/support-files/mysql.server.sh > $BASE/support-files/mysql.server
|
$BASE/bin/replace \@prefix\@ /usr/local/mysql \@bindir\@ ./bin \@MYSQLD_USER\@ root \@localstatedir\@ /usr/local/mysql/data \@HOSTNAME\@ @HOSTNAME@ < $SOURCE/support-files/mysql.server.sh > $BASE/support-files/mysql.server
|
||||||
$BASE/bin/replace /my/gnu/bin/hostname /bin/hostname -- $BASE/bin/mysqld_safe
|
$BASE/bin/replace /my/gnu/bin/hostname /bin/hostname -- $BASE/bin/mysqld_safe
|
||||||
mv $BASE/support-files/binary-configure $BASE/configure
|
mv $BASE/support-files/binary-configure $BASE/configure
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Copyright (C) 2002 MySQL AB
|
# Copyright (C) 2002-2003 MySQL AB
|
||||||
# For a more info consult the file COPYRIGHT distributed with this file.
|
# For a more info consult the file COPYRIGHT distributed with this file.
|
||||||
|
|
||||||
# This scripts creates the privilege tables db, host, user, tables_priv,
|
# This scripts creates the privilege tables db, host, user, tables_priv,
|
||||||
@ -43,6 +43,7 @@ parse_arguments() {
|
|||||||
--basedir=*) basedir=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
|
--basedir=*) basedir=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
|
||||||
--ldata=*|--datadir=*) ldata=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
|
--ldata=*|--datadir=*) ldata=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
|
||||||
--user=*) user=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
|
--user=*) user=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
|
||||||
|
--verbose) verbose=1 ;;
|
||||||
*)
|
*)
|
||||||
if test -n "$pick_args"
|
if test -n "$pick_args"
|
||||||
then
|
then
|
||||||
@ -76,6 +77,8 @@ execdir=
|
|||||||
bindir=
|
bindir=
|
||||||
basedir=
|
basedir=
|
||||||
force=0
|
force=0
|
||||||
|
verbose=0
|
||||||
|
fill_help_tables=""
|
||||||
parse_arguments `$print_defaults $defaults mysqld mysql_install_db`
|
parse_arguments `$print_defaults $defaults mysqld mysql_install_db`
|
||||||
parse_arguments PICK-ARGS-FROM-ARGV "$@"
|
parse_arguments PICK-ARGS-FROM-ARGV "$@"
|
||||||
|
|
||||||
@ -85,6 +88,7 @@ then
|
|||||||
basedir=@prefix@
|
basedir=@prefix@
|
||||||
bindir=@bindir@
|
bindir=@bindir@
|
||||||
execdir=@libexecdir@
|
execdir=@libexecdir@
|
||||||
|
pkgdatadir=@pkgdatadir@
|
||||||
else
|
else
|
||||||
bindir="$basedir/bin"
|
bindir="$basedir/bin"
|
||||||
if test -x "$basedir/libexec/mysqld"
|
if test -x "$basedir/libexec/mysqld"
|
||||||
@ -96,6 +100,25 @@ then
|
|||||||
else
|
else
|
||||||
execdir="$basedir/bin"
|
execdir="$basedir/bin"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# find fill_help_tables.sh
|
||||||
|
for i in $basedir/support-files $basedir/share $basedir/share/mysql $basedir/scripts @pkgdatadir@
|
||||||
|
do
|
||||||
|
if test -f $i/fill_help_tables.sql
|
||||||
|
then
|
||||||
|
pkgdatadir=$i
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -f $pkgdatadir/fill_help_tables.sql
|
||||||
|
then
|
||||||
|
fill_help_tables=$pkgdatadir/fill_help_tables.sql
|
||||||
|
else
|
||||||
|
if test $verbose -eq 1
|
||||||
|
then
|
||||||
|
echo "Could not find help file 'fill_help_tables.sql'".
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mdata=$ldata/mysql
|
mdata=$ldata/mysql
|
||||||
@ -160,8 +183,9 @@ c_t="" c_c=""
|
|||||||
# Check for old tables
|
# Check for old tables
|
||||||
if test ! -f $mdata/db.frm
|
if test ! -f $mdata/db.frm
|
||||||
then
|
then
|
||||||
|
if test $verbose -eq 1 ; then
|
||||||
echo "Preparing db table"
|
echo "Preparing db table"
|
||||||
|
fi
|
||||||
# mysqld --bootstrap wants one command/line
|
# mysqld --bootstrap wants one command/line
|
||||||
c_d="$c_d CREATE TABLE db ("
|
c_d="$c_d CREATE TABLE db ("
|
||||||
c_d="$c_d Host char(60) binary DEFAULT '' NOT NULL,"
|
c_d="$c_d Host char(60) binary DEFAULT '' NOT NULL,"
|
||||||
@ -190,7 +214,9 @@ fi
|
|||||||
|
|
||||||
if test ! -f $mdata/host.frm
|
if test ! -f $mdata/host.frm
|
||||||
then
|
then
|
||||||
|
if test $verbose -eq 1 ; then
|
||||||
echo "Preparing host table"
|
echo "Preparing host table"
|
||||||
|
fi
|
||||||
|
|
||||||
c_h="$c_h CREATE TABLE host ("
|
c_h="$c_h CREATE TABLE host ("
|
||||||
c_h="$c_h Host char(60) binary DEFAULT '' NOT NULL,"
|
c_h="$c_h Host char(60) binary DEFAULT '' NOT NULL,"
|
||||||
@ -214,7 +240,9 @@ fi
|
|||||||
|
|
||||||
if test ! -f $mdata/user.frm
|
if test ! -f $mdata/user.frm
|
||||||
then
|
then
|
||||||
|
if test $verbose -eq 1 ; then
|
||||||
echo "Preparing user table"
|
echo "Preparing user table"
|
||||||
|
fi
|
||||||
|
|
||||||
c_u="$c_u CREATE TABLE user ("
|
c_u="$c_u CREATE TABLE user ("
|
||||||
c_u="$c_u Host char(60) binary DEFAULT '' NOT NULL,"
|
c_u="$c_u Host char(60) binary DEFAULT '' NOT NULL,"
|
||||||
@ -256,7 +284,8 @@ then
|
|||||||
|
|
||||||
REPLACE INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
REPLACE INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
||||||
|
|
||||||
INSERT INTO user (host,user) values ('localhost','');"
|
INSERT INTO user (host,user) values ('localhost','');
|
||||||
|
"
|
||||||
|
|
||||||
if test "$windows" -eq 0
|
if test "$windows" -eq 0
|
||||||
then
|
then
|
||||||
@ -270,7 +299,9 @@ fi
|
|||||||
|
|
||||||
if test ! -f $mdata/func.frm
|
if test ! -f $mdata/func.frm
|
||||||
then
|
then
|
||||||
|
if test $verbose -eq 1 ; then
|
||||||
echo "Preparing func table"
|
echo "Preparing func table"
|
||||||
|
fi
|
||||||
|
|
||||||
c_f="$c_f CREATE TABLE func ("
|
c_f="$c_f CREATE TABLE func ("
|
||||||
c_f="$c_f name char(64) binary DEFAULT '' NOT NULL,"
|
c_f="$c_f name char(64) binary DEFAULT '' NOT NULL,"
|
||||||
@ -284,7 +315,9 @@ fi
|
|||||||
|
|
||||||
if test ! -f $mdata/tables_priv.frm
|
if test ! -f $mdata/tables_priv.frm
|
||||||
then
|
then
|
||||||
|
if test $verbose -eq 1 ; then
|
||||||
echo "Preparing tables_priv table"
|
echo "Preparing tables_priv table"
|
||||||
|
fi
|
||||||
|
|
||||||
c_t="$c_t CREATE TABLE tables_priv ("
|
c_t="$c_t CREATE TABLE tables_priv ("
|
||||||
c_t="$c_t Host char(60) binary DEFAULT '' NOT NULL,"
|
c_t="$c_t Host char(60) binary DEFAULT '' NOT NULL,"
|
||||||
@ -303,7 +336,9 @@ fi
|
|||||||
|
|
||||||
if test ! -f $mdata/columns_priv.frm
|
if test ! -f $mdata/columns_priv.frm
|
||||||
then
|
then
|
||||||
|
if test $verbose -eq 1 ; then
|
||||||
echo "Preparing columns_priv table"
|
echo "Preparing columns_priv table"
|
||||||
|
fi
|
||||||
|
|
||||||
c_c="$c_c CREATE TABLE columns_priv ("
|
c_c="$c_c CREATE TABLE columns_priv ("
|
||||||
c_c="$c_c Host char(60) binary DEFAULT '' NOT NULL,"
|
c_c="$c_c Host char(60) binary DEFAULT '' NOT NULL,"
|
||||||
@ -318,7 +353,7 @@ then
|
|||||||
c_c="$c_c comment='Column privileges';"
|
c_c="$c_c comment='Column privileges';"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Installing all prepared tables"
|
echo "Installing privilege tables"
|
||||||
if (
|
if (
|
||||||
cat << END_OF_DATA
|
cat << END_OF_DATA
|
||||||
use mysql;
|
use mysql;
|
||||||
@ -337,7 +372,10 @@ $i_f
|
|||||||
$c_t
|
$c_t
|
||||||
$c_c
|
$c_c
|
||||||
END_OF_DATA
|
END_OF_DATA
|
||||||
cat fill_help_tables.sql
|
if test -n "$fill_help_tables"
|
||||||
|
then
|
||||||
|
cat $fill_help_tables
|
||||||
|
fi
|
||||||
) | eval "$execdir/mysqld $defaults --bootstrap --skip-grant-tables \
|
) | eval "$execdir/mysqld $defaults --bootstrap --skip-grant-tables \
|
||||||
--basedir=$basedir --datadir=$ldata --skip-innodb --skip-bdb $args"
|
--basedir=$basedir --datadir=$ldata --skip-innodb --skip-bdb $args"
|
||||||
then
|
then
|
||||||
@ -377,7 +415,6 @@ then
|
|||||||
echo "The latest information about MySQL is available on the web at"
|
echo "The latest information about MySQL is available on the web at"
|
||||||
echo "http://www.mysql.com"
|
echo "http://www.mysql.com"
|
||||||
echo "Support MySQL by buying support/licenses at https://order.mysql.com"
|
echo "Support MySQL by buying support/licenses at https://order.mysql.com"
|
||||||
echo
|
|
||||||
exit 0
|
exit 0
|
||||||
else
|
else
|
||||||
echo "Installation of grant tables failed!"
|
echo "Installation of grant tables failed!"
|
||||||
|
@ -1049,7 +1049,8 @@ int ha_myisam::create(const char *name, register TABLE *table_arg,
|
|||||||
&recinfo,(table_arg->fields*2+2)*sizeof(MI_COLUMNDEF),
|
&recinfo,(table_arg->fields*2+2)*sizeof(MI_COLUMNDEF),
|
||||||
&keydef, table_arg->keys*sizeof(MI_KEYDEF),
|
&keydef, table_arg->keys*sizeof(MI_KEYDEF),
|
||||||
&keyseg,
|
&keyseg,
|
||||||
((table_arg->key_parts + table_arg->keys) * sizeof(HA_KEYSEG)),
|
((table_arg->key_parts + table_arg->keys) *
|
||||||
|
sizeof(HA_KEYSEG)),
|
||||||
0)))
|
0)))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
|
|
||||||
@ -1107,7 +1108,8 @@ int ha_myisam::create(const char *name, register TABLE *table_arg,
|
|||||||
keydef[i].seg[j].null_bit=0;
|
keydef[i].seg[j].null_bit=0;
|
||||||
keydef[i].seg[j].null_pos=0;
|
keydef[i].seg[j].null_pos=0;
|
||||||
}
|
}
|
||||||
if ((field->type() == FIELD_TYPE_BLOB) || (field->type() == FIELD_TYPE_GEOMETRY))
|
if (field->type() == FIELD_TYPE_BLOB ||
|
||||||
|
field->type() == FIELD_TYPE_GEOMETRY)
|
||||||
{
|
{
|
||||||
keydef[i].seg[j].flag|=HA_BLOB_PART;
|
keydef[i].seg[j].flag|=HA_BLOB_PART;
|
||||||
/* save number of bytes used to pack length */
|
/* save number of bytes used to pack length */
|
||||||
|
15
sql/item.cc
15
sql/item.cc
@ -93,13 +93,15 @@ bool Item::check_cols(uint c)
|
|||||||
void Item::set_name(const char *str,uint length, CHARSET_INFO *cs)
|
void Item::set_name(const char *str,uint length, CHARSET_INFO *cs)
|
||||||
{
|
{
|
||||||
if (!length)
|
if (!length)
|
||||||
length= str ? strlen(str) : 0;
|
name= (char*) str; // Empty string, used by AS
|
||||||
|
else
|
||||||
|
{
|
||||||
while (length && !my_isgraph(cs,*str))
|
while (length && !my_isgraph(cs,*str))
|
||||||
{ // Fix problem with yacc
|
{ // Fix problem with yacc
|
||||||
length--;
|
length--;
|
||||||
str++;
|
str++;
|
||||||
}
|
}
|
||||||
if (!my_charset_same(cs, system_charset_info))
|
if (length && !my_charset_same(cs, system_charset_info))
|
||||||
{
|
{
|
||||||
String tmp;
|
String tmp;
|
||||||
tmp.copy(str, length, cs, system_charset_info);
|
tmp.copy(str, length, cs, system_charset_info);
|
||||||
@ -108,6 +110,7 @@ void Item::set_name(const char *str,uint length, CHARSET_INFO *cs)
|
|||||||
else
|
else
|
||||||
name=sql_strmake(str,min(length,MAX_FIELD_WIDTH));
|
name=sql_strmake(str,min(length,MAX_FIELD_WIDTH));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This function is only called when comparing items in the WHERE clause
|
This function is only called when comparing items in the WHERE clause
|
||||||
@ -195,12 +198,19 @@ bool Item::set_charset(CHARSET_INFO *cs1, enum coercion co1,
|
|||||||
else // co2 == co1
|
else // co2 == co1
|
||||||
{
|
{
|
||||||
if (cs1 != cs2)
|
if (cs1 != cs2)
|
||||||
|
{
|
||||||
|
if (co1 == COER_EXPLICIT)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
CHARSET_INFO *bin= get_charset_by_csname(cs1->csname, MY_CS_BINSORT,MYF(0));
|
CHARSET_INFO *bin= get_charset_by_csname(cs1->csname, MY_CS_BINSORT,MYF(0));
|
||||||
if (!bin)
|
if (!bin)
|
||||||
return 1;
|
return 1;
|
||||||
set_charset(bin, COER_NOCOLL);
|
set_charset(bin, COER_NOCOLL);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
set_charset(cs2, co2);
|
set_charset(cs2, co2);
|
||||||
}
|
}
|
||||||
@ -984,6 +994,7 @@ Item_varbinary::Item_varbinary(const char *str, uint str_length)
|
|||||||
str+=2;
|
str+=2;
|
||||||
}
|
}
|
||||||
*ptr=0; // Keep purify happy
|
*ptr=0; // Keep purify happy
|
||||||
|
coercibility= COER_COERCIBLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
longlong Item_varbinary::val_int()
|
longlong Item_varbinary::val_int()
|
||||||
|
@ -110,8 +110,22 @@ bool Item_bool_func2::set_cmp_charset(CHARSET_INFO *cs1, enum coercion co1,
|
|||||||
{
|
{
|
||||||
if (cs1 == cs2)
|
if (cs1 == cs2)
|
||||||
cmp_charset= cs1;
|
cmp_charset= cs1;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (co1 == COER_COERCIBLE)
|
||||||
|
{
|
||||||
|
CHARSET_INFO *c= get_charset_by_csname(cs1->csname,MY_CS_PRIMARY,MYF(0));
|
||||||
|
if (c)
|
||||||
|
{
|
||||||
|
cmp_charset= c;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -636,6 +650,9 @@ Item_func_ifnull::fix_length_and_dec()
|
|||||||
args[1]->result_type())) !=
|
args[1]->result_type())) !=
|
||||||
REAL_RESULT)
|
REAL_RESULT)
|
||||||
decimals= 0;
|
decimals= 0;
|
||||||
|
if (set_charset(args[0]->charset(),args[0]->coercibility,
|
||||||
|
args[1]->charset(),args[1]->coercibility))
|
||||||
|
my_error(ER_WRONG_ARGUMENTS,MYF(0),func_name());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -676,11 +693,13 @@ Item_func_ifnull::val_str(String *str)
|
|||||||
if (!args[0]->null_value)
|
if (!args[0]->null_value)
|
||||||
{
|
{
|
||||||
null_value=0;
|
null_value=0;
|
||||||
|
res->set_charset(charset());
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
res=args[1]->val_str(str);
|
res=args[1]->val_str(str);
|
||||||
if ((null_value=args[1]->null_value))
|
if ((null_value=args[1]->null_value))
|
||||||
return 0;
|
return 0;
|
||||||
|
res->set_charset(charset());
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -709,8 +728,12 @@ Item_func_if::fix_length_and_dec()
|
|||||||
else if (arg1_type == STRING_RESULT || arg2_type == STRING_RESULT)
|
else if (arg1_type == STRING_RESULT || arg2_type == STRING_RESULT)
|
||||||
{
|
{
|
||||||
cached_result_type = STRING_RESULT;
|
cached_result_type = STRING_RESULT;
|
||||||
set_charset((args[1]->binary() || args[2]->binary()) ?
|
if (set_charset(args[1]->charset(), args[1]->coercibility,
|
||||||
&my_charset_bin : args[1]->charset());
|
args[2]->charset(), args[2]->coercibility))
|
||||||
|
{
|
||||||
|
my_error(ER_WRONG_ARGUMENTS,MYF(0),func_name());
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -746,6 +769,7 @@ Item_func_if::val_str(String *str)
|
|||||||
{
|
{
|
||||||
Item *arg= args[0]->val_int() ? args[1] : args[2];
|
Item *arg= args[0]->val_int() ? args[1] : args[2];
|
||||||
String *res=arg->val_str(str);
|
String *res=arg->val_str(str);
|
||||||
|
res->set_charset(charset());
|
||||||
null_value=arg->null_value;
|
null_value=arg->null_value;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
@ -475,6 +475,12 @@ Item *create_func_is_free_lock(Item* a)
|
|||||||
return new Item_func_is_free_lock(a);
|
return new Item_func_is_free_lock(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Item *create_func_is_used_lock(Item* a)
|
||||||
|
{
|
||||||
|
current_thd->lex.uncacheable();
|
||||||
|
return new Item_func_is_used_lock(a);
|
||||||
|
}
|
||||||
|
|
||||||
Item *create_func_quote(Item* a)
|
Item *create_func_quote(Item* a)
|
||||||
{
|
{
|
||||||
return new Item_func_quote(a);
|
return new Item_func_quote(a);
|
||||||
|
@ -100,6 +100,7 @@ Item *create_func_version(void);
|
|||||||
Item *create_func_weekday(Item* a);
|
Item *create_func_weekday(Item* a);
|
||||||
Item *create_load_file(Item* a);
|
Item *create_load_file(Item* a);
|
||||||
Item *create_func_is_free_lock(Item* a);
|
Item *create_func_is_free_lock(Item* a);
|
||||||
|
Item *create_func_is_used_lock(Item* a);
|
||||||
Item *create_func_quote(Item* a);
|
Item *create_func_quote(Item* a);
|
||||||
|
|
||||||
Item *create_func_geometry_from_text(Item *a);
|
Item *create_func_geometry_from_text(Item *a);
|
||||||
|
@ -855,9 +855,13 @@ void Item_func_min_max::fix_length_and_dec()
|
|||||||
maybe_null=0;
|
maybe_null=0;
|
||||||
cmp_type=item_cmp_type(cmp_type,args[i]->result_type());
|
cmp_type=item_cmp_type(cmp_type,args[i]->result_type());
|
||||||
if (i==0)
|
if (i==0)
|
||||||
set_charset(args[i]->charset());
|
set_charset(args[i]->charset(), args[i]->coercibility);
|
||||||
else if (args[i]->charset() == &my_charset_bin)
|
else if (set_charset(charset(), coercibility,
|
||||||
set_charset(&my_charset_bin);
|
args[i]->charset(), args[i]->coercibility))
|
||||||
|
{
|
||||||
|
my_error(ER_WRONG_ARGUMENTS,MYF(0),func_name());
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -909,6 +913,7 @@ String *Item_func_min_max::val_str(String *str)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
res->set_charset(charset());
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
case ROW_RESULT:
|
case ROW_RESULT:
|
||||||
@ -1610,8 +1615,10 @@ public:
|
|||||||
bool locked;
|
bool locked;
|
||||||
pthread_cond_t cond;
|
pthread_cond_t cond;
|
||||||
pthread_t thread;
|
pthread_t thread;
|
||||||
|
ulong thread_id;
|
||||||
|
|
||||||
ULL(const char *key_arg,uint length) :key_length(length),count(1),locked(1)
|
ULL(const char *key_arg,uint length, ulong id)
|
||||||
|
:key_length(length),count(1),locked(1), thread_id(id)
|
||||||
{
|
{
|
||||||
key=(char*) my_memdup((byte*) key_arg,length,MYF(0));
|
key=(char*) my_memdup((byte*) key_arg,length,MYF(0));
|
||||||
pthread_cond_init(&cond,NULL);
|
pthread_cond_init(&cond,NULL);
|
||||||
@ -1815,7 +1822,7 @@ longlong Item_func_get_lock::val_int()
|
|||||||
if (!(ull= ((ULL*) hash_search(&hash_user_locks,(byte*) res->ptr(),
|
if (!(ull= ((ULL*) hash_search(&hash_user_locks,(byte*) res->ptr(),
|
||||||
res->length()))))
|
res->length()))))
|
||||||
{
|
{
|
||||||
ull=new ULL(res->ptr(),res->length());
|
ull=new ULL(res->ptr(),res->length(), thd->thread_id);
|
||||||
if (!ull || !ull->initialized())
|
if (!ull || !ull->initialized())
|
||||||
{
|
{
|
||||||
delete ull;
|
delete ull;
|
||||||
@ -2676,6 +2683,28 @@ longlong Item_func_is_free_lock::val_int()
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
longlong Item_func_is_used_lock::val_int()
|
||||||
|
{
|
||||||
|
String *res=args[0]->val_str(&value);
|
||||||
|
THD *thd=current_thd;
|
||||||
|
ULL *ull;
|
||||||
|
|
||||||
|
null_value=1;
|
||||||
|
if (!res || !res->length())
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
pthread_mutex_lock(&LOCK_user_locks);
|
||||||
|
ull= (ULL*) hash_search(&hash_user_locks,(byte*) res->ptr(),
|
||||||
|
res->length());
|
||||||
|
pthread_mutex_unlock(&LOCK_user_locks);
|
||||||
|
if (!ull || !ull->locked)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
null_value=0;
|
||||||
|
return ull->thread_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
Spatial functions
|
Spatial functions
|
||||||
|
@ -1162,6 +1162,16 @@ public:
|
|||||||
void fix_length_and_dec() { decimals=0; max_length=1; maybe_null=1;}
|
void fix_length_and_dec() { decimals=0; max_length=1; maybe_null=1;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class Item_func_is_used_lock :public Item_int_func
|
||||||
|
{
|
||||||
|
String value;
|
||||||
|
public:
|
||||||
|
Item_func_is_used_lock(Item *a) :Item_int_func(a) {}
|
||||||
|
longlong val_int();
|
||||||
|
const char *func_name() const { return "is_used_lock"; }
|
||||||
|
void fix_length_and_dec() { decimals=0; max_length=10; maybe_null=1;}
|
||||||
|
};
|
||||||
|
|
||||||
/* For type casts */
|
/* For type casts */
|
||||||
|
|
||||||
enum Item_cast
|
enum Item_cast
|
||||||
|
@ -2041,6 +2041,7 @@ String *Item_func_conv_charset::val_str(String *str)
|
|||||||
|
|
||||||
void Item_func_conv_charset::fix_length_and_dec()
|
void Item_func_conv_charset::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
|
set_charset(conv_charset);
|
||||||
max_length = args[0]->max_length*conv_charset->mbmaxlen;
|
max_length = args[0]->max_length*conv_charset->mbmaxlen;
|
||||||
set_charset(conv_charset, COER_IMPLICIT);
|
set_charset(conv_charset, COER_IMPLICIT);
|
||||||
}
|
}
|
||||||
@ -2114,25 +2115,6 @@ outp:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Item_func_conv_charset::fix_fields(THD *thd,struct st_table_list *tables, Item **ref)
|
|
||||||
{
|
|
||||||
char buff[STACK_BUFF_ALLOC]; // Max argument in function
|
|
||||||
used_tables_cache=0;
|
|
||||||
const_item_cache=1;
|
|
||||||
|
|
||||||
if (thd && check_stack_overrun(thd,buff))
|
|
||||||
return 0; // Fatal error if flag is set!
|
|
||||||
if (args[0]->fix_fields(thd, tables, args) || args[0]->check_cols(1))
|
|
||||||
return 1;
|
|
||||||
maybe_null=args[0]->maybe_null;
|
|
||||||
const_item_cache=args[0]->const_item();
|
|
||||||
set_charset(conv_charset);
|
|
||||||
fix_length_and_dec();
|
|
||||||
fixed= 1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Item_func_conv_charset3::fix_length_and_dec()
|
void Item_func_conv_charset3::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
max_length = args[0]->max_length;
|
max_length = args[0]->max_length;
|
||||||
@ -2147,24 +2129,11 @@ String *Item_func_set_collation::val_str(String *str)
|
|||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Item_func_set_collation::fix_fields(THD *thd,struct st_table_list *tables, Item **ref)
|
void Item_func_set_collation::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
CHARSET_INFO *set_collation;
|
CHARSET_INFO *set_collation;
|
||||||
String tmp, *str;
|
|
||||||
const char *colname;
|
const char *colname;
|
||||||
char buff[STACK_BUFF_ALLOC]; // Max argument in function
|
String tmp, *str= args[1]->val_str(&tmp);
|
||||||
used_tables_cache=0;
|
|
||||||
const_item_cache=1;
|
|
||||||
|
|
||||||
if (thd && check_stack_overrun(thd,buff))
|
|
||||||
return 0; // Fatal error if flag is set!
|
|
||||||
if (args[0]->fix_fields(thd, tables, args) || args[0]->check_cols(1))
|
|
||||||
return 1;
|
|
||||||
if (args[0]->fix_fields(thd, tables, args) || args[0]->check_cols(1))
|
|
||||||
return 2;
|
|
||||||
maybe_null=args[0]->maybe_null || args[1]->maybe_null;
|
|
||||||
|
|
||||||
str= args[1]->val_str(&tmp);
|
|
||||||
colname= str->c_ptr();
|
colname= str->c_ptr();
|
||||||
if (!strncmp(colname,"BINARY",6))
|
if (!strncmp(colname,"BINARY",6))
|
||||||
set_collation= get_charset_by_csname(args[0]->charset()->csname,
|
set_collation= get_charset_by_csname(args[0]->charset()->csname,
|
||||||
@ -2175,24 +2144,20 @@ bool Item_func_set_collation::fix_fields(THD *thd,struct st_table_list *tables,
|
|||||||
if (!set_collation)
|
if (!set_collation)
|
||||||
{
|
{
|
||||||
my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), str->c_ptr());
|
my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), str->c_ptr());
|
||||||
return 1;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!my_charset_same(args[0]->charset(),set_collation))
|
if (!my_charset_same(args[0]->charset(),set_collation))
|
||||||
{
|
{
|
||||||
my_error(ER_COLLATION_CHARSET_MISMATCH, MYF(0),
|
my_error(ER_COLLATION_CHARSET_MISMATCH, MYF(0),
|
||||||
set_collation->name,args[0]->charset()->csname);
|
set_collation->name,args[0]->charset()->csname);
|
||||||
return 1;
|
return;
|
||||||
}
|
}
|
||||||
set_charset(set_collation, COER_EXPLICIT);
|
set_charset(set_collation, COER_EXPLICIT);
|
||||||
with_sum_func= with_sum_func || args[0]->with_sum_func;
|
max_length= args[0]->max_length;
|
||||||
used_tables_cache=args[0]->used_tables();
|
|
||||||
const_item_cache=args[0]->const_item();
|
|
||||||
fix_length_and_dec();
|
|
||||||
fixed= 1;
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Item_func_set_collation::eq(const Item *item, bool binary_cmp) const
|
bool Item_func_set_collation::eq(const Item *item, bool binary_cmp) const
|
||||||
{
|
{
|
||||||
/* Assume we don't have rtti */
|
/* Assume we don't have rtti */
|
||||||
|
@ -577,7 +577,6 @@ class Item_func_conv_charset :public Item_str_func
|
|||||||
public:
|
public:
|
||||||
Item_func_conv_charset(Item *a, CHARSET_INFO *cs) :Item_str_func(a)
|
Item_func_conv_charset(Item *a, CHARSET_INFO *cs) :Item_str_func(a)
|
||||||
{ conv_charset=cs; }
|
{ conv_charset=cs; }
|
||||||
bool fix_fields(THD *thd,struct st_table_list *tables,Item **ref);
|
|
||||||
String *val_str(String *);
|
String *val_str(String *);
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
const char *func_name() const { return "conv_charset"; }
|
const char *func_name() const { return "conv_charset"; }
|
||||||
@ -588,9 +587,7 @@ class Item_func_set_collation :public Item_str_func
|
|||||||
public:
|
public:
|
||||||
Item_func_set_collation(Item *a, Item *b) :Item_str_func(a,b) {};
|
Item_func_set_collation(Item *a, Item *b) :Item_str_func(a,b) {};
|
||||||
String *val_str(String *);
|
String *val_str(String *);
|
||||||
bool fix_fields(THD *thd,struct st_table_list *tables, Item **ref);
|
void fix_length_and_dec();
|
||||||
void fix_length_and_dec()
|
|
||||||
{ max_length = args[0]->max_length; }
|
|
||||||
bool eq(const Item *item, bool binary_cmp) const;
|
bool eq(const Item *item, bool binary_cmp) const;
|
||||||
const char *func_name() const { return "set_collation"; }
|
const char *func_name() const { return "set_collation"; }
|
||||||
};
|
};
|
||||||
|
@ -512,6 +512,7 @@ static SYMBOL sql_functions[] = {
|
|||||||
{ "ISEMPTY", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_isempty)},
|
{ "ISEMPTY", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_isempty)},
|
||||||
{ "ISNULL", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_isnull)},
|
{ "ISNULL", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_isnull)},
|
||||||
{ "IS_FREE_LOCK", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_is_free_lock)},
|
{ "IS_FREE_LOCK", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_is_free_lock)},
|
||||||
|
{ "IS_USED_LOCK", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_is_used_lock)},
|
||||||
{ "LAST_INSERT_ID", SYM(LAST_INSERT_ID),0,0},
|
{ "LAST_INSERT_ID", SYM(LAST_INSERT_ID),0,0},
|
||||||
{ "ISSIMPLE", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_issimple)},
|
{ "ISSIMPLE", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_issimple)},
|
||||||
{ "LCASE", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_lcase)},
|
{ "LCASE", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_lcase)},
|
||||||
|
@ -328,7 +328,7 @@ int Log_event::exec_event(struct st_relay_log_info* rli)
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
void Log_event::pack_info(Protocol *protocol)
|
void Log_event::pack_info(Protocol *protocol)
|
||||||
{
|
{
|
||||||
protocol->store("",0);
|
protocol->store("", &my_charset_bin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -62,7 +62,9 @@ char* query_table_status(THD *thd,const char *db,const char *table_name);
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define files_charset_info system_charset_info
|
extern CHARSET_INFO *system_charset_info;
|
||||||
|
extern CHARSET_INFO *files_charset_info;
|
||||||
|
extern CHARSET_INFO *national_charset_info;
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
Configuration parameters
|
Configuration parameters
|
||||||
|
@ -894,7 +894,7 @@ extern "C" void unireg_abort(int exit_code)
|
|||||||
DBUG_ENTER("unireg_abort");
|
DBUG_ENTER("unireg_abort");
|
||||||
if (exit_code)
|
if (exit_code)
|
||||||
sql_print_error("Aborting\n");
|
sql_print_error("Aborting\n");
|
||||||
clean_up(1); /* purecov: inspected */
|
clean_up(exit_code || !opt_bootstrap); /* purecov: inspected */
|
||||||
DBUG_PRINT("quit",("done with cleanup in unireg_abort"));
|
DBUG_PRINT("quit",("done with cleanup in unireg_abort"));
|
||||||
my_thread_end();
|
my_thread_end();
|
||||||
clean_up_mutexes();
|
clean_up_mutexes();
|
||||||
@ -4551,6 +4551,7 @@ static void set_options(void)
|
|||||||
sizeof(mysql_real_data_home)-1);
|
sizeof(mysql_real_data_home)-1);
|
||||||
|
|
||||||
/* Set default values for some variables */
|
/* Set default values for some variables */
|
||||||
|
global_system_variables.convert_result_charset= TRUE;
|
||||||
global_system_variables.table_type= DB_TYPE_MYISAM;
|
global_system_variables.table_type= DB_TYPE_MYISAM;
|
||||||
global_system_variables.tx_isolation= ISO_REPEATABLE_READ;
|
global_system_variables.tx_isolation= ISO_REPEATABLE_READ;
|
||||||
global_system_variables.select_limit= (ulonglong) HA_POS_ERROR;
|
global_system_variables.select_limit= (ulonglong) HA_POS_ERROR;
|
||||||
|
@ -703,11 +703,13 @@ bool Protocol_simple::store(const char *from, uint length, CHARSET_INFO *cs)
|
|||||||
field_types[field_pos] <= MYSQL_TYPE_GEOMETRY));
|
field_types[field_pos] <= MYSQL_TYPE_GEOMETRY));
|
||||||
field_pos++;
|
field_pos++;
|
||||||
#endif
|
#endif
|
||||||
if (cs != this->thd->charset())
|
if (!my_charset_same(cs, this->thd->charset()) &&
|
||||||
|
(cs != &my_charset_bin) &&
|
||||||
|
(this->thd->charset() != &my_charset_bin) &&
|
||||||
|
(this->thd->variables.convert_result_charset))
|
||||||
{
|
{
|
||||||
String tmp;
|
convert.copy(from, length, cs, this->thd->charset());
|
||||||
tmp.copy(from, length, cs, this->thd->charset());
|
return net_store_data(convert.ptr(), convert.length());
|
||||||
return net_store_data(tmp.ptr(), tmp.length());
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return net_store_data(from, length);
|
return net_store_data(from, length);
|
||||||
@ -800,16 +802,18 @@ bool Protocol_simple::store(Field *field)
|
|||||||
field_pos++;
|
field_pos++;
|
||||||
#endif
|
#endif
|
||||||
char buff[MAX_FIELD_WIDTH];
|
char buff[MAX_FIELD_WIDTH];
|
||||||
String tmp1(buff,sizeof(buff), &my_charset_bin);
|
String str(buff,sizeof(buff), &my_charset_bin);
|
||||||
field->val_str(&tmp1,&tmp1);
|
field->val_str(&str,&str);
|
||||||
if (field->charset() != this->thd->charset())
|
if (!my_charset_same(field->charset(), this->thd->charset()) &&
|
||||||
|
(field->charset() != &my_charset_bin) &&
|
||||||
|
(this->thd->charset() != &my_charset_bin) &&
|
||||||
|
(this->thd->variables.convert_result_charset))
|
||||||
{
|
{
|
||||||
String tmp;
|
convert.copy(str.ptr(), str.length(), str.charset(), this->thd->charset());
|
||||||
tmp.copy(tmp1.ptr(), tmp1.length(), tmp1.charset(), this->thd->charset());
|
return net_store_data(convert.ptr(), convert.length());
|
||||||
return net_store_data(tmp.ptr(), tmp.length());
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return net_store_data(tmp1.ptr(), tmp1.length());
|
return net_store_data(str.ptr(), str.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,6 +30,7 @@ class Protocol
|
|||||||
protected:
|
protected:
|
||||||
THD *thd;
|
THD *thd;
|
||||||
String *packet;
|
String *packet;
|
||||||
|
String convert;
|
||||||
uint field_pos;
|
uint field_pos;
|
||||||
#ifndef DEBUG_OFF
|
#ifndef DEBUG_OFF
|
||||||
enum enum_field_types *field_types;
|
enum enum_field_types *field_types;
|
||||||
@ -44,6 +45,7 @@ protected:
|
|||||||
public:
|
public:
|
||||||
Protocol() {}
|
Protocol() {}
|
||||||
Protocol(THD *thd) { init(thd); }
|
Protocol(THD *thd) { init(thd); }
|
||||||
|
virtual ~Protocol() {}
|
||||||
void init(THD* thd);
|
void init(THD* thd);
|
||||||
bool send_fields(List<Item> *list, uint flag);
|
bool send_fields(List<Item> *list, uint flag);
|
||||||
bool send_records_num(List<Item> *list, ulonglong records);
|
bool send_records_num(List<Item> *list, ulonglong records);
|
||||||
|
@ -109,6 +109,8 @@ sys_var_bool_ptr sys_concurrent_insert("concurrent_insert",
|
|||||||
&myisam_concurrent_insert);
|
&myisam_concurrent_insert);
|
||||||
sys_var_long_ptr sys_connect_timeout("connect_timeout",
|
sys_var_long_ptr sys_connect_timeout("connect_timeout",
|
||||||
&connect_timeout);
|
&connect_timeout);
|
||||||
|
sys_var_thd_bool sys_convert_result_charset("convert_result_charset",
|
||||||
|
&SV::convert_result_charset);
|
||||||
sys_var_enum sys_delay_key_write("delay_key_write",
|
sys_var_enum sys_delay_key_write("delay_key_write",
|
||||||
&delay_key_write_options,
|
&delay_key_write_options,
|
||||||
&delay_key_write_typelib,
|
&delay_key_write_typelib,
|
||||||
@ -337,6 +339,7 @@ sys_var *sys_variables[]=
|
|||||||
&sys_client_collation,
|
&sys_client_collation,
|
||||||
&sys_concurrent_insert,
|
&sys_concurrent_insert,
|
||||||
&sys_connect_timeout,
|
&sys_connect_timeout,
|
||||||
|
&sys_convert_result_charset,
|
||||||
&sys_default_week_format,
|
&sys_default_week_format,
|
||||||
&sys_delay_key_write,
|
&sys_delay_key_write,
|
||||||
&sys_delayed_insert_limit,
|
&sys_delayed_insert_limit,
|
||||||
@ -445,6 +448,7 @@ struct show_var_st init_vars[]= {
|
|||||||
{sys_client_collation.name, (char*) &sys_client_collation, SHOW_SYS},
|
{sys_client_collation.name, (char*) &sys_client_collation, SHOW_SYS},
|
||||||
{sys_concurrent_insert.name,(char*) &sys_concurrent_insert, SHOW_SYS},
|
{sys_concurrent_insert.name,(char*) &sys_concurrent_insert, SHOW_SYS},
|
||||||
{sys_connect_timeout.name, (char*) &sys_connect_timeout, SHOW_SYS},
|
{sys_connect_timeout.name, (char*) &sys_connect_timeout, SHOW_SYS},
|
||||||
|
{sys_convert_result_charset.name, (char*) &sys_convert_result_charset, SHOW_SYS},
|
||||||
{"datadir", mysql_real_data_home, SHOW_CHAR},
|
{"datadir", mysql_real_data_home, SHOW_CHAR},
|
||||||
{"default_week_format", (char*) &sys_default_week_format, SHOW_SYS},
|
{"default_week_format", (char*) &sys_default_week_format, SHOW_SYS},
|
||||||
{sys_delay_key_write.name, (char*) &sys_delay_key_write, SHOW_SYS},
|
{sys_delay_key_write.name, (char*) &sys_delay_key_write, SHOW_SYS},
|
||||||
@ -1455,7 +1459,6 @@ void set_var_init()
|
|||||||
(*var)->option_limits= find_option(my_long_options, (*var)->name);
|
(*var)->option_limits= find_option(my_long_options, (*var)->name);
|
||||||
hash_insert(&system_variable_hash, (byte*) *var);
|
hash_insert(&system_variable_hash, (byte*) *var);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Special cases
|
Special cases
|
||||||
Needed because MySQL can't find the limits for a variable it it has
|
Needed because MySQL can't find the limits for a variable it it has
|
||||||
|
@ -374,6 +374,7 @@ struct system_variables
|
|||||||
my_bool log_warnings;
|
my_bool log_warnings;
|
||||||
my_bool low_priority_updates;
|
my_bool low_priority_updates;
|
||||||
my_bool new_mode;
|
my_bool new_mode;
|
||||||
|
my_bool convert_result_charset;
|
||||||
|
|
||||||
CHARSET_INFO *thd_charset;
|
CHARSET_INFO *thd_charset;
|
||||||
};
|
};
|
||||||
|
@ -29,6 +29,9 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
CHARSET_INFO *system_charset_info= &my_charset_utf8;
|
CHARSET_INFO *system_charset_info= &my_charset_utf8;
|
||||||
|
CHARSET_INFO *files_charset_info= &my_charset_utf8;
|
||||||
|
CHARSET_INFO *national_charset_info= &my_charset_utf8;
|
||||||
|
|
||||||
extern gptr sql_alloc(unsigned size);
|
extern gptr sql_alloc(unsigned size);
|
||||||
extern void sql_element_free(void *ptr);
|
extern void sql_element_free(void *ptr);
|
||||||
static uint32
|
static uint32
|
||||||
|
@ -1134,10 +1134,10 @@ type:
|
|||||||
$$=FIELD_TYPE_STRING; }
|
$$=FIELD_TYPE_STRING; }
|
||||||
| nchar '(' NUM ')' { Lex->length=$3.str;
|
| nchar '(' NUM ')' { Lex->length=$3.str;
|
||||||
$$=FIELD_TYPE_STRING;
|
$$=FIELD_TYPE_STRING;
|
||||||
Lex->charset=&my_charset_utf8; }
|
Lex->charset=national_charset_info; }
|
||||||
| nchar { Lex->length=(char*) "1";
|
| nchar { Lex->length=(char*) "1";
|
||||||
$$=FIELD_TYPE_STRING;
|
$$=FIELD_TYPE_STRING;
|
||||||
Lex->charset=&my_charset_utf8; }
|
Lex->charset=national_charset_info; }
|
||||||
| BINARY '(' NUM ')' { Lex->length=$3.str;
|
| BINARY '(' NUM ')' { Lex->length=$3.str;
|
||||||
Lex->charset=&my_charset_bin;
|
Lex->charset=&my_charset_bin;
|
||||||
$$=FIELD_TYPE_STRING; }
|
$$=FIELD_TYPE_STRING; }
|
||||||
@ -1145,7 +1145,7 @@ type:
|
|||||||
$$=FIELD_TYPE_VAR_STRING; }
|
$$=FIELD_TYPE_VAR_STRING; }
|
||||||
| nvarchar '(' NUM ')' { Lex->length=$3.str;
|
| nvarchar '(' NUM ')' { Lex->length=$3.str;
|
||||||
$$=FIELD_TYPE_VAR_STRING;
|
$$=FIELD_TYPE_VAR_STRING;
|
||||||
Lex->charset= &my_charset_utf8; }
|
Lex->charset=national_charset_info; }
|
||||||
| VARBINARY '(' NUM ')' { Lex->length=$3.str;
|
| VARBINARY '(' NUM ')' { Lex->length=$3.str;
|
||||||
Lex->charset=&my_charset_bin;
|
Lex->charset=&my_charset_bin;
|
||||||
$$=FIELD_TYPE_VAR_STRING; }
|
$$=FIELD_TYPE_VAR_STRING; }
|
||||||
@ -2023,11 +2023,6 @@ expr_expr:
|
|||||||
{ $$= new Item_date_add_interval($1,$3,$4,0); }
|
{ $$= new Item_date_add_interval($1,$3,$4,0); }
|
||||||
| expr '-' interval_expr interval
|
| expr '-' interval_expr interval
|
||||||
{ $$= new Item_date_add_interval($1,$3,$4,1); }
|
{ $$= new Item_date_add_interval($1,$3,$4,1); }
|
||||||
| expr COLLATE_SYM ident_or_text
|
|
||||||
{
|
|
||||||
$$= new Item_func_set_collation($1,new Item_string($3.str,$3.length,
|
|
||||||
YYTHD->variables.thd_charset));
|
|
||||||
}
|
|
||||||
;
|
;
|
||||||
|
|
||||||
/* expressions that begin with 'expr' that do NOT follow IN_SYM */
|
/* expressions that begin with 'expr' that do NOT follow IN_SYM */
|
||||||
@ -2137,6 +2132,11 @@ interval_expr:
|
|||||||
|
|
||||||
simple_expr:
|
simple_expr:
|
||||||
simple_ident
|
simple_ident
|
||||||
|
| simple_expr COLLATE_SYM ident_or_text %prec NEG
|
||||||
|
{
|
||||||
|
$$= new Item_func_set_collation($1,new Item_string($3.str,$3.length,
|
||||||
|
YYTHD->variables.thd_charset));
|
||||||
|
}
|
||||||
| literal
|
| literal
|
||||||
| param_marker
|
| param_marker
|
||||||
| '@' ident_or_text SET_VAR expr
|
| '@' ident_or_text SET_VAR expr
|
||||||
@ -3865,9 +3865,9 @@ text_literal:
|
|||||||
$$ = new Item_string($1.str,$1.length,cs);
|
$$ = new Item_string($1.str,$1.length,cs);
|
||||||
}
|
}
|
||||||
| NCHAR_STRING
|
| NCHAR_STRING
|
||||||
{ $$= new Item_string($1.str,$1.length,&my_charset_utf8); }
|
{ $$= new Item_string($1.str,$1.length,national_charset_info); }
|
||||||
| UNDERSCORE_CHARSET TEXT_STRING
|
| UNDERSCORE_CHARSET TEXT_STRING
|
||||||
{ $$ = new Item_string($2.str,$2.length,Lex->charset,Item::COER_IMPLICIT); }
|
{ $$ = new Item_string($2.str,$2.length,Lex->charset); }
|
||||||
| text_literal TEXT_STRING_db
|
| text_literal TEXT_STRING_db
|
||||||
{ ((Item_string*) $1)->append($2.str,$2.length); }
|
{ ((Item_string*) $1)->append($2.str,$2.length); }
|
||||||
;
|
;
|
||||||
@ -3913,9 +3913,8 @@ literal:
|
|||||||
{
|
{
|
||||||
Item *tmp= new Item_varbinary($2.str,$2.length);
|
Item *tmp= new Item_varbinary($2.str,$2.length);
|
||||||
String *str= tmp ? tmp->val_str((String*) 0) : (String*) 0;
|
String *str= tmp ? tmp->val_str((String*) 0) : (String*) 0;
|
||||||
$$ = new Item_string(str ? str->ptr() : "",
|
$$ = new Item_string(str ? str->ptr() : "", str ? str->length() : 0,
|
||||||
str ? str->length() : 0,
|
Lex->charset);
|
||||||
Lex->charset,Item::COER_IMPLICIT);
|
|
||||||
}
|
}
|
||||||
| DATE_SYM text_literal { $$ = $2; }
|
| DATE_SYM text_literal { $$ = $2; }
|
||||||
| TIME_SYM text_literal { $$ = $2; }
|
| TIME_SYM text_literal { $$ = $2; }
|
||||||
@ -4340,18 +4339,18 @@ option_value:
|
|||||||
find_sys_var("tx_isolation"),
|
find_sys_var("tx_isolation"),
|
||||||
new Item_int((int32) $4)));
|
new Item_int((int32) $4)));
|
||||||
}
|
}
|
||||||
| charset opt_equal set_expr_or_default
|
| charset set_expr_or_default
|
||||||
{
|
{
|
||||||
THD *thd= YYTHD;
|
THD *thd= YYTHD;
|
||||||
LEX *lex= &thd->lex;
|
LEX *lex= &thd->lex;
|
||||||
if (!$3)
|
if (!$2)
|
||||||
{
|
{
|
||||||
CHARSET_INFO *cl= thd->db_charset;
|
CHARSET_INFO *cl= thd->db_charset;
|
||||||
$3= new Item_string(cl->name, strlen(cl->name), &my_charset_latin1);
|
$2= new Item_string(cl->name, strlen(cl->name), &my_charset_latin1);
|
||||||
}
|
}
|
||||||
lex->var_list.push_back(new set_var(lex->option_type,
|
lex->var_list.push_back(new set_var(lex->option_type,
|
||||||
find_sys_var("client_collation"),
|
find_sys_var("client_collation"),
|
||||||
$3));
|
$2));
|
||||||
}
|
}
|
||||||
| NAMES_SYM charset_name_or_default opt_collate
|
| NAMES_SYM charset_name_or_default opt_collate
|
||||||
{
|
{
|
||||||
|
@ -515,6 +515,7 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag,
|
|||||||
keyinfo->key_length+= HA_KEY_NULL_LENGTH;
|
keyinfo->key_length+= HA_KEY_NULL_LENGTH;
|
||||||
}
|
}
|
||||||
if (field->type() == FIELD_TYPE_BLOB ||
|
if (field->type() == FIELD_TYPE_BLOB ||
|
||||||
|
field->type() == FIELD_TYPE_GEOMETRY ||
|
||||||
field->real_type() == FIELD_TYPE_VAR_STRING)
|
field->real_type() == FIELD_TYPE_VAR_STRING)
|
||||||
{
|
{
|
||||||
if (field->type() == FIELD_TYPE_BLOB)
|
if (field->type() == FIELD_TYPE_BLOB)
|
||||||
@ -531,7 +532,7 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag,
|
|||||||
if (i == 0)
|
if (i == 0)
|
||||||
field->key_start|= ((key_map) 1 << key);
|
field->key_start|= ((key_map) 1 << key);
|
||||||
if (field->key_length() == key_part->length &&
|
if (field->key_length() == key_part->length &&
|
||||||
field->type() != FIELD_TYPE_BLOB)
|
!(field->flags & BLOB_FLAG))
|
||||||
{
|
{
|
||||||
if ((index_flags & HA_KEY_READ_ONLY) &&
|
if ((index_flags & HA_KEY_READ_ONLY) &&
|
||||||
(field->key_type() != HA_KEYTYPE_TEXT ||
|
(field->key_type() != HA_KEYTYPE_TEXT ||
|
||||||
@ -560,7 +561,7 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag,
|
|||||||
if (field->key_length() != key_part->length)
|
if (field->key_length() != key_part->length)
|
||||||
{
|
{
|
||||||
key_part->key_part_flag|= HA_PART_KEY;
|
key_part->key_part_flag|= HA_PART_KEY;
|
||||||
if (field->type() != FIELD_TYPE_BLOB)
|
if (!(field->flags & BLOB_FLAG))
|
||||||
{ // Create a new field
|
{ // Create a new field
|
||||||
field=key_part->field=field->new_field(&outparam->mem_root,
|
field=key_part->field=field->new_field(&outparam->mem_root,
|
||||||
outparam);
|
outparam);
|
||||||
|
@ -1588,11 +1588,12 @@ static uchar to_upper_utf8[] = {
|
|||||||
static int my_utf8_uni(CHARSET_INFO *cs __attribute__((unused)),
|
static int my_utf8_uni(CHARSET_INFO *cs __attribute__((unused)),
|
||||||
my_wc_t * pwc, const uchar *s, const uchar *e)
|
my_wc_t * pwc, const uchar *s, const uchar *e)
|
||||||
{
|
{
|
||||||
unsigned char c = s[0];
|
unsigned char c;
|
||||||
|
|
||||||
if (s >= e)
|
if (s >= e)
|
||||||
return MY_CS_TOOFEW(0);
|
return MY_CS_TOOFEW(0);
|
||||||
|
|
||||||
|
c= s[0];
|
||||||
if (c < 0x80)
|
if (c < 0x80)
|
||||||
{
|
{
|
||||||
*pwc = c;
|
*pwc = c;
|
||||||
@ -1624,10 +1625,8 @@ static int my_utf8_uni (CHARSET_INFO *cs __attribute__((unused)) ,
|
|||||||
(my_wc_t) (s[2] ^ 0x80);
|
(my_wc_t) (s[2] ^ 0x80);
|
||||||
|
|
||||||
return 3;
|
return 3;
|
||||||
|
|
||||||
#ifdef UNICODE_32BIT
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#ifdef UNICODE_32BIT
|
||||||
else if (c < 0xf8 && sizeof(my_wc_t)*8 >= 32)
|
else if (c < 0xf8 && sizeof(my_wc_t)*8 >= 32)
|
||||||
{
|
{
|
||||||
if (s+4 > e) /* We need 4 characters */
|
if (s+4 > e) /* We need 4 characters */
|
||||||
@ -1685,8 +1684,8 @@ static int my_utf8_uni (CHARSET_INFO *cs __attribute__((unused)) ,
|
|||||||
| ((my_wc_t) (s[4] ^ 0x80) << 6)
|
| ((my_wc_t) (s[4] ^ 0x80) << 6)
|
||||||
| (my_wc_t) (s[5] ^ 0x80);
|
| (my_wc_t) (s[5] ^ 0x80);
|
||||||
return 6;
|
return 6;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
} else
|
|
||||||
return MY_CS_ILSEQ;
|
return MY_CS_ILSEQ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,8 +34,7 @@ pkgdata_DATA = my-small.cnf \
|
|||||||
my-large.cnf \
|
my-large.cnf \
|
||||||
my-huge.cnf \
|
my-huge.cnf \
|
||||||
mysql-log-rotate \
|
mysql-log-rotate \
|
||||||
mysql-@VERSION@.spec \
|
mysql-@VERSION@.spec
|
||||||
binary-configure
|
|
||||||
|
|
||||||
pkgdata_SCRIPTS = mysql.server
|
pkgdata_SCRIPTS = mysql.server
|
||||||
|
|
||||||
@ -49,7 +48,6 @@ CLEANFILES = my-small.cnf \
|
|||||||
mysql.server \
|
mysql.server \
|
||||||
binary-configure
|
binary-configure
|
||||||
|
|
||||||
|
|
||||||
mysql-@VERSION@.spec: mysql.spec
|
mysql-@VERSION@.spec: mysql.spec
|
||||||
rm -f $@
|
rm -f $@
|
||||||
cp mysql.spec $@
|
cp mysql.spec $@
|
||||||
@ -98,5 +96,7 @@ SUFFIXES = .sh
|
|||||||
$< > $@-t
|
$< > $@-t
|
||||||
@MV@ $@-t $@
|
@MV@ $@-t $@
|
||||||
|
|
||||||
|
all: binary-configure
|
||||||
|
|
||||||
# Don't update the files from bitkeeper
|
# Don't update the files from bitkeeper
|
||||||
%::SCCS/s.%
|
%::SCCS/s.%
|
||||||
|
@ -14,11 +14,11 @@ echo "and start the MySQL server for you. If you run into any trouble, please"
|
|||||||
echo "consult the MySQL manual, that you can find in the Docs directory."
|
echo "consult the MySQL manual, that you can find in the Docs directory."
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
./scripts/mysql_install_db
|
./scripts/mysql_install_db --no-defaults
|
||||||
if [ $? = 0 ]
|
if [ $? = 0 ]
|
||||||
then
|
then
|
||||||
echo "Starting the mysqld server. You can test that it is up and running"
|
echo "Starting the mysqld server. You can test that it is up and running"
|
||||||
echo "with the command:"
|
echo "with the command:"
|
||||||
echo "./bin/mysqladmin version"
|
echo "./bin/mysqladmin version"
|
||||||
./bin/mysqld_safe &
|
./bin/mysqld_safe --no-defaults &
|
||||||
fi
|
fi
|
||||||
|
Reference in New Issue
Block a user