merged
sql/sql_udf.cc: Auto merged sql/unireg.cc: Auto merged
This commit is contained in:
commit
185b5e4067
@ -2486,3 +2486,67 @@ ERROR HY000: Incorrect usage of ALL and DISTINCT
|
|||||||
select distinct all * from t1;
|
select distinct all * from t1;
|
||||||
ERROR HY000: Incorrect usage of ALL and DISTINCT
|
ERROR HY000: Incorrect usage of ALL and DISTINCT
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
create table t1 (a int(11));
|
||||||
|
select all all * from t1;
|
||||||
|
a
|
||||||
|
select distinct distinct * from t1;
|
||||||
|
a
|
||||||
|
select all distinct * from t1;
|
||||||
|
ERROR HY000: Incorrect usage of ALL and DISTINCT
|
||||||
|
select distinct all * from t1;
|
||||||
|
ERROR HY000: Incorrect usage of ALL and DISTINCT
|
||||||
|
drop table t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
kunde_intern_id int(10) unsigned NOT NULL default '0',
|
||||||
|
kunde_id int(10) unsigned NOT NULL default '0',
|
||||||
|
FK_firma_id int(10) unsigned NOT NULL default '0',
|
||||||
|
aktuell enum('Ja','Nein') NOT NULL default 'Ja',
|
||||||
|
vorname varchar(128) NOT NULL default '',
|
||||||
|
nachname varchar(128) NOT NULL default '',
|
||||||
|
geloescht enum('Ja','Nein') NOT NULL default 'Nein',
|
||||||
|
firma varchar(128) NOT NULL default ''
|
||||||
|
);
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
(3964,3051,1,'Ja','Vorname1','1Nachname','Nein','Print Schau XXXX'),
|
||||||
|
(3965,3051111,1,'Ja','Vorname1111','1111Nachname','Nein','Print Schau XXXX');
|
||||||
|
SELECT kunde_id ,FK_firma_id ,aktuell, vorname, nachname, geloescht FROM t1
|
||||||
|
WHERE
|
||||||
|
(
|
||||||
|
(
|
||||||
|
( '' != '' AND firma LIKE CONCAT('%', '', '%'))
|
||||||
|
OR
|
||||||
|
(vorname LIKE CONCAT('%', 'Vorname1', '%') AND
|
||||||
|
nachname LIKE CONCAT('%', '1Nachname', '%') AND
|
||||||
|
'Vorname1' != '' AND 'xxxx' != '')
|
||||||
|
)
|
||||||
|
AND
|
||||||
|
(
|
||||||
|
aktuell = 'Ja' AND geloescht = 'Nein' AND FK_firma_id = 2
|
||||||
|
)
|
||||||
|
)
|
||||||
|
;
|
||||||
|
kunde_id FK_firma_id aktuell vorname nachname geloescht
|
||||||
|
SELECT kunde_id ,FK_firma_id ,aktuell, vorname, nachname,
|
||||||
|
geloescht FROM t1
|
||||||
|
WHERE
|
||||||
|
(
|
||||||
|
(
|
||||||
|
aktuell = 'Ja' AND geloescht = 'Nein' AND FK_firma_id = 2
|
||||||
|
)
|
||||||
|
AND
|
||||||
|
(
|
||||||
|
( '' != '' AND firma LIKE CONCAT('%', '', '%') )
|
||||||
|
OR
|
||||||
|
( vorname LIKE CONCAT('%', 'Vorname1', '%') AND
|
||||||
|
nachname LIKE CONCAT('%', '1Nachname', '%') AND 'Vorname1' != '' AND
|
||||||
|
'xxxx' != '')
|
||||||
|
)
|
||||||
|
)
|
||||||
|
;
|
||||||
|
kunde_id FK_firma_id aktuell vorname nachname geloescht
|
||||||
|
SELECT COUNT(*) FROM t1 WHERE
|
||||||
|
( 0 OR (vorname LIKE '%Vorname1%' AND nachname LIKE '%1Nachname%' AND 1))
|
||||||
|
AND FK_firma_id = 2;
|
||||||
|
COUNT(*)
|
||||||
|
0
|
||||||
|
drop table t1;
|
||||||
|
@ -1939,6 +1939,64 @@ EXPLAIN SELECT i FROM t1 WHERE i=1;
|
|||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test case for bug 7520: a wrong cost of the index for a BLOB field
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 ( a BLOB, INDEX (a(20)) );
|
||||||
|
CREATE TABLE t2 ( a BLOB, INDEX (a(20)) );
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES ('one'),('two'),('three'),('four'),('five');
|
||||||
|
INSERT INTO t2 VALUES ('one'),('two'),('three'),('four'),('five');
|
||||||
|
|
||||||
|
EXPLAIN SELECT * FROM t1 LEFT JOIN t2 USE INDEX (a) ON t1.a=t2.a;
|
||||||
|
EXPLAIN SELECT * FROM t1 LEFT JOIN t2 FORCE INDEX (a) ON t1.a=t2.a;
|
||||||
|
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test case for bug 7098: substitution of a constant for a string field
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 ( city char(30) );
|
||||||
|
INSERT INTO t1 VALUES ('London');
|
||||||
|
INSERT INTO t1 VALUES ('Paris');
|
||||||
|
|
||||||
|
SELECT * FROM t1 WHERE city='London';
|
||||||
|
SELECT * FROM t1 WHERE city='london';
|
||||||
|
EXPLAIN SELECT * FROM t1 WHERE city='London' AND city='london';
|
||||||
|
SELECT * FROM t1 WHERE city='London' AND city='london';
|
||||||
|
EXPLAIN SELECT * FROM t1 WHERE city LIKE '%london%' AND city='London';
|
||||||
|
SELECT * FROM t1 WHERE city LIKE '%london%' AND city='London';
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#7425 inconsistent sort order on unsigned columns result of substraction
|
||||||
|
#
|
||||||
|
|
||||||
|
create table t1 (a int(11) unsigned, b int(11) unsigned);
|
||||||
|
insert into t1 values (1,0), (1,1), (1,2);
|
||||||
|
select a-b from t1 order by 1;
|
||||||
|
select a-b , (a-b < 0) from t1 order by 1;
|
||||||
|
select a-b as d, (a-b >= 0), b from t1 group by b having d >= 0;
|
||||||
|
select cast((a - b) as unsigned) from t1 order by 1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#8733 server accepts malformed query (multiply mentioned distinct)
|
||||||
|
#
|
||||||
|
create table t1 (a int(11));
|
||||||
|
select all all * from t1;
|
||||||
|
select distinct distinct * from t1;
|
||||||
|
--error 1221
|
||||||
|
select all distinct * from t1;
|
||||||
|
--error 1221
|
||||||
|
select distinct all * from t1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Test for bug #6474
|
# Test for bug #6474
|
||||||
#
|
#
|
||||||
@ -2072,3 +2130,119 @@ drop table t1;
|
|||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
# Test case for bug 7520: a wrong cost of the index for a BLOB field
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 ( a BLOB, INDEX (a(20)) );
|
||||||
|
CREATE TABLE t2 ( a BLOB, INDEX (a(20)) );
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES ('one'),('two'),('three'),('four'),('five');
|
||||||
|
INSERT INTO t2 VALUES ('one'),('two'),('three'),('four'),('five');
|
||||||
|
|
||||||
|
EXPLAIN SELECT * FROM t1 LEFT JOIN t2 USE INDEX (a) ON t1.a=t2.a;
|
||||||
|
EXPLAIN SELECT * FROM t1 LEFT JOIN t2 FORCE INDEX (a) ON t1.a=t2.a;
|
||||||
|
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test case for bug 7098: substitution of a constant for a string field
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 ( city char(30) );
|
||||||
|
INSERT INTO t1 VALUES ('London');
|
||||||
|
INSERT INTO t1 VALUES ('Paris');
|
||||||
|
|
||||||
|
SELECT * FROM t1 WHERE city='London';
|
||||||
|
SELECT * FROM t1 WHERE city='london';
|
||||||
|
EXPLAIN SELECT * FROM t1 WHERE city='London' AND city='london';
|
||||||
|
SELECT * FROM t1 WHERE city='London' AND city='london';
|
||||||
|
EXPLAIN SELECT * FROM t1 WHERE city LIKE '%london%' AND city='London';
|
||||||
|
SELECT * FROM t1 WHERE city LIKE '%london%' AND city='London';
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#7425 inconsistent sort order on unsigned columns result of substraction
|
||||||
|
#
|
||||||
|
|
||||||
|
create table t1 (a int(11) unsigned, b int(11) unsigned);
|
||||||
|
insert into t1 values (1,0), (1,1), (1,2);
|
||||||
|
select a-b from t1 order by 1;
|
||||||
|
select a-b , (a-b < 0) from t1 order by 1;
|
||||||
|
select a-b as d, (a-b >= 0), b from t1 group by b having d >= 0;
|
||||||
|
select cast((a - b) as unsigned) from t1 order by 1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#8733 server accepts malformed query (multiply mentioned distinct)
|
||||||
|
#
|
||||||
|
create table t1 (a int(11));
|
||||||
|
select all all * from t1;
|
||||||
|
select distinct distinct * from t1;
|
||||||
|
--error 1221
|
||||||
|
select all distinct * from t1;
|
||||||
|
--error 1221
|
||||||
|
select distinct all * from t1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test for BUG#10095
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
kunde_intern_id int(10) unsigned NOT NULL default '0',
|
||||||
|
kunde_id int(10) unsigned NOT NULL default '0',
|
||||||
|
FK_firma_id int(10) unsigned NOT NULL default '0',
|
||||||
|
aktuell enum('Ja','Nein') NOT NULL default 'Ja',
|
||||||
|
vorname varchar(128) NOT NULL default '',
|
||||||
|
nachname varchar(128) NOT NULL default '',
|
||||||
|
geloescht enum('Ja','Nein') NOT NULL default 'Nein',
|
||||||
|
firma varchar(128) NOT NULL default ''
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
(3964,3051,1,'Ja','Vorname1','1Nachname','Nein','Print Schau XXXX'),
|
||||||
|
(3965,3051111,1,'Ja','Vorname1111','1111Nachname','Nein','Print Schau XXXX');
|
||||||
|
|
||||||
|
|
||||||
|
SELECT kunde_id ,FK_firma_id ,aktuell, vorname, nachname, geloescht FROM t1
|
||||||
|
WHERE
|
||||||
|
(
|
||||||
|
(
|
||||||
|
( '' != '' AND firma LIKE CONCAT('%', '', '%'))
|
||||||
|
OR
|
||||||
|
(vorname LIKE CONCAT('%', 'Vorname1', '%') AND
|
||||||
|
nachname LIKE CONCAT('%', '1Nachname', '%') AND
|
||||||
|
'Vorname1' != '' AND 'xxxx' != '')
|
||||||
|
)
|
||||||
|
AND
|
||||||
|
(
|
||||||
|
aktuell = 'Ja' AND geloescht = 'Nein' AND FK_firma_id = 2
|
||||||
|
)
|
||||||
|
)
|
||||||
|
;
|
||||||
|
|
||||||
|
SELECT kunde_id ,FK_firma_id ,aktuell, vorname, nachname,
|
||||||
|
geloescht FROM t1
|
||||||
|
WHERE
|
||||||
|
(
|
||||||
|
(
|
||||||
|
aktuell = 'Ja' AND geloescht = 'Nein' AND FK_firma_id = 2
|
||||||
|
)
|
||||||
|
AND
|
||||||
|
(
|
||||||
|
( '' != '' AND firma LIKE CONCAT('%', '', '%') )
|
||||||
|
OR
|
||||||
|
( vorname LIKE CONCAT('%', 'Vorname1', '%') AND
|
||||||
|
nachname LIKE CONCAT('%', '1Nachname', '%') AND 'Vorname1' != '' AND
|
||||||
|
'xxxx' != '')
|
||||||
|
)
|
||||||
|
)
|
||||||
|
;
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1 WHERE
|
||||||
|
( 0 OR (vorname LIKE '%Vorname1%' AND nachname LIKE '%1Nachname%' AND 1))
|
||||||
|
AND FK_firma_id = 2;
|
||||||
|
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
@ -192,6 +192,54 @@ public:
|
|||||||
friend class error_list;
|
friend class error_list;
|
||||||
friend class error_list_iterator;
|
friend class error_list_iterator;
|
||||||
|
|
||||||
|
#ifdef LIST_EXTRA_DEBUG
|
||||||
|
/*
|
||||||
|
Check list invariants and print results into trace. Invariants are:
|
||||||
|
- (*last) points to end_of_list
|
||||||
|
- There are no NULLs in the list.
|
||||||
|
- base_list::elements is the number of elements in the list.
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
check_list()
|
||||||
|
name Name to print to trace file
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
1 The list is Ok.
|
||||||
|
0 List invariants are not met.
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool check_list(const char *name)
|
||||||
|
{
|
||||||
|
base_list *list= this;
|
||||||
|
list_node *node= first;
|
||||||
|
uint cnt= 0;
|
||||||
|
|
||||||
|
while (node->next != &end_of_list)
|
||||||
|
{
|
||||||
|
if (!node->info)
|
||||||
|
{
|
||||||
|
DBUG_PRINT("list_invariants",("%s: error: NULL element in the list",
|
||||||
|
name));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
node= node->next;
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
if (last != &(node->next))
|
||||||
|
{
|
||||||
|
DBUG_PRINT("list_invariants", ("%s: error: wrong last pointer", name));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (cnt+1 != elements)
|
||||||
|
{
|
||||||
|
DBUG_PRINT("list_invariants", ("%s: error: wrong element count", name));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
DBUG_PRINT("list_invariants", ("%s: list is ok", name));
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
#endif // LIST_EXTRA_DEBUG
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void after(void *info,list_node *node)
|
void after(void *info,list_node *node)
|
||||||
{
|
{
|
||||||
|
@ -194,7 +194,9 @@ void udf_init()
|
|||||||
This is done to ensure that only approved dll from the system
|
This is done to ensure that only approved dll from the system
|
||||||
directories are used (to make this even remotely secure).
|
directories are used (to make this even remotely secure).
|
||||||
*/
|
*/
|
||||||
if (strchr(dl_name, '/') || name.length > NAME_LEN)
|
if (strchr(dl_name, '/') ||
|
||||||
|
IF_WIN(strchr(dl_name, '\\'),0) ||
|
||||||
|
strlen(name.str) > NAME_LEN)
|
||||||
{
|
{
|
||||||
sql_print_error("Invalid row in mysql.func table for function '%.64s'",
|
sql_print_error("Invalid row in mysql.func table for function '%.64s'",
|
||||||
name.str);
|
name.str);
|
||||||
@ -223,7 +225,7 @@ void udf_init()
|
|||||||
}
|
}
|
||||||
tmp->dlhandle = dl;
|
tmp->dlhandle = dl;
|
||||||
{
|
{
|
||||||
char buf[MAX_FIELD_NAME+16], *missing;
|
char buf[NAME_LEN+16], *missing;
|
||||||
if ((missing= init_syms(tmp, buf)))
|
if ((missing= init_syms(tmp, buf)))
|
||||||
{
|
{
|
||||||
sql_print_error(ER(ER_CANT_FIND_DL_ENTRY), missing);
|
sql_print_error(ER(ER_CANT_FIND_DL_ENTRY), missing);
|
||||||
@ -410,7 +412,7 @@ int mysql_create_function(THD *thd,udf_func *udf)
|
|||||||
This is done to ensure that only approved dll from the system
|
This is done to ensure that only approved dll from the system
|
||||||
directories are used (to make this even remotely secure).
|
directories are used (to make this even remotely secure).
|
||||||
*/
|
*/
|
||||||
if (strchr(udf->dl, '/'))
|
if (strchr(udf->dl, '/') || IF_WIN(strchr(dl_name, '\\'),0))
|
||||||
{
|
{
|
||||||
my_message(ER_UDF_NO_PATHS, ER(ER_UDF_NO_PATHS), MYF(0));
|
my_message(ER_UDF_NO_PATHS, ER(ER_UDF_NO_PATHS), MYF(0));
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
@ -441,7 +443,7 @@ int mysql_create_function(THD *thd,udf_func *udf)
|
|||||||
}
|
}
|
||||||
udf->dlhandle=dl;
|
udf->dlhandle=dl;
|
||||||
{
|
{
|
||||||
char buf[MAX_FIELD_NAME+16], *missing;
|
char buf[NAME_LEN+16], *missing;
|
||||||
if ((missing= init_syms(udf, buf)))
|
if ((missing= init_syms(udf, buf)))
|
||||||
{
|
{
|
||||||
my_error(ER_CANT_FIND_DL_ENTRY, MYF(0), missing);
|
my_error(ER_CANT_FIND_DL_ENTRY, MYF(0), missing);
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#define USES_TYPES
|
#define USES_TYPES
|
||||||
#include "mysql_priv.h"
|
#include "mysql_priv.h"
|
||||||
#include <m_ctype.h>
|
#include <m_ctype.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#define FCOMP 17 /* Bytes for a packed field */
|
#define FCOMP 17 /* Bytes for a packed field */
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user