Commit fda58467 authored by Andrew Hutchings's avatar Andrew Hutchings Committed by GitHub

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.
parent 2ef2e232
...@@ -319,3 +319,12 @@ SELECT * from pg_in_maria; ...@@ -319,3 +319,12 @@ SELECT * from pg_in_maria;
my space column my space column
My value My value
DROP TABLE pg_in_maria; 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;
...@@ -223,3 +223,12 @@ DROP TABLE t1; ...@@ -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; 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; SELECT * from pg_in_maria;
DROP TABLE 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;
...@@ -2582,7 +2582,7 @@ int ODBConn::Rewind(char *sql, ODBCCOL *tocols) ...@@ -2582,7 +2582,7 @@ int ODBConn::Rewind(char *sql, ODBCCOL *tocols)
int rc, rbuf = -1; int rc, rbuf = -1;
if (!m_hstmt) if (!m_hstmt)
rbuf = -1; rbuf = 0;
else if (m_Full) else if (m_Full)
rbuf = m_Rows; // No need to "rewind" rbuf = m_Rows; // No need to "rewind"
else if (m_Scrollable) { else if (m_Scrollable) {
......
...@@ -473,7 +473,7 @@ bool TDBEXT::MakeSQL(PGLOBAL g, bool cnt) ...@@ -473,7 +473,7 @@ bool TDBEXT::MakeSQL(PGLOBAL g, bool cnt)
my_len= res - buf + 1; my_len= res - buf + 1;
my_schema_table= (char *) malloc(my_len); my_schema_table= (char *) malloc(my_len);
memcpy(my_schema_table, buf, my_len - 1); 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(Quote);
Query->Append(my_schema_table); Query->Append(my_schema_table);
Query->Append(Quote); Query->Append(Quote);
...@@ -481,7 +481,7 @@ bool TDBEXT::MakeSQL(PGLOBAL g, bool cnt) ...@@ -481,7 +481,7 @@ bool TDBEXT::MakeSQL(PGLOBAL g, bool cnt)
Query->Append("."); Query->Append(".");
// Parse table // Parse table
my_len= strlen(buf) - my_len + 1; 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); memcpy(my_schema_table, ++res, my_len);
my_schema_table[my_len] = 0; my_schema_table[my_len] = 0;
Query->Append(Quote); Query->Append(Quote);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment