diff options
author | Andrew Hutchings <andrew@mariadb.org> | 2022-11-08 15:49:52 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-08 15:49:52 +0000 |
commit | fda5846704ec9218b78ed5ed06f58b7391369a1a (patch) | |
tree | bfff7bc5238c05a377f486107be394d553e829ca | |
parent | 2ef2e2322a03b6decf4ad00721a27e6dc308847f (diff) | |
download | mariadb-git-fda5846704ec9218b78ed5ed06f58b7391369a1a.tar.gz |
MDEV-29397 CONNECT engine: Fix note turning into error (#2325)
* MDEV-29397 Fix note turning into error
ODBC Rewind triggered an error with no SQL, but this is sometimes a
valid condition (as can be seen with other classes). Setting this to a 0
return stops errors firing when they shouldn't.
Also fixes ASAN hits from in MDEV-29687 tabext.cpp.
-rw-r--r-- | storage/connect/mysql-test/connect/r/odbc_postgresql.result | 9 | ||||
-rw-r--r-- | storage/connect/mysql-test/connect/t/odbc_postgresql.test | 9 | ||||
-rw-r--r-- | storage/connect/odbconn.cpp | 2 | ||||
-rw-r--r-- | storage/connect/tabext.cpp | 4 |
4 files changed, 21 insertions, 3 deletions
diff --git a/storage/connect/mysql-test/connect/r/odbc_postgresql.result b/storage/connect/mysql-test/connect/r/odbc_postgresql.result index 6bd8d75a601..9ecb66307e6 100644 --- a/storage/connect/mysql-test/connect/r/odbc_postgresql.result +++ b/storage/connect/mysql-test/connect/r/odbc_postgresql.result @@ -319,3 +319,12 @@ SELECT * from pg_in_maria; my space column My value DROP TABLE pg_in_maria; +# +# MDEV-29397 UPDATE with WHERE on part of two-part primary key causes +# info to turn into error. +# +CREATE TABLE t1 (a VARCHAR(6), b VARCHAR(6), PRIMARY KEY(a, b)) ENGINE=CONNECT TABNAME='schema1.t3' CHARSET=utf8 DATA_CHARSET=utf8 TABLE_TYPE=ODBC CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr'; +UPDATE t1 SET a='10' WHERE a='20'; +Warnings: +Note 1105 schema1.t3: 0 affected rows +DROP TABLE t1; diff --git a/storage/connect/mysql-test/connect/t/odbc_postgresql.test b/storage/connect/mysql-test/connect/t/odbc_postgresql.test index ec98453d630..187bec55b38 100644 --- a/storage/connect/mysql-test/connect/t/odbc_postgresql.test +++ b/storage/connect/mysql-test/connect/t/odbc_postgresql.test @@ -223,3 +223,12 @@ DROP TABLE t1; CREATE TABLE pg_in_maria ENGINE=CONNECT TABNAME='schema1.space_in_column_name' CHARSET=utf8 DATA_CHARSET=utf8 TABLE_TYPE=ODBC CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr' quoted=1; SELECT * from pg_in_maria; DROP TABLE pg_in_maria; + +--echo # +--echo # MDEV-29397 UPDATE with WHERE on part of two-part primary key causes +--echo # info to turn into error. +--echo # +CREATE TABLE t1 (a VARCHAR(6), b VARCHAR(6), PRIMARY KEY(a, b)) ENGINE=CONNECT TABNAME='schema1.t3' CHARSET=utf8 DATA_CHARSET=utf8 TABLE_TYPE=ODBC CONNECTION='DSN=ConnectEnginePostgresql;UID=mtr;PWD=mtr'; +UPDATE t1 SET a='10' WHERE a='20'; +DROP TABLE t1; + diff --git a/storage/connect/odbconn.cpp b/storage/connect/odbconn.cpp index 33c2b0aaf70..e83f1b5f04c 100644 --- a/storage/connect/odbconn.cpp +++ b/storage/connect/odbconn.cpp @@ -2582,7 +2582,7 @@ int ODBConn::Rewind(char *sql, ODBCCOL *tocols) int rc, rbuf = -1; if (!m_hstmt) - rbuf = -1; + rbuf = 0; else if (m_Full) rbuf = m_Rows; // No need to "rewind" else if (m_Scrollable) { diff --git a/storage/connect/tabext.cpp b/storage/connect/tabext.cpp index 95725dfc44b..d1b94c81c11 100644 --- a/storage/connect/tabext.cpp +++ b/storage/connect/tabext.cpp @@ -473,7 +473,7 @@ bool TDBEXT::MakeSQL(PGLOBAL g, bool cnt) my_len= res - buf + 1; my_schema_table= (char *) malloc(my_len); memcpy(my_schema_table, buf, my_len - 1); - my_schema_table[my_len] = 0; + my_schema_table[my_len - 1] = 0; Query->Append(Quote); Query->Append(my_schema_table); Query->Append(Quote); @@ -481,7 +481,7 @@ bool TDBEXT::MakeSQL(PGLOBAL g, bool cnt) Query->Append("."); // Parse table my_len= strlen(buf) - my_len + 1; - my_schema_table= (char *) malloc(my_len); + my_schema_table= (char *) malloc(my_len + 1); memcpy(my_schema_table, ++res, my_len); my_schema_table[my_len] = 0; Query->Append(Quote); |