491 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			491 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | # | ||
|  | # Testing of misc functions | ||
|  | # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | DROP TABLE IF EXISTS t1, t2; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | select format(1.5555,0),format(123.5555,1),format(1234.5555,2),format(12345.55555,3),format(123456.5555,4),format(1234567.5555,5),format("12345.2399",2); | ||
|  | 
 | ||
|  | select inet_ntoa(inet_aton("255.255.255.255.255.255.255.255")); | ||
|  | select inet_aton("255.255.255.255.255"),inet_aton("255.255.1.255"),inet_aton("0.1.255"); | ||
|  | select inet_ntoa(1099511627775),inet_ntoa(4294902271),inet_ntoa(511); | ||
|  | 
 | ||
|  | select hex(inet_aton('127')); | ||
|  | select hex(inet_aton('127.1')); | ||
|  | select hex(inet_aton('127.1.1')); | ||
|  | 
 | ||
|  | select length(uuid()), charset(uuid()), length(unhex(replace(uuid(),_utf8'-',_utf8''))); | ||
|  | 
 | ||
|  | # As we can assume we are the only user for the mysqld server, the difference | ||
|  | # between two calls should be -1 | ||
|  | set @a= uuid_short(); | ||
|  | set @b= uuid_short(); | ||
|  | select cast(@a - @b as signed); | ||
|  | 
 | ||
|  | # | ||
|  | # Test for core dump with nan | ||
|  | # | ||
|  | select length(format('nan', 2)) > 0; | ||
|  | 
 | ||
|  | # | ||
|  | # Test for bug #628 | ||
|  | # | ||
|  | select concat("$",format(2500,2)); | ||
|  | 
 | ||
|  | # Test for BUG#7716 | ||
|  | create table t1 ( a timestamp ); | ||
|  | insert into t1 values ( '2004-01-06 12:34' ); | ||
|  | select a from t1 where left(a+0,6) in ( left(20040106,6) ); | ||
|  | select a from t1 where left(a+0,6) = ( left(20040106,6) ); | ||
|  | 
 | ||
|  | select a from t1 where right(a+0,6) in ( right(20040106123400,6) ); | ||
|  | select a from t1 where right(a+0,6) = ( right(20040106123400,6) ); | ||
|  | 
 | ||
|  | select a from t1 where mid(a+0,6,3) in ( mid(20040106123400,6,3) ); | ||
|  | select a from t1 where mid(a+0,6,3) = ( mid(20040106123400,6,3) ); | ||
|  | 
 | ||
|  | drop table t1; | ||
|  | 
 | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#16501: IS_USED_LOCK does not appear to work | ||
|  | # | ||
|  | 
 | ||
|  | CREATE TABLE t1 (conn CHAR(7), connection_id INT); | ||
|  | INSERT INTO t1 VALUES ('default', CONNECTION_ID()); | ||
|  | 
 | ||
|  | SELECT GET_LOCK('bug16501',600); | ||
|  | 
 | ||
|  | connect (con1,localhost,root,,); | ||
|  | INSERT INTO t1 VALUES ('con1', CONNECTION_ID()); | ||
|  | SELECT IS_USED_LOCK('bug16501') = connection_id | ||
|  | FROM t1 | ||
|  | WHERE conn = 'default'; | ||
|  | send SELECT GET_LOCK('bug16501',600); | ||
|  | 
 | ||
|  | connection default; | ||
|  | SELECT IS_USED_LOCK('bug16501') = CONNECTION_ID(); | ||
|  | SELECT RELEASE_LOCK('bug16501'); | ||
|  | connection con1; | ||
|  | reap; | ||
|  | connection default; | ||
|  | SELECT IS_USED_LOCK('bug16501') = connection_id | ||
|  | FROM t1 | ||
|  | WHERE conn = 'con1'; | ||
|  | 
 | ||
|  | connection con1; | ||
|  | SELECT IS_USED_LOCK('bug16501') = CONNECTION_ID(); | ||
|  | SELECT RELEASE_LOCK('bug16501'); | ||
|  | SELECT IS_USED_LOCK('bug16501'); | ||
|  | 
 | ||
|  | disconnect con1; | ||
|  | connection default; | ||
|  | 
 | ||
|  | DROP TABLE t1; | ||
|  | 
 | ||
