mariadb/mysql-test
gkodinov@lsmy3.wdf.sap.corp ca79343359 BUG#18492: mysqld reports ER_ILLEGAL_REFERENCE in --ps-protocol
In the code that converts IN predicates to EXISTS predicates it is changing
the select list elements to constant 1. Example :
SELECT ... FROM ...  WHERE a IN (SELECT c FROM ...)
is transformed to :
SELECT ... FROM ... WHERE EXISTS (SELECT 1 FROM ...  HAVING a = c)
However there can be no FROM clause in the IN subquery and it may not be
a simple select : SELECT ... FROM ... WHERE a IN (SELECT f(..) AS
c UNION SELECT ...) This query is transformed to : SELECT ... FROM ...
WHERE EXISTS (SELECT 1 FROM (SELECT f(..) AS c UNION SELECT ...)
x HAVING a = c) In the above query c in the HAVING clause is made to be
an Item_null_helper (a subclass of Item_ref) pointing to the real
Item_field (which is not referenced anywhere else in the query anymore).
This is done because Item_ref_null_helper collects information whether
there are NULL values in the result.  This is OK for directly executed
statements, because the Item_field pointed by the Item_null_helper is
already fixed when the transformation is done.  But when executed as
a prepared statement all the Item instances are "un-fixed" before the
recompilation of the prepared statement. So when the Item_null_helper
gets fixed it discovers that the Item_field it points to is not fixed
and issues an error.  The remedy is to keep the original select list
references when there are no tables in the FROM clause. So the above
becomes : SELECT ... FROM ...  WHERE EXISTS (SELECT c FROM (SELECT f(..)
AS c UNION SELECT ...) x HAVING a = c) In this way c is referenced
directly in the select list as well as by reference in the HAVING
clause. So it gets correctly fixed even with prepared statements.  And
since the Item_null_helper subclass of Item_ref_null_helper is not used
anywhere else it's taken out.
2006-04-28 11:23:31 +02:00
..
include Bug#17374: select ... like 'A%' operator fails to find value on columuns with key 2006-03-20 16:28:25 +04:00
lib Perl test script: Avoid some aborts, which made the whole build/test process terminate. 2006-04-07 13:02:15 +02:00
misc
ndb reintroduce --no-defaults to ndb_mgmd 2006-01-20 00:08:26 +11:00
r BUG#18492: mysqld reports ER_ILLEGAL_REFERENCE in --ps-protocol 2006-04-28 11:23:31 +02:00
std_data Merge mysql.com:/home/jimw/my/mysql-4.1-11203 2005-10-21 17:57:51 -07:00
suite/jp Many files: 2005-01-07 14:32:05 +02:00
t BUG#18492: mysqld reports ER_ILLEGAL_REFERENCE in --ps-protocol 2006-04-28 11:23:31 +02:00
create-test-result
fix-result
init_db.sql replaced init_db.sql 2004-11-10 15:03:59 +05:00
install_test_db.sh
Makefile.am Makefile.am: 2006-04-03 03:47:28 +02:00
my_create_tables.c WL#964 2005-01-31 19:18:06 +05:00
my_manage.c Some fixes to avoid compiler warnings. 2005-10-18 18:03:26 +03:00
my_manage.h corrected mysqltest.dsp 2004-12-14 18:46:55 +05:00
mysql-test-run.pl Fix typo in mysql-test-run.pl (not caught by aotupush since it uses mysql-test-run.sh). 2006-04-24 15:34:01 +02:00
mysql-test-run.sh Manual merge. 2006-04-07 19:42:46 +02:00
mysql_test_run_new.c Some fixes to avoid compiler warnings. 2005-10-18 18:03:26 +03:00
README README: 2006-03-01 18:37:41 -06:00
README.gcov README.gcov: 2006-03-01 17:55:10 -06:00
resolve-stack
suppress.purify mysqltest.c, mysql-test-run.sh: 2005-05-15 06:59:34 +02:00

This directory contains a test suite for the MySQL daemon. To run
the currently existing test cases, simply execute ./mysql-test-run in
this directory. It will fire up the newly built mysqld and test it.

Note that you do not have to have to do "make install", and you could
actually have a co-existing MySQL installation. The tests will not
conflict with it.

All tests must pass. If one or more of them fail on your system, please
read the following manual section for instructions on how to report the
problem:

http://dev.mysql.com/doc/mysql/en/mysql-test-suite.html

If you want to use an already running MySQL server for specific tests,
use the --extern option to mysql-test-run. Please note that in this mode,
the test suite expects you to provide the names of the tests to run.
For example, here is the command to run the "alias" and "analyze" tests
with an external server:

mysql-test-run --extern alias analyze

To match your setup, you might also need to provide --socket, --user, and
other relevant options.

With no test cases named on the command line, mysql-test-run falls back
to the normal "non-extern" behavior. The reason for this is that some
tests cannot run with an external server.


You can create your own test cases. To create a test case, create a new
file in the t subdirectory using a text editor. The file should have a .test
extension. For example:

 xemacs t/test_case_name.test

 In the file, put a set of SQL statements that create some tables,
 load test data, and run some queries to manipulate it.

 We would appreciate it if you name your test tables t1, t2, t3 ... (to not
 conflict too much with existing tables).

 Your test should begin by dropping the tables you are going to create and
 end by dropping them again.  This ensures that you can run the test over
 and over again.
 
 If you are using mysqltest commands (like result file names) in your
 test case, you should create the result file as follows:

 mysql-test-run --record test_case_name

 or

 mysqltest --record < t/test_case_name.test

 If you only have a simple test cases consisting of SQL statements and
 comments, you can create the test case in one of the following ways:

 mysql-test-run --record test_case_name

 mysql test < t/test_case_name.test > r/test_case_name.result

 mysqltest --record --record-file=r/test_case_name.result < t/test_case_name.test

 When this is done, take a look at r/test_case_name.result
 - If the result is incorrect, you have found a bug. In this case, you should
   edit the test result to the correct results so that we can verify
   that the bug is corrected in future releases.

To submit your test case, put your .test file and .result file(s) into
a tar.gz archive, add a README that explains the problem, ftp the 
archive to ftp://support.mysql.com/pub/mysql/secret/ and send a mail
to bugs@lists.mysql.com