summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathew Heard <splitice@users.noreply.github.com>2022-02-08 08:57:24 +1100
committerDaniel Black <daniel@mariadb.org>2022-06-10 11:36:59 +1000
commitb59bc629c8cef1e3e07529007dca2948b812e8fb (patch)
tree28b95b38972ac32397ff835def37a44c922b60b7
parentace2e0301e5d0f8c5acf02e671b6a1f3dd7fb374 (diff)
downloadmariadb-git-b59bc629c8cef1e3e07529007dca2948b812e8fb.tar.gz
MDEV-27766: connect engine; INSERT ignore option, was ignored
Test prior to this change: CURRENT_TEST: connect.mysql mysqltest: At line 485: query 'INSERT IGNORE INTO t3 VALUES (5),(10),(30)' failed: ER_GET_ERRMSG (1296): Got error 122 '(1062) Duplicate entry '10' for key 'PRIMARY' [INSERT INTO `t1` (`a`) VALUES (10)]' from CONNECT So the ignore table option wasn't getting passed to the remove server. Closes #2008
-rw-r--r--storage/connect/mysql-test/connect/r/mysql.result12
-rw-r--r--storage/connect/mysql-test/connect/t/mysql.test16
-rw-r--r--storage/connect/tabmysql.cpp16
-rw-r--r--storage/connect/tabmysql.h2
4 files changed, 42 insertions, 4 deletions
diff --git a/storage/connect/mysql-test/connect/r/mysql.result b/storage/connect/mysql-test/connect/r/mysql.result
index 3ac23394cbc..4377d2ad014 100644
--- a/storage/connect/mysql-test/connect/r/mysql.result
+++ b/storage/connect/mysql-test/connect/r/mysql.result
@@ -294,3 +294,15 @@ a
30
DROP TABLE t2;
DROP TABLE t1;
+#
+# MDEV-27766 CONNECT Engine Support for INSERT IGNORE with Mysql Table type
+#
+CREATE TABLE t1 (a INT PRIMARY KEY);
+INSERT INTO t1 VALUES (10),(20),(30);
+CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=MYSQL CONNECTION='mysql://root@localhost:PORT/test/t1' OPTION_LIST="Delayed=1,Ignored=1";
+INSERT INTO t2 VALUES (10),(20),(30),(40);
+DROP TABLE t2;
+DROP TABLE t1;
+#
+# End of 10.3 tests
+#
diff --git a/storage/connect/mysql-test/connect/t/mysql.test b/storage/connect/mysql-test/connect/t/mysql.test
index 7585c202b8b..451de29c0b0 100644
--- a/storage/connect/mysql-test/connect/t/mysql.test
+++ b/storage/connect/mysql-test/connect/t/mysql.test
@@ -470,3 +470,19 @@ SELECT * FROM t2;
DROP TABLE t2;
DROP TABLE t1;
+
+--echo #
+--echo # MDEV-27766 CONNECT Engine Support for INSERT IGNORE with Mysql Table type
+--echo #
+
+CREATE TABLE t1 (a INT PRIMARY KEY);
+INSERT INTO t1 VALUES (10),(20),(30);
+--replace_result $PORT PORT
+--eval CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=MYSQL CONNECTION='mysql://root@localhost:$PORT/test/t1' OPTION_LIST="Delayed=1,Ignored=1"
+INSERT INTO t2 VALUES (10),(20),(30),(40);
+DROP TABLE t2;
+DROP TABLE t1;
+
+--echo #
+--echo # End of 10.3 tests
+--echo #
diff --git a/storage/connect/tabmysql.cpp b/storage/connect/tabmysql.cpp
index 0d7cb6d50c4..975dc35d419 100644
--- a/storage/connect/tabmysql.cpp
+++ b/storage/connect/tabmysql.cpp
@@ -94,6 +94,7 @@ MYSQLDEF::MYSQLDEF(void)
Isview = false;
Bind = false;
Delayed = false;
+ Ignored = false;
//Xsrc = false;
Huge = false;
} // end of MYSQLDEF constructor
@@ -321,6 +322,9 @@ bool MYSQLDEF::DefineAM(PGLOBAL g, LPCSTR am, int)
Desc = "MySQL Table";
+ Delayed = !!GetIntCatInfo("Delayed", 0);
+ Ignored = !!GetIntCatInfo("Ignored", 0);
+
if (stricmp(am, "MYPRX")) {
// Normal case of specific MYSQL table
url = GetStringCatInfo(g, "Connect", NULL);
@@ -339,7 +343,6 @@ bool MYSQLDEF::DefineAM(PGLOBAL g, LPCSTR am, int)
return true;
Bind = !!GetIntCatInfo("Bind", 0);
- Delayed = !!GetIntCatInfo("Delayed", 0);
} else {
// MYSQL access from a PROXY table
TABLE_SHARE* s;
@@ -425,6 +428,7 @@ TDBMYSQL::TDBMYSQL(PMYDEF tdp) : TDBEXT(tdp)
Isview = tdp->Isview;
Prep = tdp->Bind;
Delayed = tdp->Delayed;
+ Ignored = tdp->Ignored;
Myc.m_Use = tdp->Huge;
} else {
Host = NULL;
@@ -440,6 +444,7 @@ TDBMYSQL::TDBMYSQL(PMYDEF tdp) : TDBEXT(tdp)
Isview = false;
Prep = false;
Delayed = false;
+ Ignored = false;
} // endif tdp
Bind = NULL;
@@ -466,6 +471,7 @@ TDBMYSQL::TDBMYSQL(PTDBMY tdbp) : TDBEXT(tdbp)
Isview = tdbp->Isview;
Prep = tdbp->Prep;
Delayed = tdbp->Delayed;
+ Ignored = tdbp->Ignored;
Bind = NULL;
//Query = tdbp->Query;
Fetched = tdbp->Fetched;
@@ -623,11 +629,13 @@ bool TDBMYSQL::MakeInsert(PGLOBAL g)
len += (strlen(TableName) + 40);
Query = new(g) STRING(g, len);
+ Query->Set("INSERT ");
if (Delayed)
- Query->Set("INSERT DELAYED INTO ");
- else
- Query->Set("INSERT INTO ");
+ Query->Append("DELAYED ");
+ if (Ignored)
+ Query->Append("IGNORE ");
+ Query->Append("INTO ");
Query->Append(tk);
Query->Append(TableName);
Query->Append("` (");
diff --git a/storage/connect/tabmysql.h b/storage/connect/tabmysql.h
index 4b61c7eb762..b5af77de50b 100644
--- a/storage/connect/tabmysql.h
+++ b/storage/connect/tabmysql.h
@@ -60,6 +60,7 @@ class MYSQLDEF : public EXTDEF {/* Logical table description */
bool Isview; /* true if this table is a MySQL view */
bool Bind; /* Use prepared statement on insert */
bool Delayed; /* Delayed insert */
+ bool Ignored; /* Use insert IGNORE */
//bool Xsrc; /* Execution type */
bool Huge; /* True for big table */
}; // end of MYSQLDEF
@@ -132,6 +133,7 @@ class TDBMYSQL : public TDBEXT {
bool Isview; // True if this table is a MySQL view
bool Prep; // Use prepared statement on insert
bool Delayed; // Use delayed insert
+ bool Ignored; // Use insert IGNORE
int m_Rc; // Return code from command
//int AftRows; // The number of affected rows
int N; // The current table index