|  | # | ||
|  | # Bug #21531: EXPORT_SET() doesn't accept args with coercible character sets | ||
|  | # | ||
|  | select export_set(3, _latin1'foo', _utf8'bar', ',', 4); | ||
|  | 
 | ||
|  | --echo End of 4.1 tests | ||
|  | 
 | ||
|  | 
 | ||
|  | # | ||
|  | # Test for BUG#9535 | ||
|  | # | ||
|  | --disable_warnings | ||
|  | create table t1 as select uuid(), length(uuid()); | ||
|  | --enable_warnings | ||
|  | show create table t1; | ||
|  | drop table t1; | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#6760: Add SLEEP() function (feature request) | ||
|  | # | ||
|  | #   Logics of original test: | ||
|  | #   Reveal that a query with SLEEP does not need less time than estimated. | ||
|  | # | ||
|  | # Bug#12689: SLEEP() gets incorrectly cached/optimized-away | ||
|  | # | ||
|  | #   Description from bug report (slightly modified) | ||
|  | # | ||
|  | #   Bug 1 (happened all time): | ||
|  | #      SELECT * FROM t1 WHERE SLEEP(1) will only result in a sleep of 1 | ||
|  | #      second, regardless of the number of rows in t1. | ||
|  | #   Bug 2 (happened all time): | ||
|  | #      Such a query will also get cached by the query cache, but should not. | ||
|  | # | ||
|  | # Notes (mleich, 2008-05) | ||
|  | # ======================= | ||
|  | # | ||
|  | # Experiments around | ||
|  | #    Bug#36345 Test 'func_misc' fails on RHAS3 x86_64 | ||
|  | # showed that the tests for both bugs could produce in case of parallel | ||
|  | # artificial system time (like via ntpd) | ||
|  | # - decreases false alarm | ||
|  | # - increases false success | ||
|  | # | ||
|  | # We try here to circumvent these issues by reimplementation of the tests | ||
|  | # and sophisticated scripting, although the cause of the problems is a massive | ||
|  | # error within the setup of the testing environment. | ||
|  | # Tests relying on or checking derivates of the system time must never meet | ||
|  | # parallel manipulations of system time. | ||
|  | # | ||
|  | # Results of experiments with/without manipulation of system time, | ||
|  | # information_schema.processlist content, high load on testing box | ||
|  | # ---------------------------------------------------------------- | ||
|  | # Definition: Predicted_cumulative_sleep_time = | ||
|  | #                #_of_result_rows * sleep_time_per_result_row | ||
|  | # | ||
|  | # 1. Total (real sleep time) ~= predicted_cumulative_sleep_time !! | ||
|  | # 2. The state of a session within the PROCESSLIST changes to 'User sleep' | ||
|  | #    if the sessions runs a statement containing the sleep function and the | ||
|  | #    processing of the statement is just within the phase where the sleep | ||
|  | #    is done. (*) | ||
|  | # 3. NOW() and processlist.time behave "synchronous" to system time and | ||
|  | #    show also the "jumps" caused by system time manipulations. (*) | ||
|  | # 4. processlist.time is unsigned, the "next" value below 0 is ~ 4G (*) | ||
|  | # 5. Current processlist.time ~= current real sleep time if the system time | ||
|  | #    was not manipulated. (*) | ||
|  | # 6. High system load can cause delays of <= 2 seconds. | ||
|  | # 7. Thanks to Davi for excellent hints and ideas. | ||
|  | # | ||
|  | #    (*) | ||
|  | #    - information_schema.processlist is not available before MySQL 5.1. | ||
|  | #    - Observation of processlist content requires a | ||
|  | #      - "worker" session sending the query with "send" and pulling results | ||
|  | #        with "reap" | ||
|  | #      - session observing the processlist parallel to the worker session | ||
|  | #      "send" and "reap" do not work in case of an embedded server. | ||
|  | #    Conclusion: Tests based on processlist have too many restrictions. | ||
|  | # | ||
|  | # Solutions for subtests based on TIMEDIFF of values filled via NOW() | ||
|  | # ------------------------------------------------------------------- | ||
|  | # Run the following sequence three times | ||
|  | #    1. SELECT <start_time> | ||
|  | #    2. Query with SLEEP | ||
|  | #    3. SELECT <end_time> | ||
|  | # If TIMEDIFF(<end_time>,<start_time>) is at least two times within a | ||
|  | # reasonable range assume that we did not met errors we were looking for. | ||
|  | # | ||
|  | # It is extreme unlikely that we have two system time changes within the | ||
|  | # < 30 seconds runtime. Even if the unlikely happens, there are so | ||
|  | # frequent runs of this test on this or another testing box which will | ||
|  | # catch the problem. | ||
|  | # | ||
|  | 
 | ||
