mirror of
https://github.com/MariaDB/server.git
synced 2025-02-02 12:01:42 +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
|
@ -568,7 +568,14 @@ open_or_create_log_file(
|
|||
files[i] = os_file_create(name, OS_FILE_CREATE, OS_FILE_NORMAL,
|
||||
OS_LOG_FILE, &ret);
|
||||
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,
|
||||
"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);
|
||||
|
||||
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,
|
||||
"InnoDB: Error in creating or opening %s\n",
|
||||
name);
|
||||
|
|
|
@ -45,7 +45,8 @@ mysql_test_run_new_SOURCES= mysql_test_run_new.c my_manage.c my_create_tables.c
|
|||
dist-hook:
|
||||
mkdir -p $(distdir)/t $(distdir)/r $(distdir)/include \
|
||||
$(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)/include/*.inc $(distdir)/include
|
||||
$(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
|
||||
$(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(testdir)
|
||||
$(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/*.sh $(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;
|
||||
'0x8000000000000001'+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'
|
||||
drop user mysqltest_B@'%';
|
||||
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
|
||||
ROUTINES CREATED 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;
|
||||
|
||||
|
||||
/*!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 */;
|
||||
LOCK TABLES `t1` WRITE;
|
||||
INSERT INTO `t1` VALUES ('Ž™šá');
|
||||
|
|
|
@ -93,3 +93,15 @@ t1 CREATE TABLE `t1` (
|
|||
`b` 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;
|
||||
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
|
||||
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_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';
|
||||
select table_name, column_name, data_type from information_schema.columns
|
||||
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));
|
||||
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 --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 --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
|
||||
|
|
|
@ -121,3 +121,18 @@ eval alter table t1 index directory="$MYSQL_TEST_DIR/var/log";
|
|||
enable_query_log;
|
||||
show create 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;
|
||||
/* Test if we should create a link */
|
||||
int create_link;
|
||||
char abs_linkname[FN_REFLEN];
|
||||
DBUG_ENTER("my_create_with_symlink");
|
||||
|
||||
if (my_disable_symlinks)
|
||||
|
@ -42,7 +43,11 @@ File my_create_with_symlink(const char *linkname, const char *filename,
|
|||
filename= linkname;
|
||||
}
|
||||
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))
|
||||
{
|
||||
|
|
|
@ -6074,11 +6074,17 @@ int Dbtc::releaseAndAbort(Signal* signal)
|
|||
UintR TnoLoops = tcConnectptr.p->noOfNodes;
|
||||
|
||||
apiConnectptr.p->counter++;
|
||||
bool prevAlive = false;
|
||||
for (Uint32 Ti = 0; Ti < TnoLoops ; Ti++) {
|
||||
localHostptr.i = tcConnectptr.p->tcNodedata[Ti];
|
||||
ptrCheckGuard(localHostptr, chostFilesize, hostRecord);
|
||||
if (localHostptr.p->hostStatus == HS_ALIVE) {
|
||||
jam();
|
||||
if (prevAlive) {
|
||||
// if previous is alive, its LQH forwards abort to this node
|
||||
jam();
|
||||
continue;
|
||||
}
|
||||
/* ************< */
|
||||
/* ABORT < */
|
||||
/* ************< */
|
||||
|
@ -6088,15 +6094,16 @@ int Dbtc::releaseAndAbort(Signal* signal)
|
|||
signal->theData[2] = apiConnectptr.p->transid[0];
|
||||
signal->theData[3] = apiConnectptr.p->transid[1];
|
||||
sendSignal(tblockref, GSN_ABORT, signal, 4, JBB);
|
||||
return 1;
|
||||
prevAlive = true;
|
||||
} else {
|
||||
jam();
|
||||
signal->theData[0] = tcConnectptr.i;
|
||||
signal->theData[1] = apiConnectptr.p->transid[0];
|
||||
signal->theData[2] = apiConnectptr.p->transid[1];
|
||||
signal->theData[3] = hostptr.i;
|
||||
signal->theData[3] = localHostptr.i;
|
||||
signal->theData[4] = ZFALSE;
|
||||
sendSignal(cownref, GSN_ABORTED, signal, 5, JBB);
|
||||
prevAlive = false;
|
||||
}//if
|
||||
}//for
|
||||
return 1;
|
||||
|
|
|
@ -272,10 +272,7 @@ foreach my $rdb ( @db_desc ) {
|
|||
my $negated;
|
||||
if ($rdb->{t_regex}) {
|
||||
$t_regex = $rdb->{t_regex}; ## assign temporary regex
|
||||
$negated = $t_regex =~ tr/~//d; ## remove and count
|
||||
## negation operator: we
|
||||
## don't allow ~ in table
|
||||
## names
|
||||
$negated = $t_regex =~ s/^~//; ## note and remove negation operator
|
||||
|
||||
$t_regex = qr/$t_regex/; ## make regex string from
|
||||
## user regex
|
||||
|
@ -820,6 +817,16 @@ sub get_list_of_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();
|
||||
return @dbh_tables;
|
||||
}
|
||||
|
|
|
@ -1242,6 +1242,8 @@ public:
|
|||
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
|
||||
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
|
||||
|
@ -1256,6 +1258,11 @@ public:
|
|||
{
|
||||
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
|
||||
|
||||
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
|
||||
udf_handler::fix_fields(THD *thd, TABLE_LIST *tables, Item_result_field *func,
|
||||
uint arg_count, Item **arguments)
|
||||
|
@ -2773,6 +2753,31 @@ String *Item_func_udf_str::val_str(String *str)
|
|||
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
|
||||
bool udf_handler::get_arguments() { return 0; }
|
||||
#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_maintenance_thread();
|
||||
|
||||
printf(ER(ER_READY),my_progname,server_version,
|
||||
((unix_sock == INVALID_SOCKET) ? (char*) "" : mysqld_unix_port),
|
||||
mysqld_port);
|
||||
if (MYSQL_COMPILATION_COMMENT[0] != '\0')
|
||||
fputs(" " MYSQL_COMPILATION_COMMENT, stdout);
|
||||
putchar('\n');
|
||||
fflush(stdout);
|
||||
sql_print_information(ER(ER_READY),my_progname,server_version,
|
||||
((unix_sock == INVALID_SOCKET) ? (char*) ""
|
||||
: mysqld_unix_port),
|
||||
mysqld_port,
|
||||
MYSQL_COMPILATION_COMMENT);
|
||||
|
||||
#if defined(__NT__) || defined(HAVE_SMEM)
|
||||
handle_connections_methods();
|
||||
|
|
|
@ -1824,7 +1824,7 @@ ER_READY
|
|||
cze "%s: p-Bøipraven na spojení"
|
||||
dan "%s: klar til tilslutninger"
|
||||
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>€”õŠ®—¹",
|
||||
est "%s: ootab ühendusi"
|
||||
fre "%s: Prêt pour des connections"
|
||||
|
@ -1839,7 +1839,7 @@ ER_READY
|
|||
pol "%s: gotowe do po³?czenia"
|
||||
por "%s: Pronto para conexões"
|
||||
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"
|
||||
slo "%s: pripravený na spojenie"
|
||||
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
|
||||
{
|
||||
public:
|
||||
char *host,*db, *user, *tname, *hash_key, *orig_host;
|
||||
acl_host_and_ip host;
|
||||
char *db, *user, *tname, *hash_key;
|
||||
ulong privs;
|
||||
ulong sort;
|
||||
uint key_length;
|
||||
|
@ -1960,12 +1961,10 @@ GRANT_NAME::GRANT_NAME(const char *h, const char *d,const char *u,
|
|||
:privs(p)
|
||||
{
|
||||
/* Host given by user */
|
||||
orig_host= strdup_root(&memex,h);
|
||||
/* Convert empty hostname to '%' for easy comparison */
|
||||
host= orig_host[0] ? orig_host : (char*) "%";
|
||||
update_hostname(&host, strdup_root(&memex, h));
|
||||
db = strdup_root(&memex,d);
|
||||
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);
|
||||
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)
|
||||
{
|
||||
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]);
|
||||
user= get_field(&memex,form->field[2]);
|
||||
if (!user)
|
||||
user= (char*) "";
|
||||
if (!orig_host)
|
||||
{
|
||||
orig_host= (char*) "";
|
||||
host= (char*) "%";
|
||||
}
|
||||
sort= get_sort(3, orig_host, db, user);
|
||||
sort= get_sort(3, host.hostname, db, user);
|
||||
tname= get_field(&memex,form->field[3]);
|
||||
if (!db || !tname)
|
||||
{
|
||||
|
@ -2042,7 +2036,7 @@ GRANT_TABLE::GRANT_TABLE(TABLE *form, TABLE *col_privs)
|
|||
{
|
||||
uint key_prefix_len;
|
||||
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);
|
||||
col_privs->field[1]->store(db,(uint) strlen(db), 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 ((host &&
|
||||
!my_strcasecmp(system_charset_info, host, grant_name->host)) ||
|
||||
(ip && !strcmp(ip,grant_name->host)))
|
||||
if (compare_hostname(&grant_name->host, host, ip))
|
||||
return grant_name;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (((host && !wild_case_compare(system_charset_info,
|
||||
host,grant_name->host)) ||
|
||||
(ip && !wild_case_compare(system_charset_info,
|
||||
ip,grant_name->host))) &&
|
||||
if (compare_hostname(&grant_name->host, host, ip) &&
|
||||
(!found || found->sort < grant_name->sort))
|
||||
found=grant_name; // Host ok
|
||||
}
|
||||
|
@ -3189,7 +3178,7 @@ my_bool grant_init(THD *org_thd)
|
|||
|
||||
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' "
|
||||
"ignored in --skip-name-resolve mode.",
|
||||
|
@ -3227,7 +3216,7 @@ my_bool grant_init(THD *org_thd)
|
|||
|
||||
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' "
|
||||
"ignored in --skip-name-resolve mode.",
|
||||
|
@ -3541,10 +3530,7 @@ bool check_grant_db(THD *thd,const char *db)
|
|||
idx);
|
||||
if (len < grant_table->key_length &&
|
||||
!memcmp(grant_table->hash_key,helping,len) &&
|
||||
(thd->host && !wild_case_compare(system_charset_info,
|
||||
thd->host,grant_table->host) ||
|
||||
(thd->ip && !wild_case_compare(system_charset_info,
|
||||
thd->ip,grant_table->host))))
|
||||
compare_hostname(&grant_table->host, thd->host, thd->ip))
|
||||
{
|
||||
error=0; // Found match
|
||||
break;
|
||||
|
@ -3964,7 +3950,7 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
|
|||
|
||||
if (!strcmp(lex_user->user.str,user) &&
|
||||
!my_strcasecmp(system_charset_info, lex_user->host.str,
|
||||
grant_table->orig_host))
|
||||
grant_table->host.hostname))
|
||||
{
|
||||
ulong table_access= grant_table->privs;
|
||||
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) &&
|
||||
!my_strcasecmp(system_charset_info, lex_user->host.str,
|
||||
grant_proc->orig_host))
|
||||
grant_proc->host.hostname))
|
||||
{
|
||||
ulong proc_access= grant_proc->privs;
|
||||
if (proc_access != 0)
|
||||
|
@ -4557,19 +4543,22 @@ static int handle_grant_struct(uint struct_no, bool drop,
|
|||
case 1:
|
||||
acl_db= dynamic_element(&acl_dbs, idx, ACL_DB*);
|
||||
user= acl_db->user;
|
||||
host= acl_db->host.hostname;
|
||||
if (!(host= acl_db->host.hostname))
|
||||
host= "%";
|
||||
break;
|
||||
|
||||
case 2:
|
||||
grant_name= (GRANT_NAME*) hash_element(&column_priv_hash, idx);
|
||||
user= grant_name->user;
|
||||
host= grant_name->host;
|
||||
if (!(host= grant_name->host.hostname))
|
||||
host= "%";
|
||||
break;
|
||||
|
||||
case 3:
|
||||
grant_name= (GRANT_NAME*) hash_element(&proc_priv_hash, idx);
|
||||
user= grant_name->user;
|
||||
host= grant_name->host;
|
||||
if (!(host= grant_name->host.hostname))
|
||||
host= "%";
|
||||
break;
|
||||
}
|
||||
if (! user)
|
||||
|
@ -4624,7 +4613,8 @@ static int handle_grant_struct(uint struct_no, bool drop,
|
|||
case 2:
|
||||
case 3:
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -5035,7 +5025,7 @@ bool mysql_revoke_all(THD *thd, List <LEX_USER> &list)
|
|||
counter);
|
||||
if (!(user=grant_table->user))
|
||||
user= "";
|
||||
if (!(host=grant_table->host))
|
||||
if (!(host=grant_table->host.hostname))
|
||||
host= "";
|
||||
|
||||
if (!strcmp(lex_user->user.str,user) &&
|
||||
|
@ -5081,7 +5071,7 @@ bool mysql_revoke_all(THD *thd, List <LEX_USER> &list)
|
|||
counter);
|
||||
if (!(user=grant_proc->user))
|
||||
user= "";
|
||||
if (!(host=grant_proc->host))
|
||||
if (!(host=grant_proc->host.hostname))
|
||||
host= "";
|
||||
|
||||
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.user.str= grant_proc->user;
|
||||
lex_user.user.length= strlen(grant_proc->user);
|
||||
lex_user.host.str= grant_proc->host;
|
||||
lex_user.host.length= strlen(grant_proc->host);
|
||||
lex_user.host.str= grant_proc->host.hostname;
|
||||
lex_user.host.length= strlen(grant_proc->host.hostname);
|
||||
if (!replace_proc_table(thd,grant_proc,tables[4].table,lex_user,
|
||||
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))
|
||||
is_grantable= "NO";
|
||||
|
||||
strxmov(buff,"'",user,"'@'",grant_table->orig_host,"'",NullS);
|
||||
strxmov(buff,"'",user,"'@'",grant_table->host.hostname,"'",NullS);
|
||||
if (!test_access)
|
||||
update_schema_privilege(table, buff, grant_table->db, grant_table->tname,
|
||||
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";
|
||||
|
||||
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)
|
||||
continue;
|
||||
else
|
||||
|
|
|
@ -1649,6 +1649,10 @@ bool uses_only_table_name_fields(Item *item, TABLE_LIST *table)
|
|||
strlen(item_field->field_name), 0)))
|
||||
return 0;
|
||||
}
|
||||
if (item->type() == Item::SUBSELECT_ITEM &&
|
||||
!item->const_item())
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -416,7 +416,7 @@ static struct wordvalue doubles[] = {
|
|||
#define NEXT_CMP_VALUE(src, p, pass, value, len) \
|
||||
while (1) { \
|
||||
if (IS_END(p, src, len)) { \
|
||||
if (pass == 0) { p = src; pass++; } \
|
||||
if (pass == 0 && len > 0) { p= src; pass++; } \
|
||||
else { value = 0; break; } \
|
||||
} \
|
||||
value = ((pass == 0) ? _sort_order_win1250ch1[*p] \
|
||||
|
|
Loading…
Add table
Reference in a new issue