From 0387c13ee777b67d533f350e2f2e43c30e3b3307 Mon Sep 17 00:00:00 2001 From: Olivier Bertrand Date: Sun, 6 Aug 2017 19:56:57 +0200 Subject: [PATCH] - Add a define making ha_connect.cc source unique for all MariaDB version. #if defined(NEW_MAR) #define stored_in_db stored_in_db() #endif // NEW_MAR) modified: storage/connect/CMakeLists.txt modified: storage/connect/ha_connect.cc - Fix compile failure for some configuration of CONNECT. This by updating the #ifdef's JDBC, MONGO and CMGO_SUPPORT. modified: storage/connect/ha_connect.cc modified: storage/connect/tabjson.cpp modified: storage/connect/tabjson.h - Fix failure of zip.test (restore code wrongly deleted) modified: storage/connect/tabjson.cpp - Make sure thread TBL table structure is correctly initialized. modified: storage/connect/tabtbl.cpp - Add new test case in tbl_thread.test modified: storage/connect/mysql-test/connect/r/tbl_thread.result modified: storage/connect/mysql-test/connect/t/tbl_thread.test - Remake a jar file after Java was updated modified: storage/connect/mysql-test/connect/std_data/Mongo3.jar --- storage/connect/CMakeLists.txt | 2 +- storage/connect/ha_connect.cc | 17 +++++++++------- .../mysql-test/connect/r/tbl_thread.result | 19 +++++++++++++++++- .../mysql-test/connect/std_data/Mongo3.jar | Bin 1705776 -> 1705776 bytes .../mysql-test/connect/t/tbl_thread.test | 16 ++++++++++++++- storage/connect/tabjson.cpp | 8 +++++--- storage/connect/tabjson.h | 10 +++++++-- storage/connect/tabtbl.cpp | 1 + 8 files changed, 58 insertions(+), 15 deletions(-) diff --git a/storage/connect/CMakeLists.txt b/storage/connect/CMakeLists.txt index be64ca7163f..af6bb5374a4 100644 --- a/storage/connect/CMakeLists.txt +++ b/storage/connect/CMakeLists.txt @@ -38,7 +38,7 @@ user_connect.h valblk.h value.h xindex.h xobject.h xtable.h) # Definitions that are shared for all OSes # add_definitions( -DMARIADB -DFORCE_INIT_OF_VARS -Dconnect_EXPORTS) -add_definitions( -DHUGE_SUPPORT -DGZ_SUPPORT -DPIVOT_SUPPORT ) +add_definitions( -DNEW_MAR -DHUGE_SUPPORT -DGZ_SUPPORT -DPIVOT_SUPPORT ) # diff --git a/storage/connect/ha_connect.cc b/storage/connect/ha_connect.cc index 843a12f08ad..ab718878da9 100644 --- a/storage/connect/ha_connect.cc +++ b/storage/connect/ha_connect.cc @@ -180,6 +180,10 @@ extern "C" { #endif // !__WIN__ } // extern "C" +#if defined(NEW_MAR) +#define stored_in_db stored_in_db() +#endif // NEW_MAR) + #if defined(XMAP) my_bool xmap= false; #endif // XMAP @@ -1559,7 +1563,7 @@ void *ha_connect::GetColumnOption(PGLOBAL g, void *field, PCOLINFO pcf) pcf->Flags |= U_NULLS; // Mark virtual columns as such - if (fp->vcol_info && !fp->stored_in_db()) + if (fp->vcol_info && !fp->stored_in_db) pcf->Flags |= U_VIRTUAL; pcf->Key= 0; // Not used when called from MySQL @@ -2055,7 +2059,7 @@ int ha_connect::MakeRecord(char *buf) for (field= table->field; *field && !rc; field++) { fp= *field; - if (fp->vcol_info && !fp->stored_in_db()) + if (fp->vcol_info && !fp->stored_in_db) continue; // This is a virtual column if (bitmap_is_set(map, fp->field_index) || alter) { @@ -2176,7 +2180,7 @@ int ha_connect::ScanRecord(PGLOBAL g, uchar *) for (Field **field=table->field ; *field ; field++) { fp= *field; - if ((fp->vcol_info && !fp->stored_in_db()) || + if ((fp->vcol_info && !fp->stored_in_db) || fp->option_struct->special) continue; // Is a virtual column possible here ??? @@ -5359,14 +5363,13 @@ static int connect_assisted_discovery(handlerton *, THD* thd, bool cnc= false; int cto= -1, qto= -1; #endif // ODBC_SUPPORT +#if defined(JDBC_SUPPORT) || defined(MONGO_SUPPORT) #if defined(JDBC_SUPPORT) PJPARM sjp= NULL; #endif // JDBC_SUPPORT -#if defined(MONGO_SUPPORT) PCSZ driver= NULL; char *url= NULL; -//char *prop= NULL; -#endif // MONGO_SUPPORT +#endif // JDBC_SUPPORT || MONGO_SUPPORT uint tm, fnc= FNC_NO, supfnc= (FNC_NO | FNC_COL); bool bif, ok= false, dbf= false; TABTYPE ttp= TAB_UNDEF; @@ -6339,7 +6342,7 @@ int ha_connect::create(const char *name, TABLE *table_arg, for (field= table_arg->field; *field; field++) { fp= *field; - if (fp->vcol_info && !fp->stored_in_db()) + if (fp->vcol_info && !fp->stored_in_db) continue; // This is a virtual column if (fp->flags & AUTO_INCREMENT_FLAG) { diff --git a/storage/connect/mysql-test/connect/r/tbl_thread.result b/storage/connect/mysql-test/connect/r/tbl_thread.result index dc54da0b675..32602e3fbe4 100644 --- a/storage/connect/mysql-test/connect/r/tbl_thread.result +++ b/storage/connect/mysql-test/connect/r/tbl_thread.result @@ -75,7 +75,7 @@ DROP TABLE rt3; connection default; DROP TABLE t1,t2,t3,total; # -# Old thread TBL tables test +# Old thread TBL tables test modified # CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=MYSQL SRCDEF='select 11 as v' OPTION_LIST='port=MASTER_PORT'; SELECT * FROM t1; @@ -90,6 +90,23 @@ SELECT * FROM total order by v desc; v 22 11 +DROP TABLE t1,t2,total; +# +# Old thread TBL tables test not modified +# +CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=MYSQL SRCDEF='select 11 as v'; +SELECT * FROM t1; +v +11 +CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=MYSQL SRCDEF='select 22 as v'; +SELECT * FROM t2; +v +22 +CREATE TABLE total (v BIGINT(20) UNSIGNED NOT NULL) ENGINE=CONNECT TABLE_TYPE=TBL TABLE_LIST='t1,t2' OPTION_LIST='thread=yes,port=PORT';; +SELECT * FROM total order by v desc; +v +22 +11 DROP TABLE total; DROP TABLE t1; DROP TABLE t2; diff --git a/storage/connect/mysql-test/connect/std_data/Mongo3.jar b/storage/connect/mysql-test/connect/std_data/Mongo3.jar index 21c6c2d10bdf50c4389f0aeb0dac75c36b0ed9ac..73eb3571290f20e16c3e3c2c464719d2431d922c 100644 GIT binary patch delta 41268 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 delta 41306 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 diff --git a/storage/connect/mysql-test/connect/t/tbl_thread.test b/storage/connect/mysql-test/connect/t/tbl_thread.test index c6f09c71d90..233d4149507 100644 --- a/storage/connect/mysql-test/connect/t/tbl_thread.test +++ b/storage/connect/mysql-test/connect/t/tbl_thread.test @@ -54,7 +54,7 @@ connection default; DROP TABLE t1,t2,t3,total; --echo # ---echo # Old thread TBL tables test +--echo # Old thread TBL tables test modified --echo # --replace_result $MASTER_MYPORT MASTER_PORT --eval CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=MYSQL SRCDEF='select 11 as v' OPTION_LIST='port=$MASTER_MYPORT' @@ -64,6 +64,20 @@ SELECT * FROM t1; --eval CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=MYSQL SRCDEF='select 22 as v' OPTION_LIST='port=$SLAVE_MYPORT' SELECT * FROM t2; +--replace_result $PORT PORT +--eval CREATE TABLE total (v BIGINT(20) UNSIGNED NOT NULL) ENGINE=CONNECT TABLE_TYPE=TBL TABLE_LIST='t1,t2' OPTION_LIST='thread=yes,port=$PORT'; +SELECT * FROM total order by v desc; +DROP TABLE t1,t2,total; + +--echo # +--echo # Old thread TBL tables test not modified +--echo # +CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=MYSQL SRCDEF='select 11 as v'; +SELECT * FROM t1; + +CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=MYSQL SRCDEF='select 22 as v'; +SELECT * FROM t2; + --replace_result $PORT PORT --eval CREATE TABLE total (v BIGINT(20) UNSIGNED NOT NULL) ENGINE=CONNECT TABLE_TYPE=TBL TABLE_LIST='t1,t2' OPTION_LIST='thread=yes,port=$PORT'; SELECT * FROM total order by v desc; diff --git a/storage/connect/tabjson.cpp b/storage/connect/tabjson.cpp index 655cef18de3..5c79e62b514 100644 --- a/storage/connect/tabjson.cpp +++ b/storage/connect/tabjson.cpp @@ -31,11 +31,13 @@ #if defined(ZIP_SUPPORT) #include "filamzip.h" #endif // ZIP_SUPPORT +#if defined(MONGO_SUPPORT) #if defined(JDBC_SUPPORT) #include "jmgfam.h" #endif // JDBC_SUPPORT #if defined(CMGO_SUPPORT) #include "cmgfam.h" +#endif // CMGO_SUPPORT #endif // MONGO_SUPPORT #include "tabmul.h" #include "checklvl.h" @@ -129,8 +131,8 @@ PQRYRES JSONColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt, bool info) #endif // ZIP_SUPPORT tdp->Fn = GetStringTableOption(g, topt, "Filename", NULL); -//if (!(tdp->Database = SetPath(g, db))) -// return NULL; + if (!(tdp->Database = SetPath(g, db))) + return NULL; tdp->Objname = GetStringTableOption(g, topt, "Object", NULL); tdp->Base = GetIntegerTableOption(g, topt, "Base", 0) ? 1 : 0; @@ -502,10 +504,10 @@ JSONDEF::JSONDEF(void) Pipe = false; Driver = NULL; Version = 0; -#endif // MONGO_SUPPORT #if defined(JDBC_SUPPORT) Wrapname = NULL; #endif // JDBC_SUPPORT +#endif // MONGO_SUPPORT } // end of JSONDEF constructor /***********************************************************************/ diff --git a/storage/connect/tabjson.h b/storage/connect/tabjson.h index 5b5aaca7941..eec1f0e355e 100644 --- a/storage/connect/tabjson.h +++ b/storage/connect/tabjson.h @@ -37,7 +37,9 @@ class DllExport JSONDEF : public DOSDEF { /* Table description */ friend class TDBJSN; friend class TDBJCL; #if defined(MONGO_SUPPORT) +#if defined(CMGO_SUPPORT) friend class CMGFAM; +#endif // CMGO_SUPPORT #if defined(JDBC_SUPPORT) friend class JMGFAM; #endif // JDBC_SUPPORT @@ -90,7 +92,9 @@ class DllExport TDBJSN : public TDBDOS { friend class JSONCOL; friend class JSONDEF; #if defined(MONGO_SUPPORT) +#if defined(CMGO_SUPPORT) friend class CMGFAM; +#endif // CMGO_SUPPORT #if defined(JDBC_SUPPORT) friend class JMGFAM; #endif // JDBC_SUPPORT @@ -159,11 +163,13 @@ public: class DllExport JSONCOL : public DOSCOL { friend class TDBJSN; friend class TDBJSON; +#if defined(MONGO_SUPPORT) +#if defined(CMGO_SUPPORT) + friend class CMGFAM; +#endif // CMGO_SUPPORT #if defined(JDBC_SUPPORT) friend class JMGFAM; #endif // JDBC_SUPPORT -#if defined(MONGO_SUPPORT) - friend class CMGFAM; #endif // MONGO_SUPPORT public: // Constructors diff --git a/storage/connect/tabtbl.cpp b/storage/connect/tabtbl.cpp index 1be6ffcd957..b567e9aecd4 100644 --- a/storage/connect/tabtbl.cpp +++ b/storage/connect/tabtbl.cpp @@ -652,6 +652,7 @@ bool TDBTBM::OpenTables(PGLOBAL g) tp = (PTBMT)PlugSubAlloc(g, NULL, sizeof(TBMT)); memset(tp, 0, sizeof(TBMT)); tp->G = g; + tp->Ready = false; tp->Tap = tabp; tp->Thd = thd;