|  | --echo #------------------------------------------------------------------------ | ||
|  | --echo # Tests for Bug#6760 and Bug#12689 | ||
|  | # Number of rows within the intended result set. | ||
|  | SET @row_count = 4; | ||
|  | # Parameter within SLEEP function | ||
|  | SET @sleep_time_per_result_row = 1; | ||
|  | # Maximum acceptable delay caused by high load on testing box | ||
|  | SET @max_acceptable_delay = 2; | ||
|  | # TIMEDIFF = time for query with sleep (mostly the time caused by SLEEP) | ||
|  | #            + time for delays caused by high load on testing box | ||
|  | # Ensure that at least a reasonable fraction of TIMEDIFF belongs to the SLEEP | ||
|  | # by appropriate setting of variables. | ||
|  | # Ensure that any "judging" has a base of minimum three attempts. | ||
|  | # (Test 2 uses all attempts except the first one.) | ||
|  | if (!` SELECT (@sleep_time_per_result_row * @row_count - @max_acceptable_delay > | ||
|  |               @sleep_time_per_result_row) AND (@row_count - 1 >= 3)`) | ||
|  | { | ||
|  |    --echo # Have to abort because of error in plausibility check | ||
|  |    --echo ###################################################### | ||
|  |    --vertical_results | ||
|  |    SELECT @sleep_time_per_result_row * @row_count - @max_acceptable_delay > | ||
|  |                @sleep_time_per_result_row AS must_be_1, | ||
|  |                @row_count - 1 >= 3 AS must_be_also_1, | ||
|  |                @sleep_time_per_result_row, @row_count, @max_acceptable_delay; | ||
|  |    exit; | ||
|  | } | ||
|  | SET @@global.query_cache_size = 1024 * 64; | ||
|  | --disable_warnings | ||
|  | DROP TEMPORARY TABLE IF EXISTS t_history; | ||
|  | DROP TABLE IF EXISTS t1; | ||
|  | --enable_warnings | ||
|  | CREATE TEMPORARY TABLE t_history (attempt SMALLINT, | ||
|  | start_ts DATETIME, end_ts DATETIME, | ||
|  | start_cached INTEGER, end_cached INTEGER); | ||
|  | CREATE TABLE t1 (f1 BIGINT); | ||
|  | let $num = `SELECT @row_count`; | ||
|  | while ($num) | ||
|  | { | ||
|  |    INSERT INTO t1 VALUES (1); | ||
|  |    dec $num; | ||
|  | } | ||
|  | 
 | ||
|  | let $loops = 4; | ||
|  | let $num = $loops; | ||
|  | while ($num) | ||
|  | { | ||
|  |    let $Qcache_queries_in_cache = | ||
|  |        query_get_value(SHOW STATUS LIKE 'Qcache_queries_in_cache', Value, 1); | ||
|  |    eval | ||
|  |    INSERT INTO t_history | ||
|  |    SET attempt = $loops - $num + 1, start_ts = NOW(), | ||
|  |        start_cached = $Qcache_queries_in_cache; | ||
|  |    SELECT *, SLEEP(@sleep_time_per_result_row) FROM t1; | ||
|  |    # | ||
|  |    # Do not determine Qcache_queries_in_cache before updating end_ts. The SHOW | ||
|  |    # might cost too much time on an overloaded box. | ||
|  |    eval | ||
|  |    UPDATE t_history SET end_ts = NOW() | ||
|  |    WHERE attempt = $loops - $num + 1; | ||
|  |    let $Qcache_queries_in_cache = | ||
|  |           query_get_value(SHOW STATUS LIKE 'Qcache_queries_in_cache', Value, 1); | ||
|  |    eval | ||
|  |    UPDATE t_history SET end_cached = $Qcache_queries_in_cache | ||
|  |    WHERE attempt = $loops - $num + 1; | ||
|  |    # DEBUG eval SELECT * FROM t_history WHERE attempt = $loops - $num + 1; | ||
|  |    dec $num; | ||
|  | } | ||
|  | 
 | ||
