mirror of
https://github.com/MariaDB/server.git
synced 2025-03-11 09:38:38 +01:00
Merge tulin@bk-internal.mysql.com:/home/bk/mysql-5.0
into poseidon.ndb.mysql.com:/home/tomas/mysql-5.0-ndb ndb/include/ndbapi/NdbTransaction.hpp: Auto merged ndb/src/kernel/blocks/dbtc/DbtcMain.cpp: Auto merged ndb/test/ndbapi/testNodeRestart.cpp: Auto merged ndb/test/run-test/daily-devel-tests.txt: Auto merged
This commit is contained in:
commit
45b0ea6546
26 changed files with 299 additions and 101 deletions
innobase/srv
mysql-test
Makefile.am
include
r
bigint.resultctype_cp1250_ch.resultgrant2.resulthave_cp1250_ch.requireinformation_schema.resultmysqldump.resultsymlink.result
t
mysys
ndb/src/kernel/blocks/dbtc
scripts
sql
strings
|
@ -568,7 +568,14 @@ open_or_create_log_file(
|
||||||
files[i] = os_file_create(name, OS_FILE_CREATE, OS_FILE_NORMAL,
|
files[i] = os_file_create(name, OS_FILE_CREATE, OS_FILE_NORMAL,
|
||||||
OS_LOG_FILE, &ret);
|
OS_LOG_FILE, &ret);
|
||||||
if (ret == FALSE) {
|
if (ret == FALSE) {
|
||||||
if (os_file_get_last_error(FALSE) != OS_FILE_ALREADY_EXISTS) {
|
if (os_file_get_last_error(FALSE) != OS_FILE_ALREADY_EXISTS
|
||||||
|
#ifdef UNIV_AIX
|
||||||
|
/* AIX 5.1 after security patch ML7 may have errno set
|
||||||
|
to 0 here, which causes our function to return 100;
|
||||||
|
work around that AIX problem */
|
||||||
|
&& os_file_get_last_error(FALSE) != 100
|
||||||
|
#endif
|
||||||
|
) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"InnoDB: Error in creating or opening %s\n", name);
|
"InnoDB: Error in creating or opening %s\n", name);
|
||||||
|
|
||||||
|
@ -728,7 +735,14 @@ open_or_create_data_files(
|
||||||
OS_FILE_NORMAL, OS_DATA_FILE, &ret);
|
OS_FILE_NORMAL, OS_DATA_FILE, &ret);
|
||||||
|
|
||||||
if (ret == FALSE && os_file_get_last_error(FALSE) !=
|
if (ret == FALSE && os_file_get_last_error(FALSE) !=
|
||||||
OS_FILE_ALREADY_EXISTS) {
|
OS_FILE_ALREADY_EXISTS
|
||||||
|
#ifdef UNIV_AIX
|
||||||
|
/* AIX 5.1 after security patch ML7 may have
|
||||||
|
errno set to 0 here, which causes our function
|
||||||
|
to return 100; work around that AIX problem */
|
||||||
|
&& os_file_get_last_error(FALSE) != 100
|
||||||
|
#endif
|
||||||
|
) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"InnoDB: Error in creating or opening %s\n",
|
"InnoDB: Error in creating or opening %s\n",
|
||||||
name);
|
name);
|
||||||
|
|
|
@ -45,7 +45,8 @@ mysql_test_run_new_SOURCES= mysql_test_run_new.c my_manage.c my_create_tables.c
|
||||||
dist-hook:
|
dist-hook:
|
||||||
mkdir -p $(distdir)/t $(distdir)/r $(distdir)/include \
|
mkdir -p $(distdir)/t $(distdir)/r $(distdir)/include \
|
||||||
$(distdir)/std_data
|
$(distdir)/std_data
|
||||||
$(INSTALL_DATA) $(srcdir)/t/*.test $(srcdir)/t/*.disabled $(distdir)/t
|
$(INSTALL_DATA) $(srcdir)/t/*.test $(distdir)/t
|
||||||
|
-$(INSTALL_DATA) $(srcdir)/t/*.disabled $(distdir)/t
|
||||||
$(INSTALL_DATA) $(srcdir)/t/*.opt $(srcdir)/t/*.sh $(srcdir)/t/*.slave-mi $(distdir)/t
|
$(INSTALL_DATA) $(srcdir)/t/*.opt $(srcdir)/t/*.sh $(srcdir)/t/*.slave-mi $(distdir)/t
|
||||||
$(INSTALL_DATA) $(srcdir)/include/*.inc $(distdir)/include
|
$(INSTALL_DATA) $(srcdir)/include/*.inc $(distdir)/include
|
||||||
$(INSTALL_DATA) $(srcdir)/r/*.result $(srcdir)/r/*.result.es $(srcdir)/r/*.require $(distdir)/r
|
$(INSTALL_DATA) $(srcdir)/r/*.result $(srcdir)/r/*.result.es $(srcdir)/r/*.require $(distdir)/r
|
||||||
|
@ -63,7 +64,7 @@ install-data-local:
|
||||||
$(DESTDIR)$(testdir)/std_data
|
$(DESTDIR)$(testdir)/std_data
|
||||||
$(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(testdir)
|
$(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(testdir)
|
||||||
$(INSTALL_DATA) $(srcdir)/t/*.test $(DESTDIR)$(testdir)/t
|
$(INSTALL_DATA) $(srcdir)/t/*.test $(DESTDIR)$(testdir)/t
|
||||||
$(INSTALL_DATA) $(srcdir)/t/*.disabled $(DESTDIR)$(testdir)/t
|
-$(INSTALL_DATA) $(srcdir)/t/*.disabled $(DESTDIR)$(testdir)/t
|
||||||
$(INSTALL_DATA) $(srcdir)/t/*.opt $(DESTDIR)$(testdir)/t
|
$(INSTALL_DATA) $(srcdir)/t/*.opt $(DESTDIR)$(testdir)/t
|
||||||
$(INSTALL_DATA) $(srcdir)/t/*.sh $(DESTDIR)$(testdir)/t
|
$(INSTALL_DATA) $(srcdir)/t/*.sh $(DESTDIR)$(testdir)/t
|
||||||
$(INSTALL_DATA) $(srcdir)/t/*.slave-mi $(DESTDIR)$(testdir)/t
|
$(INSTALL_DATA) $(srcdir)/t/*.slave-mi $(DESTDIR)$(testdir)/t
|
||||||
|
|
4
mysql-test/include/have_cp1250_ch.inc
Normal file
4
mysql-test/include/have_cp1250_ch.inc
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
-- require r/have_cp1250_ch.require
|
||||||
|
disable_query_log;
|
||||||
|
show collation like "cp1250_czech_cs";
|
||||||
|
enable_query_log;
|
|
@ -87,3 +87,42 @@ drop table t1;
|
||||||
SELECT '0x8000000000000001'+0;
|
SELECT '0x8000000000000001'+0;
|
||||||
'0x8000000000000001'+0
|
'0x8000000000000001'+0
|
||||||
0
|
0
|
||||||
|
create table t1 (
|
||||||
|
value64 bigint unsigned not null,
|
||||||
|
value32 integer not null,
|
||||||
|
primary key(value64, value32)
|
||||||
|
);
|
||||||
|
create table t2 (
|
||||||
|
value64 bigint unsigned not null,
|
||||||
|
value32 integer not null,
|
||||||
|
primary key(value64, value32)
|
||||||
|
);
|
||||||
|
insert into t1 values(17156792991891826145, 1);
|
||||||
|
insert into t1 values( 9223372036854775807, 2);
|
||||||
|
insert into t2 values(17156792991891826145, 3);
|
||||||
|
insert into t2 values( 9223372036854775807, 4);
|
||||||
|
select * from t1;
|
||||||
|
value64 value32
|
||||||
|
9223372036854775807 2
|
||||||
|
17156792991891826145 1
|
||||||
|
select * from t2;
|
||||||
|
value64 value32
|
||||||
|
9223372036854775807 4
|
||||||
|
17156792991891826145 3
|
||||||
|
select * from t1, t2 where t1.value64=17156792991891826145 and
|
||||||
|
t2.value64=17156792991891826145;
|
||||||
|
value64 value32 value64 value32
|
||||||
|
17156792991891826145 1 17156792991891826145 3
|
||||||
|
select * from t1, t2 where t1.value64=17156792991891826145 and
|
||||||
|
t2.value64=t1.value64;
|
||||||
|
value64 value32 value64 value32
|
||||||
|
17156792991891826145 1 17156792991891826145 3
|
||||||
|
select * from t1, t2 where t1.value64= 9223372036854775807 and
|
||||||
|
t2.value64=9223372036854775807;
|
||||||
|
value64 value32 value64 value32
|
||||||
|
9223372036854775807 2 9223372036854775807 4
|
||||||
|
select * from t1, t2 where t1.value64= 9223372036854775807 and
|
||||||
|
t2.value64=t1.value64;
|
||||||
|
value64 value32 value64 value32
|
||||||
|
9223372036854775807 2 9223372036854775807 4
|
||||||
|
drop table t1, t2;
|
||||||
|
|
9
mysql-test/r/ctype_cp1250_ch.result
Normal file
9
mysql-test/r/ctype_cp1250_ch.result
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
SHOW COLLATION LIKE 'cp1250_czech_cs';
|
||||||
|
Collation Charset Id Default Compiled Sortlen
|
||||||
|
cp1250_czech_cs cp1250 34 Yes 2
|
||||||
|
CREATE TABLE t1 (a char(16)) character set cp1250 collate cp1250_czech_cs;
|
||||||
|
INSERT INTO t1 VALUES ('');
|
||||||
|
SELECT a, length(a), a='', a=' ', a=' ' FROM t1;
|
||||||
|
a length(a) a='' a=' ' a=' '
|
||||||
|
0 1 1 1
|
||||||
|
DROP TABLE t1;
|
|
@ -233,3 +233,20 @@ drop user mysqltest_B@'%';
|
||||||
ERROR 42000: Access denied for user 'mysqltest_3'@'localhost' to database 'mysql'
|
ERROR 42000: Access denied for user 'mysqltest_3'@'localhost' to database 'mysql'
|
||||||
drop user mysqltest_B@'%';
|
drop user mysqltest_B@'%';
|
||||||
drop user mysqltest_3@localhost;
|
drop user mysqltest_3@localhost;
|
||||||
|
set @@sql_mode='';
|
||||||
|
create database mysqltest_1;
|
||||||
|
create table mysqltest_1.t1 (i int);
|
||||||
|
insert into mysqltest_1.t1 values (1),(2),(3);
|
||||||
|
GRANT ALL ON mysqltest_1.t1 TO mysqltest_1@'127.0.0.0/255.0.0.0';
|
||||||
|
show grants for current_user();
|
||||||
|
Grants for mysqltest_1@127.0.0.0/255.0.0.0
|
||||||
|
GRANT USAGE ON *.* TO 'mysqltest_1'@'127.0.0.0/255.0.0.0'
|
||||||
|
GRANT ALL PRIVILEGES ON `mysqltest_1`.`t1` TO 'mysqltest_1'@'127.0.0.0/255.0.0.0'
|
||||||
|
select * from t1;
|
||||||
|
i
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
REVOKE ALL ON mysqltest_1.t1 FROM mysqltest_1@'127.0.0.0/255.0.0.0';
|
||||||
|
drop table mysqltest_1.t1;
|
||||||
|
drop database mysqltest_1;
|
||||||
|
|
2
mysql-test/r/have_cp1250_ch.require
Normal file
2
mysql-test/r/have_cp1250_ch.require
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
Collation Charset Id Default Compiled Sortlen
|
||||||
|
cp1250_czech_cs cp1250 34 Yes 2
|
|
@ -631,3 +631,10 @@ TABLES UPDATE_TIME datetime
|
||||||
TABLES CHECK_TIME datetime
|
TABLES CHECK_TIME datetime
|
||||||
ROUTINES CREATED datetime
|
ROUTINES CREATED datetime
|
||||||
ROUTINES LAST_ALTERED datetime
|
ROUTINES LAST_ALTERED datetime
|
||||||
|
SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES A
|
||||||
|
WHERE NOT EXISTS
|
||||||
|
(SELECT * FROM INFORMATION_SCHEMA.COLUMNS B
|
||||||
|
WHERE A.TABLE_SCHEMA = B.TABLE_SCHEMA
|
||||||
|
AND A.TABLE_NAME = B.TABLE_NAME);
|
||||||
|
COUNT(*)
|
||||||
|
0
|
||||||
|
|
|
@ -477,27 +477,6 @@ CREATE TABLE `t1` (
|
||||||
) TYPE=MyISAM;
|
) TYPE=MyISAM;
|
||||||
|
|
||||||
|
|
||||||
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
|
|
||||||
LOCK TABLES `t1` WRITE;
|
|
||||||
INSERT INTO `t1` VALUES ('ÄÖÜß');
|
|
||||||
UNLOCK TABLES;
|
|
||||||
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
|
|
||||||
|
|
||||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
|
||||||
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
|
||||||
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
|
||||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
|
||||||
|
|
||||||
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
|
||||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
|
||||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO,MYSQL323' */;
|
|
||||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
|
||||||
DROP TABLE IF EXISTS `t1`;
|
|
||||||
CREATE TABLE `t1` (
|
|
||||||
`a` char(10) default NULL
|
|
||||||
) TYPE=MyISAM;
|
|
||||||
|
|
||||||
|
|
||||||
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
|
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
|
||||||
LOCK TABLES `t1` WRITE;
|
LOCK TABLES `t1` WRITE;
|
||||||
INSERT INTO `t1` VALUES ('Ž™šá');
|
INSERT INTO `t1` VALUES ('Ž™šá');
|
||||||
|
|
|
@ -93,3 +93,15 @@ t1 CREATE TABLE `t1` (
|
||||||
`b` int(11) default NULL
|
`b` int(11) default NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`i` int(11) default NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
|
drop table t1;
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`i` int(11) default NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
|
drop table t1;
|
||||||
|
|
|
@ -71,3 +71,36 @@ drop table t1;
|
||||||
# atof() behaviour is different of different systems. to be fixed in 4.1
|
# atof() behaviour is different of different systems. to be fixed in 4.1
|
||||||
SELECT '0x8000000000000001'+0;
|
SELECT '0x8000000000000001'+0;
|
||||||
|
|
||||||
|
# Test for BUG#8562: joins over BIGINT UNSIGNED value + constant propagation
|
||||||
|
create table t1 (
|
||||||
|
value64 bigint unsigned not null,
|
||||||
|
value32 integer not null,
|
||||||
|
primary key(value64, value32)
|
||||||
|
);
|
||||||
|
|
||||||
|
create table t2 (
|
||||||
|
value64 bigint unsigned not null,
|
||||||
|
value32 integer not null,
|
||||||
|
primary key(value64, value32)
|
||||||
|
);
|
||||||
|
|
||||||
|
insert into t1 values(17156792991891826145, 1);
|
||||||
|
insert into t1 values( 9223372036854775807, 2);
|
||||||
|
insert into t2 values(17156792991891826145, 3);
|
||||||
|
insert into t2 values( 9223372036854775807, 4);
|
||||||
|
|
||||||
|
select * from t1;
|
||||||
|
select * from t2;
|
||||||
|
|
||||||
|
select * from t1, t2 where t1.value64=17156792991891826145 and
|
||||||
|
t2.value64=17156792991891826145;
|
||||||
|
select * from t1, t2 where t1.value64=17156792991891826145 and
|
||||||
|
t2.value64=t1.value64;
|
||||||
|
|
||||||
|
select * from t1, t2 where t1.value64= 9223372036854775807 and
|
||||||
|
t2.value64=9223372036854775807;
|
||||||
|
select * from t1, t2 where t1.value64= 9223372036854775807 and
|
||||||
|
t2.value64=t1.value64;
|
||||||
|
|
||||||
|
drop table t1, t2;
|
||||||
|
|
||||||
|
|
12
mysql-test/t/ctype_cp1250_ch.test
Normal file
12
mysql-test/t/ctype_cp1250_ch.test
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
-- source include/have_cp1250_ch.inc
|
||||||
|
|
||||||
|
SHOW COLLATION LIKE 'cp1250_czech_cs';
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bugs: #8840: Empty string comparison and character set 'cp1250'
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a char(16)) character set cp1250 collate cp1250_czech_cs;
|
||||||
|
INSERT INTO t1 VALUES ('');
|
||||||
|
SELECT a, length(a), a='', a=' ', a=' ' FROM t1;
|
||||||
|
DROP TABLE t1;
|
|
@ -246,3 +246,18 @@ connection default;
|
||||||
drop user mysqltest_B@'%';
|
drop user mysqltest_B@'%';
|
||||||
drop user mysqltest_3@localhost;
|
drop user mysqltest_3@localhost;
|
||||||
#
|
#
|
||||||
|
# Bug #3309: Test IP addresses with netmask
|
||||||
|
set @@sql_mode='';
|
||||||
|
create database mysqltest_1;
|
||||||
|
create table mysqltest_1.t1 (i int);
|
||||||
|
insert into mysqltest_1.t1 values (1),(2),(3);
|
||||||
|
GRANT ALL ON mysqltest_1.t1 TO mysqltest_1@'127.0.0.0/255.0.0.0';
|
||||||
|
connect (n1,127.0.0.1,mysqltest_1,,mysqltest_1,$MASTER_MYPORT,$MASTER_MYSOCK);
|
||||||
|
connection n1;
|
||||||
|
show grants for current_user();
|
||||||
|
select * from t1;
|
||||||
|
disconnect n1;
|
||||||
|
connection default;
|
||||||
|
REVOKE ALL ON mysqltest_1.t1 FROM mysqltest_1@'127.0.0.0/255.0.0.0';
|
||||||
|
drop table mysqltest_1.t1;
|
||||||
|
drop database mysqltest_1;
|
||||||
|
|
|
@ -400,3 +400,12 @@ information_schema.columns
|
||||||
where data_type = 'longtext';
|
where data_type = 'longtext';
|
||||||
select table_name, column_name, data_type from information_schema.columns
|
select table_name, column_name, data_type from information_schema.columns
|
||||||
where data_type = 'datetime';
|
where data_type = 'datetime';
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #8164 subquery with INFORMATION_SCHEMA.COLUMNS, 100 % CPU
|
||||||
|
#
|
||||||
|
SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES A
|
||||||
|
WHERE NOT EXISTS
|
||||||
|
(SELECT * FROM INFORMATION_SCHEMA.COLUMNS B
|
||||||
|
WHERE A.TABLE_SCHEMA = B.TABLE_SCHEMA
|
||||||
|
AND A.TABLE_NAME = B.TABLE_NAME);
|
||||||
|
|
|
@ -158,7 +158,14 @@ drop database mysqldump_test_db;
|
||||||
CREATE TABLE t1 (a CHAR(10));
|
CREATE TABLE t1 (a CHAR(10));
|
||||||
INSERT INTO t1 VALUES (_latin1 'ÄÖÜß');
|
INSERT INTO t1 VALUES (_latin1 'ÄÖÜß');
|
||||||
--exec $MYSQL_DUMP --character-sets-dir=$CHARSETSDIR --skip-comments test t1
|
--exec $MYSQL_DUMP --character-sets-dir=$CHARSETSDIR --skip-comments test t1
|
||||||
--exec $MYSQL_DUMP --character-sets-dir=$CHARSETSDIR --skip-comments --compatible=mysql323 test t1
|
#
|
||||||
|
# Bug#8063: make test mysqldump [ fail ]
|
||||||
|
# We cannot tes this command because its output depends
|
||||||
|
# on --default-character-set incompiled into "mysqldump" program.
|
||||||
|
# If the future we can move this command into a separate test with
|
||||||
|
# checking that "mysqldump" is compiled with "latin1"
|
||||||
|
#
|
||||||
|
#--exec $MYSQL_DUMP --character-sets-dir=$CHARSETSDIR --skip-comments --compatible=mysql323 test t1
|
||||||
--exec $MYSQL_DUMP --character-sets-dir=$CHARSETSDIR --skip-comments --compatible=mysql323 --default-character-set=cp850 test t1
|
--exec $MYSQL_DUMP --character-sets-dir=$CHARSETSDIR --skip-comments --compatible=mysql323 --default-character-set=cp850 test t1
|
||||||
--exec $MYSQL_DUMP --character-sets-dir=$CHARSETSDIR --skip-comments --default-character-set=cp850 --compatible=mysql323 test t1
|
--exec $MYSQL_DUMP --character-sets-dir=$CHARSETSDIR --skip-comments --default-character-set=cp850 --compatible=mysql323 test t1
|
||||||
--exec $MYSQL_DUMP --character-sets-dir=$CHARSETSDIR --skip-comments --default-character-set=utf8 --compatible=mysql323 test t1
|
--exec $MYSQL_DUMP --character-sets-dir=$CHARSETSDIR --skip-comments --default-character-set=utf8 --compatible=mysql323 test t1
|
||||||
|
|
|
@ -121,3 +121,18 @@ eval alter table t1 index directory="$MYSQL_TEST_DIR/var/log";
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
show create table t1;
|
show create table t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test specifying DATA DIRECTORY that is the same as what would normally
|
||||||
|
# have been chosen. (Bug #8707)
|
||||||
|
#
|
||||||
|
disable_query_log;
|
||||||
|
eval create table t1 (i int) data directory = "$MYSQL_TEST_DIR/var/master-data/test/";
|
||||||
|
enable_query_log;
|
||||||
|
show create table t1;
|
||||||
|
drop table t1;
|
||||||
|
disable_query_log;
|
||||||
|
eval create table t1 (i int) index directory = "$MYSQL_TEST_DIR/var/master-data/test/";
|
||||||
|
enable_query_log;
|
||||||
|
show create table t1;
|
||||||
|
drop table t1;
|
||||||
|
|
|
@ -32,6 +32,7 @@ File my_create_with_symlink(const char *linkname, const char *filename,
|
||||||
int tmp_errno;
|
int tmp_errno;
|
||||||
/* Test if we should create a link */
|
/* Test if we should create a link */
|
||||||
int create_link;
|
int create_link;
|
||||||
|
char abs_linkname[FN_REFLEN];
|
||||||
DBUG_ENTER("my_create_with_symlink");
|
DBUG_ENTER("my_create_with_symlink");
|
||||||
|
|
||||||
if (my_disable_symlinks)
|
if (my_disable_symlinks)
|
||||||
|
@ -42,7 +43,11 @@ File my_create_with_symlink(const char *linkname, const char *filename,
|
||||||
filename= linkname;
|
filename= linkname;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
create_link= (linkname && strcmp(linkname,filename));
|
{
|
||||||
|
if (linkname)
|
||||||
|
my_realpath(&abs_linkname, linkname, MYF(0));
|
||||||
|
create_link= (linkname && strcmp(abs_linkname,filename));
|
||||||
|
}
|
||||||
|
|
||||||
if (!(MyFlags & MY_DELETE_OLD))
|
if (!(MyFlags & MY_DELETE_OLD))
|
||||||
{
|
{
|
||||||
|
|
|
@ -6074,11 +6074,17 @@ int Dbtc::releaseAndAbort(Signal* signal)
|
||||||
UintR TnoLoops = tcConnectptr.p->noOfNodes;
|
UintR TnoLoops = tcConnectptr.p->noOfNodes;
|
||||||
|
|
||||||
apiConnectptr.p->counter++;
|
apiConnectptr.p->counter++;
|
||||||
|
bool prevAlive = false;
|
||||||
for (Uint32 Ti = 0; Ti < TnoLoops ; Ti++) {
|
for (Uint32 Ti = 0; Ti < TnoLoops ; Ti++) {
|
||||||
localHostptr.i = tcConnectptr.p->tcNodedata[Ti];
|
localHostptr.i = tcConnectptr.p->tcNodedata[Ti];
|
||||||
ptrCheckGuard(localHostptr, chostFilesize, hostRecord);
|
ptrCheckGuard(localHostptr, chostFilesize, hostRecord);
|
||||||
if (localHostptr.p->hostStatus == HS_ALIVE) {
|
if (localHostptr.p->hostStatus == HS_ALIVE) {
|
||||||
jam();
|
jam();
|
||||||
|
if (prevAlive) {
|
||||||
|
// if previous is alive, its LQH forwards abort to this node
|
||||||
|
jam();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
/* ************< */
|
/* ************< */
|
||||||
/* ABORT < */
|
/* ABORT < */
|
||||||
/* ************< */
|
/* ************< */
|
||||||
|
@ -6088,15 +6094,16 @@ int Dbtc::releaseAndAbort(Signal* signal)
|
||||||
signal->theData[2] = apiConnectptr.p->transid[0];
|
signal->theData[2] = apiConnectptr.p->transid[0];
|
||||||
signal->theData[3] = apiConnectptr.p->transid[1];
|
signal->theData[3] = apiConnectptr.p->transid[1];
|
||||||
sendSignal(tblockref, GSN_ABORT, signal, 4, JBB);
|
sendSignal(tblockref, GSN_ABORT, signal, 4, JBB);
|
||||||
return 1;
|
prevAlive = true;
|
||||||
} else {
|
} else {
|
||||||
jam();
|
jam();
|
||||||
signal->theData[0] = tcConnectptr.i;
|
signal->theData[0] = tcConnectptr.i;
|
||||||
signal->theData[1] = apiConnectptr.p->transid[0];
|
signal->theData[1] = apiConnectptr.p->transid[0];
|
||||||
signal->theData[2] = apiConnectptr.p->transid[1];
|
signal->theData[2] = apiConnectptr.p->transid[1];
|
||||||
signal->theData[3] = hostptr.i;
|
signal->theData[3] = localHostptr.i;
|
||||||
signal->theData[4] = ZFALSE;
|
signal->theData[4] = ZFALSE;
|
||||||
sendSignal(cownref, GSN_ABORTED, signal, 5, JBB);
|
sendSignal(cownref, GSN_ABORTED, signal, 5, JBB);
|
||||||
|
prevAlive = false;
|
||||||
}//if
|
}//if
|
||||||
}//for
|
}//for
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -272,10 +272,7 @@ foreach my $rdb ( @db_desc ) {
|
||||||
my $negated;
|
my $negated;
|
||||||
if ($rdb->{t_regex}) {
|
if ($rdb->{t_regex}) {
|
||||||
$t_regex = $rdb->{t_regex}; ## assign temporary regex
|
$t_regex = $rdb->{t_regex}; ## assign temporary regex
|
||||||
$negated = $t_regex =~ tr/~//d; ## remove and count
|
$negated = $t_regex =~ s/^~//; ## note and remove negation operator
|
||||||
## negation operator: we
|
|
||||||
## don't allow ~ in table
|
|
||||||
## names
|
|
||||||
|
|
||||||
$t_regex = qr/$t_regex/; ## make regex string from
|
$t_regex = qr/$t_regex/; ## make regex string from
|
||||||
## user regex
|
## user regex
|
||||||
|
@ -820,6 +817,16 @@ sub get_list_of_tables {
|
||||||
});
|
});
|
||||||
|
|
||||||
my @dbh_tables = eval { $dbh->tables() };
|
my @dbh_tables = eval { $dbh->tables() };
|
||||||
|
|
||||||
|
## Remove quotes around table names
|
||||||
|
my $quote = $dbh->get_info(29); # SQL_IDENTIFIER_QUOTE_CHAR
|
||||||
|
if ($quote) {
|
||||||
|
foreach (@dbh_tables) {
|
||||||
|
s/^$quote(.*)$quote$/$1/;
|
||||||
|
s/$quote$quote/$quote/g;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$dbh->disconnect();
|
$dbh->disconnect();
|
||||||
return @dbh_tables;
|
return @dbh_tables;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1242,6 +1242,8 @@ public:
|
||||||
The following class is used to optimize comparing of date and bigint columns
|
The following class is used to optimize comparing of date and bigint columns
|
||||||
We need to save the original item, to be able to set the field to the
|
We need to save the original item, to be able to set the field to the
|
||||||
original value in 'opt_range'.
|
original value in 'opt_range'.
|
||||||
|
An instance of Item_int_with_ref may refer to a signed or an unsigned
|
||||||
|
integer.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class Item_int_with_ref :public Item_int
|
class Item_int_with_ref :public Item_int
|
||||||
|
@ -1256,6 +1258,11 @@ public:
|
||||||
{
|
{
|
||||||
return ref->save_in_field(field, no_conversions);
|
return ref->save_in_field(field, no_conversions);
|
||||||
}
|
}
|
||||||
|
Item *new_item()
|
||||||
|
{
|
||||||
|
return (ref->unsigned_flag)? new Item_uint(ref->name, ref->max_length) :
|
||||||
|
new Item_int(ref->name, ref->max_length);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2364,26 +2364,6 @@ longlong Item_func_bit_count::val_int()
|
||||||
|
|
||||||
#ifdef HAVE_DLOPEN
|
#ifdef HAVE_DLOPEN
|
||||||
|
|
||||||
udf_handler::~udf_handler()
|
|
||||||
{
|
|
||||||
if (!not_original)
|
|
||||||
{
|
|
||||||
if (initialized)
|
|
||||||
{
|
|
||||||
if (u_d->func_deinit != NULL)
|
|
||||||
{
|
|
||||||
void (*deinit)(UDF_INIT *) = (void (*)(UDF_INIT*))
|
|
||||||
u_d->func_deinit;
|
|
||||||
(*deinit)(&initid);
|
|
||||||
}
|
|
||||||
free_udf(u_d);
|
|
||||||
}
|
|
||||||
if (buffers) // Because of bug in ecc
|
|
||||||
delete [] buffers;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
udf_handler::fix_fields(THD *thd, TABLE_LIST *tables, Item_result_field *func,
|
udf_handler::fix_fields(THD *thd, TABLE_LIST *tables, Item_result_field *func,
|
||||||
uint arg_count, Item **arguments)
|
uint arg_count, Item **arguments)
|
||||||
|
@ -2773,6 +2753,31 @@ String *Item_func_udf_str::val_str(String *str)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
This has to come last in the udf_handler methods, or the compiler for IBM
|
||||||
|
AIX fails to compile with debugging enabled. (Yes, really.)
|
||||||
|
*/
|
||||||
|
|
||||||
|
udf_handler::~udf_handler()
|
||||||
|
{
|
||||||
|
if (!not_original)
|
||||||
|
{
|
||||||
|
if (initialized)
|
||||||
|
{
|
||||||
|
if (u_d->func_deinit != NULL)
|
||||||
|
{
|
||||||
|
void (*deinit)(UDF_INIT *) = (void (*)(UDF_INIT*))
|
||||||
|
u_d->func_deinit;
|
||||||
|
(*deinit)(&initid);
|
||||||
|
}
|
||||||
|
free_udf(u_d);
|
||||||
|
}
|
||||||
|
if (buffers) // Because of bug in ecc
|
||||||
|
delete [] buffers;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
bool udf_handler::get_arguments() { return 0; }
|
bool udf_handler::get_arguments() { return 0; }
|
||||||
#endif /* HAVE_DLOPEN */
|
#endif /* HAVE_DLOPEN */
|
||||||
|
|
|
@ -3147,13 +3147,11 @@ we force server id to 2, but this MySQL server will not act as a slave.");
|
||||||
create_shutdown_thread();
|
create_shutdown_thread();
|
||||||
create_maintenance_thread();
|
create_maintenance_thread();
|
||||||
|
|
||||||
printf(ER(ER_READY),my_progname,server_version,
|
sql_print_information(ER(ER_READY),my_progname,server_version,
|
||||||
((unix_sock == INVALID_SOCKET) ? (char*) "" : mysqld_unix_port),
|
((unix_sock == INVALID_SOCKET) ? (char*) ""
|
||||||
mysqld_port);
|
: mysqld_unix_port),
|
||||||
if (MYSQL_COMPILATION_COMMENT[0] != '\0')
|
mysqld_port,
|
||||||
fputs(" " MYSQL_COMPILATION_COMMENT, stdout);
|
MYSQL_COMPILATION_COMMENT);
|
||||||
putchar('\n');
|
|
||||||
fflush(stdout);
|
|
||||||
|
|
||||||
#if defined(__NT__) || defined(HAVE_SMEM)
|
#if defined(__NT__) || defined(HAVE_SMEM)
|
||||||
handle_connections_methods();
|
handle_connections_methods();
|
||||||
|
|
|
@ -1824,7 +1824,7 @@ ER_READY
|
||||||
cze "%s: p-Bøipraven na spojení"
|
cze "%s: p-Bøipraven na spojení"
|
||||||
dan "%s: klar til tilslutninger"
|
dan "%s: klar til tilslutninger"
|
||||||
nla "%s: klaar voor verbindingen"
|
nla "%s: klaar voor verbindingen"
|
||||||
eng "%s: ready for connections.\nVersion: '%s' socket: '%s' port: %d"
|
eng "%s: ready for connections.\nVersion: '%s' socket: '%s' port: %d %s"
|
||||||
jps "%s: <20>€”õŠ®—¹",
|
jps "%s: <20>€”õŠ®—¹",
|
||||||
est "%s: ootab ühendusi"
|
est "%s: ootab ühendusi"
|
||||||
fre "%s: Prêt pour des connections"
|
fre "%s: Prêt pour des connections"
|
||||||
|
@ -1839,7 +1839,7 @@ ER_READY
|
||||||
pol "%s: gotowe do po³?czenia"
|
pol "%s: gotowe do po³?czenia"
|
||||||
por "%s: Pronto para conexões"
|
por "%s: Pronto para conexões"
|
||||||
rum "%s: sint gata pentru conectii"
|
rum "%s: sint gata pentru conectii"
|
||||||
rus "%s: çÏÔÏ× ÐÒÉÎÉÍÁÔØ ÓÏÅÄÉÎÅÎÉÑ.\n÷ÅÒÓÉÑ: '%s' ÓÏËÅÔ: '%s' ÐÏÒÔ: %d"
|
rus "%s: çÏÔÏ× ÐÒÉÎÉÍÁÔØ ÓÏÅÄÉÎÅÎÉÑ.\n÷ÅÒÓÉÑ: '%s' ÓÏËÅÔ: '%s' ÐÏÒÔ: %d %s"
|
||||||
serbian "%s: Spreman za konekcije\n"
|
serbian "%s: Spreman za konekcije\n"
|
||||||
slo "%s: pripravený na spojenie"
|
slo "%s: pripravený na spojenie"
|
||||||
spa "%s: preparado para conexiones"
|
spa "%s: preparado para conexiones"
|
||||||
|
|
|
@ -1928,7 +1928,8 @@ static byte* get_key_column(GRANT_COLUMN *buff,uint *length,
|
||||||
class GRANT_NAME :public Sql_alloc
|
class GRANT_NAME :public Sql_alloc
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
char *host,*db, *user, *tname, *hash_key, *orig_host;
|
acl_host_and_ip host;
|
||||||
|
char *db, *user, *tname, *hash_key;
|
||||||
ulong privs;
|
ulong privs;
|
||||||
ulong sort;
|
ulong sort;
|
||||||
uint key_length;
|
uint key_length;
|
||||||
|
@ -1960,12 +1961,10 @@ GRANT_NAME::GRANT_NAME(const char *h, const char *d,const char *u,
|
||||||
:privs(p)
|
:privs(p)
|
||||||
{
|
{
|
||||||
/* Host given by user */
|
/* Host given by user */
|
||||||
orig_host= strdup_root(&memex,h);
|
update_hostname(&host, strdup_root(&memex, h));
|
||||||
/* Convert empty hostname to '%' for easy comparison */
|
|
||||||
host= orig_host[0] ? orig_host : (char*) "%";
|
|
||||||
db = strdup_root(&memex,d);
|
db = strdup_root(&memex,d);
|
||||||
user = strdup_root(&memex,u);
|
user = strdup_root(&memex,u);
|
||||||
sort= get_sort(3,host,db,user);
|
sort= get_sort(3,host.hostname,db,user);
|
||||||
tname= strdup_root(&memex,t);
|
tname= strdup_root(&memex,t);
|
||||||
if (lower_case_table_names)
|
if (lower_case_table_names)
|
||||||
{
|
{
|
||||||
|
@ -1989,17 +1988,12 @@ GRANT_TABLE::GRANT_TABLE(const char *h, const char *d,const char *u,
|
||||||
|
|
||||||
GRANT_NAME::GRANT_NAME(TABLE *form)
|
GRANT_NAME::GRANT_NAME(TABLE *form)
|
||||||
{
|
{
|
||||||
orig_host= host= get_field(&memex, form->field[0]);
|
update_hostname(&host, get_field(&memex, form->field[0]));
|
||||||
db= get_field(&memex,form->field[1]);
|
db= get_field(&memex,form->field[1]);
|
||||||
user= get_field(&memex,form->field[2]);
|
user= get_field(&memex,form->field[2]);
|
||||||
if (!user)
|
if (!user)
|
||||||
user= (char*) "";
|
user= (char*) "";
|
||||||
if (!orig_host)
|
sort= get_sort(3, host.hostname, db, user);
|
||||||
{
|
|
||||||
orig_host= (char*) "";
|
|
||||||
host= (char*) "%";
|
|
||||||
}
|
|
||||||
sort= get_sort(3, orig_host, db, user);
|
|
||||||
tname= get_field(&memex,form->field[3]);
|
tname= get_field(&memex,form->field[3]);
|
||||||
if (!db || !tname)
|
if (!db || !tname)
|
||||||
{
|
{
|
||||||
|
@ -2042,7 +2036,7 @@ GRANT_TABLE::GRANT_TABLE(TABLE *form, TABLE *col_privs)
|
||||||
{
|
{
|
||||||
uint key_prefix_len;
|
uint key_prefix_len;
|
||||||
KEY_PART_INFO *key_part= col_privs->key_info->key_part;
|
KEY_PART_INFO *key_part= col_privs->key_info->key_part;
|
||||||
col_privs->field[0]->store(orig_host,(uint) strlen(orig_host),
|
col_privs->field[0]->store(host.hostname,(uint) strlen(host.hostname),
|
||||||
system_charset_info);
|
system_charset_info);
|
||||||
col_privs->field[1]->store(db,(uint) strlen(db), system_charset_info);
|
col_privs->field[1]->store(db,(uint) strlen(db), system_charset_info);
|
||||||
col_privs->field[2]->store(user,(uint) strlen(user), system_charset_info);
|
col_privs->field[2]->store(user,(uint) strlen(user), system_charset_info);
|
||||||
|
@ -2128,17 +2122,12 @@ static GRANT_NAME *name_hash_search(HASH *name_hash,
|
||||||
{
|
{
|
||||||
if (exact)
|
if (exact)
|
||||||
{
|
{
|
||||||
if ((host &&
|
if (compare_hostname(&grant_name->host, host, ip))
|
||||||
!my_strcasecmp(system_charset_info, host, grant_name->host)) ||
|
|
||||||
(ip && !strcmp(ip,grant_name->host)))
|
|
||||||
return grant_name;
|
return grant_name;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (((host && !wild_case_compare(system_charset_info,
|
if (compare_hostname(&grant_name->host, host, ip) &&
|
||||||
host,grant_name->host)) ||
|
|
||||||
(ip && !wild_case_compare(system_charset_info,
|
|
||||||
ip,grant_name->host))) &&
|
|
||||||
(!found || found->sort < grant_name->sort))
|
(!found || found->sort < grant_name->sort))
|
||||||
found=grant_name; // Host ok
|
found=grant_name; // Host ok
|
||||||
}
|
}
|
||||||
|
@ -3189,7 +3178,7 @@ my_bool grant_init(THD *org_thd)
|
||||||
|
|
||||||
if (check_no_resolve)
|
if (check_no_resolve)
|
||||||
{
|
{
|
||||||
if (hostname_requires_resolving(mem_check->host))
|
if (hostname_requires_resolving(mem_check->host.hostname))
|
||||||
{
|
{
|
||||||
sql_print_warning("'tables_priv' entry '%s %s@%s' "
|
sql_print_warning("'tables_priv' entry '%s %s@%s' "
|
||||||
"ignored in --skip-name-resolve mode.",
|
"ignored in --skip-name-resolve mode.",
|
||||||
|
@ -3227,7 +3216,7 @@ my_bool grant_init(THD *org_thd)
|
||||||
|
|
||||||
if (check_no_resolve)
|
if (check_no_resolve)
|
||||||
{
|
{
|
||||||
if (hostname_requires_resolving(mem_check->host))
|
if (hostname_requires_resolving(mem_check->host.hostname))
|
||||||
{
|
{
|
||||||
sql_print_warning("'procs_priv' entry '%s %s@%s' "
|
sql_print_warning("'procs_priv' entry '%s %s@%s' "
|
||||||
"ignored in --skip-name-resolve mode.",
|
"ignored in --skip-name-resolve mode.",
|
||||||
|
@ -3541,10 +3530,7 @@ bool check_grant_db(THD *thd,const char *db)
|
||||||
idx);
|
idx);
|
||||||
if (len < grant_table->key_length &&
|
if (len < grant_table->key_length &&
|
||||||
!memcmp(grant_table->hash_key,helping,len) &&
|
!memcmp(grant_table->hash_key,helping,len) &&
|
||||||
(thd->host && !wild_case_compare(system_charset_info,
|
compare_hostname(&grant_table->host, thd->host, thd->ip))
|
||||||
thd->host,grant_table->host) ||
|
|
||||||
(thd->ip && !wild_case_compare(system_charset_info,
|
|
||||||
thd->ip,grant_table->host))))
|
|
||||||
{
|
{
|
||||||
error=0; // Found match
|
error=0; // Found match
|
||||||
break;
|
break;
|
||||||
|
@ -3964,7 +3950,7 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
|
||||||
|
|
||||||
if (!strcmp(lex_user->user.str,user) &&
|
if (!strcmp(lex_user->user.str,user) &&
|
||||||
!my_strcasecmp(system_charset_info, lex_user->host.str,
|
!my_strcasecmp(system_charset_info, lex_user->host.str,
|
||||||
grant_table->orig_host))
|
grant_table->host.hostname))
|
||||||
{
|
{
|
||||||
ulong table_access= grant_table->privs;
|
ulong table_access= grant_table->privs;
|
||||||
if ((table_access | grant_table->cols) != 0)
|
if ((table_access | grant_table->cols) != 0)
|
||||||
|
@ -4071,7 +4057,7 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
|
||||||
|
|
||||||
if (!strcmp(lex_user->user.str,user) &&
|
if (!strcmp(lex_user->user.str,user) &&
|
||||||
!my_strcasecmp(system_charset_info, lex_user->host.str,
|
!my_strcasecmp(system_charset_info, lex_user->host.str,
|
||||||
grant_proc->orig_host))
|
grant_proc->host.hostname))
|
||||||
{
|
{
|
||||||
ulong proc_access= grant_proc->privs;
|
ulong proc_access= grant_proc->privs;
|
||||||
if (proc_access != 0)
|
if (proc_access != 0)
|
||||||
|
@ -4557,19 +4543,22 @@ static int handle_grant_struct(uint struct_no, bool drop,
|
||||||
case 1:
|
case 1:
|
||||||
acl_db= dynamic_element(&acl_dbs, idx, ACL_DB*);
|
acl_db= dynamic_element(&acl_dbs, idx, ACL_DB*);
|
||||||
user= acl_db->user;
|
user= acl_db->user;
|
||||||
host= acl_db->host.hostname;
|
if (!(host= acl_db->host.hostname))
|
||||||
|
host= "%";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
grant_name= (GRANT_NAME*) hash_element(&column_priv_hash, idx);
|
grant_name= (GRANT_NAME*) hash_element(&column_priv_hash, idx);
|
||||||
user= grant_name->user;
|
user= grant_name->user;
|
||||||
host= grant_name->host;
|
if (!(host= grant_name->host.hostname))
|
||||||
|
host= "%";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
grant_name= (GRANT_NAME*) hash_element(&proc_priv_hash, idx);
|
grant_name= (GRANT_NAME*) hash_element(&proc_priv_hash, idx);
|
||||||
user= grant_name->user;
|
user= grant_name->user;
|
||||||
host= grant_name->host;
|
if (!(host= grant_name->host.hostname))
|
||||||
|
host= "%";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (! user)
|
if (! user)
|
||||||
|
@ -4624,7 +4613,8 @@ static int handle_grant_struct(uint struct_no, bool drop,
|
||||||
case 2:
|
case 2:
|
||||||
case 3:
|
case 3:
|
||||||
grant_name->user= strdup_root(&mem, user_to->user.str);
|
grant_name->user= strdup_root(&mem, user_to->user.str);
|
||||||
grant_name->host= strdup_root(&mem, user_to->host.str);
|
update_hostname(&grant_name->host,
|
||||||
|
strdup_root(&mem, user_to->host.str));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5035,7 +5025,7 @@ bool mysql_revoke_all(THD *thd, List <LEX_USER> &list)
|
||||||
counter);
|
counter);
|
||||||
if (!(user=grant_table->user))
|
if (!(user=grant_table->user))
|
||||||
user= "";
|
user= "";
|
||||||
if (!(host=grant_table->host))
|
if (!(host=grant_table->host.hostname))
|
||||||
host= "";
|
host= "";
|
||||||
|
|
||||||
if (!strcmp(lex_user->user.str,user) &&
|
if (!strcmp(lex_user->user.str,user) &&
|
||||||
|
@ -5081,7 +5071,7 @@ bool mysql_revoke_all(THD *thd, List <LEX_USER> &list)
|
||||||
counter);
|
counter);
|
||||||
if (!(user=grant_proc->user))
|
if (!(user=grant_proc->user))
|
||||||
user= "";
|
user= "";
|
||||||
if (!(host=grant_proc->host))
|
if (!(host=grant_proc->host.hostname))
|
||||||
host= "";
|
host= "";
|
||||||
|
|
||||||
if (!strcmp(lex_user->user.str,user) &&
|
if (!strcmp(lex_user->user.str,user) &&
|
||||||
|
@ -5153,8 +5143,8 @@ bool sp_revoke_privileges(THD *thd, const char *sp_db, const char *sp_name)
|
||||||
LEX_USER lex_user;
|
LEX_USER lex_user;
|
||||||
lex_user.user.str= grant_proc->user;
|
lex_user.user.str= grant_proc->user;
|
||||||
lex_user.user.length= strlen(grant_proc->user);
|
lex_user.user.length= strlen(grant_proc->user);
|
||||||
lex_user.host.str= grant_proc->host;
|
lex_user.host.str= grant_proc->host.hostname;
|
||||||
lex_user.host.length= strlen(grant_proc->host);
|
lex_user.host.length= strlen(grant_proc->host.hostname);
|
||||||
if (!replace_proc_table(thd,grant_proc,tables[4].table,lex_user,
|
if (!replace_proc_table(thd,grant_proc,tables[4].table,lex_user,
|
||||||
grant_proc->db, grant_proc->tname, ~0, 1))
|
grant_proc->db, grant_proc->tname, ~0, 1))
|
||||||
{
|
{
|
||||||
|
@ -5438,7 +5428,7 @@ int fill_schema_table_privileges(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||||
if (!(table_access & GRANT_ACL))
|
if (!(table_access & GRANT_ACL))
|
||||||
is_grantable= "NO";
|
is_grantable= "NO";
|
||||||
|
|
||||||
strxmov(buff,"'",user,"'@'",grant_table->orig_host,"'",NullS);
|
strxmov(buff,"'",user,"'@'",grant_table->host.hostname,"'",NullS);
|
||||||
if (!test_access)
|
if (!test_access)
|
||||||
update_schema_privilege(table, buff, grant_table->db, grant_table->tname,
|
update_schema_privilege(table, buff, grant_table->db, grant_table->tname,
|
||||||
0, 0, "USAGE", 5, is_grantable);
|
0, 0, "USAGE", 5, is_grantable);
|
||||||
|
@ -5485,7 +5475,7 @@ int fill_schema_column_privileges(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||||
is_grantable= "NO";
|
is_grantable= "NO";
|
||||||
|
|
||||||
ulong test_access= table_access & ~GRANT_ACL;
|
ulong test_access= table_access & ~GRANT_ACL;
|
||||||
strxmov(buff,"'",user,"'@'",grant_table->orig_host,"'",NullS);
|
strxmov(buff,"'",user,"'@'",grant_table->host.hostname,"'",NullS);
|
||||||
if (!test_access)
|
if (!test_access)
|
||||||
continue;
|
continue;
|
||||||
else
|
else
|
||||||
|
|
|
@ -1649,6 +1649,10 @@ bool uses_only_table_name_fields(Item *item, TABLE_LIST *table)
|
||||||
strlen(item_field->field_name), 0)))
|
strlen(item_field->field_name), 0)))
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
if (item->type() == Item::SUBSELECT_ITEM &&
|
||||||
|
!item->const_item())
|
||||||
|
return 0;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -416,7 +416,7 @@ static struct wordvalue doubles[] = {
|
||||||
#define NEXT_CMP_VALUE(src, p, pass, value, len) \
|
#define NEXT_CMP_VALUE(src, p, pass, value, len) \
|
||||||
while (1) { \
|
while (1) { \
|
||||||
if (IS_END(p, src, len)) { \
|
if (IS_END(p, src, len)) { \
|
||||||
if (pass == 0) { p = src; pass++; } \
|
if (pass == 0 && len > 0) { p= src; pass++; } \
|
||||||
else { value = 0; break; } \
|
else { value = 0; break; } \
|
||||||
} \
|
} \
|
||||||
value = ((pass == 0) ? _sort_order_win1250ch1[*p] \
|
value = ((pass == 0) ? _sort_order_win1250ch1[*p] \
|
||||||
|
|
Loading…
Add table
Reference in a new issue