mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Bug#28497 wait_for_slave_to_stop can cause random replication mysql-test failures
- Add funtion "query_get_value to allow reading a fields value into a $variable client/mysqltest.c: - Add function "let $var= query_get_value(<query>,<colname>,<row>)" making it possible to read a value from a specific field in a query into a $variable. mysql-test/r/mysqltest.result: Add test cases for "query_get_value" mysql-test/t/mysqltest.test: Add test cases for "query_get_value"
This commit is contained in:
@ -655,4 +655,43 @@ INSERT INTO t1 SELECT f1 - 256 FROM t1;
|
||||
INSERT INTO t1 SELECT f1 - 512 FROM t1;
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(
|
||||
a int, b varchar(255), c datetime
|
||||
);
|
||||
SHOW COLUMNS FROM t1;
|
||||
Field Type Null Key Default Extra
|
||||
a int(11) YES NULL
|
||||
b varchar(255) YES NULL
|
||||
c datetime YES NULL
|
||||
statement=SHOW COLUMNS FROM t1 row_number=1, column_name="Type", Value=int(11)
|
||||
statement="SHOW COLUMNS FROM t1" row_number=1, column_name="Type", Value=int(11)
|
||||
statement=SHOW COLUMNS FROM t1 row_number=1, column_name=Default, Value=NULL
|
||||
value= ->A B<-
|
||||
value= 1
|
||||
mysqltest: At line 1: query_get_value - argument list started with '(' must be ended with ')'
|
||||
mysqltest: At line 1: Missing required argument 'query' to command 'query_get_value'
|
||||
mysqltest: At line 1: Missing required argument 'column name' to command 'query_get_value'
|
||||
mysqltest: At line 1: Missing required argument 'row number' to command 'query_get_value'
|
||||
value= No such row
|
||||
value= No such row
|
||||
mysqltest: At line 1: Invalid row number: 'notnumber'
|
||||
mysqltest: At line 1: Could not find column 'column_not_exists' in the result of 'SHOW COLUMNS FROM t1'
|
||||
mysqltest: At line 1: Query 'SET @A = 1' didn't return a result set
|
||||
mysqltest: At line 1: Could not find column '1 AS B' in the result of 'SELECT 1 AS A'
|
||||
value= No such row
|
||||
mysqltest: At line 1: Error running query 'SHOW COLNS FROM t1': 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'COLNS FROM t1' at line 1
|
||||
|
||||
Field Type Null Key Default Extra
|
||||
a int(11) YES -><- NULL
|
||||
b varchar(255) YES -><- NULL
|
||||
c datetime YES -><- NULL
|
||||
|
||||
Number of columns with Default NULL: 3
|
||||
|
||||
SHOW COLUMNS FROM t1;
|
||||
Field Type Null Key Default Extra
|
||||
a int(11) YES NULL
|
||||
b varchar(255) YES NULL
|
||||
c datetime YES NULL
|
||||
drop table t1;
|
||||
End of tests
|
||||
|
@ -1811,4 +1811,125 @@ SELECT * FROM t1;
|
||||
--enable_result_log
|
||||
DROP TABLE t1;
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# test for query_get_value
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
CREATE TABLE t1(
|
||||
a int, b varchar(255), c datetime
|
||||
);
|
||||
SHOW COLUMNS FROM t1;
|
||||
|
||||
#------------ Positive tests ------------
|
||||
# 1. constant parameters
|
||||
# value is simple string without spaces
|
||||
let $value= query_get_value(SHOW COLUMNS FROM t1, Type, 1);
|
||||
--echo statement=SHOW COLUMNS FROM t1 row_number=1, column_name="Type", Value=$value
|
||||
let $value= query_get_value("SHOW COLUMNS FROM t1", Type, 1);
|
||||
--echo statement="SHOW COLUMNS FROM t1" row_number=1, column_name="Type", Value=$value
|
||||
#
|
||||
# 2. $variables as parameters
|
||||
# value IS NULL
|
||||
let $my_show= SHOW COLUMNS FROM t1;
|
||||
let $column_name= Default;
|
||||
let $row_number= 1;
|
||||
let $value= query_get_value($my_show, $column_name, $row_number);
|
||||
--echo statement=$my_show row_number=$row_number, column_name=$column_name, Value=$value
|
||||
#
|
||||
# 3. result set of a SELECT (not recommended, because projection and
|
||||
# selection could be done much better by pure SELECT functionality)
|
||||
# value is string with space in the middle
|
||||
let $value= query_get_value(SELECT 'A B' AS "MyColumn", MyColumn, 1);
|
||||
--echo value= ->$value<-
|
||||
#
|
||||
# 4. column name with space
|
||||
let $value= query_get_value(SELECT 1 AS "My Column", My Column, 1);
|
||||
--echo value= $value
|
||||
#
|
||||
#------------ Negative tests ------------
|
||||
# 5. Incomplete statement including missing parameters
|
||||
# 5.1 incomplete statement
|
||||
--error 1
|
||||
--exec echo "let \$value= query_get_value(SHOW;" | $MYSQL_TEST 2>&1
|
||||
# 5.2 missing query
|
||||
--error 1
|
||||
--exec echo "let \$value= query_get_value;" | $MYSQL_TEST 2>&1
|
||||
# 5.3 missing column name
|
||||
--error 1
|
||||
--exec echo "let \$value= query_get_value(SHOW COLUMNS FROM t1);" | $MYSQL_TEST 2>&1
|
||||
# 5.4 missing row number
|
||||
--error 1
|
||||
--exec echo "let \$value= query_get_value(SHOW COLUMNS FROM t1, Field);" | $MYSQL_TEST 2>&1
|
||||
#
|
||||
# 6. Somehow "wrong" value of parameters
|
||||
# 6.1 row parameter
|
||||
# 6.1.1 non sense number 0
|
||||
let $value= initialized;
|
||||
let $value= query_get_value(SHOW COLUMNS FROM t1, Field, 0);
|
||||
--echo value= $value
|
||||
# 6.1.2 after the last row
|
||||
let $value= initialized;
|
||||
let $value= query_get_value(SHOW COLUMNS FROM t1, Field, 10);
|
||||
--echo value= $value
|
||||
# 6.1.3 invalid row number
|
||||
--error 1
|
||||
--exec echo "let \$value= query_get_value(SHOW COLUMNS FROM t1, Field, notnumber);" | $MYSQL_TEST 2>&1
|
||||
# 6.2 column name parameter, name of not existing column
|
||||
--error 1
|
||||
--exec echo "let \$value= query_get_value(SHOW COLUMNS FROM t1, column_not_exists, 1);" | $MYSQL_TEST 2>&1
|
||||
# 6.3. statement which never gives a result set
|
||||
--error 1
|
||||
--exec echo "let \$value= query_get_value(SET @A = 1, Field, 1);" | $MYSQL_TEST 2>&1
|
||||
# 6.4. statement contains a ","
|
||||
# Note: There is no need to improve this, because we need query_get_value
|
||||
# for SHOW commands only.
|
||||
--error 1
|
||||
--exec echo "let \$value= query_get_value(SELECT 1 AS "A", 1 AS "B", 1);" | $MYSQL_TEST 2>&1
|
||||
#
|
||||
# 7. empty result set
|
||||
let $value= initialized;
|
||||
let $value= query_get_value(SELECT a FROM t1, a, 1);
|
||||
--echo value= $value
|
||||
#
|
||||
# 9. failing statement
|
||||
--error 1
|
||||
--exec echo "let \$value= query_get_value(SHOW COLNS FROM t1, Field, 1);" | $MYSQL_TEST 2>&1
|
||||
#
|
||||
# 10. Artificial example how to process a complete SHOW result set:
|
||||
let $show_statement= SHOW COLUMNS FROM t1;
|
||||
let $rowno= 1;
|
||||
let $run=1;
|
||||
let $count= 0;
|
||||
--echo
|
||||
--echo Field Type Null Key Default Extra
|
||||
while ($run)
|
||||
{
|
||||
let $Field= query_get_value($show_statement, Field, $rowno);
|
||||
if (`SELECT '$Field' = 'No such row'`)
|
||||
{
|
||||
let $run= 0;
|
||||
}
|
||||
if (`SELECT '$Field' <> 'No such row'`)
|
||||
{
|
||||
let $Type= query_get_value($show_statement, Type, $rowno);
|
||||
let $Null= query_get_value($show_statement, Null, $rowno);
|
||||
if (`SELECT '$Null' = 'YES'`)
|
||||
{
|
||||
inc $count;
|
||||
}
|
||||
let $Key= query_get_value($show_statement, Key, $rowno);
|
||||
let $Default= query_get_value($show_statement, Default, $rowno);
|
||||
let $Extra= query_get_value($show_statement, Extra, $rowno);
|
||||
--echo $Field $Type $Null ->$Key<- $Default $Extra
|
||||
inc $rowno;
|
||||
}
|
||||
}
|
||||
--echo
|
||||
--echo Number of columns with Default NULL: $count
|
||||
--echo
|
||||
eval $show_statement;
|
||||
|
||||
drop table t1;
|
||||
|
||||
--echo End of tests
|
||||
|
||||
|
Reference in New Issue
Block a user