|  | # 1. The majority of queries with SLEEP must need a reasonable time | ||
|  | #    -> SLEEP has an impact on runtime | ||
|  | #       = Replacement for original Bug#6760 test | ||
|  | #    -> total runtime is clear more needed than for one result row needed | ||
|  | #       = Replacement for one of the original Bug#12689 tests | ||
|  | --echo # Test 1: Does the query with SLEEP need a reasonable time? | ||
|  | eval SELECT COUNT(*) >= $loops - 1 INTO @aux1 FROM t_history | ||
|  | WHERE TIMEDIFF(end_ts,start_ts) - @sleep_time_per_result_row * @row_count | ||
|  |       BETWEEN 0 AND @max_acceptable_delay; | ||
|  | SELECT @aux1 AS "Expect 1"; | ||
|  | # | ||
|  | # 2. The majority of queries (the first one must be ignored) with SLEEP must | ||
|  | #    need a reasonable time | ||
|  | #    -> If we assume that the result of a cached query will be sent back | ||
|  | #       immediate, without any sleep, than the query with SLEEP cannot be cached | ||
|  | #       (current and intended behaviour for queries with SLEEP). | ||
|  | #    -> It could be also not excluded that the query was cached but the server | ||
|  | #       honoured somehow the SLEEP. Such a behaviour would be also acceptable. | ||
|  | #    = Replacement for one of the original Bug#12689 tests | ||
|  | --echo # Test 2: Does the query with SLEEP need a reasonable time even in case | ||
|  | --echo #         of the non first execution? | ||
|  | eval SELECT COUNT(*) >= $loops - 1 - 1 INTO @aux2 FROM t_history | ||
|  | WHERE TIMEDIFF(end_ts,start_ts) - @sleep_time_per_result_row * @row_count | ||
|  |       BETWEEN 0 AND @max_acceptable_delay | ||
|  |       AND attempt > 1; | ||
|  | SELECT @aux2 AS "Expect 1"; | ||
|  | # | ||
|  | # 3. The query with SLEEP should be not cached. | ||
|  | #    -> SHOW STATUS Qcache_queries_in_cache must be not incremented after | ||
|  | #       the execution of the query with SLEEP | ||
|  | --echo # Test 3: The query with SLEEP must be not cached. | ||
|  | eval SELECT COUNT(*) = $loops INTO @aux3 FROM t_history | ||
|  | WHERE end_cached = start_cached; | ||
|  | SELECT @aux3 AS "Expect 1"; | ||
|  | # | ||
|  | # Dump the content of t_history if one of the tests failed. | ||
|  | if (`SELECT @aux1 + @aux2 + @aux3 <> 3`) | ||
|  | { | ||
|  |    --echo # Some tests failed, dumping the content of t_history | ||
|  |    SELECT * FROM t_history; | ||
|  | } | ||
|  | DROP TABLE t1; | ||
|  | DROP TEMPORARY TABLE t_history; | ||
|  | SET @@global.query_cache_size = default; | ||
|  | 
 | ||
|  | # | ||
|  | # Bug #21466: INET_ATON() returns signed, not unsigned | ||
|  | # | ||
|  | 
 | ||
|  | create table t1 select INET_ATON('255.255.0.1') as `a`; | ||
|  | show create table t1; | ||
|  | drop table t1; | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#26093 (SELECT BENCHMARK() for SELECT statements does not produce | ||
|  | #   valid results) | ||
|  | # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | drop table if exists table_26093; | ||
|  | drop function if exists func_26093_a; | ||
|  | drop function if exists func_26093_b; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | create table table_26093(a int); | ||
|  | insert into table_26093 values | ||
|  | (1), (2), (3), (4), (5), | ||
|  | (6), (7), (8), (9), (10); | ||
|  | 
 | ||
|  | delimiter //; | ||
|  | 
 | ||
|  | create function func_26093_a(x int) returns int | ||
|  | begin | ||
|  |   set @invoked := @invoked + 1; | ||
|  |   return x; | ||
|  | end// | ||
|  | 
 | ||
