mariadb/mysql-test/suite/funcs_1/t/row_count_func.test
Alexander Nozdrin 4333980a49 Patch for Bug#21818 (Return value of ROW_COUNT() is incorrect
for ALTER TABLE, LOAD DATA).

ROW_COUNT is now assigned according to the following rules:

  - In my_ok():
    - for DML statements: to the number of affected rows;
    - for DDL statements: to 0.

  - In my_eof(): to -1 to indicate that there was a result set.

    We derive this semantics from the JDBC specification, where int
    java.sql.Statement.getUpdateCount() is defined to (sic) "return the
    current result as an update count; if the result is a ResultSet
    object or there are no more results, -1 is returned".

  - In my_error(): to -1 to be compatible with the MySQL C API and
    MySQL ODBC driver.

  - For SIGNAL statements: to 0 per WL#2110 specification. Zero is used
    since that's the "default" value of ROW_COUNT in the diagnostics area.

sql/protocol.cc:
  Fix a typo.
sql/sql_class.h:
  - Introduce THD::get_row_count_func() / THD::set_row_count_func();
  - Remove the CF_HAS_ROW_COUNT define
sql/sql_parse.cc:
  CF_HAS_ROW_COUNT was eliminated.
2010-05-14 09:28:51 +04:00

115 lines
1.8 KiB
Text

--echo
--echo # --
--echo # -- Test case for Bug#21818.
--echo # --
--echo
--disable_warnings
DROP TABLE IF EXISTS t1;
--enable_warnings
CREATE TABLE t1(a INT);
INSERT INTO t1 VALUES (1), (2), (3);
--echo
--echo # -- Check 1.
--enable_info
--echo SELECT * FROM t1 INTO OUTFILE "MYSQL_TMP_DIR/bug21818.txt";
--disable_query_log # to avoid $MYSQL_TMP_DIR in query log
--eval SELECT * FROM t1 INTO OUTFILE "$MYSQL_TMP_DIR/bug21818.txt"
--enable_query_log
--disable_info
--echo
SELECT ROW_COUNT();
--echo
--echo # -- Check 2.
--enable_info
SELECT a FROM t1 LIMIT 1 INTO @a;
--disable_info
--echo
SELECT ROW_COUNT();
--echo
--echo # -- Check 3.
--disable_warnings
DROP DATABASE IF EXISTS mysqltest1;
--enable_warnings
--enable_info
CREATE DATABASE mysqltest1;
--disable_info
--echo
SELECT ROW_COUNT();
DROP DATABASE mysqltest1;
--echo
--echo # -- Check 4.
DELETE FROM t1;
--enable_info
--echo LOAD DATA INFILE 'MYSQL_TMP_DIR/bug21818.txt' INTO TABLE t1(a);
--disable_query_log # to avoid $MYSQL_TMP_DIR in query log
--eval LOAD DATA INFILE '$MYSQL_TMP_DIR/bug21818.txt' INTO TABLE t1(a)
--enable_query_log
--disable_info
--echo
SELECT ROW_COUNT();
--remove_file $MYSQL_TMP_DIR/bug21818.txt
--echo
--echo # -- Check 5.
--enable_info
ALTER TABLE t1 ADD COLUMN b VARCHAR(255);
--disable_info
--echo
SELECT ROW_COUNT();
--echo
DROP TABLE t1;
--echo
--echo # -- Check 6.
--disable_warnings
DROP TABLE IF EXISTS t2;
--enable_warnings
CREATE TABLE t1(a INT);
CREATE TABLE t2(a INT);
INSERT INTO t1 VALUES (1), (2), (3);
INSERT INTO t2 VALUES (ROW_COUNT());
SELECT * FROM t2;
DROP TABLE t1;
DROP TABLE t2;
--echo
--echo # -- Check 7 (check that SQL errors reset row_count to -1).
CREATE TABLE t1(a INT);
INSERT INTO t1 VALUES (1), (2), (3);
--error ER_SP_DOES_NOT_EXIST
SELECT f1();
SELECT ROW_COUNT();
DROP TABLE t1;
--echo
--echo # -- End of test case for Bug#21818.