diff --git a/storage/connect/CMakeLists.txt b/storage/connect/CMakeLists.txt index 22860ca34d4..69b2ef78316 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 -DUSE_TRY ) +add_definitions( -DHUGE_SUPPORT -DGZ_SUPPORT ) # @@ -230,7 +230,7 @@ ENDIF(CONNECT_WITH_ODBC) # # JDBC with MongoDB Java Driver included but disabled # -#OPTION(CONNECT_WITH_MONGO "Compile CONNECT storage engine with MONGO support" ON) +# OPTION(CONNECT_WITH_MONGO "Compile CONNECT storage engine with MONGO support" ON) OPTION(CONNECT_WITH_JDBC "Compile CONNECT storage engine with JDBC support" ON) IF(CONNECT_WITH_JDBC) @@ -243,17 +243,16 @@ IF(CONNECT_WITH_JDBC) # SET(JDBC_LIBRARY ${JAVA_JVM_LIBRARY}) will be dynamically linked SET(CONNECT_SOURCES ${CONNECT_SOURCES} javaconn.cpp jdbconn.cpp tabjdbc.cpp + jmgfam.cpp jmgoconn.cpp mongo.cpp tabjmg.cpp jdbccat.h javaconn.h jdbconn.h tabjdbc.h + jmgfam.h jmgoconn.h mongo.h tabjmg.h JdbcInterface.java ApacheInterface.java MariadbInterface.java MysqlInterface.java OracleInterface.java PostgresqlInterface.java + Mongo2Interface.java Mongo3Interface.java JavaWrappers.jar) - add_definitions(-DJDBC_SUPPORT) + add_definitions(-DJAVA_SUPPORT) IF(CONNECT_WITH_MONGO) - SET(CONNECT_SOURCES ${CONNECT_SOURCES} - jmgfam.cpp jmgoconn.cpp mongo.cpp tabjmg.cpp - jmgfam.h jmgoconn.h mongo.h tabjmg.h - Mongo2Interface.java Mongo3Interface.java) - add_definitions(-DMONGO_SUPPORT -DMONGO_ENABLED=0) + add_definitions(-DMONGO_SUPPORT) ENDIF() ELSE() SET(JDBC_LIBRARY "") @@ -296,10 +295,7 @@ IF(CONNECT_WITH_MONGO) add_definitions(-DCMGO_SUPPORT) IF (NOT JAVA_FOUND AND JNI_FOUND) SET(CONNECT_SOURCES ${CONNECT_SOURCES} mongo.cpp mongo.h) - add_definitions(-DMONGO_SUPPORT -DMONGO_ENABLED=1) - ELSE () - remove_definitions(-DMONGO_ENABLED=0) - add_definitions(-DMONGO_ENABLED=1) + add_definitions(-DMONGO_SUPPORT) ENDIF (NOT JAVA_FOUND AND JNI_FOUND) ENDIF(libmongoc-1.0_FOUND) ENDIF(CONNECT_WITH_MONGO) diff --git a/storage/connect/array.cpp b/storage/connect/array.cpp index 59a53487a7e..639edf63a1a 100644 --- a/storage/connect/array.cpp +++ b/storage/connect/array.cpp @@ -520,7 +520,7 @@ bool ARRAY::FilTest(PGLOBAL g, PVAL valp, OPVAL opc, int opm) } else if (opc != OP_EXIST) { sprintf(g->Message, MSG(MISSING_ARG), opc); - throw (int)TYPE_ARRAY; + throw (int)TYPE_ARRAY; } else // OP_EXIST return Nval > 0; diff --git a/storage/connect/cmgoconn.cpp b/storage/connect/cmgoconn.cpp index fdd59040257..44fac56137f 100644 --- a/storage/connect/cmgoconn.cpp +++ b/storage/connect/cmgoconn.cpp @@ -22,17 +22,10 @@ #include "filter.h" #include "cmgoconn.h" +bool CMgoConn::IsInit = false; + bool IsNum(PSZ s); - -// Required to initialize libmongoc's internals -void mongo_init(bool init) -{ - if (init) - mongoc_init(); - else - mongoc_cleanup(); - -} // end of mongo_init +bool MakeSelector(PGLOBAL g, PFIL fp, PSTRG s); /* --------------------------- Class INCOL --------------------------- */ @@ -139,11 +132,36 @@ CMgoConn::CMgoConn(PGLOBAL g, PCPARM pcg) m_Connected = false; } // end of CMgoConn standard constructor +/***********************************************************************/ +/* Required to initialize libmongoc's internals. */ +/***********************************************************************/ +void CMgoConn::mongo_init(bool init) +{ + if (init) + mongoc_init(); + else if (IsInit) + mongoc_cleanup(); + + IsInit = init; +} // end of mongo_init + /***********************************************************************/ /* Connect to the MongoDB server and get the collection. */ /***********************************************************************/ bool CMgoConn::Connect(PGLOBAL g) { + if (!IsInit) +#if defined(__WIN__) + __try { + mongo_init(true); + } __except (EXCEPTION_EXECUTE_HANDLER) { + strcpy(g->Message, "Cannot load MongoDB C driver"); + return true; + } // end try/except +#else // !__WIN__ + mongo_init(true); +#endif // !__WIN__ + Uri = mongoc_uri_new(Pcg->Uristr); if (!Uri) { @@ -240,12 +258,13 @@ int CMgoConn::CollSize(PGLOBAL g) /***********************************************************************/ bool CMgoConn::MakeCursor(PGLOBAL g) { - const char *p; - bool id, b = false, all = false; - PCSZ options = Pcg->Options; - PTDB tp = Pcg->Tdbp; - PCOL cp; - PSTRG s = NULL; + const char *p; + bool id, b = false, all = false; + PCSZ options = Pcg->Options; + PTDB tp = Pcg->Tdbp; + PCOL cp; + PSTRG s = NULL; + PFIL filp = tp->GetFilter(); id = (tp->GetMode() != MODE_READ); @@ -274,10 +293,10 @@ bool CMgoConn::MakeCursor(PGLOBAL g) s = new(g) STRING(g, 1023, (PSZ)options); - if (tp->GetFilter()) { + if (filp) { s->Append(",{\"$match\":"); - if (tp->GetFilter()->MakeSelector(g, s)) { + if (MakeSelector(g, filp, s)) { strcpy(g->Message, "Failed making selector"); return true; } else @@ -330,15 +349,15 @@ bool CMgoConn::MakeCursor(PGLOBAL g) } // endif error } else { - if (Pcg->Filter || tp->GetFilter()) { + if (Pcg->Filter || filp) { if (trace) { if (Pcg->Filter) htrc("Filter: %s\n", Pcg->Filter); - if (tp->GetFilter()) { + if (filp) { char buf[512]; - tp->GetFilter()->Prints(g, buf, 511); + filp->Prints(g, buf, 511); htrc("To_Filter: %s\n", buf); } // endif To_Filter @@ -346,11 +365,11 @@ bool CMgoConn::MakeCursor(PGLOBAL g) s = new(g) STRING(g, 1023, (PSZ)Pcg->Filter); - if (tp->GetFilter()) { + if (filp) { if (Pcg->Filter) s->Append(','); - if (tp->GetFilter()->MakeSelector(g, s)) { + if (MakeSelector(g, filp, s)) { strcpy(g->Message, "Failed making selector"); return NULL; } // endif Selector diff --git a/storage/connect/cmgoconn.h b/storage/connect/cmgoconn.h index f5cefea3442..b1216ac576c 100644 --- a/storage/connect/cmgoconn.h +++ b/storage/connect/cmgoconn.h @@ -93,6 +93,7 @@ public: PSZ Mini(PGLOBAL g, PCOL colp, const bson_t *bson, bool b); void GetColumnValue(PGLOBAL g, PCOL colp); bool AddValue(PGLOBAL g, PCOL colp, bson_t *doc, char *key, bool upd); + static void mongo_init(bool init); protected: // Members @@ -112,4 +113,5 @@ protected: PINCOL Fpc; // To insert INCOL classes PFBLOCK fp; bool m_Connected; + static bool IsInit; }; // end of class CMgoConn diff --git a/storage/connect/filter.cpp b/storage/connect/filter.cpp index 6a96240c469..079128f9aa6 100644 --- a/storage/connect/filter.cpp +++ b/storage/connect/filter.cpp @@ -10,7 +10,7 @@ /* Include relevant MariaDB header file. */ /***********************************************************************/ #include "my_global.h" -#include "sql_class.h" +//#include "sql_class.h" //#include "sql_time.h" #if defined(__WIN__) diff --git a/storage/connect/filter.h b/storage/connect/filter.h index 11b77aec132..c6ab8fddd35 100644 --- a/storage/connect/filter.h +++ b/storage/connect/filter.h @@ -61,9 +61,6 @@ class DllExport FILTER : public XOBJECT { /* Filter description block */ //virtual PXOB CheckSubQuery(PGLOBAL, PSQL); //virtual bool CheckLocal(PTDB); //virtual int CheckSpcCol(PTDB tdbp, int n); -#if defined(MONGO_SUPPORT) - bool MakeSelector(PGLOBAL g, PSTRG s); -#endif // MONGO_SUPPORT virtual void Printf(PGLOBAL g, FILE *f, uint n); virtual void Prints(PGLOBAL g, char *ps, uint z); // PFIL Linearize(bool nosep); diff --git a/storage/connect/ha_connect.cc b/storage/connect/ha_connect.cc index 692c7674eb6..c738f39c668 100644 --- a/storage/connect/ha_connect.cc +++ b/storage/connect/ha_connect.cc @@ -129,10 +129,13 @@ #if defined(ODBC_SUPPORT) #include "odbccat.h" #endif // ODBC_SUPPORT -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) #include "tabjdbc.h" #include "jdbconn.h" -#endif // JDBC_SUPPORT +#endif // JAVA_SUPPORT +#if defined(CMGO_SUPPORT) +#include "cmgoconn.h" +#endif // CMGO_SUPPORT #include "tabmysql.h" #include "filamdbf.h" #include "tabxcl.h" @@ -171,18 +174,18 @@ #define JSONMAX 10 // JSON Default max grp size extern "C" { - char version[]= "Version 1.06.0004 September 03, 2017"; + char version[]= "Version 1.06.0005 October 14, 2017"; #if defined(__WIN__) - char compver[]= "Version 1.06.0004 " __DATE__ " " __TIME__; + char compver[]= "Version 1.06.0005 " __DATE__ " " __TIME__; char slash= '\\'; #else // !__WIN__ char slash= '/'; #endif // !__WIN__ } // extern "C" -#if defined(NEW_MAR) +#if MYSQL_VERSION_ID > 100200 #define stored_in_db stored_in_db() -#endif // NEW_MAR) +#endif // MYSQL_VERSION_ID #if defined(XMAP) my_bool xmap= false; @@ -196,10 +199,10 @@ extern "C" { } // extern "C" #endif // XMSG -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) char *JvmPath; char *ClassPath; -#endif // JDBC_SUPPORT +#endif // JAVA_SUPPORT pthread_mutex_t parmut; pthread_mutex_t usrmut; @@ -222,7 +225,7 @@ bool CheckSelf(PGLOBAL g, TABLE_SHARE *s, PCSZ host, PCSZ db, bool ZipLoadFile(PGLOBAL, PCSZ, PCSZ, PCSZ, bool, bool); bool ExactInfo(void); #if defined(CMGO_SUPPORT) -void mongo_init(bool); +//void mongo_init(bool); #endif // CMGO_SUPPORT USETEMP UseTemp(void); int GetConvSize(void); @@ -234,6 +237,8 @@ uint GetWorkSize(void); void SetWorkSize(uint); extern "C" const char *msglang(void); +static char *strz(PGLOBAL g, LEX_STRING &ls); + static void PopUser(PCONNECT xp); static PCONNECT GetUser(THD *thd, PCONNECT xp); static PGLOBAL GetPlug(THD *thd, PCONNECT& lxp); @@ -350,14 +355,21 @@ static MYSQL_THDVAR_UINT(json_grp_size, "max number of rows for JSON aggregate functions.", NULL, NULL, JSONMAX, 1, INT_MAX, 1); -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) // Default java wrapper to use with JDBC tables static MYSQL_THDVAR_STR(java_wrapper, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC, "Java wrapper class name", // check_java_wrapper, update_java_wrapper, NULL, NULL, "wrappers/JdbcInterface"); -#endif // JDBC_SUPPORT +#endif // JAVA_SUPPORT + +#if 0 // This is apparently not acceptable for a plugin +// Enabling MONGO table type +static MYSQL_THDVAR_BOOL(enable_mongo, PLUGIN_VAR_RQCMDARG, + "Enabling the MongoDB access", + NULL, NULL, MONGO_ENABLED); +#endif // 0 #if defined(MONGO_SUPPORT) // Enabling MONGO table type @@ -421,10 +433,14 @@ extern "C" const char *msglang(void) } // end of msglang #else // !XMSG && !NEWMSG -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) char *GetJavaWrapper(void) {return connect_hton ? THDVAR(current_thd, java_wrapper) : (char*)"wrappers/JdbcInterface";} -#endif // JDBC_SUPPORT +#endif // JAVA_SUPPORT + +#if defined(JAVA_SUPPORT) +//bool MongoEnabled(void) { return THDVAR(current_thd, enable_mongo); } +#endif // JAVA_SUPPORT #if defined(MONGO_SUPPORT) bool MongoEnabled(void) { return THDVAR(current_thd, enable_mongo); } @@ -705,7 +721,7 @@ static int connect_init_func(void *p) XmlInitParserLib(); #endif // LIBXML2_SUPPORT -#if defined(CMGO_SUPPORT) +#if 0 //defined(CMGO_SUPPORT) mongo_init(true); #endif // CMGO_SUPPORT @@ -726,9 +742,9 @@ static int connect_init_func(void *p) DTVAL::SetTimeShift(); // Initialize time zone shift once for all BINCOL::SetEndian(); // Initialize host endian setting -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) JAVAConn::SetJVM(); -#endif // JDBC_SUPPORT +#endif // JAVA_SUPPORT DBUG_RETURN(0); } // end of connect_init_func @@ -748,12 +764,12 @@ static int connect_done_func(void *) #endif // LIBXML2_SUPPORT #if defined(CMGO_SUPPORT) - mongo_init(false); + CMgoConn::mongo_init(false); #endif // CMGO_SUPPORT -#ifdef JDBC_SUPPORT +#ifdef JAVA_SUPPORT JAVAConn::ResetJVM(); -#endif // JDBC_SUPPORT +#endif // JAVA_SUPPORT #if !defined(__WIN__) PROFILE_End(); @@ -1758,7 +1774,7 @@ bool ha_connect::IsPartitioned(void) } // end of IsPartitioned -const char *ha_connect::GetDBName(const char* name) +PCSZ ha_connect::GetDBName(PCSZ name) { return (name) ? name : table->s->db.str; } // end of GetDBName @@ -1821,7 +1837,7 @@ void ha_connect::AddColName(char *cp, Field *fp) /***********************************************************************/ /* This function sets the current database path. */ /***********************************************************************/ -bool ha_connect::SetDataPath(PGLOBAL g, const char *path) +bool ha_connect::SetDataPath(PGLOBAL g, PCSZ path) { return (!(datapath= SetPath(g, path))); } // end of SetDataPath @@ -2181,7 +2197,7 @@ int ha_connect::MakeRecord(char *buf) /***********************************************************************/ /* Set row values from a MySQL pseudo record. Specific to MySQL. */ /***********************************************************************/ -int ha_connect::ScanRecord(PGLOBAL g, uchar *) +int ha_connect::ScanRecord(PGLOBAL g, const uchar *) { char attr_buffer[1024]; char data_buffer[1024]; @@ -2324,7 +2340,7 @@ int ha_connect::ScanRecord(PGLOBAL g, uchar *) /* Check change in index column. Specific to MySQL. */ /* Should be elaborated to check for real changes. */ /***********************************************************************/ -int ha_connect::CheckRecord(PGLOBAL g, const uchar *, uchar *newbuf) +int ha_connect::CheckRecord(PGLOBAL g, const uchar *, const uchar *newbuf) { return ScanRecord(g, newbuf); } // end of dummy CheckRecord @@ -2517,7 +2533,7 @@ const char *ha_connect::GetValStr(OPVAL vop, bool neg) val= (neg) ? " IS NOT NULL" : " IS NULL"; break; case OP_LIKE: - val= " LIKE "; + val= (neg) ? " NOT LIKE " : " LIKE "; break; case OP_XX: val= (neg) ? " NOT BETWEEN " : " BETWEEN "; @@ -2886,7 +2902,10 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, const Item *cond) case Item_func::LE_FUNC: vop= OP_LE; break; case Item_func::GE_FUNC: vop= OP_GE; break; case Item_func::GT_FUNC: vop= OP_GT; break; - case Item_func::LIKE_FUNC: vop= OP_LIKE; break; + case Item_func::LIKE_FUNC: + vop= OP_LIKE; + neg = ((Item_func_opt_neg *)condf)->negated; + break; case Item_func::ISNOTNULL_FUNC: neg = true; // fall through @@ -4417,8 +4436,8 @@ bool ha_connect::IsSameIndex(PIXDEF xp1, PIXDEF xp2) return b; } // end of IsSameIndex -MODE ha_connect::CheckMode(PGLOBAL g, THD *thd, - MODE newmode, bool *chk, bool *cras) +MODE ha_connect::CheckMode(PGLOBAL g, THD *thd, + MODE newmode, bool *chk, bool *cras) { #if defined(DEVELOPMENT) if (true) { @@ -5379,20 +5398,18 @@ static int connect_assisted_discovery(handlerton *, THD* thd, #endif // __WIN__ //int hdr, mxe; int port = 0, mxr = 0, rc = 0, mul = 0, lrecl = 0; - PCSZ tabtyp = NULL; #if defined(ODBC_SUPPORT) POPARM sop= NULL; PCSZ ucnc= NULL; + PCSZ tabtyp = NULL; bool cnc= false; int cto= -1, qto= -1; #endif // ODBC_SUPPORT -#if defined(JDBC_SUPPORT) || defined(MONGO_SUPPORT) -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) PJPARM sjp= NULL; -#endif // JDBC_SUPPORT PCSZ driver= NULL; char *url= NULL; -#endif // JDBC_SUPPORT || MONGO_SUPPORT +#endif // JAVA_SUPPORT uint tm, fnc= FNC_NO, supfnc= (FNC_NO | FNC_COL); bool bif, ok= false, dbf= false; TABTYPE ttp= TAB_UNDEF; @@ -5453,9 +5470,9 @@ static int connect_assisted_discovery(handlerton *, THD* thd, if ((ucnc= GetListOption(g, "UseDSN", topt->oplist))) cnc= (!*ucnc || *ucnc == 'y' || *ucnc == 'Y' || atoi(ucnc) != 0); #endif -#if defined(JDBC_SUPPORT) || defined(MONGO_SUPPORT) +#if defined(JAVA_SUPPORT) driver= GetListOption(g, "Driver", topt->oplist, NULL); -#endif // JDBC_SUPPORT || MONGO_SUPPORT +#endif // JAVA_SUPPORT #if defined(PROMPT_OK) cop= atoi(GetListOption(g, "checkdsn", topt->oplist, "0")); #endif // PROMPT_OK @@ -5542,7 +5559,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd, supfnc |= (FNC_TABLE | FNC_DSN | FNC_DRIVER); break; #endif // ODBC_SUPPORT -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) case TAB_JDBC: if (fnc & FNC_DRIVER) { ok = true; @@ -5576,10 +5593,10 @@ static int connect_assisted_discovery(handlerton *, THD* thd, supfnc |= (FNC_DRIVER | FNC_TABLE); break; -#endif // JDBC_SUPPORT +#endif // JAVA_SUPPORT case TAB_DBF: dbf = true; - // fall through + // Passthru case TAB_CSV: if (!fn && fnc != FNC_NO) sprintf(g->Message, "Missing %s file name", topt->type); @@ -5633,10 +5650,8 @@ static int connect_assisted_discovery(handlerton *, THD* thd, ok = true; break; #endif // __WIN__ -#if defined(PIVOT_SUPPORT) case TAB_PIVOT: supfnc = FNC_NO; -#endif // PIVOT_SUPPORT case TAB_PRX: case TAB_TBL: case TAB_XCL: @@ -5667,14 +5682,14 @@ static int connect_assisted_discovery(handlerton *, THD* thd, ok = true; break; -#if defined(MONGO_SUPPORT) +#if defined(JAVA_SUPPORT) case TAB_MONGO: if (!topt->tabname) topt->tabname = tab; ok = true; break; -#endif // MONGO_SUPPORT +#endif // JAVA_SUPPORT case TAB_VIR: ok = true; break; @@ -5747,7 +5762,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd, break; #endif // ODBC_SUPPORT -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) case TAB_JDBC: switch (fnc) { case FNC_NO: @@ -5776,7 +5791,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd, } // endswitch info break; -#endif // JDBC_SUPPORT +#endif // JAVA_SUPPORT case TAB_MYSQL: qrp = MyColumns(g, thd, host, db, user, pwd, tab, NULL, port, fnc == FNC_COL); @@ -5806,11 +5821,9 @@ static int connect_assisted_discovery(handlerton *, THD* thd, } // endif OcrColumns break; -#if defined(PIVOT_SUPPORT) case TAB_PIVOT: qrp = PivotColumns(g, tab, src, pic, fcl, skc, host, db, user, pwd, port); break; -#endif // PIVOT_SUPPORT case TAB_VIR: qrp = VirColumns(g, fnc == FNC_COL); break; @@ -5819,9 +5832,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd, break; #if defined(MONGO_SUPPORT) case TAB_MONGO: - if (!(url = strz(g, create_info->connect_string)) || !*url) - url = "mongodb://localhost:27017"; - + url = strz(g, create_info->connect_string); qrp = MGOColumns(g, db, url, topt, fnc == FNC_COL); break; #endif // MONGO_SUPPORT @@ -5949,7 +5960,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd, break; case FLD_SCHEM: -#if defined(ODBC_SUPPORT) || defined(JDBC_SUPPORT) +#if defined(ODBC_SUPPORT) || defined(JAVA_SUPPORT) if ((ttp == TAB_ODBC || ttp == TAB_JDBC) && crp->Kdata) { if (schem && stricmp(schem, crp->Kdata->GetCharValue(i))) { sprintf(g->Message, @@ -5960,7 +5971,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd, schem = crp->Kdata->GetCharValue(i); } // endif ttp -#endif // ODBC_SUPPORT || JDBC_SUPPORT +#endif // ODBC_SUPPORT || JAVA_SUPPORT default: break; // Ignore } // endswitch Fld @@ -6008,7 +6019,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd, } else #endif // ODBC_SUPPORT -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) if (ttp == TAB_JDBC) { int plgtyp; @@ -7151,7 +7162,7 @@ static MYSQL_SYSVAR_STR(errmsg_dir_path, msg_path, "../../../../storage/connect/"); // for testing #endif // XMSG -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) static MYSQL_SYSVAR_STR(jvm_path, JvmPath, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC, "Path to the directory where is the JVM lib", @@ -7163,7 +7174,7 @@ static MYSQL_SYSVAR_STR(class_path, ClassPath, "Java class path", // check_class_path, update_class_path, NULL, NULL, NULL); -#endif // JDBC_SUPPORT +#endif // JAVA_SUPPORT static struct st_mysql_sys_var* connect_system_variables[]= { @@ -7184,14 +7195,14 @@ static struct st_mysql_sys_var* connect_system_variables[]= { #endif // XMSG MYSQL_SYSVAR(json_null), MYSQL_SYSVAR(json_grp_size), -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) MYSQL_SYSVAR(jvm_path), MYSQL_SYSVAR(class_path), MYSQL_SYSVAR(java_wrapper), -#endif // JDBC_SUPPORT -#if defined(MONGO_SUPPORT) - MYSQL_SYSVAR(enable_mongo), -#endif // MONGO_SUPPORT +#endif // JAVA_SUPPORT +#if defined(JAVA_SUPPORT) +//MYSQL_SYSVAR(enable_mongo), +#endif // JAVA_SUPPORT NULL }; @@ -7208,7 +7219,7 @@ maria_declare_plugin(connect) 0x0106, /* version number (1.05) */ NULL, /* status variables */ connect_system_variables, /* system variables */ - "1.06.0004", /* string version */ + "1.06.0005", /* string version */ MariaDB_PLUGIN_MATURITY_STABLE /* maturity */ } maria_declare_plugin_end; diff --git a/storage/connect/ha_connect.h b/storage/connect/ha_connect.h index e839590dbc8..4c5bf5856cc 100644 --- a/storage/connect/ha_connect.h +++ b/storage/connect/ha_connect.h @@ -32,8 +32,6 @@ /****************************************************************************/ #include "mycat.h" -static char *strz(PGLOBAL g, LEX_STRING &ls); - /****************************************************************************/ /* Structures used to pass info between CONNECT and ha_connect. */ /****************************************************************************/ @@ -207,13 +205,13 @@ public: bool IsOpened(void); int CloseTable(PGLOBAL g); int MakeRecord(char *buf); - int ScanRecord(PGLOBAL g, uchar *buf); - int CheckRecord(PGLOBAL g, const uchar *oldbuf, uchar *newbuf); + int ScanRecord(PGLOBAL g, const uchar *buf); + int CheckRecord(PGLOBAL g, const uchar *oldbuf, const uchar *newbuf); int ReadIndexed(uchar *buf, OPVAL op, const key_range *kr= NULL); bool IsIndexed(Field *fp); bool MakeKeyWhere(PGLOBAL g, PSTRG qry, OPVAL op, char q, const key_range *kr); - inline char *Strz(LEX_STRING &ls); +//inline char *Strz(LEX_STRING &ls); key_range start_key; @@ -231,7 +229,7 @@ public: /** @brief The file extensions. */ - const char **bas_ext() const; +//const char **bas_ext() const; /** Check if a storage engine supports a particular alter table in-place diff --git a/storage/connect/javaconn.cpp b/storage/connect/javaconn.cpp index 3ba99ed89f8..90f834ef9a7 100644 --- a/storage/connect/javaconn.cpp +++ b/storage/connect/javaconn.cpp @@ -17,7 +17,7 @@ /* Include relevant MariaDB header file. */ /***********************************************************************/ #include -#include +//#include #if defined(__WIN__) #include // for getcwd #if defined(__BORLANDC__) @@ -57,6 +57,7 @@ extern "C" HINSTANCE s_hModule; // Saved module handle extern char *JvmPath; // The connect_jvm_path global variable value extern char *ClassPath; // The connect_class_path global variable value +char *GetPluginDir(void); char *GetJavaWrapper(void); // The connect_java_wrapper variable value /***********************************************************************/ @@ -453,7 +454,7 @@ bool JAVAConn::Open(PGLOBAL g) vm_args.options = options; vm_args.ignoreUnrecognized = false; // invalid options make the JVM init fail - //=============== load and initialize Java VM and JNI interface ============= + //=============== load and initialize Java VM and JNI interface ============= rc = CreateJavaVM(&jvm, (void**)&env, &vm_args); // YES !! delete options; // we then no longer need the initialisation options. diff --git a/storage/connect/javaconn.h b/storage/connect/javaconn.h index 5d82570365b..54b7c4e92b7 100644 --- a/storage/connect/javaconn.h +++ b/storage/connect/javaconn.h @@ -54,12 +54,12 @@ typedef jint(JNICALL *GETJVM) (JavaVM **, jsize, jsize *); typedef jint(JNICALL *GETDEF) (void *); #endif // _DEBUG -class JAVAConn; +//class JAVAConn; /***********************************************************************/ /* JAVAConn class. */ /***********************************************************************/ -class JAVAConn : public BLOCK { +class DllExport JAVAConn : public BLOCK { friend class TDBJMG; friend class JMGDISC; private: diff --git a/storage/connect/jdbccat.h b/storage/connect/jdbccat.h index 1210aff77d8..d137164b53a 100644 --- a/storage/connect/jdbccat.h +++ b/storage/connect/jdbccat.h @@ -6,7 +6,7 @@ #define DEFAULT_QUERY_TIMEOUT -1 // means do not set typedef struct jdbc_parms { - int CheckSize(int rows); + int CheckSize(int rows); PCSZ Driver; // JDBC driver PCSZ Url; // Driver URL PCSZ User; // User connect info diff --git a/storage/connect/jdbconn.cpp b/storage/connect/jdbconn.cpp index cfe74cabacd..4c21c2c9681 100644 --- a/storage/connect/jdbconn.cpp +++ b/storage/connect/jdbconn.cpp @@ -654,7 +654,7 @@ bool JDBConn::Connect(PJPARM sop) if (gmID(g, typid, "ColumnType", "(ILjava/lang/String;)I")) return true; else - m_Opened = true; + m_Connected = true; return false; } // end of Connect diff --git a/storage/connect/jmgoconn.cpp b/storage/connect/jmgoconn.cpp index 7535431c82e..4736641ef3f 100644 --- a/storage/connect/jmgoconn.cpp +++ b/storage/connect/jmgoconn.cpp @@ -25,6 +25,7 @@ #define nullptr 0 bool IsNum(PSZ s); +bool MakeSelector(PGLOBAL g, PFIL fp, PSTRG s); /* --------------------------- Class JNCOL --------------------------- */ @@ -123,12 +124,13 @@ void JMgoConn::AddJars(PSTRG jpop, char sep) #if defined(DEVELOPMENT) if (m_Version == 2) { jpop->Append(sep); - jpop->Append("C:/Eclipse/workspace/MongoWrap2/bin"); +// jpop->Append("C:/Eclipse/workspace/MongoWrap2/bin"); jpop->Append(sep); jpop->Append("C:/mongo-java-driver/mongo-java-driver-2.13.3.jar"); } else { jpop->Append(sep); - jpop->Append("C:/Eclipse/workspace/MongoWrap3/bin"); +// jpop->Append("C:/Eclipse/workspace/MongoWrap3/bin"); +// jpop->Append("C:/Program Files/MariaDB 10.1/lib/plugin/JavaWrappers.jar"); jpop->Append(sep); jpop->Append("C:/mongo-java-driver/mongo-java-driver-3.4.2.jar"); } // endif m_Version @@ -238,6 +240,7 @@ bool JMgoConn::MakeCursor(PGLOBAL g, PTDB tdbp, PCSZ options, PSZ jp; PCSZ op = NULL, sf = NULL, Options = options; PSTRG s = NULL; + PFIL filp = tdbp->GetFilter(); if (Options && !stricmp(Options, "all")) { Options = NULL; @@ -264,10 +267,10 @@ bool JMgoConn::MakeCursor(PGLOBAL g, PTDB tdbp, PCSZ options, s = new(g) STRING(g, 1023, (PSZ)Options); - if (tdbp->GetFilter()) { + if (filp) { s->Append(",{\"$match\":"); - if (tdbp->GetFilter()->MakeSelector(g, s)) { + if (MakeSelector(g, filp, s)) { strcpy(g->Message, "Failed making selector"); return NULL; } else @@ -314,15 +317,15 @@ bool JMgoConn::MakeCursor(PGLOBAL g, PTDB tdbp, PCSZ options, return AggregateCollection(p); } else { - if (filter || tdbp->GetFilter()) { + if (filter || filp) { if (trace) { if (filter) htrc("Filter: %s\n", filter); - if (tdbp->GetFilter()) { + if (filp) { char buf[512]; - tdbp->GetFilter()->Prints(g, buf, 511); + filp->Prints(g, buf, 511); htrc("To_Filter: %s\n", buf); } // endif To_Filter @@ -331,11 +334,11 @@ bool JMgoConn::MakeCursor(PGLOBAL g, PTDB tdbp, PCSZ options, s = new(g) STRING(g, 1023, (PSZ)filter); len = s->GetLength(); - if (tdbp->GetFilter()) { + if (filp) { if (filter) s->Append(','); - if (tdbp->GetFilter()->MakeSelector(g, s)) { + if (MakeSelector(g, filp, s)) { strcpy(g->Message, "Failed making selector"); return NULL; } // endif Selector diff --git a/storage/connect/json.h b/storage/connect/json.h index cf7b2b18737..375532212c4 100644 --- a/storage/connect/json.h +++ b/storage/connect/json.h @@ -53,8 +53,8 @@ PSZ Serialize(PGLOBAL g, PJSON jsp, char *fn, int pretty); bool SerializeArray(JOUT *js, PJAR jarp, bool b); bool SerializeObject(JOUT *js, PJOB jobp); bool SerializeValue(JOUT *js, PJVAL jvp); -bool IsNum(PSZ s); char *NextChr(PSZ s, char sep); +DllExport bool IsNum(PSZ s); /***********************************************************************/ /* Class JOUT. Used by Serialize. */ diff --git a/storage/connect/jsonudf.cpp b/storage/connect/jsonudf.cpp index 7a7ec005e24..504ea837fee 100644 --- a/storage/connect/jsonudf.cpp +++ b/storage/connect/jsonudf.cpp @@ -497,28 +497,23 @@ PVAL JSNX::ExpandArray(PGLOBAL g, PJAR arp, int n) /*********************************************************************************/ PVAL JSNX::CalculateArray(PGLOBAL g, PJAR arp, int n) { -//int i, ars, nv = 0, nextsame = Tjp->NextSame; - int i, nv = 0, nextsame = 0; - my_bool err; + int i, ars = arp->size(), nv = 0; + bool err; OPVAL op = Nodes[n].Op; PVAL val[2], vp = Nodes[n].Valp; PJVAL jvrp, jvp; JVALUE jval; vp->Reset(); -//ars = arp->size(); if (trace) - htrc("CalculateArray size=%d\n", arp->size()); -// htrc("CalculateArray size=%d\n", ars); + htrc("CalculateArray size=%d op=%d\n", ars, op); for (i = 0; i < arp->size(); i++) { -//for (i = 0; i < ars; i++) { because compiler bug jvrp = arp->GetValue(i); if (trace) - htrc("Value %s null=%d nv=%d\n", - jvrp->GetString(g), jvrp->IsNull() ? 1 : 0, nv); + htrc("i=%d nv=%d\n", i, nv); if (!jvrp->IsNull() || (op == OP_CNC && GetJsonNull())) { if (jvrp->IsNull()) { @@ -530,6 +525,10 @@ PVAL JSNX::CalculateArray(PGLOBAL g, PJAR arp, int n) } else jvp = jvrp; + if (trace) + htrc("jvp=%s null=%d\n", + jvp->GetString(g), jvp->IsNull() ? 1 : 0); + if (!nv++) { SetJsonValue(g, vp, jvp, n); continue; @@ -562,6 +561,13 @@ PVAL JSNX::CalculateArray(PGLOBAL g, PJAR arp, int n) if (err) vp->Reset(); + if (trace) { + char buf(32); + + htrc("vp='%s' err=%d\n", + vp->GetCharString(&buf), err ? 1 : 0); + } // endif trace + } // endif Zero } // endif jvrp @@ -579,7 +585,6 @@ PVAL JSNX::CalculateArray(PGLOBAL g, PJAR arp, int n) } // endif Op -//Tjp->NextSame = nextsame; return vp; } // end of CalculateArray diff --git a/storage/connect/mongo.cpp b/storage/connect/mongo.cpp index 12f2f428112..088dc2d29d1 100644 --- a/storage/connect/mongo.cpp +++ b/storage/connect/mongo.cpp @@ -18,12 +18,13 @@ #include "plgdbsem.h" #include "xtable.h" #include "tabext.h" +#include "filter.h" #if defined(CMGO_SUPPORT) #include "tabcmg.h" -#endif // MONGO_SUPPORT -#if defined(JDBC_SUPPORT) +#endif // CMGO_SUPPORT +#if defined(JAVA_SUPPORT) #include "tabjmg.h" -#endif // JDBC_SUPPORT +#endif // JAVA_SUPPORT #include "resource.h" /***********************************************************************/ @@ -32,8 +33,89 @@ #define MAXCOL 200 /* Default max column nb in result */ #define TYPE_UNKNOWN 12 /* Must be greater than other types */ +bool MakeSelector(PGLOBAL g, PFIL fp, PSTRG s); bool IsNum(PSZ s); +/***********************************************************************/ +/* Make selector json representation for Mongo tables. */ +/***********************************************************************/ +bool MakeSelector(PGLOBAL g, PFIL fp, PSTRG s) +{ + OPVAL opc = fp->GetOpc(); + + s->Append('{'); + + if (opc == OP_AND || opc == OP_OR) { + if (fp->GetArgType(0) != TYPE_FILTER || fp->GetArgType(1) != TYPE_FILTER) + return true; + + s->Append("\"$"); + s->Append(opc == OP_AND ? "and" : "or"); + s->Append("\":["); + + if (MakeSelector(g, (PFIL)fp->Arg(0), s)) + return true; + + s->Append(','); + + if (MakeSelector(g, (PFIL)fp->Arg(1), s)) + return true; + + s->Append(']'); + } else { + if (fp->GetArgType(0) != TYPE_COLBLK) + return true; + + s->Append('"'); + s->Append(((PCOL)fp->Arg(0))->GetJpath(g, false)); + s->Append("\":{\"$"); + + switch (opc) { + case OP_EQ: + s->Append("eq"); + break; + case OP_NE: + s->Append("ne"); + break; + case OP_GT: + s->Append("gt"); + break; + case OP_GE: + s->Append("gte"); + break; + case OP_LT: + s->Append("lt"); + break; + case OP_LE: + s->Append("lte"); + break; + case OP_NULL: + case OP_LIKE: + case OP_EXIST: + default: + return true; + } // endswitch Opc + + s->Append("\":"); + + if (fp->GetArgType(1) == TYPE_COLBLK) { + s->Append("\"$"); + s->Append(((PEXTCOL)fp->Arg(1))->GetJpath(g, false)); + s->Append('"'); + } else { + char buf[501]; + + fp->Arg(1)->Prints(g, buf, 500); + s->Append(buf); + } // endif Type + + s->Append('}'); + } // endif opc + + s->Append('}'); + return false; +} // end of MakeSelector + /***********************************************************************/ /* MGOColumns: construct the result blocks containing the description */ /* of all the columns of a document contained inside MongoDB. */ @@ -49,7 +131,7 @@ PQRYRES MGOColumns(PGLOBAL g, PCSZ db, PCSZ uri, PTOS topt, bool info) int i, n = 0; PCSZ drv; PBCOL bcp; - MGODISC *cmgd; + MGODISC *cmgd = NULL; PQRYRES qrp; PCOLRES crp; @@ -72,7 +154,7 @@ PQRYRES MGOColumns(PGLOBAL g, PCSZ db, PCSZ uri, PTOS topt, bool info) goto err; #endif } else if (drv && toupper(*drv) == 'J') { -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) cmgd = new(g) JMGDISC(g, (int*)length); #else sprintf(g->Message, "Mongo %s Driver not available", "Java"); @@ -142,7 +224,7 @@ skipit: return qrp; err: - if (cmgd->tmgp) + if (cmgd && cmgd->tmgp) cmgd->tmgp->CloseDB(g); return NULL; @@ -181,7 +263,7 @@ int MGODISC::GetColumns(PGLOBAL g, PCSZ db, PCSZ uri, PTOS topt) /* Open the MongoDB collection. */ /*********************************************************************/ tdp = new(g) MGODEF; - tdp->Uri = uri; + tdp->Uri = (uri && *uri) ? uri : "mongodb://localhost:27017"; tdp->Driver = drv; tdp->Tabname = GetStringTableOption(g, topt, "Name", NULL); tdp->Tabname = GetStringTableOption(g, topt, "Tabname", tdp->Tabname); @@ -346,7 +428,7 @@ PTDB MGODEF::GetTable(PGLOBAL g, MODE m) return NULL; #endif } else if (Driver && toupper(*Driver) == 'J') { -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) if (Catfunc == FNC_COL) return new(g) TDBJGL(this); else diff --git a/storage/connect/mongo.h b/storage/connect/mongo.h index af69226ea8b..97c391a217f 100644 --- a/storage/connect/mongo.h +++ b/storage/connect/mongo.h @@ -63,7 +63,7 @@ class DllExport MGODEF : public EXTDEF { /* Table description */ friend class TDBJGL; friend class CMGFAM; friend class MGODISC; - friend PQRYRES MGOColumns(PGLOBAL, PCSZ, PCSZ, PTOS, bool); + friend DllExport PQRYRES MGOColumns(PGLOBAL, PCSZ, PCSZ, PTOS, bool); public: // Constructor MGODEF(void); diff --git a/storage/connect/mycat.cc b/storage/connect/mycat.cc index 0f8d7b76b60..bb77512be62 100644 --- a/storage/connect/mycat.cc +++ b/storage/connect/mycat.cc @@ -83,22 +83,20 @@ #define NODBC #include "tabodbc.h" #endif // ODBC_SUPPORT -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) #define NJDBC #include "tabjdbc.h" -#endif // JDBC_SUPPORT -#if defined(PIVOT_SUPPORT) +#endif // JAVA_SUPPORT #include "tabpivot.h" -#endif // PIVOT_SUPPORT #include "tabvir.h" #include "tabjson.h" #include "ha_connect.h" #if defined(XML_SUPPORT) #include "tabxml.h" #endif // XML_SUPPORT -#if defined(MONGO_SUPPORT) +#if defined(JAVA_SUPPORT) #include "mongo.h" -#endif // MONGO_SUPPORT +#endif // JAVA_SUPPORT #if defined(ZIP_SUPPORT) #include "tabzip.h" #endif // ZIP_SUPPORT @@ -111,9 +109,9 @@ extern "C" HINSTANCE s_hModule; // Saved module handle #endif // !__WIN__ -#if defined(MONGO_SUPPORT) -bool MongoEnabled(void); -#endif // MONGO_SUPPORT +#if defined(JAVA_SUPPORT) +//bool MongoEnabled(void); +#endif // JAVA_SUPPORT PQRYRES OEMColumns(PGLOBAL g, PTOS topt, char *tab, char *db, bool info); /***********************************************************************/ @@ -144,8 +142,9 @@ TABTYPE GetTypeID(const char *type) #if defined(ODBC_SUPPORT) : (!stricmp(type, "ODBC")) ? TAB_ODBC #endif -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) : (!stricmp(type, "JDBC")) ? TAB_JDBC + : (!stricmp(type, "MONGO")) ? TAB_MONGO #endif : (!stricmp(type, "MYSQL")) ? TAB_MYSQL : (!stricmp(type, "MYPRX")) ? TAB_MYSQL @@ -159,16 +158,11 @@ TABTYPE GetTypeID(const char *type) : (!stricmp(type, "OCCUR")) ? TAB_OCCUR : (!stricmp(type, "CATLG")) ? TAB_PRX // Legacy : (!stricmp(type, "PROXY")) ? TAB_PRX -#if defined(PIVOT_SUPPORT) : (!stricmp(type, "PIVOT")) ? TAB_PIVOT -#endif : (!stricmp(type, "VIR")) ? TAB_VIR : (!stricmp(type, "JSON")) ? TAB_JSON #if defined(ZIP_SUPPORT) : (!stricmp(type, "ZIP")) ? TAB_ZIP -#endif -#if defined(MONGO_SUPPORT) - : (!stricmp(type, "MONGO")) ? TAB_MONGO #endif : (!stricmp(type, "OEM")) ? TAB_OEM : TAB_NIY; } // end of GetTypeID @@ -542,9 +536,9 @@ PRELDEF MYCAT::MakeTableDesc(PGLOBAL g, PTABLE tablep, LPCSTR am) #if defined(ODBC_SUPPORT) case TAB_ODBC: tdp= new(g) ODBCDEF; break; #endif // ODBC_SUPPORT -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) case TAB_JDBC: tdp= new(g) JDBCDEF; break; -#endif // JDBC_SUPPORT +#endif // JAVA_SUPPORT #if defined(__WIN__) case TAB_MAC: tdp= new(g) MACDEF; break; case TAB_WMI: tdp= new(g) WMIDEF; break; @@ -555,17 +549,15 @@ PRELDEF MYCAT::MakeTableDesc(PGLOBAL g, PTABLE tablep, LPCSTR am) case TAB_PRX: tdp= new(g) PRXDEF; break; case TAB_OCCUR: tdp= new(g) OCCURDEF; break; case TAB_MYSQL: tdp= new(g) MYSQLDEF; break; -#if defined(PIVOT_SUPPORT) case TAB_PIVOT: tdp= new(g) PIVOTDEF; break; -#endif // PIVOT_SUPPORT case TAB_VIR: tdp= new(g) VIRDEF; break; case TAB_JSON: tdp= new(g) JSONDEF; break; #if defined(MONGO_SUPPORT) case TAB_MONGO: - if (MongoEnabled()) +// if (MongoEnabled()) tdp = new(g) MGODEF; - else - strcpy(g->Message, "MONGO type not enabled"); +// else +// strcpy(g->Message, "MONGO type not enabled"); break; #endif // MONGO_SUPPORT diff --git a/storage/connect/mysql-test/connect/r/json_java_2.result b/storage/connect/mysql-test/connect/r/json_java_2.result index ad1ca0fe85f..783d86e6595 100644 --- a/storage/connect/mysql-test/connect/r/json_java_2.result +++ b/storage/connect/mysql-test/connect/r/json_java_2.result @@ -1,5 +1,4 @@ -SET GLOBAL connect_class_path='C:/MariaDB-10.0/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo2.jar'; -set connect_enable_mongo=1; +SET GLOBAL connect_class_path='C:/MariaDB-10.1/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo2.jar'; # # Test the MONGO table type # @@ -310,7 +309,7 @@ loc_0 double(12,6) NOT NULL `FIELD_FORMAT`='loc.0', loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1', pop int(11) NOT NULL, state char(2) NOT NULL) -ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE='MONGO' TABNAME='cities' +ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE=JSON TABNAME='cities' OPTION_LIST='Driver=Java,Version=2' CONNECTION='mongodb://localhost:27017' LRECL=4096 DATA_CHARSET='utf8'; # Using SQL for grouping SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; @@ -382,4 +381,3 @@ planner 167 41.75 postcard 23 5.75 DROP TABLE t1; true -set connect_enable_mongo=0; diff --git a/storage/connect/mysql-test/connect/r/json_java_3.result b/storage/connect/mysql-test/connect/r/json_java_3.result index d7d185956d6..a301e0273d5 100644 --- a/storage/connect/mysql-test/connect/r/json_java_3.result +++ b/storage/connect/mysql-test/connect/r/json_java_3.result @@ -1,5 +1,4 @@ -SET GLOBAL connect_class_path='C:/MariaDB-10.0/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo3.jar'; -set connect_enable_mongo=1; +SET GLOBAL connect_class_path='C:/MariaDB-10.1/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo3.jar'; # # Test the MONGO table type # @@ -310,7 +309,7 @@ loc_0 double(12,6) NOT NULL `FIELD_FORMAT`='loc.0', loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1', pop int(11) NOT NULL, state char(2) NOT NULL) -ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE='MONGO' TABNAME='cities' +ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE=JSON TABNAME='cities' OPTION_LIST='Driver=Java,Version=3' CONNECTION='mongodb://localhost:27017' LRECL=4096 DATA_CHARSET='utf8'; # Using SQL for grouping SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; @@ -382,4 +381,3 @@ planner 167 41.75 postcard 23 5.75 DROP TABLE t1; true -set connect_enable_mongo=0; diff --git a/storage/connect/mysql-test/connect/r/json_mongo_c.result b/storage/connect/mysql-test/connect/r/json_mongo_c.result index afcad8d2ea2..8adc006a51b 100644 --- a/storage/connect/mysql-test/connect/r/json_mongo_c.result +++ b/storage/connect/mysql-test/connect/r/json_mongo_c.result @@ -1,4 +1,3 @@ -set connect_enable_mongo=1; # # Test the MONGO table type # @@ -309,7 +308,7 @@ loc_0 double(12,6) NOT NULL `FIELD_FORMAT`='loc.0', loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1', pop int(11) NOT NULL, state char(2) NOT NULL) -ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE='MONGO' TABNAME='cities' +ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE=JSON TABNAME='cities' OPTION_LIST='Driver=C,Version=0' CONNECTION='mongodb://localhost:27017' LRECL=1024 DATA_CHARSET='utf8'; # Using SQL for grouping SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; @@ -381,4 +380,3 @@ planner 167 41.75 postcard 23 5.75 DROP TABLE t1; true -set connect_enable_mongo=0; diff --git a/storage/connect/mysql-test/connect/r/mongo_c.result b/storage/connect/mysql-test/connect/r/mongo_c.result index f90f3a94b44..c7aadcf1165 100644 --- a/storage/connect/mysql-test/connect/r/mongo_c.result +++ b/storage/connect/mysql-test/connect/r/mongo_c.result @@ -1,4 +1,3 @@ -set connect_enable_mongo=1; # # Test the MONGO table type # @@ -305,7 +304,7 @@ loc_0 double(12,6) NOT NULL `FIELD_FORMAT`='loc.0', loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1', pop int(11) NOT NULL, state char(2) NOT NULL) -ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE='MONGO' TABNAME='cities' +ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE=MONGO TABNAME='cities' OPTION_LIST='Driver=C,Version=0' DATA_CHARSET='utf8'; # Using SQL for grouping SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; @@ -377,4 +376,3 @@ planner 167 41.750000 postcard 23 5.750000 DROP TABLE t1; true -set connect_enable_mongo=0; diff --git a/storage/connect/mysql-test/connect/r/mongo_java_2.result b/storage/connect/mysql-test/connect/r/mongo_java_2.result index a77ccd2d452..708b6f1cc7c 100644 --- a/storage/connect/mysql-test/connect/r/mongo_java_2.result +++ b/storage/connect/mysql-test/connect/r/mongo_java_2.result @@ -1,5 +1,4 @@ -SET GLOBAL connect_class_path='C:/MariaDB-10.0/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo2.jar'; -set connect_enable_mongo=1; +SET GLOBAL connect_class_path='C:/MariaDB-10.1/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo2.jar'; # # Test the MONGO table type # @@ -306,7 +305,7 @@ loc_0 double(12,6) NOT NULL `FIELD_FORMAT`='loc.0', loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1', pop int(11) NOT NULL, state char(2) NOT NULL) -ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE='MONGO' TABNAME='cities' +ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE=MONGO TABNAME='cities' OPTION_LIST='Driver=Java,Version=2' DATA_CHARSET='utf8'; # Using SQL for grouping SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; @@ -378,4 +377,3 @@ planner 167 41.75 postcard 23 5.75 DROP TABLE t1; true -set connect_enable_mongo=0; diff --git a/storage/connect/mysql-test/connect/r/mongo_java_3.result b/storage/connect/mysql-test/connect/r/mongo_java_3.result index ceb1be9ddcb..672d9f15b80 100644 --- a/storage/connect/mysql-test/connect/r/mongo_java_3.result +++ b/storage/connect/mysql-test/connect/r/mongo_java_3.result @@ -1,5 +1,4 @@ -SET GLOBAL connect_class_path='C:/MariaDB-10.0/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo3.jar'; -set connect_enable_mongo=1; +SET GLOBAL connect_class_path='C:/MariaDB-10.1/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo3.jar'; # # Test the MONGO table type # @@ -306,7 +305,7 @@ loc_0 double(12,6) NOT NULL `FIELD_FORMAT`='loc.0', loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1', pop int(11) NOT NULL, state char(2) NOT NULL) -ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE='MONGO' TABNAME='cities' +ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE=MONGO TABNAME='cities' OPTION_LIST='Driver=Java,Version=3' DATA_CHARSET='utf8'; # Using SQL for grouping SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; @@ -378,4 +377,3 @@ planner 167 41.75 postcard 23 5.75 DROP TABLE t1; true -set connect_enable_mongo=0; diff --git a/storage/connect/mysql-test/connect/r/odbc_firebird.result b/storage/connect/mysql-test/connect/r/odbc_firebird.result index b0c2582abeb..3c4cd84fffc 100644 --- a/storage/connect/mysql-test/connect/r/odbc_firebird.result +++ b/storage/connect/mysql-test/connect/r/odbc_firebird.result @@ -9,29 +9,13 @@ t1 CREATE TABLE `t1` ( ) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`='ODBC' `CATFUNC`='Sources' SELECT * FROM t1; Name Description -dBASE Files Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx) -PLUGDB_DEBUG PLUGODBC_Driver -PLUGDB_ODBC PLUGODBC_Driver -SafeDB_ODBC SDB_ODBC_Driver -Firebird Firebird/InterBase(r) driver -ConnectEngineXLS Microsoft Excel Driver (*.xls) Excel Files Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb) -MariaODBC MySQL ODBC 5.2a Driver -MariaODBCbeta MariaDB ODBC 1.0 Driver -MyODBC MySQL ODBC 5.2a Driver MS Access Database Microsoft Access Driver (*.mdb, *.accdb) -MS Access Db1 Microsoft Access Driver (*.mdb) -MySQL-ANSI MySQL ODBC 5.3 ANSI Driver -MySQL-Unicode MySQL ODBC 5.3 Unicode Driver -Xtreme Sample Database 2008 Microsoft Access Driver (*.mdb) -PlugDB test PLUGODBC_Driver -SQLite3 Datasource SQLite3 ODBC Driver -SQLite Datasource SQLite ODBC Driver -SQLite UTF-8 Datasource SQLite ODBC (UTF-8) Driver ORACLE_TEST Oracle in XE -ConnectEnginePostgresql PostgreSQL ODBC Driver(ANSI) +SQLServer_Test SQL Server Native Client 11.0 +Firebird Firebird/InterBase(r) driver ConnectEngineOracle Oracle in XE -ConnectEngineSQLServer SQL Server +ConnectEngineSQLServer SQL Server Native Client 11.0 DROP TABLE t1; CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CATFUNC=Drivers; SHOW CREATE TABLE t1; @@ -42,51 +26,12 @@ t1 CREATE TABLE `t1` ( ) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`='ODBC' `CATFUNC`='Drivers' SELECT * FROM t1; Description Attributes -SQL Server UsageCount=1;SQLLevel=1;FileUsage=0;DriverODBCVer=03.50;ConnectFunctions=YYY;APILevel=2;CPTimeout=60; -Microsoft ODBC for Oracle UsageCount=1;SQLLevel=1;FileUsage=0;DriverODBCVer=02.50;ConnectFunctions=YYY;APILevel=1;CPTimeout=120; -Microsoft Access Driver (*.mdb) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=2;FileExtns=*.mdb;SQLLevel=0; -Microsoft Access-Treiber (*.mdb) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=2;FileExtns=*.mdb;SQLLevel=0; -Driver do Microsoft Access (*.mdb) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=2;FileExtns=*.mdb;SQLLevel=0; -Microsoft dBase Driver (*.dbf) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.dbf,*.ndx,*.mdx;SQLLevel=0; -Microsoft dBase-Treiber (*.dbf) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.dbf,*.ndx,*.mdx;SQLLevel=0; -Driver do Microsoft dBase (*.dbf) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.dbf,*.ndx,*.mdx;SQLLevel=0; -Microsoft Excel Driver (*.xls) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.xls;SQLLevel=0; -Microsoft Excel-Treiber (*.xls) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.xls;SQLLevel=0; -Driver do Microsoft Excel(*.xls) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.xls;SQLLevel=0; -Microsoft Paradox Driver (*.db ) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.db;SQLLevel=0; -Microsoft Paradox-Treiber (*.db ) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.db;SQLLevel=0; -Driver do Microsoft Paradox (*.db ) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.db;SQLLevel=0; -Microsoft Text Driver (*.txt; *.csv) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.,*.asc,*.csv,*.tab,*.txt,*.csv;SQLLevel=0; -Microsoft Text-Treiber (*.txt; *.csv) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.,*.asc,*.csv,*.tab,*.txt,*.csv;SQLLevel=0; -Driver da Microsoft para arquivos texto (*.txt; *.csv) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.,*.asc,*.csv,*.tab,*.txt,*.csv;SQLLevel=0; -Microsoft Visual FoxPro Driver UsageCount=1;APILevel=0;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.dbf,*.cdx,*.idx,*.fpt;SQLLevel=0; -Microsoft FoxPro VFP Driver (*.dbf) UsageCount=1;APILevel=0;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.dbf,*.cdx,*.idx,*.fpt;SQLLevel=0; -Microsoft dBase VFP Driver (*.dbf) UsageCount=1;APILevel=0;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.dbf,*.cdx,*.idx,*.fpt;SQLLevel=0; -Microsoft Visual FoxPro-Treiber UsageCount=1;APILevel=0;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.dbf,*.cdx,*.idx,*.fpt;SQLLevel=0; -Driver para o Microsoft Visual FoxPro UsageCount=1;APILevel=0;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.dbf,*.cdx,*.idx,*.fpt;SQLLevel=0; -SQL Native Client UsageCount=1;APILevel=2;ConnectFunctions=YYY;CPTimeout=60;DriverODBCVer=09.00;FileUsage=0;SQLLevel=1; -CR Sybase Wire Protocol ODBC Driver 6.0 UsageCount=1;APILevel=1;ConnectFunctions=YYY;DriverODBCVer=3.52;FileUsage=0;SQLLevel=0;CPTimeout=60;HelpRootDirectory=C:\Program Files\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\win32_x86\odbc\help; -CR SQL Server Native Wire Protocol ODBC Driver 6.0 UsageCount=1;APILevel=1;ConnectFunctions=YYY;DriverODBCVer=3.52;FileUsage=0;SQLLevel=1;CPTimeout=60;HelpRootDirectory=C:\Program Files\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\win32_x86\odbc\help; -CR SQL Server Classic Wire Protocol ODBC Driver 6.0 UsageCount=1;APILevel=1;ConnectFunctions=YYY;DriverODBCVer=3.52;FileUsage=0;SQLLevel=1;CPTimeout=60;HelpRootDirectory=C:\Program Files\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\win32_x86\odbc\help; -CR TextFile ODBC Driver 6.0 UsageCount=1;APILevel=1;ConnectFunctions=YYY;DriverODBCVer=3.52;FileUsage=1;FileExtns=*.*;SQLLevel=0;CPTimeout=60;HelpRootDirectory=C:\Program Files\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\win32_x86\odbc\help; -PLUGODBC_Driver UsageCount=1; -SDB_ODBC_Driver UsageCount=2; -Microsoft Access Text Driver (*.txt, *.csv) SQLLevel=0;FileExtns=*.txt, *.csv;FileUsage=2;DriverODBCVer=02.50;ConnectFunctions=YYN;APILevel=1;UsageCount=3; -Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx) SQLLevel=0;FileExtns=*.dbf, *.ndx, *.mdx;FileUsage=2;DriverODBCVer=02.50;ConnectFunctions=YYN;APILevel=1;UsageCount=3; -Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb) SQLLevel=0;FileExtns=*.xls,*.xlsx, *.xlsb;FileUsage=2;DriverODBCVer=02.50;ConnectFunctions=YYN;APILevel=1;UsageCount=3; -Microsoft Access Driver (*.mdb, *.accdb) SQLLevel=0;FileExtns=*.mdb,*.accdb;FileUsage=2;DriverODBCVer=02.50;ConnectFunctions=YYN;APILevel=1;UsageCount=3; -SQLite3 ODBC Driver UsageCount=1; -SQLite ODBC Driver UsageCount=1; -SQLite ODBC (UTF-8) Driver UsageCount=1; +SQL Server APILevel=2;ConnectFunctions=YYY;CPTimeout=60;DriverODBCVer=03.50;FileUsage=0;SQLLevel=1;UsageCount=1; Oracle in XE ConnectionFunctions=YYY;DriverODBCVer=03.51;CPTimeout=60;FileUsage=0;APILevel=1;SQLLevel=1; -Oracle in instantclient_12_1 APILevel=1;ConnectionFunctions=YYY;CPTimeout=60;DriverODBCVer=03.51;FileUsage=0;SQLLevel=1; -PostgreSQL ODBC Driver(ANSI) APILevel=1;ConnectFunctions=YYN;DriverODBCVer=09.02.0100;FileUsage=0;SQLLevel=1; -PostgreSQL ODBC Driver(UNICODE) APILevel=1;ConnectFunctions=YYN;DriverODBCVer=09.02.0100;FileUsage=0;SQLLevel=1; SQL Server Native Client 11.0 UsageCount=1;APILevel=2;ConnectFunctions=YYY;CPTimeout=60;DriverODBCVer=03.80;FileUsage=0;SQLLevel=1; -MariaDB ODBC 1.0 Driver UsageCount=1; +ODBC Driver 13 for SQL Server UsageCount=1;APILevel=2;ConnectFunctions=YYY;CPTimeout=60;DriverODBCVer=03.80;FileUsage=0;SQLLevel=1; +SQL Server Native Client RDA 11.0 UsageCount=1;APILevel=2;ConnectFunctions=YYY;CPTimeout=60;DriverODBCVer=03.80;FileUsage=0;SQLLevel=1; Firebird/InterBase(r) driver UsageCount=1;FileExtns=*.fdb,*.gdb;APILevel=1;ConnectFunctions=YYY;FileUsage=0;DriverODBCVer=03.51;SQLLevel=1; -MySQL ODBC 5.3 ANSI Driver UsageCount=1; -MySQL ODBC 5.3 Unicode Driver UsageCount=1; DROP TABLE t1; CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CATFUNC=Tables CONNECTION='Not important'; SHOW CREATE TABLE t1; @@ -154,9 +99,9 @@ EMP_NO FIRST_NAME LAST_NAME PHONE_EXT HIRE_DATE DEPT_NO JOB_CODE JOB_GRADE JOB_C 113 Mary Page 845 1993-04-12 00:00:00 671 Eng 4 USA 48000.00 Page, Mary 114 Bill Parker 247 1993-06-01 00:00:00 623 Eng 5 USA 35000.00 Parker, Bill 118 Takashi Yamamoto 23 1993-07-01 00:00:00 115 SRep 4 Japan 7480000.00 Yamamoto, Takashi -121 Roberto Ferrari 1 1993-07-12 00:00:00 125 SRep 4 Italy 99000000.00 Ferrari, Roberto +121 Roberto Ferrari 1 1993-07-12 00:00:00 125 SRep 4 Italy 33000.00 Ferrari, Roberto 127 Michael Yanowski 492 1993-08-09 00:00:00 100 SRep 4 USA 44000.00 Yanowski, Michael -134 Jacques Glon NULL 1993-08-23 00:00:00 123 SRep 4 France 390500.00 Glon, Jacques +134 Jacques Glon NULL 1993-08-23 00:00:00 123 SRep 4 France 38500.00 Glon, Jacques 136 Scott Johnson 265 1993-09-13 00:00:00 623 Doc 3 USA 60000.00 Johnson, Scott 138 T.J. Green 218 1993-11-01 00:00:00 621 Eng 4 USA 36000.00 Green, T.J. 141 Pierre Osborne NULL 1994-01-03 00:00:00 121 SRep 4 Switzerland 110000.00 Osborne, Pierre diff --git a/storage/connect/mysql-test/connect/t/mongo_test.inc b/storage/connect/mysql-test/connect/t/mongo_test.inc index c728b85fd2f..dfc223e9074 100644 --- a/storage/connect/mysql-test/connect/t/mongo_test.inc +++ b/storage/connect/mysql-test/connect/t/mongo_test.inc @@ -1,4 +1,4 @@ -set connect_enable_mongo=1; +#set connect_enable_mongo=1; --echo # --echo # Test the MONGO table type @@ -156,7 +156,7 @@ eval CREATE TABLE t1 ( loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1', pop int(11) NOT NULL, state char(2) NOT NULL) -ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE='MONGO' TABNAME='cities' +ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE=$TYPE TABNAME='cities' OPTION_LIST='Driver=$DRV,Version=$VERS' $CONN DATA_CHARSET='utf8'; --echo # Using SQL for grouping SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; @@ -204,4 +204,4 @@ SELECT * FROM t1; DROP TABLE t1; --exec $MONGO --eval "db.testcoll.drop()" --quiet -set connect_enable_mongo=0; +#set connect_enable_mongo=0; diff --git a/storage/connect/plgdbutl.cpp b/storage/connect/plgdbutl.cpp index 25da3162516..0a6507315db 100644 --- a/storage/connect/plgdbutl.cpp +++ b/storage/connect/plgdbutl.cpp @@ -38,6 +38,7 @@ /* Include relevant MariaDB header file. */ /***********************************************************************/ #include "my_global.h" +#include "my_pthread.h" #if defined(__WIN__) #include #include @@ -71,12 +72,12 @@ #ifdef ZIP_SUPPORT #include "filamzip.h" #endif // ZIP_SUPPORT -#ifdef JDBC_SUPPORT +#ifdef JAVA_SUPPORT #include "javaconn.h" -#endif // JDBC_SUPPORT +#endif // JAVA_SUPPORT #ifdef CMGO_SUPPORT #include "cmgoconn.h" -#endif // MONGO_SUPPORT +#endif // JAVA_SUPPORT /***********************************************************************/ /* DB static variables. */ @@ -952,20 +953,20 @@ int PlugCloseFile(PGLOBAL g, PFBLOCK fp, bool all) fp->File = NULL; break; #endif // ZIP_SUPPORT -#ifdef JDBC_SUPPORT +#ifdef JAVA_SUPPORT case TYPE_FB_JAVA: ((JAVAConn*)fp->File)->Close(); fp->Count = 0; fp->File = NULL; break; -#endif // JDBC_SUPPORT +#endif // JAVA_SUPPORT #ifdef CMGO_SUPPORT case TYPE_FB_MONGO: ((CMgoConn*)fp->File)->Close(); fp->Count = 0; fp->File = NULL; break; -#endif // MONGO_SUPPORT +#endif // JAVA_SUPPORT default: rc = RC_FX; } // endswitch Type diff --git a/storage/connect/preparse.h b/storage/connect/preparse.h index 3db7a2af1cd..f16624548fb 100644 --- a/storage/connect/preparse.h +++ b/storage/connect/preparse.h @@ -8,7 +8,7 @@ /***********************************************************************/ typedef struct _datpar { const char *Format; // Points to format to decode - const char *Curp; // Points to current parsing position + char *Curp; // Points to current parsing position char *InFmt; // Start of input format char *OutFmt; // Start of output format int Index[8]; // Indexes of date values diff --git a/storage/connect/reldef.h b/storage/connect/reldef.h index 84ae2a491f0..f8256a59b3d 100644 --- a/storage/connect/reldef.h +++ b/storage/connect/reldef.h @@ -11,7 +11,7 @@ #include "block.h" #include "catalog.h" -#include "my_sys.h" +//#include "my_sys.h" #include "mycat.h" typedef class INDEXDEF *PIXDEF; @@ -114,7 +114,7 @@ public: int Sort; /* Table already sorted ??? */ int Multiple; /* 0: No 1: DIR 2: Section 3: filelist */ int Degree; /* Number of columns in the table */ - int Pseudo; /* Bit: 1 ROWID }Ok, 2 FILEID Ok */ + int Pseudo; /* Bit: 1 ROWID }Ok, 2 FILEID Ok */ bool Read_Only; /* true for read only tables */ const CHARSET_INFO *m_data_charset; const char *csname; /* Table charset name */ diff --git a/storage/connect/tabjmg.cpp b/storage/connect/tabjmg.cpp index 50efd727604..ba3e1c3e7c0 100644 --- a/storage/connect/tabjmg.cpp +++ b/storage/connect/tabjmg.cpp @@ -73,9 +73,10 @@ bool JMGDISC::ColDesc(PGLOBAL g, jobject obj, char *pcn, char *pfmt, int ncol, int k) { const char *key; - char colname[65]; - char fmt[129]; - bool rc = true; + char colname[65]; + char fmt[129]; + bool rc = true; + size_t z; jint *n = nullptr; jstring jkey; jobject jres; @@ -105,14 +106,16 @@ bool JMGDISC::ColDesc(PGLOBAL g, jobject obj, char *pcn, char *pfmt, if (pcn) { strncpy(colname, pcn, 64); colname[64] = 0; - strncat(strncat(colname, "_", 65), key, 65); + z = 65 - strlen(colname); + strncat(strncat(colname, "_", z), key, z - 1); } else strcpy(colname, key); if (pfmt) { strncpy(fmt, pfmt, 128); fmt[128] = 0; - strncat(strncat(fmt, ".", 129), key, 129); + z = 129 - strlen(fmt); + strncat(strncat(fmt, ".", z), key, z - 1); } else strcpy(fmt, key); @@ -178,7 +181,7 @@ TDBJMG::TDBJMG(PMGODEF tdp) : TDBEXT(tdp) Ops.User = NULL; Ops.Pwd = NULL; Ops.Scrollable = false; - Ops.Fsize = Ops.CheckSize(Rows); + Ops.Fsize = 0; Fpos = -1; N = 0; Done = false; diff --git a/storage/connect/tabjson.cpp b/storage/connect/tabjson.cpp index 401441520da..8778b7d4b47 100644 --- a/storage/connect/tabjson.cpp +++ b/storage/connect/tabjson.cpp @@ -31,14 +31,12 @@ #if defined(ZIP_SUPPORT) #include "filamzip.h" #endif // ZIP_SUPPORT -#if defined(MONGO_SUPPORT) -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) #include "jmgfam.h" -#endif // JDBC_SUPPORT +#endif // JAVA_SUPPORT #if defined(CMGO_SUPPORT) #include "cmgfam.h" #endif // CMGO_SUPPORT -#endif // MONGO_SUPPORT #include "tabmul.h" #include "checklvl.h" #include "resource.h" @@ -149,7 +147,7 @@ PQRYRES JSONColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt, bool info) tdp->Fn, tdp->Objname, tdp->Pretty, lvl); if (tdp->Uri) { -#if defined(MONGO_SUPPORT) +#if defined(JAVA_SUPPORT) || defined(CMGO_SUPPORT) tdp->Collname = GetStringTableOption(g, topt, "Name", NULL); tdp->Collname = GetStringTableOption(g, topt, "Tabname", tdp->Collname); tdp->Schema = GetStringTableOption(g, topt, "Dbname", "test"); @@ -157,10 +155,8 @@ PQRYRES JSONColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt, bool info) tdp->Pipe = GetBooleanTableOption(g, topt, "Pipeline", false); tdp->Driver = (PSZ)GetStringTableOption(g, topt, "Driver", NULL); tdp->Version = GetIntegerTableOption(g, topt, "Version", 3); -#if defined(JDBC_SUPPORT) tdp->Wrapname = (PSZ)GetStringTableOption(g, topt, "Wrapper", (tdp->Version == 2) ? "Mongo2Interface" : "Mongo3Interface"); -#endif // JDBC_SUPPORT tdp->Pretty = 0; #else // !MONGO_SUPPORT sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "MONGO"); @@ -201,7 +197,6 @@ PQRYRES JSONColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt, bool info) return NULL; #endif // !ZIP_SUPPORT } else if (tdp->Uri) { -#if defined(MONGO_SUPPORT) if (tdp->Driver && toupper(*tdp->Driver) == 'C') { #if defined(CMGO_SUPPORT) tjnp = new(g) TDBJSN(tdp, new(g) CMGFAM(tdp)); @@ -210,7 +205,7 @@ PQRYRES JSONColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt, bool info) return NULL; #endif } else if (tdp->Driver && toupper(*tdp->Driver) == 'J') { -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) tjnp = new(g) TDBJSN(tdp, new(g) JMGFAM(tdp)); #else sprintf(g->Message, "Mongo %s Driver not available", "Java"); @@ -219,14 +214,14 @@ PQRYRES JSONColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt, bool info) } else { // Driver not specified #if defined(CMGO_SUPPORT) tjnp = new(g) TDBJSN(tdp, new(g) CMGFAM(tdp)); -#else +#elif defined(JAVA_SUPPORT) tjnp = new(g) TDBJSN(tdp, new(g) JMGFAM(tdp)); +#else + sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "MONGO"); + return NULL; #endif } // endif Driver -#else - sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "MONGO"); - return NULL; -#endif // MONGO_SUPPORT + } else tjnp = new(g) TDBJSN(tdp, new(g) DOSFAM(tdp)); @@ -497,16 +492,12 @@ JSONDEF::JSONDEF(void) Base = 0; Strict = false; Sep = '.'; -#if defined(MONGO_SUPPORT) Uri = NULL; Collname = Options = Filter = NULL; Pipe = false; Driver = NULL; Version = 0; -#if defined(JDBC_SUPPORT) Wrapname = NULL; -#endif // JDBC_SUPPORT -#endif // MONGO_SUPPORT } // end of JSONDEF constructor /***********************************************************************/ @@ -524,7 +515,7 @@ bool JSONDEF::DefineAM(PGLOBAL g, LPCSTR, int poff) Sep = *GetStringCatInfo(g, "Separator", "."); if (Uri = GetStringCatInfo(g, "Connect", NULL)) { -#if defined(MONGO_SUPPORT) +#if defined(JAVA_SUPPORT) || defined(CMGO_SUPPORT) Collname = GetStringCatInfo(g, "Name", (Catfunc & (FNC_TABLE | FNC_COL)) ? NULL : Name); Collname = GetStringCatInfo(g, "Tabname", Collname); @@ -534,12 +525,12 @@ bool JSONDEF::DefineAM(PGLOBAL g, LPCSTR, int poff) Driver = GetStringCatInfo(g, "Driver", NULL); Version = GetIntCatInfo("Version", 3); Pretty = 0; -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) if (Version == 2) Wrapname = GetStringCatInfo(g, "Wrapper", "Mongo2Interface"); else Wrapname = GetStringCatInfo(g, "Wrapper", "Mongo3Interface"); -#endif // JDBC_SUPPORT +#endif // JAVA_SUPPORT #else // !MONGO_SUPPORT sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "MONGO"); return true; @@ -569,7 +560,6 @@ PTDB JSONDEF::GetTable(PGLOBAL g, MODE m) (m == MODE_UPDATE || m == MODE_DELETE)); if (Uri) { -#if defined(MONGO_SUPPORT) if (Driver && toupper(*Driver) == 'C') { #if defined(CMGO_SUPPORT) txfp = new(g) CMGFAM(this); @@ -578,7 +568,7 @@ PTDB JSONDEF::GetTable(PGLOBAL g, MODE m) return NULL; #endif } else if (Driver && toupper(*Driver) == 'J') { -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) txfp = new(g) JMGFAM(this); #else sprintf(g->Message, "Mongo %s Driver not available", "Java"); @@ -587,14 +577,14 @@ PTDB JSONDEF::GetTable(PGLOBAL g, MODE m) } else { // Driver not specified #if defined(CMGO_SUPPORT) txfp = new(g) CMGFAM(this); -#else +#elif defined(JAVA_SUPPORT) txfp = new(g) JMGFAM(this); -#endif +#else // !MONGO_SUPPORT + sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "MONGO"); + return NULL; +#endif // !MONGO_SUPPORT } // endif Driver -#else - sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "MONGO"); - return NULL; -#endif // MONGO_SUPPORT + } else if (Zipped) { #if defined(ZIP_SUPPORT) if (m == MODE_READ || m == MODE_ANY || m == MODE_ALTER) { @@ -1591,8 +1581,7 @@ PVAL JSONCOL::ExpandArray(PGLOBAL g, PJAR arp, int n) /***********************************************************************/ PVAL JSONCOL::CalculateArray(PGLOBAL g, PJAR arp, int n) { -//int i, ars, nv = 0, nextsame = Tjp->NextSame; - int i, nv = 0, nextsame = Tjp->NextSame; + int i, ars, nv = 0, nextsame = Tjp->NextSame; bool err; OPVAL op = Nodes[n].Op; PVAL val[2], vp = Nodes[n].Valp; @@ -1600,12 +1589,18 @@ PVAL JSONCOL::CalculateArray(PGLOBAL g, PJAR arp, int n) JVALUE jval; vp->Reset(); -//ars = MY_MIN(Tjp->Limit, arp->size()); + ars = MY_MIN(Tjp->Limit, arp->size()); -//for (i = 0; i < ars; i++) { - for (i = 0; i < arp->size(); i++) { + if (trace) + htrc("CalculateArray: size=%d op=%d nextsame=%d\n", + ars, op, nextsame); + + for (i = 0; i < ars; i++) { jvrp = arp->GetValue(i); + if (trace) + htrc("i=%d nv=%d\n", i, nv); + if (!jvrp->IsNull() || (op == OP_CNC && GetJsonNull())) do { if (jvrp->IsNull()) { jvrp->Value = AllocateValue(g, GetJsonNull(), TYPE_STRING); @@ -1617,13 +1612,16 @@ PVAL JSONCOL::CalculateArray(PGLOBAL g, PJAR arp, int n) } else jvp = jvrp; - if (!nv++) { + if (trace) + htrc("jvp=%s null=%d\n", + jvp->GetString(g), jvp->IsNull() ? 1 : 0); + + if (!nv++) { SetJsonValue(g, vp, jvp, n); continue; } else SetJsonValue(g, MulVal, jvp, n); - -// if (!MulVal->IsZero()) { + if (!MulVal->IsNull()) { switch (op) { case OP_CNC: @@ -1634,7 +1632,7 @@ PVAL JSONCOL::CalculateArray(PGLOBAL g, PJAR arp, int n) val[0] = MulVal; err = vp->Compute(g, val, 1, op); - break; + break; // case OP_NUM: case OP_SEP: val[0] = Nodes[n].Valp; @@ -1650,7 +1648,15 @@ PVAL JSONCOL::CalculateArray(PGLOBAL g, PJAR arp, int n) if (err) vp->Reset(); - } // endif Null + if (trace) { + char buf(32); + + htrc("vp='%s' err=%d\n", + vp->GetCharString(&buf), err ? 1 : 0); + + } // endif trace + + } // endif Null } while (Tjp->NextSame > nextsame); diff --git a/storage/connect/tabjson.h b/storage/connect/tabjson.h index 00e2f4614e7..17583cba333 100644 --- a/storage/connect/tabjson.h +++ b/storage/connect/tabjson.h @@ -36,14 +36,12 @@ class DllExport JSONDEF : public DOSDEF { /* Table description */ friend class TDBJSON; friend class TDBJSN; friend class TDBJCL; -#if defined(MONGO_SUPPORT) #if defined(CMGO_SUPPORT) friend class CMGFAM; #endif // CMGO_SUPPORT -#if defined(JDBC_SUPPORT) +#if defined(JAVA_SUPPORT) friend class JMGFAM; -#endif // JDBC_SUPPORT -#endif // MONGO_SUPPORT +#endif // JAVA_SUPPORT friend PQRYRES JSONColumns(PGLOBAL, PCSZ, PCSZ, PTOS, bool); public: // Constructor @@ -68,17 +66,13 @@ public: bool Strict; /* Strict syntax checking */ char Sep; /* The Jpath separator */ const char *Uri; /* MongoDB connection URI */ -#if defined(MONGO_SUPPORT) PCSZ Collname; /* External collection name */ PSZ Options; /* Colist ; Pipe */ PSZ Filter; /* Filter */ PSZ Driver; /* MongoDB Driver (C or JAVA) */ bool Pipe; /* True if Colist is a pipeline */ int Version; /* Driver version */ -#if defined(JDBC_SUPPORT) PSZ Wrapname; /* MongoDB java wrapper name */ -#endif // JDBC_SUPPORT -#endif // MONGO_SUPPORT }; // end of JSONDEF /* -------------------------- TDBJSN class --------------------------- */ @@ -90,14 +84,12 @@ public: 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) +#if defined(JAVA_SUPPORT) friend class JMGFAM; -#endif // JDBC_SUPPORT -#endif // MONGO_SUPPORT +#endif // JAVA_SUPPORT public: // Constructor TDBJSN(PJDEF tdp, PTXF txfp); @@ -162,14 +154,12 @@ 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) +#if defined(JAVA_SUPPORT) friend class JMGFAM; -#endif // JDBC_SUPPORT -#endif // MONGO_SUPPORT +#endif // JAVA_SUPPORT public: // Constructors JSONCOL(PGLOBAL g, PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i); diff --git a/storage/connect/tabtbl.cpp b/storage/connect/tabtbl.cpp index bb7eae9c256..d3fb31fb57a 100644 --- a/storage/connect/tabtbl.cpp +++ b/storage/connect/tabtbl.cpp @@ -650,7 +650,7 @@ bool TDBTBM::IsLocal(PTABLE tbp) return ((!stricmp(tdbp->Host, "localhost") || !strcmp(tdbp->Host, "127.0.0.1")) && - tdbp->Port == GetDefaultPort()); + tdbp->Port == (int)GetDefaultPort()); } // end of IsLocal /***********************************************************************/ diff --git a/storage/connect/tabutil.cpp b/storage/connect/tabutil.cpp index af77c87ef8d..5d8d7c1b9f8 100644 --- a/storage/connect/tabutil.cpp +++ b/storage/connect/tabutil.cpp @@ -120,7 +120,7 @@ PQRYRES TabColumns(PGLOBAL g, THD *thd, const char *db, FLD_REM, FLD_NO, FLD_CHARSET}; unsigned int length[] = {0, 4, 16, 4, 4, 4, 4, 4, 0, 32, 32}; PCSZ fmt; - char *pn, *tn, *fld, *colname, v; //, *chset; + char *pn, *tn, *fld, *colname, v; // *chset int i, n, ncol = sizeof(buftyp) / sizeof(int); int prec, len, type, scale; int zconv = GetConvSize(); @@ -185,7 +185,7 @@ PQRYRES TabColumns(PGLOBAL g, THD *thd, const char *db, colname = (char *)fp->field_name; crp->Kdata->SetValue(colname, i); -// chset = (char *)fp->charset()->name; +// chset = (char *)fp->charset()->name; // v = (!strcmp(chset, "binary")) ? 'B' : 0; v = 0; diff --git a/storage/connect/tabxml.h b/storage/connect/tabxml.h index 813f62dde52..f55b7d98de7 100644 --- a/storage/connect/tabxml.h +++ b/storage/connect/tabxml.h @@ -53,6 +53,8 @@ class DllExport XMLDEF : public TABDEF { /* Logical table description */ }; // end of XMLDEF #if defined(INCLUDE_TDBXML) +#include "m_ctype.h" + /***********************************************************************/ /* This is the class declaration for the simple XML tables. */ /***********************************************************************/ diff --git a/storage/connect/valblk.h b/storage/connect/valblk.h index a3d7bf30fcf..ad970105868 100644 --- a/storage/connect/valblk.h +++ b/storage/connect/valblk.h @@ -40,7 +40,7 @@ class MBVALS : public BLOCK { // Methods void *GetMemp(void) {return Mblk.Memp;} PVBLK Allocate(PGLOBAL g, int type, int len, int prec, - int n, bool sub = FALSE); + int n, bool sub = false); bool ReAllocate(PGLOBAL g, int n); void Free(void); diff --git a/storage/connect/value.cpp b/storage/connect/value.cpp index 83f008fbee1..74a3a1f8075 100644 --- a/storage/connect/value.cpp +++ b/storage/connect/value.cpp @@ -1656,38 +1656,48 @@ bool TYPVAL::Compute(PGLOBAL g, PVAL *vp, int np, OPVAL op) char *p[2], val[2][32]; int i; - for (i = 0; i < np; i++) - p[i] = vp[i]->IsNull() ? NULL : vp[i]->GetCharString(val[i]); + if (trace) + htrc("Compute: np=%d op=%d\n", np, op); - if (p[i]) { - switch (op) { - case OP_CNC: - assert(np == 1 || np == 2); + for (i = 0; i < np; i++) + if (!vp[i]->IsNull()) { + p[i] = vp[i]->GetCharString(val[i]); - if (np == 2) - SetValue_psz(p[0]); + if (trace) + htrc("p[%d]=%s\n", i, p[i]); - if ((i = Len - (signed)strlen(Strp)) > 0) - strncat(Strp, p[np - 1], i); + } else + return false; - break; - case OP_MIN: - assert(np == 2); - SetValue_psz((strcmp(p[0], p[1]) < 0) ? p[0] : p[1]); - break; - case OP_MAX: - assert(np == 2); - SetValue_psz((strcmp(p[0], p[1]) > 0) ? p[0] : p[1]); - break; - default: - // sprintf(g->Message, MSG(BAD_EXP_OPER), op); - strcpy(g->Message, "Function not supported"); - return true; - } // endswitch op + switch (op) { + case OP_CNC: + assert(np == 1 || np == 2); - Null = false; - } // endif p[i] + if (np == 2) + SetValue_psz(p[0]); + if ((i = Len - (signed)strlen(Strp)) > 0) + strncat(Strp, p[np - 1], i); + + if (trace) + htrc("Strp=%s\n", Strp); + + break; + case OP_MIN: + assert(np == 2); + SetValue_psz((strcmp(p[0], p[1]) < 0) ? p[0] : p[1]); + break; + case OP_MAX: + assert(np == 2); + SetValue_psz((strcmp(p[0], p[1]) > 0) ? p[0] : p[1]); + break; + default: + // sprintf(g->Message, MSG(BAD_EXP_OPER), op); + strcpy(g->Message, "Function not supported"); + return true; + } // endswitch op + + Null = false; return false; } // end of Compute diff --git a/storage/connect/value.h b/storage/connect/value.h index f771d33dc52..6613e25100a 100644 --- a/storage/connect/value.h +++ b/storage/connect/value.h @@ -102,7 +102,7 @@ class DllExport VALUE : public BLOCK { virtual bool SetValue_pval(PVAL valp, bool chktype = false) = 0; virtual bool SetValue_char(const char *p, int n) = 0; virtual void SetValue_psz(PCSZ s) = 0; - virtual void SetValue_bool(bool) {assert(FALSE);} + virtual void SetValue_bool(bool) {assert(false);} virtual int CompareValue(PVAL vp) = 0; virtual BYTE TestValue(PVAL vp); virtual void SetValue(char) {assert(false);} diff --git a/storage/connect/xtable.h b/storage/connect/xtable.h index ebef7a2549a..bc9265e0223 100644 --- a/storage/connect/xtable.h +++ b/storage/connect/xtable.h @@ -16,7 +16,7 @@ #include "assert.h" #include "block.h" #include "colblk.h" -#include "m_ctype.h" +//#include "m_ctype.h" #include "reldef.h" typedef class CMD *PCMD; diff --git a/storage/innobase/btr/btr0btr.cc b/storage/innobase/btr/btr0btr.cc index e348e6b3002..841b14e76f4 100644 --- a/storage/innobase/btr/btr0btr.cc +++ b/storage/innobase/btr/btr0btr.cc @@ -2052,7 +2052,7 @@ btr_page_reorganize_low( "InnoDB: Error: page old max ins size %lu" " new max ins size %lu\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", + " to https://jira.mariadb.org/\n", (unsigned long) data_size1, (unsigned long) data_size2, (unsigned long) max_ins_size1, (unsigned long) max_ins_size2); diff --git a/storage/innobase/dict/dict0stats_bg.cc b/storage/innobase/dict/dict0stats_bg.cc index 57a5912941e..43ee1a236ce 100644 --- a/storage/innobase/dict/dict0stats_bg.cc +++ b/storage/innobase/dict/dict0stats_bg.cc @@ -336,7 +336,7 @@ dict_stats_wait_bg_to_stop_using_table( unlocking/locking the data dict */ { while (!dict_stats_stop_bg(table)) { - DICT_STATS_BG_YIELD(trx); + DICT_BG_YIELD(trx); } } diff --git a/storage/innobase/fts/fts0fts.cc b/storage/innobase/fts/fts0fts.cc index da3a6d575fb..2ba58c9a590 100644 --- a/storage/innobase/fts/fts0fts.cc +++ b/storage/innobase/fts/fts0fts.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2011, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2011, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2016, 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under @@ -26,6 +26,7 @@ Full Text Search interface #include "row0mysql.h" #include "row0upd.h" #include "dict0types.h" +#include "dict0stats_bg.h" #include "row0sel.h" #include "fts0fts.h" @@ -868,18 +869,37 @@ fts_drop_index( err = fts_drop_index_tables(trx, index); - fts_free(table); - + for(;;) { + bool retry = false; + if (index->index_fts_syncing) { + retry = true; + } + if (!retry){ + fts_free(table); + break; + } + DICT_BG_YIELD(trx); + } return(err); } - current_doc_id = table->fts->cache->next_doc_id; - first_doc_id = table->fts->cache->first_doc_id; - fts_cache_clear(table->fts->cache); - fts_cache_destroy(table->fts->cache); - table->fts->cache = fts_cache_create(table); - table->fts->cache->next_doc_id = current_doc_id; - table->fts->cache->first_doc_id = first_doc_id; + for(;;) { + bool retry = false; + if (index->index_fts_syncing) { + retry = true; + } + if (!retry){ + current_doc_id = table->fts->cache->next_doc_id; + first_doc_id = table->fts->cache->first_doc_id; + fts_cache_clear(table->fts->cache); + fts_cache_destroy(table->fts->cache); + table->fts->cache = fts_cache_create(table); + table->fts->cache->next_doc_id = current_doc_id; + table->fts->cache->first_doc_id = first_doc_id; + break; + } + DICT_BG_YIELD(trx); + } } else { fts_cache_t* cache = table->fts->cache; fts_index_cache_t* index_cache; @@ -889,9 +909,17 @@ fts_drop_index( index_cache = fts_find_index_cache(cache, index); if (index_cache != NULL) { - if (index_cache->words) { - fts_words_free(index_cache->words); - rbt_free(index_cache->words); + for(;;) { + bool retry = false; + if (index->index_fts_syncing) { + retry = true; + } + if (!retry && index_cache->words) { + fts_words_free(index_cache->words); + rbt_free(index_cache->words); + break; + } + DICT_BG_YIELD(trx); } ib_vector_remove(cache->indexes, *(void**) index_cache); @@ -4569,10 +4597,16 @@ begin_sync: index_cache = static_cast( ib_vector_get(cache->indexes, i)); - if (index_cache->index->to_be_dropped) { + if (index_cache->index->to_be_dropped + || index_cache->index->table->to_be_dropped) { continue; } + index_cache->index->index_fts_syncing = true; + DBUG_EXECUTE_IF("fts_instrument_sync_sleep_drop_waits", + os_thread_sleep(10000000); + ); + error = fts_sync_index(sync, index_cache); if (error != DB_SUCCESS && !sync->interrupted) { @@ -4605,11 +4639,33 @@ begin_sync: end_sync: if (error == DB_SUCCESS && !sync->interrupted) { error = fts_sync_commit(sync); + if (error == DB_SUCCESS) { + for (i = 0; i < ib_vector_size(cache->indexes); ++i) { + fts_index_cache_t* index_cache; + index_cache = static_cast( + ib_vector_get(cache->indexes, i)); + if (index_cache->index->index_fts_syncing) { + index_cache->index->index_fts_syncing + = false; + } + } + } } else { fts_sync_rollback(sync); } rw_lock_x_lock(&cache->lock); + /* Clear fts syncing flags of any indexes incase sync is + interrupeted */ + for (i = 0; i < ib_vector_size(cache->indexes); ++i) { + fts_index_cache_t* index_cache; + index_cache = static_cast( + ib_vector_get(cache->indexes, i)); + if (index_cache->index->index_fts_syncing == true) { + index_cache->index->index_fts_syncing = false; + } + } + sync->interrupted = false; sync->in_progress = false; os_event_set(sync->event); diff --git a/storage/innobase/fts/fts0opt.cc b/storage/innobase/fts/fts0opt.cc index cb30122adcb..d9f96948000 100644 --- a/storage/innobase/fts/fts0opt.cc +++ b/storage/innobase/fts/fts0opt.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2007, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2007, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2016, MariaDB Corporation. All Rights reserved. This program is free software; you can redistribute it and/or modify it under @@ -2971,13 +2971,6 @@ fts_optimize_sync_table( { dict_table_t* table = NULL; - /* Prevent DROP INDEX etc. from running when we are syncing - cache in background. */ - if (!rw_lock_s_lock_nowait(&dict_operation_lock, __FILE__, __LINE__)) { - /* Exit when fail to get dict operation lock. */ - return; - } - table = dict_table_open_on_id(table_id, FALSE, DICT_TABLE_OP_NORMAL); if (table) { @@ -2987,8 +2980,6 @@ fts_optimize_sync_table( dict_table_close(table, FALSE, FALSE); } - - rw_lock_s_unlock(&dict_operation_lock); } /**********************************************************************//** diff --git a/storage/innobase/fts/fts0que.cc b/storage/innobase/fts/fts0que.cc index c74137031bb..b874309964b 100644 --- a/storage/innobase/fts/fts0que.cc +++ b/storage/innobase/fts/fts0que.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2007, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2007, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index 0ef114e6c67..a1f0fbb1e7e 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2005, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2013, 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under @@ -5895,7 +5895,47 @@ ha_innobase::commit_inplace_alter_table( break; } - DICT_STATS_BG_YIELD(trx); + DICT_BG_YIELD(trx); + } + + /* Make a concurrent Drop fts Index to wait until sync of that + fts index is happening in the background */ + for (;;) { + bool retry = false; + + for (inplace_alter_handler_ctx** pctx = ctx_array; + *pctx; pctx++) { + int count =0; + ha_innobase_inplace_ctx* ctx + = static_cast(*pctx); + DBUG_ASSERT(new_clustered == ctx->need_rebuild()); + + if (dict_fts_index_syncing(ctx->old_table)) { + count++; + if (count == 100) { + fprintf(stderr, + "Drop index waiting for background sync" + "to finish\n"); + } + retry = true; + } + + if (new_clustered && dict_fts_index_syncing(ctx->new_table)) { + count++; + if (count == 100) { + fprintf(stderr, + "Drop index waiting for background sync" + "to finish\n"); + } + retry = true; + } + } + + if (!retry) { + break; + } + + DICT_BG_YIELD(trx); } /* Apply the changes to the data dictionary tables, for all @@ -6211,8 +6251,13 @@ foreign_fail: ut_d(dict_table_check_for_dup_indexes( ctx->new_table, CHECK_ABORTED_OK)); - ut_a(fts_check_cached_index(ctx->new_table)); +#ifdef UNIV_DEBUG + if (!(ctx->new_table->fts != NULL + && ctx->new_table->fts->cache->sync->in_progress)) { + ut_a(fts_check_cached_index(ctx->new_table)); + } +#endif if (new_clustered) { /* Since the table has been rebuilt, we remove all persistent statistics corresponding to the diff --git a/storage/innobase/ibuf/ibuf0ibuf.cc b/storage/innobase/ibuf/ibuf0ibuf.cc index 356dbbfb6ec..d563db8fc87 100644 --- a/storage/innobase/ibuf/ibuf0ibuf.cc +++ b/storage/innobase/ibuf/ibuf0ibuf.cc @@ -4000,7 +4000,7 @@ ibuf_insert_to_index_page_low( (ulong) zip_size, (ulong) old_bits); fputs("InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", stderr); + " to https://jira.mariadb.org/\n", stderr); ut_ad(0); DBUG_RETURN(NULL); } @@ -4073,7 +4073,7 @@ dump: " Please run CHECK TABLE on\n" "InnoDB: your tables.\n" "InnoDB: Submit a detailed bug report to" - " http://bugs.mysql.com!\n", stderr); + " https://jira.mariadb.org/\n", stderr); DBUG_VOID_RETURN; } @@ -4249,7 +4249,7 @@ ibuf_set_del_mark( fprintf(stderr, "\nspace %u offset %u" " (%u records, index id %llu)\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", + " to https://jira.mariadb.org/\n", (unsigned) buf_block_get_space(block), (unsigned) buf_block_get_page_no(block), (unsigned) page_get_n_recs(page), @@ -4313,7 +4313,7 @@ ibuf_delete( fprintf(stderr, "\nspace %u offset %u" " (%u records, index id %llu)\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", + " to https://jira.mariadb.org/\n", (unsigned) buf_block_get_space(block), (unsigned) buf_block_get_page_no(block), (unsigned) page_get_n_recs(page), @@ -4384,7 +4384,7 @@ ibuf_restore_pos( } else { fprintf(stderr, "InnoDB: ERROR: Submit the output to" - " http://bugs.mysql.com\n" + " https://jira.mariadb.org/\n" "InnoDB: ibuf cursor restoration fails!\n" "InnoDB: ibuf record inserted to page %lu:%lu\n", (ulong) space, (ulong) page_no); @@ -4703,7 +4703,7 @@ ibuf_merge_or_delete_for_page( "InnoDB: to determine if they are corrupt" " after this.\n\n" "InnoDB: Please submit a detailed bug report" - " to http://bugs.mysql.com\n\n", + " to https://jira.mariadb.org/\n\n", (ulong) page_no, (ulong) fil_page_get_type(block->frame)); diff --git a/storage/innobase/include/dict0dict.ic b/storage/innobase/include/dict0dict.ic index 147968a343a..22b96a58f66 100644 --- a/storage/innobase/include/dict0dict.ic +++ b/storage/innobase/include/dict0dict.ic @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2013, 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under @@ -1076,6 +1076,27 @@ dict_table_x_lock_indexes( } } +/*********************************************************************//** +Returns true if the particular FTS index in the table is still syncing +in the background, false otherwise. +@param [in] table Table containing FTS index +@return True if sync of fts index is still going in the background */ +UNIV_INLINE +bool +dict_fts_index_syncing( + dict_table_t* table) +{ + dict_index_t* index; + + for (index = dict_table_get_first_index(table); + index != NULL; + index = dict_table_get_next_index(index)) { + if (index->index_fts_syncing) { + return(true); + } + } + return(false); +} /*********************************************************************//** Release the exclusive locks on all index tree. */ UNIV_INLINE diff --git a/storage/innobase/include/dict0mem.h b/storage/innobase/include/dict0mem.h index 1c0f4d73006..9a6cc0aa0c1 100644 --- a/storage/innobase/include/dict0mem.h +++ b/storage/innobase/include/dict0mem.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2012, Facebook Inc. Copyright (c) 2013, 2017, MariaDB Corporation. @@ -704,6 +704,8 @@ struct dict_index_t{ dict_sys->mutex. Other changes are protected by index->lock. */ dict_field_t* fields; /*!< array of field descriptions */ + bool index_fts_syncing;/*!< Whether the fts index is + still syncing in the background */ #ifndef UNIV_HOTBACKUP UT_LIST_NODE_T(dict_index_t) indexes;/*!< list of indexes of the table */ diff --git a/storage/innobase/include/dict0stats_bg.h b/storage/innobase/include/dict0stats_bg.h index 8f3385eb22b..66fcf7a0998 100644 --- a/storage/innobase/include/dict0stats_bg.h +++ b/storage/innobase/include/dict0stats_bg.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2012, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2012, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under @@ -83,7 +83,7 @@ dict_stats_defrag_pool_del( /** Yield the data dictionary latch when waiting for the background thread to stop accessing a table. @param trx transaction holding the data dictionary locks */ -#define DICT_STATS_BG_YIELD(trx) do { \ +#define DICT_BG_YIELD(trx) do { \ row_mysql_unlock_data_dictionary(trx); \ os_thread_sleep(250000); \ row_mysql_lock_data_dictionary(trx); \ diff --git a/storage/innobase/include/mtr0log.ic b/storage/innobase/include/mtr0log.ic index 6457e02d455..bdfd98709d1 100644 --- a/storage/innobase/include/mtr0log.ic +++ b/storage/innobase/include/mtr0log.ic @@ -215,7 +215,7 @@ mlog_write_initial_log_record_fast( "%d on page %lu of space %lu in the " "doublewrite buffer, continuing anyway.\n" "Please post a bug report to " - "bugs.mysql.com.\n", + "https://jira.mariadb.org/\n", type, offset, space); ut_ad(0); } diff --git a/storage/innobase/lock/lock0lock.cc b/storage/innobase/lock/lock0lock.cc index fb6caf2691e..47f48df27c5 100644 --- a/storage/innobase/lock/lock0lock.cc +++ b/storage/innobase/lock/lock0lock.cc @@ -2451,7 +2451,7 @@ lock_rec_enqueue_waiting( dict_index_name_print(stderr, trx, index); fputs(".\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", + " to https://jira.mariadb.org/\n", stderr); ut_ad(0); } @@ -5185,7 +5185,7 @@ lock_table_enqueue_waiting( ut_print_name(stderr, trx, TRUE, table->name); fputs(".\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", + " to https://jira.mariadb.org/\n", stderr); ut_ad(0); } diff --git a/storage/innobase/row/row0ins.cc b/storage/innobase/row/row0ins.cc index cbbb584d6b6..84f61956c47 100644 --- a/storage/innobase/row/row0ins.cc +++ b/storage/innobase/row/row0ins.cc @@ -1137,7 +1137,7 @@ row_ins_foreign_check_on_constraint( rec_print(stderr, clust_rec, clust_index); fputs("\n" "InnoDB: Submit a detailed bug report to" - " http://bugs.mysql.com\n", stderr); + " https://jira.mariadb.org/\n", stderr); ut_ad(0); err = DB_SUCCESS; diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc index b7e2a2cc677..8172d8a7c11 100644 --- a/storage/innobase/row/row0mysql.cc +++ b/storage/innobase/row/row0mysql.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2000, 2016, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2000, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2015, 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under @@ -59,6 +59,7 @@ Created 9/17/2000 Heikki Tuuri #include "btr0defragment.h" #include "fil0fil.h" #include "fil0crypt.h" +#include "srv0srv.h" #include "ibuf0ibuf.h" #include "fts0fts.h" #include "fts0types.h" @@ -4026,6 +4027,16 @@ row_drop_table_for_mysql( ut_ad(!table->fts->add_wq); ut_ad(lock_trx_has_sys_table_locks(trx) == 0); + for (;;) { + bool retry = false; + if (dict_fts_index_syncing(table)) { + retry = true; + } + if (!retry) { + break; + } + DICT_BG_YIELD(trx); + } row_mysql_unlock_data_dictionary(trx); fts_optimize_remove_table(table); row_mysql_lock_data_dictionary(trx); diff --git a/storage/innobase/row/row0sel.cc b/storage/innobase/row/row0sel.cc index 61052bd1eec..d309cf4c742 100644 --- a/storage/innobase/row/row0sel.cc +++ b/storage/innobase/row/row0sel.cc @@ -2759,8 +2759,6 @@ row_sel_field_store_in_mysql_format_func( @param[in] field_no templ->rec_field_no or templ->clust_rec_field_no or templ->icp_rec_field_no - or sec field no if clust_templ_for_sec - is TRUE @param[in] templ row template */ static MY_ATTRIBUTE((warn_unused_result)) @@ -2913,10 +2911,6 @@ be needed in the query. @param[in] rec_clust TRUE if the rec in the clustered index @param[in] index index of rec @param[in] offsets array returned by rec_get_offsets(rec) -@param[in] clust_templ_for_sec TRUE if rec belongs to secondary index - but the prebuilt->template is in - clustered index format and it is - used only for end range comparison @return TRUE on success, FALSE if not all columns could be retrieved */ static MY_ATTRIBUTE((warn_unused_result)) ibool @@ -3099,7 +3093,7 @@ row_sel_get_clust_rec_for_mysql( trx_print(stderr, trx, 600); fputs("\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", stderr); + " to https://jira.mariadb.org/\n", stderr); ut_ad(0); } diff --git a/storage/innobase/row/row0umod.cc b/storage/innobase/row/row0umod.cc index a97c89212a2..4aa5cfdc4da 100644 --- a/storage/innobase/row/row0umod.cc +++ b/storage/innobase/row/row0umod.cc @@ -683,7 +683,7 @@ row_undo_mod_del_unmark_sec_and_undo_update( trx_print(stderr, trx, 0); fputs("\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", stderr); + " to https://jira.mariadb.org/\n", stderr); ib_logf(IB_LOG_LEVEL_WARN, "record in index %s was not found" diff --git a/storage/innobase/row/row0upd.cc b/storage/innobase/row/row0upd.cc index ba874ac6dec..ef51e2046ae 100644 --- a/storage/innobase/row/row0upd.cc +++ b/storage/innobase/row/row0upd.cc @@ -1952,7 +1952,7 @@ row_upd_sec_index_entry( trx_print(stderr, trx, 0); fputs("\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", stderr); + " to https://jira.mariadb.org/\n", stderr); ut_ad(0); break; case ROW_FOUND: diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc index 1431211279b..749ece33a06 100644 --- a/storage/innobase/srv/srv0srv.cc +++ b/storage/innobase/srv/srv0srv.cc @@ -1914,7 +1914,7 @@ loop: " was greater\n" "InnoDB: than the new log sequence number " LSN_PF "!\n" "InnoDB: Please submit a bug report" - " to http://bugs.mysql.com\n", + " to https://jira.mariadb.org\n", old_lsn, new_lsn); ut_ad(0); } diff --git a/storage/innobase/trx/trx0purge.cc b/storage/innobase/trx/trx0purge.cc index 8eff14e0e99..5553de4814f 100644 --- a/storage/innobase/trx/trx0purge.cc +++ b/storage/innobase/trx/trx0purge.cc @@ -603,7 +603,7 @@ trx_purge_rseg_get_next_history_log( "InnoDB: but its length is still" " reported as %lu! Make a detailed bug\n" "InnoDB: report, and submit it" - " to http://bugs.mysql.com\n", + " to https://jira.mariadb.org/\n", (ulong) trx_sys->rseg_history_len); ut_ad(0); } diff --git a/storage/innobase/trx/trx0rec.cc b/storage/innobase/trx/trx0rec.cc index ec5b598d0f3..1010f60940b 100644 --- a/storage/innobase/trx/trx0rec.cc +++ b/storage/innobase/trx/trx0rec.cc @@ -1022,7 +1022,7 @@ trx_undo_update_rec_get_update( fprintf(stderr, "\n" "InnoDB: but index has only %lu fields\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n" + " to https://jira.mariadb.org/\n" "InnoDB: Run also CHECK TABLE ", (ulong) dict_index_get_n_fields(index)); ut_print_name(stderr, trx, TRUE, index->table_name); diff --git a/storage/innobase/ut/ut0dbg.cc b/storage/innobase/ut/ut0dbg.cc index a1cad144da4..a0bd82b385a 100644 --- a/storage/innobase/ut/ut0dbg.cc +++ b/storage/innobase/ut/ut0dbg.cc @@ -63,7 +63,7 @@ ut_dbg_assertion_failed( fputs("InnoDB: We intentionally generate a memory trap.\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com.\n" + " to https://jira.mariadb.org/\n" "InnoDB: If you get repeated assertion failures" " or crashes, even\n" "InnoDB: immediately after the mysqld startup, there may be\n" diff --git a/storage/perfschema/pfs.cc b/storage/perfschema/pfs.cc index c30ff4b6640..1a3f066bd00 100644 --- a/storage/perfschema/pfs.cc +++ b/storage/perfschema/pfs.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -41,6 +41,7 @@ #include "sp_head.h" #include "pfs_digest.h" +using std::min; /** @page PAGE_PERFORMANCE_SCHEMA The Performance Schema main page MySQL PERFORMANCE_SCHEMA implementation. @@ -2018,7 +2019,8 @@ static void set_thread_account_v1(const char *user, int user_len, DBUG_ASSERT((uint) user_len <= sizeof(pfs->m_username)); DBUG_ASSERT((host != NULL) || (host_len == 0)); DBUG_ASSERT(host_len >= 0); - DBUG_ASSERT((uint) host_len <= sizeof(pfs->m_hostname)); + + host_len= min(host_len, sizeof(pfs->m_hostname)); if (unlikely(pfs == NULL)) return; diff --git a/storage/xtradb/btr/btr0btr.cc b/storage/xtradb/btr/btr0btr.cc index 29f03549899..dca8542633f 100644 --- a/storage/xtradb/btr/btr0btr.cc +++ b/storage/xtradb/btr/btr0btr.cc @@ -2086,7 +2086,7 @@ btr_page_reorganize_low( "InnoDB: Error: page old max ins size %lu" " new max ins size %lu\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", + " to https://jira.mariadb.org/\n", (unsigned long) data_size1, (unsigned long) data_size2, (unsigned long) max_ins_size1, (unsigned long) max_ins_size2); diff --git a/storage/xtradb/ibuf/ibuf0ibuf.cc b/storage/xtradb/ibuf/ibuf0ibuf.cc index e872198d927..17741b324c9 100644 --- a/storage/xtradb/ibuf/ibuf0ibuf.cc +++ b/storage/xtradb/ibuf/ibuf0ibuf.cc @@ -4042,7 +4042,7 @@ ibuf_insert_to_index_page_low( (ulong) zip_size, (ulong) old_bits); fputs("InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", stderr); + " to https://jira.mariadb.org/\n", stderr); ut_ad(0); DBUG_RETURN(NULL); } @@ -4115,7 +4115,7 @@ dump: " Please run CHECK TABLE on\n" "InnoDB: your tables.\n" "InnoDB: Submit a detailed bug report to" - " http://bugs.mysql.com!\n", stderr); + " https://jira.mariadb.org/\n", stderr); DBUG_VOID_RETURN; } @@ -4291,7 +4291,7 @@ ibuf_set_del_mark( fprintf(stderr, "\nspace %u offset %u" " (%u records, index id %llu)\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", + " to https://jira.mariadb.org/\n", (unsigned) buf_block_get_space(block), (unsigned) buf_block_get_page_no(block), (unsigned) page_get_n_recs(page), @@ -4355,7 +4355,7 @@ ibuf_delete( fprintf(stderr, "\nspace %u offset %u" " (%u records, index id %llu)\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", + " to https://jira.mariadb.org/\n", (unsigned) buf_block_get_space(block), (unsigned) buf_block_get_page_no(block), (unsigned) page_get_n_recs(page), @@ -4426,7 +4426,7 @@ ibuf_restore_pos( } else { fprintf(stderr, "InnoDB: ERROR: Submit the output to" - " http://bugs.mysql.com\n" + " https://jira.mariadb.org/\n" "InnoDB: ibuf cursor restoration fails!\n" "InnoDB: ibuf record inserted to page %lu:%lu\n", (ulong) space, (ulong) page_no); @@ -4745,7 +4745,7 @@ ibuf_merge_or_delete_for_page( "InnoDB: to determine if they are corrupt" " after this.\n\n" "InnoDB: Please submit a detailed bug report" - " to http://bugs.mysql.com\n\n", + " to https://jira.mariadb.org/\n\n", (ulong) page_no, (ulong) fil_page_get_type(block->frame)); diff --git a/storage/xtradb/include/mtr0log.ic b/storage/xtradb/include/mtr0log.ic index d508d30fafe..8c891fac55b 100644 --- a/storage/xtradb/include/mtr0log.ic +++ b/storage/xtradb/include/mtr0log.ic @@ -216,7 +216,7 @@ mlog_write_initial_log_record_fast( "%d on page %lu of space %lu in the " "doublewrite buffer, continuing anyway.\n" "Please post a bug report to " - "bugs.mysql.com.\n", + "https://jira.mariadb.org/\n", type, offset, space); ut_ad(0); } diff --git a/storage/xtradb/lock/lock0lock.cc b/storage/xtradb/lock/lock0lock.cc index ce51effbab0..8759cea9e6d 100644 --- a/storage/xtradb/lock/lock0lock.cc +++ b/storage/xtradb/lock/lock0lock.cc @@ -2478,7 +2478,7 @@ lock_rec_enqueue_waiting( dict_index_name_print(stderr, trx, index); fputs(".\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", + " to https://jira.mariadb.org/\n", stderr); ut_ad(0); } @@ -5226,7 +5226,7 @@ lock_table_enqueue_waiting( ut_print_name(stderr, trx, TRUE, table->name); fputs(".\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", + " to https://jira.mariadb.org/\n", stderr); ut_ad(0); } diff --git a/storage/xtradb/row/row0ins.cc b/storage/xtradb/row/row0ins.cc index 33f8ec443dd..e8bae7427f4 100644 --- a/storage/xtradb/row/row0ins.cc +++ b/storage/xtradb/row/row0ins.cc @@ -1143,7 +1143,7 @@ row_ins_foreign_check_on_constraint( rec_print(stderr, clust_rec, clust_index); fputs("\n" "InnoDB: Submit a detailed bug report to" - " http://bugs.mysql.com\n", stderr); + " https://jira.mariadb.org/\n", stderr); ut_ad(0); err = DB_SUCCESS; diff --git a/storage/xtradb/row/row0sel.cc b/storage/xtradb/row/row0sel.cc index 9cbadc305c0..6131129d0a6 100644 --- a/storage/xtradb/row/row0sel.cc +++ b/storage/xtradb/row/row0sel.cc @@ -3111,7 +3111,7 @@ row_sel_get_clust_rec_for_mysql( trx_print(stderr, trx, 600); fputs("\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", stderr); + " to https://jira.mariadb.org/\n", stderr); ut_ad(0); } diff --git a/storage/xtradb/row/row0umod.cc b/storage/xtradb/row/row0umod.cc index f23d7e9dc68..2e5cc14bfe1 100644 --- a/storage/xtradb/row/row0umod.cc +++ b/storage/xtradb/row/row0umod.cc @@ -653,7 +653,7 @@ row_undo_mod_del_unmark_sec_and_undo_update( trx_print(stderr, trx, 0); fputs("\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", stderr); + " to https://jira.mariadb.org/\n", stderr); ib_logf(IB_LOG_LEVEL_WARN, "record in index %s was not found" diff --git a/storage/xtradb/row/row0upd.cc b/storage/xtradb/row/row0upd.cc index 91f7fb30e81..113d2f10fc2 100644 --- a/storage/xtradb/row/row0upd.cc +++ b/storage/xtradb/row/row0upd.cc @@ -1958,7 +1958,7 @@ row_upd_sec_index_entry( trx_print(stderr, trx, 0); fputs("\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n", stderr); + " to https://jira.mariadb.org/\n", stderr); ut_ad(0); break; case ROW_FOUND: diff --git a/storage/xtradb/srv/srv0srv.cc b/storage/xtradb/srv/srv0srv.cc index cbfe54b1105..65a15b15aec 100644 --- a/storage/xtradb/srv/srv0srv.cc +++ b/storage/xtradb/srv/srv0srv.cc @@ -2361,7 +2361,7 @@ loop: " was greater\n" "InnoDB: than the new log sequence number " LSN_PF "!\n" "InnoDB: Please submit a bug report" - " to http://bugs.mysql.com\n", + " to https://jira.mariadb.org\n", old_lsn, new_lsn); ut_ad(0); } diff --git a/storage/xtradb/trx/trx0purge.cc b/storage/xtradb/trx/trx0purge.cc index df4a3217820..ff82bb2ad4e 100644 --- a/storage/xtradb/trx/trx0purge.cc +++ b/storage/xtradb/trx/trx0purge.cc @@ -603,7 +603,7 @@ trx_purge_rseg_get_next_history_log( "InnoDB: but its length is still" " reported as %lu! Make a detailed bug\n" "InnoDB: report, and submit it" - " to http://bugs.mysql.com\n", + " to https://jira.mariadb.org/\n", (ulong) trx_sys->rseg_history_len); ut_ad(0); } diff --git a/storage/xtradb/trx/trx0rec.cc b/storage/xtradb/trx/trx0rec.cc index 3193dfd81b5..4e0ba825ed2 100644 --- a/storage/xtradb/trx/trx0rec.cc +++ b/storage/xtradb/trx/trx0rec.cc @@ -1022,7 +1022,7 @@ trx_undo_update_rec_get_update( fprintf(stderr, "\n" "InnoDB: but index has only %lu fields\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com\n" + " to https://jira.mariadb.org/\n" "InnoDB: Run also CHECK TABLE ", (ulong) dict_index_get_n_fields(index)); ut_print_name(stderr, trx, TRUE, index->table_name); diff --git a/storage/xtradb/ut/ut0dbg.cc b/storage/xtradb/ut/ut0dbg.cc index a1cad144da4..a0bd82b385a 100644 --- a/storage/xtradb/ut/ut0dbg.cc +++ b/storage/xtradb/ut/ut0dbg.cc @@ -63,7 +63,7 @@ ut_dbg_assertion_failed( fputs("InnoDB: We intentionally generate a memory trap.\n" "InnoDB: Submit a detailed bug report" - " to http://bugs.mysql.com.\n" + " to https://jira.mariadb.org/\n" "InnoDB: If you get repeated assertion failures" " or crashes, even\n" "InnoDB: immediately after the mysqld startup, there may be\n"