|  | create function func_26093_b(x int, y int) returns int | ||
|  | begin | ||
|  |   set @invoked := @invoked + 1; | ||
|  |   return x; | ||
|  | end// | ||
|  | 
 | ||
|  | delimiter ;// | ||
|  | 
 | ||
|  | select avg(a) from table_26093; | ||
|  | 
 | ||
|  | select benchmark(100, (select avg(a) from table_26093)); | ||
|  | 
 | ||
|  | set @invoked := 0; | ||
|  | select benchmark(100, (select avg(func_26093_a(a)) from table_26093)); | ||
|  | # Returns only 10, since intermediate results are cached. | ||
|  | select @invoked; | ||
|  | 
 | ||
|  | set @invoked := 0; | ||
|  | select benchmark(100, (select avg(func_26093_b(a, rand())) from table_26093)); | ||
|  | # Returns 1000, due to rand() preventing caching. | ||
|  | select @invoked; | ||
|  | 
 | ||
|  | --error ER_SUBQUERY_NO_1_ROW | ||
|  | select benchmark(100, (select (a) from table_26093)); | ||
|  | 
 | ||
|  | --error ER_OPERAND_COLUMNS | ||
|  | select benchmark(100, (select 1, 1)); | ||
|  | 
 | ||
|  | drop table table_26093; | ||
|  | drop function func_26093_a; | ||
|  | drop function func_26093_b; | ||
|  | 
 | ||
|  | # | ||
|  | # Bug #30832: Assertion + crash with select name_const('test',now()); | ||
|  | # | ||
|  | --error ER_WRONG_ARGUMENTS | ||
|  | SELECT NAME_CONST('test', NOW()); | ||
|  | --error ER_WRONG_ARGUMENTS | ||
|  | SELECT NAME_CONST('test', UPPER('test')); | ||
|  | 
 | ||
|  | SELECT NAME_CONST('test', NULL); | ||
|  | SELECT NAME_CONST('test', 1); | ||
|  | SELECT NAME_CONST('test', -1); | ||
|  | SELECT NAME_CONST('test', 1.0); | ||
|  | SELECT NAME_CONST('test', -1.0); | ||
|  | SELECT NAME_CONST('test', 'test'); | ||
|  | 
 | ||
|  | # | ||
|  | # Bug #34749: Server crash when using NAME_CONST() with an aggregate function | ||
|  | # | ||
|  | 
 | ||
|  | CREATE TABLE t1 (a INT); | ||
|  | INSERT INTO t1 VALUES (1),(2),(3); | ||
|  | # NAME_CONST() + aggregate. | ||
|  | SELECT NAME_CONST('flag',1)    * MAX(a) FROM t1; | ||
|  | SELECT NAME_CONST('flag',1.5)  * MAX(a) FROM t1; | ||
|  | # Now, wrap the INT_ITEM in Item_func_neg and watch the pretty explosions | ||
|  | SELECT NAME_CONST('flag',-1)   * MAX(a) FROM t1; | ||
|  | SELECT NAME_CONST('flag',-1.5) * MAX(a) FROM t1; | ||
|  | --error ER_WRONG_ARGUMENTS | ||
|  | SELECT NAME_CONST('flag', SQRT(4)) * MAX(a) FROM t1; | ||
|  | --error ER_WRONG_ARGUMENTS | ||
|  | SELECT NAME_CONST('flag',-SQRT(4)) * MAX(a) FROM t1; | ||
|  | DROP TABLE t1; | ||
|  | 
 | ||
|  | # | ||
|  | # Bug #27545: erroneous usage of NAME_CONST with a name as the first parameter | ||
|  | #             resolved against a column name of a derived table hangs the client | ||
|  | # | ||
|  | 
 | ||
|  | CREATE TABLE t1 (a int); | ||
|  | INSERT INTO t1 VALUES (5), (2); | ||
|  | 
 | ||
|  | --error ER_WRONG_ARGUMENTS | ||
|  | SELECT NAME_CONST(x,2) FROM (SELECT a x FROM t1) t; | ||
|  | 
 | ||
|  | DROP TABLE t1; | ||
|  | 
 | ||
|  | 
 | ||
|  | # | ||
|  | # Bug #32559: connection hangs on query with name_const | ||
|  | # | ||
|  | CREATE TABLE t1(a INT); | ||
|  | INSERT INTO t1 VALUES (), (), (); | ||
|  | --error ER_WRONG_ARGUMENTS | ||
|  | SELECT NAME_CONST(a, '1') FROM t1; | ||
|  | --error ER_WRONG_ARGUMENTS | ||
|  | SET INSERT_ID= NAME_CONST(a, a); | ||
|  | DROP TABLE t1; | ||
|  | 
 | ||
|  | # | ||
|  | # Bug #31349: ERROR 1062 (23000): Duplicate entry '' for key 'group_key' | ||
|  | # | ||
|  | create table t1 (a int not null); | ||
|  | insert into t1 values (-1), (-2); | ||
|  | select min(a) from t1 group by inet_ntoa(a); | ||
|  | drop table t1; | ||
|  | 
 | ||
|  | # | ||
|  | # BUG#34289 - Incorrect NAME_CONST substitution in stored procedures breaks | ||
|  | # replication | ||
|  | # | ||
|  | SELECT NAME_CONST('var', 'value') COLLATE latin1_general_cs; | ||
|  | 
 | ||
|  | # | ||
|  | # Bug #35848: UUID() returns UUIDs with the wrong time | ||
|  | # | ||
|  | select @@session.time_zone into @save_tz; | ||
|  | 
 | ||
|  | # make sure all times are UTC so the DayNr won't differ | ||
|  | set @@session.time_zone='UTC'; | ||
|  | select uuid() into @my_uuid; | ||
|  | # if version nibble isn't 1, the following calculations will be rubbish | ||
|  | select mid(@my_uuid,15,1); | ||
|  | select 24 * 60 * 60 * 1000 * 1000 * 10 into @my_uuid_one_day; | ||
|  | select concat('0',mid(@my_uuid,16,3),mid(@my_uuid,10,4),left(@my_uuid,8)) into @my_uuidate; | ||
|  | select floor(conv(@my_uuidate,16,10)/@my_uuid_one_day) into @my_uuid_date; | ||
|  | select 141427 + datediff(curdate(),'1970-01-01') into @my_uuid_synthetic; | ||
|  | # these should be identical; date part of UUID should be current date | ||
|  | select @my_uuid_date - @my_uuid_synthetic; | ||
|  | 
 | ||
|  | set @@session.time_zone=@save_tz; | ||
|  | 
 | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#42014: Crash, name_const with collate | ||
|  | # | ||
|  | CREATE TABLE t1 (a DATE); | ||
|  | SELECT * FROM t1 WHERE a = NAME_CONST('reportDate', | ||
|  |   _binary'2009-01-09' COLLATE 'binary'); | ||
|  | DROP TABLE t1; | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#35515: Aliases of variables in binary log are ignored with NAME_CONST | ||
|  | # | ||
|  | select NAME_CONST('_id',1234) as id; | ||
|  | 
 | ||
|  | --echo End of 5.0 tests | ||
|  | 
 | ||
|  | # | ||
|  | # Bug #30389: connection_id() always return 0 in embedded server | ||
|  | # | ||
|  | 
 | ||
|  | select connection_id() > 0; | ||
|  | 
 | ||
|  | --echo # | ||
|  | --echo # Bug #54461: crash with longblob and union or update with subquery | ||
|  | --echo # | ||
|  | 
 | ||
|  | CREATE TABLE t1 (a INT, b LONGBLOB); | ||
|  | INSERT INTO t1 VALUES (1, '2'), (2, '3'), (3, '2'); | ||
|  | 
 | ||
|  | SELECT DISTINCT LEAST(a, (SELECT b FROM t1 LIMIT 1)) FROM t1 UNION SELECT 1; | ||
|  | SELECT DISTINCT GREATEST(a, (SELECT b FROM t1 LIMIT 1)) FROM t1 UNION SELECT 1; | ||
|  | 
 | ||
|  | DROP TABLE t1; | ||
|  | 
 | ||
|  | 
 | ||
|  | # | ||
|  | # Bug #57283: inet_ntoa() crashes | ||
|  | # | ||
|  | SELECT INET_NTOA(0); | ||
|  | SELECT '1' IN ('1', INET_NTOA(0)); | ||
|  | 
 | ||
|  | 
 | ||
|  | --echo End of tests |