1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-09 22:24:09 +03:00

Merge 10.0 into 10.1

This commit is contained in:
Marko Mäkelä
2017-10-26 13:36:38 +03:00
73 changed files with 603 additions and 430 deletions

View File

@@ -38,7 +38,7 @@ user_connect.h valblk.h value.h xindex.h xobject.h xtable.h)
# Definitions that are shared for all OSes # Definitions that are shared for all OSes
# #
add_definitions( -DMARIADB -DFORCE_INIT_OF_VARS -Dconnect_EXPORTS) 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 # 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) OPTION(CONNECT_WITH_JDBC "Compile CONNECT storage engine with JDBC support" ON)
IF(CONNECT_WITH_JDBC) IF(CONNECT_WITH_JDBC)
@@ -243,17 +243,16 @@ IF(CONNECT_WITH_JDBC)
# SET(JDBC_LIBRARY ${JAVA_JVM_LIBRARY}) will be dynamically linked # SET(JDBC_LIBRARY ${JAVA_JVM_LIBRARY}) will be dynamically linked
SET(CONNECT_SOURCES ${CONNECT_SOURCES} SET(CONNECT_SOURCES ${CONNECT_SOURCES}
javaconn.cpp jdbconn.cpp tabjdbc.cpp javaconn.cpp jdbconn.cpp tabjdbc.cpp
jmgfam.cpp jmgoconn.cpp mongo.cpp tabjmg.cpp
jdbccat.h javaconn.h jdbconn.h tabjdbc.h jdbccat.h javaconn.h jdbconn.h tabjdbc.h
jmgfam.h jmgoconn.h mongo.h tabjmg.h
JdbcInterface.java ApacheInterface.java MariadbInterface.java JdbcInterface.java ApacheInterface.java MariadbInterface.java
MysqlInterface.java OracleInterface.java PostgresqlInterface.java MysqlInterface.java OracleInterface.java PostgresqlInterface.java
Mongo2Interface.java Mongo3Interface.java
JavaWrappers.jar) JavaWrappers.jar)
add_definitions(-DJDBC_SUPPORT) add_definitions(-DJAVA_SUPPORT)
IF(CONNECT_WITH_MONGO) IF(CONNECT_WITH_MONGO)
SET(CONNECT_SOURCES ${CONNECT_SOURCES} add_definitions(-DMONGO_SUPPORT)
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)
ENDIF() ENDIF()
ELSE() ELSE()
SET(JDBC_LIBRARY "") SET(JDBC_LIBRARY "")
@@ -296,10 +295,7 @@ IF(CONNECT_WITH_MONGO)
add_definitions(-DCMGO_SUPPORT) add_definitions(-DCMGO_SUPPORT)
IF (NOT JAVA_FOUND AND JNI_FOUND) IF (NOT JAVA_FOUND AND JNI_FOUND)
SET(CONNECT_SOURCES ${CONNECT_SOURCES} mongo.cpp mongo.h) SET(CONNECT_SOURCES ${CONNECT_SOURCES} mongo.cpp mongo.h)
add_definitions(-DMONGO_SUPPORT -DMONGO_ENABLED=1) add_definitions(-DMONGO_SUPPORT)
ELSE ()
remove_definitions(-DMONGO_ENABLED=0)
add_definitions(-DMONGO_ENABLED=1)
ENDIF (NOT JAVA_FOUND AND JNI_FOUND) ENDIF (NOT JAVA_FOUND AND JNI_FOUND)
ENDIF(libmongoc-1.0_FOUND) ENDIF(libmongoc-1.0_FOUND)
ENDIF(CONNECT_WITH_MONGO) ENDIF(CONNECT_WITH_MONGO)

View File

@@ -22,17 +22,10 @@
#include "filter.h" #include "filter.h"
#include "cmgoconn.h" #include "cmgoconn.h"
bool CMgoConn::IsInit = false;
bool IsNum(PSZ s); bool IsNum(PSZ s);
bool MakeSelector(PGLOBAL g, PFIL fp, PSTRG s);
// Required to initialize libmongoc's internals
void mongo_init(bool init)
{
if (init)
mongoc_init();
else
mongoc_cleanup();
} // end of mongo_init
/* --------------------------- Class INCOL --------------------------- */ /* --------------------------- Class INCOL --------------------------- */
@@ -139,11 +132,36 @@ CMgoConn::CMgoConn(PGLOBAL g, PCPARM pcg)
m_Connected = false; m_Connected = false;
} // end of CMgoConn standard constructor } // 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. */ /* Connect to the MongoDB server and get the collection. */
/***********************************************************************/ /***********************************************************************/
bool CMgoConn::Connect(PGLOBAL g) 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); Uri = mongoc_uri_new(Pcg->Uristr);
if (!Uri) { if (!Uri) {
@@ -246,6 +264,7 @@ bool CMgoConn::MakeCursor(PGLOBAL g)
PTDB tp = Pcg->Tdbp; PTDB tp = Pcg->Tdbp;
PCOL cp; PCOL cp;
PSTRG s = NULL; PSTRG s = NULL;
PFIL filp = tp->GetFilter();
id = (tp->GetMode() != MODE_READ); id = (tp->GetMode() != MODE_READ);
@@ -274,10 +293,10 @@ bool CMgoConn::MakeCursor(PGLOBAL g)
s = new(g) STRING(g, 1023, (PSZ)options); s = new(g) STRING(g, 1023, (PSZ)options);
if (tp->GetFilter()) { if (filp) {
s->Append(",{\"$match\":"); s->Append(",{\"$match\":");
if (tp->GetFilter()->MakeSelector(g, s)) { if (MakeSelector(g, filp, s)) {
strcpy(g->Message, "Failed making selector"); strcpy(g->Message, "Failed making selector");
return true; return true;
} else } else
@@ -330,15 +349,15 @@ bool CMgoConn::MakeCursor(PGLOBAL g)
} // endif error } // endif error
} else { } else {
if (Pcg->Filter || tp->GetFilter()) { if (Pcg->Filter || filp) {
if (trace) { if (trace) {
if (Pcg->Filter) if (Pcg->Filter)
htrc("Filter: %s\n", Pcg->Filter); htrc("Filter: %s\n", Pcg->Filter);
if (tp->GetFilter()) { if (filp) {
char buf[512]; char buf[512];
tp->GetFilter()->Prints(g, buf, 511); filp->Prints(g, buf, 511);
htrc("To_Filter: %s\n", buf); htrc("To_Filter: %s\n", buf);
} // endif To_Filter } // endif To_Filter
@@ -346,11 +365,11 @@ bool CMgoConn::MakeCursor(PGLOBAL g)
s = new(g) STRING(g, 1023, (PSZ)Pcg->Filter); s = new(g) STRING(g, 1023, (PSZ)Pcg->Filter);
if (tp->GetFilter()) { if (filp) {
if (Pcg->Filter) if (Pcg->Filter)
s->Append(','); s->Append(',');
if (tp->GetFilter()->MakeSelector(g, s)) { if (MakeSelector(g, filp, s)) {
strcpy(g->Message, "Failed making selector"); strcpy(g->Message, "Failed making selector");
return NULL; return NULL;
} // endif Selector } // endif Selector

View File

@@ -93,6 +93,7 @@ public:
PSZ Mini(PGLOBAL g, PCOL colp, const bson_t *bson, bool b); PSZ Mini(PGLOBAL g, PCOL colp, const bson_t *bson, bool b);
void GetColumnValue(PGLOBAL g, PCOL colp); void GetColumnValue(PGLOBAL g, PCOL colp);
bool AddValue(PGLOBAL g, PCOL colp, bson_t *doc, char *key, bool upd); bool AddValue(PGLOBAL g, PCOL colp, bson_t *doc, char *key, bool upd);
static void mongo_init(bool init);
protected: protected:
// Members // Members
@@ -112,4 +113,5 @@ protected:
PINCOL Fpc; // To insert INCOL classes PINCOL Fpc; // To insert INCOL classes
PFBLOCK fp; PFBLOCK fp;
bool m_Connected; bool m_Connected;
static bool IsInit;
}; // end of class CMgoConn }; // end of class CMgoConn

View File

@@ -10,7 +10,7 @@
/* Include relevant MariaDB header file. */ /* Include relevant MariaDB header file. */
/***********************************************************************/ /***********************************************************************/
#include "my_global.h" #include "my_global.h"
#include "sql_class.h" //#include "sql_class.h"
//#include "sql_time.h" //#include "sql_time.h"
#if defined(__WIN__) #if defined(__WIN__)

View File

@@ -61,9 +61,6 @@ class DllExport FILTER : public XOBJECT { /* Filter description block */
//virtual PXOB CheckSubQuery(PGLOBAL, PSQL); //virtual PXOB CheckSubQuery(PGLOBAL, PSQL);
//virtual bool CheckLocal(PTDB); //virtual bool CheckLocal(PTDB);
//virtual int CheckSpcCol(PTDB tdbp, int n); //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 Printf(PGLOBAL g, FILE *f, uint n);
virtual void Prints(PGLOBAL g, char *ps, uint z); virtual void Prints(PGLOBAL g, char *ps, uint z);
// PFIL Linearize(bool nosep); // PFIL Linearize(bool nosep);

View File

@@ -129,10 +129,13 @@
#if defined(ODBC_SUPPORT) #if defined(ODBC_SUPPORT)
#include "odbccat.h" #include "odbccat.h"
#endif // ODBC_SUPPORT #endif // ODBC_SUPPORT
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
#include "tabjdbc.h" #include "tabjdbc.h"
#include "jdbconn.h" #include "jdbconn.h"
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
#if defined(CMGO_SUPPORT)
#include "cmgoconn.h"
#endif // CMGO_SUPPORT
#include "tabmysql.h" #include "tabmysql.h"
#include "filamdbf.h" #include "filamdbf.h"
#include "tabxcl.h" #include "tabxcl.h"
@@ -171,18 +174,18 @@
#define JSONMAX 10 // JSON Default max grp size #define JSONMAX 10 // JSON Default max grp size
extern "C" { extern "C" {
char version[]= "Version 1.06.0004 September 03, 2017"; char version[]= "Version 1.06.0005 October 14, 2017";
#if defined(__WIN__) #if defined(__WIN__)
char compver[]= "Version 1.06.0004 " __DATE__ " " __TIME__; char compver[]= "Version 1.06.0005 " __DATE__ " " __TIME__;
char slash= '\\'; char slash= '\\';
#else // !__WIN__ #else // !__WIN__
char slash= '/'; char slash= '/';
#endif // !__WIN__ #endif // !__WIN__
} // extern "C" } // extern "C"
#if defined(NEW_MAR) #if MYSQL_VERSION_ID > 100200
#define stored_in_db stored_in_db() #define stored_in_db stored_in_db()
#endif // NEW_MAR) #endif // MYSQL_VERSION_ID
#if defined(XMAP) #if defined(XMAP)
my_bool xmap= false; my_bool xmap= false;
@@ -196,10 +199,10 @@ extern "C" {
} // extern "C" } // extern "C"
#endif // XMSG #endif // XMSG
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
char *JvmPath; char *JvmPath;
char *ClassPath; char *ClassPath;
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
pthread_mutex_t parmut; pthread_mutex_t parmut;
pthread_mutex_t usrmut; 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 ZipLoadFile(PGLOBAL, PCSZ, PCSZ, PCSZ, bool, bool);
bool ExactInfo(void); bool ExactInfo(void);
#if defined(CMGO_SUPPORT) #if defined(CMGO_SUPPORT)
void mongo_init(bool); //void mongo_init(bool);
#endif // CMGO_SUPPORT #endif // CMGO_SUPPORT
USETEMP UseTemp(void); USETEMP UseTemp(void);
int GetConvSize(void); int GetConvSize(void);
@@ -234,6 +237,8 @@ uint GetWorkSize(void);
void SetWorkSize(uint); void SetWorkSize(uint);
extern "C" const char *msglang(void); extern "C" const char *msglang(void);
static char *strz(PGLOBAL g, LEX_STRING &ls);
static void PopUser(PCONNECT xp); static void PopUser(PCONNECT xp);
static PCONNECT GetUser(THD *thd, PCONNECT xp); static PCONNECT GetUser(THD *thd, PCONNECT xp);
static PGLOBAL GetPlug(THD *thd, PCONNECT& lxp); 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.", "max number of rows for JSON aggregate functions.",
NULL, NULL, JSONMAX, 1, INT_MAX, 1); NULL, NULL, JSONMAX, 1, INT_MAX, 1);
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
// Default java wrapper to use with JDBC tables // Default java wrapper to use with JDBC tables
static MYSQL_THDVAR_STR(java_wrapper, static MYSQL_THDVAR_STR(java_wrapper,
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC,
"Java wrapper class name", "Java wrapper class name",
// check_java_wrapper, update_java_wrapper, // check_java_wrapper, update_java_wrapper,
NULL, NULL, "wrappers/JdbcInterface"); 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) #if defined(MONGO_SUPPORT)
// Enabling MONGO table type // Enabling MONGO table type
@@ -421,10 +433,14 @@ extern "C" const char *msglang(void)
} // end of msglang } // end of msglang
#else // !XMSG && !NEWMSG #else // !XMSG && !NEWMSG
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
char *GetJavaWrapper(void) char *GetJavaWrapper(void)
{return connect_hton ? THDVAR(current_thd, java_wrapper) : (char*)"wrappers/JdbcInterface";} {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) #if defined(MONGO_SUPPORT)
bool MongoEnabled(void) { return THDVAR(current_thd, enable_mongo); } bool MongoEnabled(void) { return THDVAR(current_thd, enable_mongo); }
@@ -705,7 +721,7 @@ static int connect_init_func(void *p)
XmlInitParserLib(); XmlInitParserLib();
#endif // LIBXML2_SUPPORT #endif // LIBXML2_SUPPORT
#if defined(CMGO_SUPPORT) #if 0 //defined(CMGO_SUPPORT)
mongo_init(true); mongo_init(true);
#endif // CMGO_SUPPORT #endif // CMGO_SUPPORT
@@ -726,9 +742,9 @@ static int connect_init_func(void *p)
DTVAL::SetTimeShift(); // Initialize time zone shift once for all DTVAL::SetTimeShift(); // Initialize time zone shift once for all
BINCOL::SetEndian(); // Initialize host endian setting BINCOL::SetEndian(); // Initialize host endian setting
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
JAVAConn::SetJVM(); JAVAConn::SetJVM();
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
DBUG_RETURN(0); DBUG_RETURN(0);
} // end of connect_init_func } // end of connect_init_func
@@ -748,12 +764,12 @@ static int connect_done_func(void *)
#endif // LIBXML2_SUPPORT #endif // LIBXML2_SUPPORT
#if defined(CMGO_SUPPORT) #if defined(CMGO_SUPPORT)
mongo_init(false); CMgoConn::mongo_init(false);
#endif // CMGO_SUPPORT #endif // CMGO_SUPPORT
#ifdef JDBC_SUPPORT #ifdef JAVA_SUPPORT
JAVAConn::ResetJVM(); JAVAConn::ResetJVM();
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
#if !defined(__WIN__) #if !defined(__WIN__)
PROFILE_End(); PROFILE_End();
@@ -1758,7 +1774,7 @@ bool ha_connect::IsPartitioned(void)
} // end of IsPartitioned } // end of IsPartitioned
const char *ha_connect::GetDBName(const char* name) PCSZ ha_connect::GetDBName(PCSZ name)
{ {
return (name) ? name : table->s->db.str; return (name) ? name : table->s->db.str;
} // end of GetDBName } // end of GetDBName
@@ -1821,7 +1837,7 @@ void ha_connect::AddColName(char *cp, Field *fp)
/***********************************************************************/ /***********************************************************************/
/* This function sets the current database path. */ /* 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))); return (!(datapath= SetPath(g, path)));
} // end of SetDataPath } // end of SetDataPath
@@ -2181,7 +2197,7 @@ int ha_connect::MakeRecord(char *buf)
/***********************************************************************/ /***********************************************************************/
/* Set row values from a MySQL pseudo record. Specific to MySQL. */ /* 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 attr_buffer[1024];
char data_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. */ /* Check change in index column. Specific to MySQL. */
/* Should be elaborated to check for real changes. */ /* 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); return ScanRecord(g, newbuf);
} // end of dummy CheckRecord } // end of dummy CheckRecord
@@ -2517,7 +2533,7 @@ const char *ha_connect::GetValStr(OPVAL vop, bool neg)
val= (neg) ? " IS NOT NULL" : " IS NULL"; val= (neg) ? " IS NOT NULL" : " IS NULL";
break; break;
case OP_LIKE: case OP_LIKE:
val= " LIKE "; val= (neg) ? " NOT LIKE " : " LIKE ";
break; break;
case OP_XX: case OP_XX:
val= (neg) ? " NOT BETWEEN " : " BETWEEN "; 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::LE_FUNC: vop= OP_LE; break;
case Item_func::GE_FUNC: vop= OP_GE; break; case Item_func::GE_FUNC: vop= OP_GE; break;
case Item_func::GT_FUNC: vop= OP_GT; 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: case Item_func::ISNOTNULL_FUNC:
neg = true; neg = true;
// fall through // fall through
@@ -5379,20 +5398,18 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
#endif // __WIN__ #endif // __WIN__
//int hdr, mxe; //int hdr, mxe;
int port = 0, mxr = 0, rc = 0, mul = 0, lrecl = 0; int port = 0, mxr = 0, rc = 0, mul = 0, lrecl = 0;
PCSZ tabtyp = NULL;
#if defined(ODBC_SUPPORT) #if defined(ODBC_SUPPORT)
POPARM sop= NULL; POPARM sop= NULL;
PCSZ ucnc= NULL; PCSZ ucnc= NULL;
PCSZ tabtyp = NULL;
bool cnc= false; bool cnc= false;
int cto= -1, qto= -1; int cto= -1, qto= -1;
#endif // ODBC_SUPPORT #endif // ODBC_SUPPORT
#if defined(JDBC_SUPPORT) || defined(MONGO_SUPPORT) #if defined(JAVA_SUPPORT)
#if defined(JDBC_SUPPORT)
PJPARM sjp= NULL; PJPARM sjp= NULL;
#endif // JDBC_SUPPORT
PCSZ driver= NULL; PCSZ driver= NULL;
char *url= NULL; char *url= NULL;
#endif // JDBC_SUPPORT || MONGO_SUPPORT #endif // JAVA_SUPPORT
uint tm, fnc= FNC_NO, supfnc= (FNC_NO | FNC_COL); uint tm, fnc= FNC_NO, supfnc= (FNC_NO | FNC_COL);
bool bif, ok= false, dbf= false; bool bif, ok= false, dbf= false;
TABTYPE ttp= TAB_UNDEF; TABTYPE ttp= TAB_UNDEF;
@@ -5453,9 +5470,9 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
if ((ucnc= GetListOption(g, "UseDSN", topt->oplist))) if ((ucnc= GetListOption(g, "UseDSN", topt->oplist)))
cnc= (!*ucnc || *ucnc == 'y' || *ucnc == 'Y' || atoi(ucnc) != 0); cnc= (!*ucnc || *ucnc == 'y' || *ucnc == 'Y' || atoi(ucnc) != 0);
#endif #endif
#if defined(JDBC_SUPPORT) || defined(MONGO_SUPPORT) #if defined(JAVA_SUPPORT)
driver= GetListOption(g, "Driver", topt->oplist, NULL); driver= GetListOption(g, "Driver", topt->oplist, NULL);
#endif // JDBC_SUPPORT || MONGO_SUPPORT #endif // JAVA_SUPPORT
#if defined(PROMPT_OK) #if defined(PROMPT_OK)
cop= atoi(GetListOption(g, "checkdsn", topt->oplist, "0")); cop= atoi(GetListOption(g, "checkdsn", topt->oplist, "0"));
#endif // PROMPT_OK #endif // PROMPT_OK
@@ -5542,7 +5559,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
supfnc |= (FNC_TABLE | FNC_DSN | FNC_DRIVER); supfnc |= (FNC_TABLE | FNC_DSN | FNC_DRIVER);
break; break;
#endif // ODBC_SUPPORT #endif // ODBC_SUPPORT
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
case TAB_JDBC: case TAB_JDBC:
if (fnc & FNC_DRIVER) { if (fnc & FNC_DRIVER) {
ok = true; ok = true;
@@ -5576,10 +5593,10 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
supfnc |= (FNC_DRIVER | FNC_TABLE); supfnc |= (FNC_DRIVER | FNC_TABLE);
break; break;
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
case TAB_DBF: case TAB_DBF:
dbf = true; dbf = true;
// fall through // Passthru
case TAB_CSV: case TAB_CSV:
if (!fn && fnc != FNC_NO) if (!fn && fnc != FNC_NO)
sprintf(g->Message, "Missing %s file name", topt->type); sprintf(g->Message, "Missing %s file name", topt->type);
@@ -5633,10 +5650,8 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
ok = true; ok = true;
break; break;
#endif // __WIN__ #endif // __WIN__
#if defined(PIVOT_SUPPORT)
case TAB_PIVOT: case TAB_PIVOT:
supfnc = FNC_NO; supfnc = FNC_NO;
#endif // PIVOT_SUPPORT
case TAB_PRX: case TAB_PRX:
case TAB_TBL: case TAB_TBL:
case TAB_XCL: case TAB_XCL:
@@ -5667,14 +5682,14 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
ok = true; ok = true;
break; break;
#if defined(MONGO_SUPPORT) #if defined(JAVA_SUPPORT)
case TAB_MONGO: case TAB_MONGO:
if (!topt->tabname) if (!topt->tabname)
topt->tabname = tab; topt->tabname = tab;
ok = true; ok = true;
break; break;
#endif // MONGO_SUPPORT #endif // JAVA_SUPPORT
case TAB_VIR: case TAB_VIR:
ok = true; ok = true;
break; break;
@@ -5747,7 +5762,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
break; break;
#endif // ODBC_SUPPORT #endif // ODBC_SUPPORT
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
case TAB_JDBC: case TAB_JDBC:
switch (fnc) { switch (fnc) {
case FNC_NO: case FNC_NO:
@@ -5776,7 +5791,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
} // endswitch info } // endswitch info
break; break;
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
case TAB_MYSQL: case TAB_MYSQL:
qrp = MyColumns(g, thd, host, db, user, pwd, tab, qrp = MyColumns(g, thd, host, db, user, pwd, tab,
NULL, port, fnc == FNC_COL); NULL, port, fnc == FNC_COL);
@@ -5806,11 +5821,9 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
} // endif OcrColumns } // endif OcrColumns
break; break;
#if defined(PIVOT_SUPPORT)
case TAB_PIVOT: case TAB_PIVOT:
qrp = PivotColumns(g, tab, src, pic, fcl, skc, host, db, user, pwd, port); qrp = PivotColumns(g, tab, src, pic, fcl, skc, host, db, user, pwd, port);
break; break;
#endif // PIVOT_SUPPORT
case TAB_VIR: case TAB_VIR:
qrp = VirColumns(g, fnc == FNC_COL); qrp = VirColumns(g, fnc == FNC_COL);
break; break;
@@ -5819,9 +5832,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
break; break;
#if defined(MONGO_SUPPORT) #if defined(MONGO_SUPPORT)
case TAB_MONGO: case TAB_MONGO:
if (!(url = strz(g, create_info->connect_string)) || !*url) url = strz(g, create_info->connect_string);
url = "mongodb://localhost:27017";
qrp = MGOColumns(g, db, url, topt, fnc == FNC_COL); qrp = MGOColumns(g, db, url, topt, fnc == FNC_COL);
break; break;
#endif // MONGO_SUPPORT #endif // MONGO_SUPPORT
@@ -5949,7 +5960,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
break; break;
case FLD_SCHEM: 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 ((ttp == TAB_ODBC || ttp == TAB_JDBC) && crp->Kdata) {
if (schem && stricmp(schem, crp->Kdata->GetCharValue(i))) { if (schem && stricmp(schem, crp->Kdata->GetCharValue(i))) {
sprintf(g->Message, sprintf(g->Message,
@@ -5960,7 +5971,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
schem = crp->Kdata->GetCharValue(i); schem = crp->Kdata->GetCharValue(i);
} // endif ttp } // endif ttp
#endif // ODBC_SUPPORT || JDBC_SUPPORT #endif // ODBC_SUPPORT || JAVA_SUPPORT
default: default:
break; // Ignore break; // Ignore
} // endswitch Fld } // endswitch Fld
@@ -6008,7 +6019,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
} else } else
#endif // ODBC_SUPPORT #endif // ODBC_SUPPORT
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
if (ttp == TAB_JDBC) { if (ttp == TAB_JDBC) {
int plgtyp; int plgtyp;
@@ -7151,7 +7162,7 @@ static MYSQL_SYSVAR_STR(errmsg_dir_path, msg_path,
"../../../../storage/connect/"); // for testing "../../../../storage/connect/"); // for testing
#endif // XMSG #endif // XMSG
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
static MYSQL_SYSVAR_STR(jvm_path, JvmPath, static MYSQL_SYSVAR_STR(jvm_path, JvmPath,
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC,
"Path to the directory where is the JVM lib", "Path to the directory where is the JVM lib",
@@ -7163,7 +7174,7 @@ static MYSQL_SYSVAR_STR(class_path, ClassPath,
"Java class path", "Java class path",
// check_class_path, update_class_path, // check_class_path, update_class_path,
NULL, NULL, NULL); NULL, NULL, NULL);
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
static struct st_mysql_sys_var* connect_system_variables[]= { static struct st_mysql_sys_var* connect_system_variables[]= {
@@ -7184,14 +7195,14 @@ static struct st_mysql_sys_var* connect_system_variables[]= {
#endif // XMSG #endif // XMSG
MYSQL_SYSVAR(json_null), MYSQL_SYSVAR(json_null),
MYSQL_SYSVAR(json_grp_size), MYSQL_SYSVAR(json_grp_size),
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
MYSQL_SYSVAR(jvm_path), MYSQL_SYSVAR(jvm_path),
MYSQL_SYSVAR(class_path), MYSQL_SYSVAR(class_path),
MYSQL_SYSVAR(java_wrapper), MYSQL_SYSVAR(java_wrapper),
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
#if defined(MONGO_SUPPORT) #if defined(JAVA_SUPPORT)
MYSQL_SYSVAR(enable_mongo), //MYSQL_SYSVAR(enable_mongo),
#endif // MONGO_SUPPORT #endif // JAVA_SUPPORT
NULL NULL
}; };
@@ -7208,7 +7219,7 @@ maria_declare_plugin(connect)
0x0106, /* version number (1.05) */ 0x0106, /* version number (1.05) */
NULL, /* status variables */ NULL, /* status variables */
connect_system_variables, /* system variables */ connect_system_variables, /* system variables */
"1.06.0004", /* string version */ "1.06.0005", /* string version */
MariaDB_PLUGIN_MATURITY_STABLE /* maturity */ MariaDB_PLUGIN_MATURITY_STABLE /* maturity */
} }
maria_declare_plugin_end; maria_declare_plugin_end;

View File

@@ -32,8 +32,6 @@
/****************************************************************************/ /****************************************************************************/
#include "mycat.h" #include "mycat.h"
static char *strz(PGLOBAL g, LEX_STRING &ls);
/****************************************************************************/ /****************************************************************************/
/* Structures used to pass info between CONNECT and ha_connect. */ /* Structures used to pass info between CONNECT and ha_connect. */
/****************************************************************************/ /****************************************************************************/
@@ -207,13 +205,13 @@ public:
bool IsOpened(void); bool IsOpened(void);
int CloseTable(PGLOBAL g); int CloseTable(PGLOBAL g);
int MakeRecord(char *buf); int MakeRecord(char *buf);
int ScanRecord(PGLOBAL g, uchar *buf); int ScanRecord(PGLOBAL g, const uchar *buf);
int CheckRecord(PGLOBAL g, const uchar *oldbuf, uchar *newbuf); int CheckRecord(PGLOBAL g, const uchar *oldbuf, const uchar *newbuf);
int ReadIndexed(uchar *buf, OPVAL op, const key_range *kr= NULL); int ReadIndexed(uchar *buf, OPVAL op, const key_range *kr= NULL);
bool IsIndexed(Field *fp); bool IsIndexed(Field *fp);
bool MakeKeyWhere(PGLOBAL g, PSTRG qry, OPVAL op, char q, bool MakeKeyWhere(PGLOBAL g, PSTRG qry, OPVAL op, char q,
const key_range *kr); const key_range *kr);
inline char *Strz(LEX_STRING &ls); //inline char *Strz(LEX_STRING &ls);
key_range start_key; key_range start_key;
@@ -231,7 +229,7 @@ public:
/** @brief /** @brief
The file extensions. 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 Check if a storage engine supports a particular alter table in-place

View File

@@ -17,7 +17,7 @@
/* Include relevant MariaDB header file. */ /* Include relevant MariaDB header file. */
/***********************************************************************/ /***********************************************************************/
#include <my_global.h> #include <my_global.h>
#include <m_string.h> //#include <m_string.h>
#if defined(__WIN__) #if defined(__WIN__)
#include <direct.h> // for getcwd #include <direct.h> // for getcwd
#if defined(__BORLANDC__) #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 *JvmPath; // The connect_jvm_path global variable value
extern char *ClassPath; // The connect_class_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 char *GetJavaWrapper(void); // The connect_java_wrapper variable value
/***********************************************************************/ /***********************************************************************/

View File

@@ -54,12 +54,12 @@ typedef jint(JNICALL *GETJVM) (JavaVM **, jsize, jsize *);
typedef jint(JNICALL *GETDEF) (void *); typedef jint(JNICALL *GETDEF) (void *);
#endif // _DEBUG #endif // _DEBUG
class JAVAConn; //class JAVAConn;
/***********************************************************************/ /***********************************************************************/
/* JAVAConn class. */ /* JAVAConn class. */
/***********************************************************************/ /***********************************************************************/
class JAVAConn : public BLOCK { class DllExport JAVAConn : public BLOCK {
friend class TDBJMG; friend class TDBJMG;
friend class JMGDISC; friend class JMGDISC;
private: private:

View File

@@ -654,7 +654,7 @@ bool JDBConn::Connect(PJPARM sop)
if (gmID(g, typid, "ColumnType", "(ILjava/lang/String;)I")) if (gmID(g, typid, "ColumnType", "(ILjava/lang/String;)I"))
return true; return true;
else else
m_Opened = true; m_Connected = true;
return false; return false;
} // end of Connect } // end of Connect

View File

@@ -25,6 +25,7 @@
#define nullptr 0 #define nullptr 0
bool IsNum(PSZ s); bool IsNum(PSZ s);
bool MakeSelector(PGLOBAL g, PFIL fp, PSTRG s);
/* --------------------------- Class JNCOL --------------------------- */ /* --------------------------- Class JNCOL --------------------------- */
@@ -123,12 +124,13 @@ void JMgoConn::AddJars(PSTRG jpop, char sep)
#if defined(DEVELOPMENT) #if defined(DEVELOPMENT)
if (m_Version == 2) { if (m_Version == 2) {
jpop->Append(sep); jpop->Append(sep);
jpop->Append("C:/Eclipse/workspace/MongoWrap2/bin"); // jpop->Append("C:/Eclipse/workspace/MongoWrap2/bin");
jpop->Append(sep); jpop->Append(sep);
jpop->Append("C:/mongo-java-driver/mongo-java-driver-2.13.3.jar"); jpop->Append("C:/mongo-java-driver/mongo-java-driver-2.13.3.jar");
} else { } else {
jpop->Append(sep); 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(sep);
jpop->Append("C:/mongo-java-driver/mongo-java-driver-3.4.2.jar"); jpop->Append("C:/mongo-java-driver/mongo-java-driver-3.4.2.jar");
} // endif m_Version } // endif m_Version
@@ -238,6 +240,7 @@ bool JMgoConn::MakeCursor(PGLOBAL g, PTDB tdbp, PCSZ options,
PSZ jp; PSZ jp;
PCSZ op = NULL, sf = NULL, Options = options; PCSZ op = NULL, sf = NULL, Options = options;
PSTRG s = NULL; PSTRG s = NULL;
PFIL filp = tdbp->GetFilter();
if (Options && !stricmp(Options, "all")) { if (Options && !stricmp(Options, "all")) {
Options = NULL; Options = NULL;
@@ -264,10 +267,10 @@ bool JMgoConn::MakeCursor(PGLOBAL g, PTDB tdbp, PCSZ options,
s = new(g) STRING(g, 1023, (PSZ)Options); s = new(g) STRING(g, 1023, (PSZ)Options);
if (tdbp->GetFilter()) { if (filp) {
s->Append(",{\"$match\":"); s->Append(",{\"$match\":");
if (tdbp->GetFilter()->MakeSelector(g, s)) { if (MakeSelector(g, filp, s)) {
strcpy(g->Message, "Failed making selector"); strcpy(g->Message, "Failed making selector");
return NULL; return NULL;
} else } else
@@ -314,15 +317,15 @@ bool JMgoConn::MakeCursor(PGLOBAL g, PTDB tdbp, PCSZ options,
return AggregateCollection(p); return AggregateCollection(p);
} else { } else {
if (filter || tdbp->GetFilter()) { if (filter || filp) {
if (trace) { if (trace) {
if (filter) if (filter)
htrc("Filter: %s\n", filter); htrc("Filter: %s\n", filter);
if (tdbp->GetFilter()) { if (filp) {
char buf[512]; char buf[512];
tdbp->GetFilter()->Prints(g, buf, 511); filp->Prints(g, buf, 511);
htrc("To_Filter: %s\n", buf); htrc("To_Filter: %s\n", buf);
} // endif To_Filter } // endif To_Filter
@@ -331,11 +334,11 @@ bool JMgoConn::MakeCursor(PGLOBAL g, PTDB tdbp, PCSZ options,
s = new(g) STRING(g, 1023, (PSZ)filter); s = new(g) STRING(g, 1023, (PSZ)filter);
len = s->GetLength(); len = s->GetLength();
if (tdbp->GetFilter()) { if (filp) {
if (filter) if (filter)
s->Append(','); s->Append(',');
if (tdbp->GetFilter()->MakeSelector(g, s)) { if (MakeSelector(g, filp, s)) {
strcpy(g->Message, "Failed making selector"); strcpy(g->Message, "Failed making selector");
return NULL; return NULL;
} // endif Selector } // endif Selector

View File

@@ -53,8 +53,8 @@ PSZ Serialize(PGLOBAL g, PJSON jsp, char *fn, int pretty);
bool SerializeArray(JOUT *js, PJAR jarp, bool b); bool SerializeArray(JOUT *js, PJAR jarp, bool b);
bool SerializeObject(JOUT *js, PJOB jobp); bool SerializeObject(JOUT *js, PJOB jobp);
bool SerializeValue(JOUT *js, PJVAL jvp); bool SerializeValue(JOUT *js, PJVAL jvp);
bool IsNum(PSZ s);
char *NextChr(PSZ s, char sep); char *NextChr(PSZ s, char sep);
DllExport bool IsNum(PSZ s);
/***********************************************************************/ /***********************************************************************/
/* Class JOUT. Used by Serialize. */ /* Class JOUT. Used by Serialize. */

View File

@@ -497,28 +497,23 @@ PVAL JSNX::ExpandArray(PGLOBAL g, PJAR arp, int n)
/*********************************************************************************/ /*********************************************************************************/
PVAL JSNX::CalculateArray(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, ars = arp->size(), nv = 0;
int i, nv = 0, nextsame = 0; bool err;
my_bool err;
OPVAL op = Nodes[n].Op; OPVAL op = Nodes[n].Op;
PVAL val[2], vp = Nodes[n].Valp; PVAL val[2], vp = Nodes[n].Valp;
PJVAL jvrp, jvp; PJVAL jvrp, jvp;
JVALUE jval; JVALUE jval;
vp->Reset(); vp->Reset();
//ars = arp->size();
if (trace) if (trace)
htrc("CalculateArray size=%d\n", arp->size()); htrc("CalculateArray size=%d op=%d\n", ars, op);
// htrc("CalculateArray size=%d\n", ars);
for (i = 0; i < arp->size(); i++) { for (i = 0; i < arp->size(); i++) {
//for (i = 0; i < ars; i++) { because compiler bug
jvrp = arp->GetValue(i); jvrp = arp->GetValue(i);
if (trace) if (trace)
htrc("Value %s null=%d nv=%d\n", htrc("i=%d nv=%d\n", i, nv);
jvrp->GetString(g), jvrp->IsNull() ? 1 : 0, nv);
if (!jvrp->IsNull() || (op == OP_CNC && GetJsonNull())) { if (!jvrp->IsNull() || (op == OP_CNC && GetJsonNull())) {
if (jvrp->IsNull()) { if (jvrp->IsNull()) {
@@ -530,6 +525,10 @@ PVAL JSNX::CalculateArray(PGLOBAL g, PJAR arp, int n)
} else } else
jvp = jvrp; jvp = jvrp;
if (trace)
htrc("jvp=%s null=%d\n",
jvp->GetString(g), jvp->IsNull() ? 1 : 0);
if (!nv++) { if (!nv++) {
SetJsonValue(g, vp, jvp, n); SetJsonValue(g, vp, jvp, n);
continue; continue;
@@ -562,6 +561,13 @@ PVAL JSNX::CalculateArray(PGLOBAL g, PJAR arp, int n)
if (err) if (err)
vp->Reset(); vp->Reset();
if (trace) {
char buf(32);
htrc("vp='%s' err=%d\n",
vp->GetCharString(&buf), err ? 1 : 0);
} // endif trace
} // endif Zero } // endif Zero
} // endif jvrp } // endif jvrp
@@ -579,7 +585,6 @@ PVAL JSNX::CalculateArray(PGLOBAL g, PJAR arp, int n)
} // endif Op } // endif Op
//Tjp->NextSame = nextsame;
return vp; return vp;
} // end of CalculateArray } // end of CalculateArray

View File

@@ -18,12 +18,13 @@
#include "plgdbsem.h" #include "plgdbsem.h"
#include "xtable.h" #include "xtable.h"
#include "tabext.h" #include "tabext.h"
#include "filter.h"
#if defined(CMGO_SUPPORT) #if defined(CMGO_SUPPORT)
#include "tabcmg.h" #include "tabcmg.h"
#endif // MONGO_SUPPORT #endif // CMGO_SUPPORT
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
#include "tabjmg.h" #include "tabjmg.h"
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
#include "resource.h" #include "resource.h"
/***********************************************************************/ /***********************************************************************/
@@ -32,8 +33,89 @@
#define MAXCOL 200 /* Default max column nb in result */ #define MAXCOL 200 /* Default max column nb in result */
#define TYPE_UNKNOWN 12 /* Must be greater than other types */ #define TYPE_UNKNOWN 12 /* Must be greater than other types */
bool MakeSelector(PGLOBAL g, PFIL fp, PSTRG s);
bool IsNum(PSZ 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 */ /* MGOColumns: construct the result blocks containing the description */
/* of all the columns of a document contained inside MongoDB. */ /* 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; int i, n = 0;
PCSZ drv; PCSZ drv;
PBCOL bcp; PBCOL bcp;
MGODISC *cmgd; MGODISC *cmgd = NULL;
PQRYRES qrp; PQRYRES qrp;
PCOLRES crp; PCOLRES crp;
@@ -72,7 +154,7 @@ PQRYRES MGOColumns(PGLOBAL g, PCSZ db, PCSZ uri, PTOS topt, bool info)
goto err; goto err;
#endif #endif
} else if (drv && toupper(*drv) == 'J') { } else if (drv && toupper(*drv) == 'J') {
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
cmgd = new(g) JMGDISC(g, (int*)length); cmgd = new(g) JMGDISC(g, (int*)length);
#else #else
sprintf(g->Message, "Mongo %s Driver not available", "Java"); sprintf(g->Message, "Mongo %s Driver not available", "Java");
@@ -142,7 +224,7 @@ skipit:
return qrp; return qrp;
err: err:
if (cmgd->tmgp) if (cmgd && cmgd->tmgp)
cmgd->tmgp->CloseDB(g); cmgd->tmgp->CloseDB(g);
return NULL; return NULL;
@@ -181,7 +263,7 @@ int MGODISC::GetColumns(PGLOBAL g, PCSZ db, PCSZ uri, PTOS topt)
/* Open the MongoDB collection. */ /* Open the MongoDB collection. */
/*********************************************************************/ /*********************************************************************/
tdp = new(g) MGODEF; tdp = new(g) MGODEF;
tdp->Uri = uri; tdp->Uri = (uri && *uri) ? uri : "mongodb://localhost:27017";
tdp->Driver = drv; tdp->Driver = drv;
tdp->Tabname = GetStringTableOption(g, topt, "Name", NULL); tdp->Tabname = GetStringTableOption(g, topt, "Name", NULL);
tdp->Tabname = GetStringTableOption(g, topt, "Tabname", tdp->Tabname); tdp->Tabname = GetStringTableOption(g, topt, "Tabname", tdp->Tabname);
@@ -346,7 +428,7 @@ PTDB MGODEF::GetTable(PGLOBAL g, MODE m)
return NULL; return NULL;
#endif #endif
} else if (Driver && toupper(*Driver) == 'J') { } else if (Driver && toupper(*Driver) == 'J') {
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
if (Catfunc == FNC_COL) if (Catfunc == FNC_COL)
return new(g) TDBJGL(this); return new(g) TDBJGL(this);
else else

View File

@@ -63,7 +63,7 @@ class DllExport MGODEF : public EXTDEF { /* Table description */
friend class TDBJGL; friend class TDBJGL;
friend class CMGFAM; friend class CMGFAM;
friend class MGODISC; friend class MGODISC;
friend PQRYRES MGOColumns(PGLOBAL, PCSZ, PCSZ, PTOS, bool); friend DllExport PQRYRES MGOColumns(PGLOBAL, PCSZ, PCSZ, PTOS, bool);
public: public:
// Constructor // Constructor
MGODEF(void); MGODEF(void);

View File

@@ -83,22 +83,20 @@
#define NODBC #define NODBC
#include "tabodbc.h" #include "tabodbc.h"
#endif // ODBC_SUPPORT #endif // ODBC_SUPPORT
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
#define NJDBC #define NJDBC
#include "tabjdbc.h" #include "tabjdbc.h"
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
#if defined(PIVOT_SUPPORT)
#include "tabpivot.h" #include "tabpivot.h"
#endif // PIVOT_SUPPORT
#include "tabvir.h" #include "tabvir.h"
#include "tabjson.h" #include "tabjson.h"
#include "ha_connect.h" #include "ha_connect.h"
#if defined(XML_SUPPORT) #if defined(XML_SUPPORT)
#include "tabxml.h" #include "tabxml.h"
#endif // XML_SUPPORT #endif // XML_SUPPORT
#if defined(MONGO_SUPPORT) #if defined(JAVA_SUPPORT)
#include "mongo.h" #include "mongo.h"
#endif // MONGO_SUPPORT #endif // JAVA_SUPPORT
#if defined(ZIP_SUPPORT) #if defined(ZIP_SUPPORT)
#include "tabzip.h" #include "tabzip.h"
#endif // ZIP_SUPPORT #endif // ZIP_SUPPORT
@@ -111,9 +109,9 @@
extern "C" HINSTANCE s_hModule; // Saved module handle extern "C" HINSTANCE s_hModule; // Saved module handle
#endif // !__WIN__ #endif // !__WIN__
#if defined(MONGO_SUPPORT) #if defined(JAVA_SUPPORT)
bool MongoEnabled(void); //bool MongoEnabled(void);
#endif // MONGO_SUPPORT #endif // JAVA_SUPPORT
PQRYRES OEMColumns(PGLOBAL g, PTOS topt, char *tab, char *db, bool info); 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) #if defined(ODBC_SUPPORT)
: (!stricmp(type, "ODBC")) ? TAB_ODBC : (!stricmp(type, "ODBC")) ? TAB_ODBC
#endif #endif
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
: (!stricmp(type, "JDBC")) ? TAB_JDBC : (!stricmp(type, "JDBC")) ? TAB_JDBC
: (!stricmp(type, "MONGO")) ? TAB_MONGO
#endif #endif
: (!stricmp(type, "MYSQL")) ? TAB_MYSQL : (!stricmp(type, "MYSQL")) ? TAB_MYSQL
: (!stricmp(type, "MYPRX")) ? TAB_MYSQL : (!stricmp(type, "MYPRX")) ? TAB_MYSQL
@@ -159,16 +158,11 @@ TABTYPE GetTypeID(const char *type)
: (!stricmp(type, "OCCUR")) ? TAB_OCCUR : (!stricmp(type, "OCCUR")) ? TAB_OCCUR
: (!stricmp(type, "CATLG")) ? TAB_PRX // Legacy : (!stricmp(type, "CATLG")) ? TAB_PRX // Legacy
: (!stricmp(type, "PROXY")) ? TAB_PRX : (!stricmp(type, "PROXY")) ? TAB_PRX
#if defined(PIVOT_SUPPORT)
: (!stricmp(type, "PIVOT")) ? TAB_PIVOT : (!stricmp(type, "PIVOT")) ? TAB_PIVOT
#endif
: (!stricmp(type, "VIR")) ? TAB_VIR : (!stricmp(type, "VIR")) ? TAB_VIR
: (!stricmp(type, "JSON")) ? TAB_JSON : (!stricmp(type, "JSON")) ? TAB_JSON
#if defined(ZIP_SUPPORT) #if defined(ZIP_SUPPORT)
: (!stricmp(type, "ZIP")) ? TAB_ZIP : (!stricmp(type, "ZIP")) ? TAB_ZIP
#endif
#if defined(MONGO_SUPPORT)
: (!stricmp(type, "MONGO")) ? TAB_MONGO
#endif #endif
: (!stricmp(type, "OEM")) ? TAB_OEM : TAB_NIY; : (!stricmp(type, "OEM")) ? TAB_OEM : TAB_NIY;
} // end of GetTypeID } // end of GetTypeID
@@ -542,9 +536,9 @@ PRELDEF MYCAT::MakeTableDesc(PGLOBAL g, PTABLE tablep, LPCSTR am)
#if defined(ODBC_SUPPORT) #if defined(ODBC_SUPPORT)
case TAB_ODBC: tdp= new(g) ODBCDEF; break; case TAB_ODBC: tdp= new(g) ODBCDEF; break;
#endif // ODBC_SUPPORT #endif // ODBC_SUPPORT
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
case TAB_JDBC: tdp= new(g) JDBCDEF; break; case TAB_JDBC: tdp= new(g) JDBCDEF; break;
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
#if defined(__WIN__) #if defined(__WIN__)
case TAB_MAC: tdp= new(g) MACDEF; break; case TAB_MAC: tdp= new(g) MACDEF; break;
case TAB_WMI: tdp= new(g) WMIDEF; 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_PRX: tdp= new(g) PRXDEF; break;
case TAB_OCCUR: tdp= new(g) OCCURDEF; break; case TAB_OCCUR: tdp= new(g) OCCURDEF; break;
case TAB_MYSQL: tdp= new(g) MYSQLDEF; break; case TAB_MYSQL: tdp= new(g) MYSQLDEF; break;
#if defined(PIVOT_SUPPORT)
case TAB_PIVOT: tdp= new(g) PIVOTDEF; break; case TAB_PIVOT: tdp= new(g) PIVOTDEF; break;
#endif // PIVOT_SUPPORT
case TAB_VIR: tdp= new(g) VIRDEF; break; case TAB_VIR: tdp= new(g) VIRDEF; break;
case TAB_JSON: tdp= new(g) JSONDEF; break; case TAB_JSON: tdp= new(g) JSONDEF; break;
#if defined(MONGO_SUPPORT) #if defined(MONGO_SUPPORT)
case TAB_MONGO: case TAB_MONGO:
if (MongoEnabled()) // if (MongoEnabled())
tdp = new(g) MGODEF; tdp = new(g) MGODEF;
else // else
strcpy(g->Message, "MONGO type not enabled"); // strcpy(g->Message, "MONGO type not enabled");
break; break;
#endif // MONGO_SUPPORT #endif // MONGO_SUPPORT

View File

@@ -1,5 +1,4 @@
SET GLOBAL connect_class_path='C:/MariaDB-10.0/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo2.jar'; SET GLOBAL connect_class_path='C:/MariaDB-10.1/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo2.jar';
set connect_enable_mongo=1;
# #
# Test the MONGO table type # 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', loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1',
pop int(11) NOT NULL, pop int(11) NOT NULL,
state char(2) 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'; OPTION_LIST='Driver=Java,Version=2' CONNECTION='mongodb://localhost:27017' LRECL=4096 DATA_CHARSET='utf8';
# Using SQL for grouping # Using SQL for grouping
SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; 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 postcard 23 5.75
DROP TABLE t1; DROP TABLE t1;
true true
set connect_enable_mongo=0;

View File

@@ -1,5 +1,4 @@
SET GLOBAL connect_class_path='C:/MariaDB-10.0/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo3.jar'; SET GLOBAL connect_class_path='C:/MariaDB-10.1/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo3.jar';
set connect_enable_mongo=1;
# #
# Test the MONGO table type # 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', loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1',
pop int(11) NOT NULL, pop int(11) NOT NULL,
state char(2) 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'; OPTION_LIST='Driver=Java,Version=3' CONNECTION='mongodb://localhost:27017' LRECL=4096 DATA_CHARSET='utf8';
# Using SQL for grouping # Using SQL for grouping
SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; 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 postcard 23 5.75
DROP TABLE t1; DROP TABLE t1;
true true
set connect_enable_mongo=0;

View File

@@ -1,4 +1,3 @@
set connect_enable_mongo=1;
# #
# Test the MONGO table type # 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', loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1',
pop int(11) NOT NULL, pop int(11) NOT NULL,
state char(2) 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'; OPTION_LIST='Driver=C,Version=0' CONNECTION='mongodb://localhost:27017' LRECL=1024 DATA_CHARSET='utf8';
# Using SQL for grouping # Using SQL for grouping
SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; 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 postcard 23 5.75
DROP TABLE t1; DROP TABLE t1;
true true
set connect_enable_mongo=0;

View File

@@ -1,4 +1,3 @@
set connect_enable_mongo=1;
# #
# Test the MONGO table type # 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', loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1',
pop int(11) NOT NULL, pop int(11) NOT NULL,
state char(2) 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'; OPTION_LIST='Driver=C,Version=0' DATA_CHARSET='utf8';
# Using SQL for grouping # Using SQL for grouping
SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; 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 postcard 23 5.750000
DROP TABLE t1; DROP TABLE t1;
true true
set connect_enable_mongo=0;

View File

@@ -1,5 +1,4 @@
SET GLOBAL connect_class_path='C:/MariaDB-10.0/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo2.jar'; SET GLOBAL connect_class_path='C:/MariaDB-10.1/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo2.jar';
set connect_enable_mongo=1;
# #
# Test the MONGO table type # 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', loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1',
pop int(11) NOT NULL, pop int(11) NOT NULL,
state char(2) 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'; OPTION_LIST='Driver=Java,Version=2' DATA_CHARSET='utf8';
# Using SQL for grouping # Using SQL for grouping
SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; 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 postcard 23 5.75
DROP TABLE t1; DROP TABLE t1;
true true
set connect_enable_mongo=0;

View File

@@ -1,5 +1,4 @@
SET GLOBAL connect_class_path='C:/MariaDB-10.0/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo3.jar'; SET GLOBAL connect_class_path='C:/MariaDB-10.1/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo3.jar';
set connect_enable_mongo=1;
# #
# Test the MONGO table type # 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', loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1',
pop int(11) NOT NULL, pop int(11) NOT NULL,
state char(2) 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'; OPTION_LIST='Driver=Java,Version=3' DATA_CHARSET='utf8';
# Using SQL for grouping # Using SQL for grouping
SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; 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 postcard 23 5.75
DROP TABLE t1; DROP TABLE t1;
true true
set connect_enable_mongo=0;

View File

@@ -9,29 +9,13 @@ t1 CREATE TABLE `t1` (
) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`='ODBC' `CATFUNC`='Sources' ) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`='ODBC' `CATFUNC`='Sources'
SELECT * FROM t1; SELECT * FROM t1;
Name Description 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) 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 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 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 ConnectEngineOracle Oracle in XE
ConnectEngineSQLServer SQL Server ConnectEngineSQLServer SQL Server Native Client 11.0
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CATFUNC=Drivers; CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CATFUNC=Drivers;
SHOW CREATE TABLE t1; SHOW CREATE TABLE t1;
@@ -42,51 +26,12 @@ t1 CREATE TABLE `t1` (
) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`='ODBC' `CATFUNC`='Drivers' ) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`='ODBC' `CATFUNC`='Drivers'
SELECT * FROM t1; SELECT * FROM t1;
Description Attributes Description Attributes
SQL Server UsageCount=1;SQLLevel=1;FileUsage=0;DriverODBCVer=03.50;ConnectFunctions=YYY;APILevel=2;CPTimeout=60; SQL Server APILevel=2;ConnectFunctions=YYY;CPTimeout=60;DriverODBCVer=03.50;FileUsage=0;SQLLevel=1;UsageCount=1;
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;
Oracle in XE ConnectionFunctions=YYY;DriverODBCVer=03.51;CPTimeout=60;FileUsage=0;APILevel=1;SQLLevel=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; 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; 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; DROP TABLE t1;
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CATFUNC=Tables CONNECTION='Not important'; CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CATFUNC=Tables CONNECTION='Not important';
SHOW CREATE TABLE t1; 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 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 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 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 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 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. 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 141 Pierre Osborne NULL 1994-01-03 00:00:00 121 SRep 4 Switzerland 110000.00 Osborne, Pierre

View File

@@ -1,4 +1,4 @@
set connect_enable_mongo=1; #set connect_enable_mongo=1;
--echo # --echo #
--echo # Test the MONGO table type --echo # Test the MONGO table type
@@ -156,7 +156,7 @@ eval CREATE TABLE t1 (
loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1', loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1',
pop int(11) NOT NULL, pop int(11) NOT NULL,
state char(2) 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'; OPTION_LIST='Driver=$DRV,Version=$VERS' $CONN DATA_CHARSET='utf8';
--echo # Using SQL for grouping --echo # Using SQL for grouping
SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; 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; DROP TABLE t1;
--exec $MONGO --eval "db.testcoll.drop()" --quiet --exec $MONGO --eval "db.testcoll.drop()" --quiet
set connect_enable_mongo=0; #set connect_enable_mongo=0;

View File

@@ -38,6 +38,7 @@
/* Include relevant MariaDB header file. */ /* Include relevant MariaDB header file. */
/***********************************************************************/ /***********************************************************************/
#include "my_global.h" #include "my_global.h"
#include "my_pthread.h"
#if defined(__WIN__) #if defined(__WIN__)
#include <io.h> #include <io.h>
#include <fcntl.h> #include <fcntl.h>
@@ -71,12 +72,12 @@
#ifdef ZIP_SUPPORT #ifdef ZIP_SUPPORT
#include "filamzip.h" #include "filamzip.h"
#endif // ZIP_SUPPORT #endif // ZIP_SUPPORT
#ifdef JDBC_SUPPORT #ifdef JAVA_SUPPORT
#include "javaconn.h" #include "javaconn.h"
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
#ifdef CMGO_SUPPORT #ifdef CMGO_SUPPORT
#include "cmgoconn.h" #include "cmgoconn.h"
#endif // MONGO_SUPPORT #endif // JAVA_SUPPORT
/***********************************************************************/ /***********************************************************************/
/* DB static variables. */ /* DB static variables. */
@@ -952,20 +953,20 @@ int PlugCloseFile(PGLOBAL g, PFBLOCK fp, bool all)
fp->File = NULL; fp->File = NULL;
break; break;
#endif // ZIP_SUPPORT #endif // ZIP_SUPPORT
#ifdef JDBC_SUPPORT #ifdef JAVA_SUPPORT
case TYPE_FB_JAVA: case TYPE_FB_JAVA:
((JAVAConn*)fp->File)->Close(); ((JAVAConn*)fp->File)->Close();
fp->Count = 0; fp->Count = 0;
fp->File = NULL; fp->File = NULL;
break; break;
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
#ifdef CMGO_SUPPORT #ifdef CMGO_SUPPORT
case TYPE_FB_MONGO: case TYPE_FB_MONGO:
((CMgoConn*)fp->File)->Close(); ((CMgoConn*)fp->File)->Close();
fp->Count = 0; fp->Count = 0;
fp->File = NULL; fp->File = NULL;
break; break;
#endif // MONGO_SUPPORT #endif // JAVA_SUPPORT
default: default:
rc = RC_FX; rc = RC_FX;
} // endswitch Type } // endswitch Type

View File

@@ -8,7 +8,7 @@
/***********************************************************************/ /***********************************************************************/
typedef struct _datpar { typedef struct _datpar {
const char *Format; // Points to format to decode 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 *InFmt; // Start of input format
char *OutFmt; // Start of output format char *OutFmt; // Start of output format
int Index[8]; // Indexes of date values int Index[8]; // Indexes of date values

View File

@@ -11,7 +11,7 @@
#include "block.h" #include "block.h"
#include "catalog.h" #include "catalog.h"
#include "my_sys.h" //#include "my_sys.h"
#include "mycat.h" #include "mycat.h"
typedef class INDEXDEF *PIXDEF; typedef class INDEXDEF *PIXDEF;

View File

@@ -76,6 +76,7 @@ bool JMGDISC::ColDesc(PGLOBAL g, jobject obj, char *pcn, char *pfmt,
char colname[65]; char colname[65];
char fmt[129]; char fmt[129];
bool rc = true; bool rc = true;
size_t z;
jint *n = nullptr; jint *n = nullptr;
jstring jkey; jstring jkey;
jobject jres; jobject jres;
@@ -105,14 +106,16 @@ bool JMGDISC::ColDesc(PGLOBAL g, jobject obj, char *pcn, char *pfmt,
if (pcn) { if (pcn) {
strncpy(colname, pcn, 64); strncpy(colname, pcn, 64);
colname[64] = 0; colname[64] = 0;
strncat(strncat(colname, "_", 65), key, 65); z = 65 - strlen(colname);
strncat(strncat(colname, "_", z), key, z - 1);
} else } else
strcpy(colname, key); strcpy(colname, key);
if (pfmt) { if (pfmt) {
strncpy(fmt, pfmt, 128); strncpy(fmt, pfmt, 128);
fmt[128] = 0; fmt[128] = 0;
strncat(strncat(fmt, ".", 129), key, 129); z = 129 - strlen(fmt);
strncat(strncat(fmt, ".", z), key, z - 1);
} else } else
strcpy(fmt, key); strcpy(fmt, key);
@@ -178,7 +181,7 @@ TDBJMG::TDBJMG(PMGODEF tdp) : TDBEXT(tdp)
Ops.User = NULL; Ops.User = NULL;
Ops.Pwd = NULL; Ops.Pwd = NULL;
Ops.Scrollable = false; Ops.Scrollable = false;
Ops.Fsize = Ops.CheckSize(Rows); Ops.Fsize = 0;
Fpos = -1; Fpos = -1;
N = 0; N = 0;
Done = false; Done = false;

View File

@@ -31,14 +31,12 @@
#if defined(ZIP_SUPPORT) #if defined(ZIP_SUPPORT)
#include "filamzip.h" #include "filamzip.h"
#endif // ZIP_SUPPORT #endif // ZIP_SUPPORT
#if defined(MONGO_SUPPORT) #if defined(JAVA_SUPPORT)
#if defined(JDBC_SUPPORT)
#include "jmgfam.h" #include "jmgfam.h"
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
#if defined(CMGO_SUPPORT) #if defined(CMGO_SUPPORT)
#include "cmgfam.h" #include "cmgfam.h"
#endif // CMGO_SUPPORT #endif // CMGO_SUPPORT
#endif // MONGO_SUPPORT
#include "tabmul.h" #include "tabmul.h"
#include "checklvl.h" #include "checklvl.h"
#include "resource.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); tdp->Fn, tdp->Objname, tdp->Pretty, lvl);
if (tdp->Uri) { 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, "Name", NULL);
tdp->Collname = GetStringTableOption(g, topt, "Tabname", tdp->Collname); tdp->Collname = GetStringTableOption(g, topt, "Tabname", tdp->Collname);
tdp->Schema = GetStringTableOption(g, topt, "Dbname", "test"); 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->Pipe = GetBooleanTableOption(g, topt, "Pipeline", false);
tdp->Driver = (PSZ)GetStringTableOption(g, topt, "Driver", NULL); tdp->Driver = (PSZ)GetStringTableOption(g, topt, "Driver", NULL);
tdp->Version = GetIntegerTableOption(g, topt, "Version", 3); tdp->Version = GetIntegerTableOption(g, topt, "Version", 3);
#if defined(JDBC_SUPPORT)
tdp->Wrapname = (PSZ)GetStringTableOption(g, topt, "Wrapper", tdp->Wrapname = (PSZ)GetStringTableOption(g, topt, "Wrapper",
(tdp->Version == 2) ? "Mongo2Interface" : "Mongo3Interface"); (tdp->Version == 2) ? "Mongo2Interface" : "Mongo3Interface");
#endif // JDBC_SUPPORT
tdp->Pretty = 0; tdp->Pretty = 0;
#else // !MONGO_SUPPORT #else // !MONGO_SUPPORT
sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "MONGO"); 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; return NULL;
#endif // !ZIP_SUPPORT #endif // !ZIP_SUPPORT
} else if (tdp->Uri) { } else if (tdp->Uri) {
#if defined(MONGO_SUPPORT)
if (tdp->Driver && toupper(*tdp->Driver) == 'C') { if (tdp->Driver && toupper(*tdp->Driver) == 'C') {
#if defined(CMGO_SUPPORT) #if defined(CMGO_SUPPORT)
tjnp = new(g) TDBJSN(tdp, new(g) CMGFAM(tdp)); 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; return NULL;
#endif #endif
} else if (tdp->Driver && toupper(*tdp->Driver) == 'J') { } 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)); tjnp = new(g) TDBJSN(tdp, new(g) JMGFAM(tdp));
#else #else
sprintf(g->Message, "Mongo %s Driver not available", "Java"); 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 } else { // Driver not specified
#if defined(CMGO_SUPPORT) #if defined(CMGO_SUPPORT)
tjnp = new(g) TDBJSN(tdp, new(g) CMGFAM(tdp)); tjnp = new(g) TDBJSN(tdp, new(g) CMGFAM(tdp));
#else #elif defined(JAVA_SUPPORT)
tjnp = new(g) TDBJSN(tdp, new(g) JMGFAM(tdp)); tjnp = new(g) TDBJSN(tdp, new(g) JMGFAM(tdp));
#endif
} // endif Driver
#else #else
sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "MONGO"); sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "MONGO");
return NULL; return NULL;
#endif // MONGO_SUPPORT #endif
} // endif Driver
} else } else
tjnp = new(g) TDBJSN(tdp, new(g) DOSFAM(tdp)); tjnp = new(g) TDBJSN(tdp, new(g) DOSFAM(tdp));
@@ -497,16 +492,12 @@ JSONDEF::JSONDEF(void)
Base = 0; Base = 0;
Strict = false; Strict = false;
Sep = '.'; Sep = '.';
#if defined(MONGO_SUPPORT)
Uri = NULL; Uri = NULL;
Collname = Options = Filter = NULL; Collname = Options = Filter = NULL;
Pipe = false; Pipe = false;
Driver = NULL; Driver = NULL;
Version = 0; Version = 0;
#if defined(JDBC_SUPPORT)
Wrapname = NULL; Wrapname = NULL;
#endif // JDBC_SUPPORT
#endif // MONGO_SUPPORT
} // end of JSONDEF constructor } // end of JSONDEF constructor
/***********************************************************************/ /***********************************************************************/
@@ -524,7 +515,7 @@ bool JSONDEF::DefineAM(PGLOBAL g, LPCSTR, int poff)
Sep = *GetStringCatInfo(g, "Separator", "."); Sep = *GetStringCatInfo(g, "Separator", ".");
if (Uri = GetStringCatInfo(g, "Connect", NULL)) { if (Uri = GetStringCatInfo(g, "Connect", NULL)) {
#if defined(MONGO_SUPPORT) #if defined(JAVA_SUPPORT) || defined(CMGO_SUPPORT)
Collname = GetStringCatInfo(g, "Name", Collname = GetStringCatInfo(g, "Name",
(Catfunc & (FNC_TABLE | FNC_COL)) ? NULL : Name); (Catfunc & (FNC_TABLE | FNC_COL)) ? NULL : Name);
Collname = GetStringCatInfo(g, "Tabname", Collname); Collname = GetStringCatInfo(g, "Tabname", Collname);
@@ -534,12 +525,12 @@ bool JSONDEF::DefineAM(PGLOBAL g, LPCSTR, int poff)
Driver = GetStringCatInfo(g, "Driver", NULL); Driver = GetStringCatInfo(g, "Driver", NULL);
Version = GetIntCatInfo("Version", 3); Version = GetIntCatInfo("Version", 3);
Pretty = 0; Pretty = 0;
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
if (Version == 2) if (Version == 2)
Wrapname = GetStringCatInfo(g, "Wrapper", "Mongo2Interface"); Wrapname = GetStringCatInfo(g, "Wrapper", "Mongo2Interface");
else else
Wrapname = GetStringCatInfo(g, "Wrapper", "Mongo3Interface"); Wrapname = GetStringCatInfo(g, "Wrapper", "Mongo3Interface");
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
#else // !MONGO_SUPPORT #else // !MONGO_SUPPORT
sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "MONGO"); sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "MONGO");
return true; return true;
@@ -569,7 +560,6 @@ PTDB JSONDEF::GetTable(PGLOBAL g, MODE m)
(m == MODE_UPDATE || m == MODE_DELETE)); (m == MODE_UPDATE || m == MODE_DELETE));
if (Uri) { if (Uri) {
#if defined(MONGO_SUPPORT)
if (Driver && toupper(*Driver) == 'C') { if (Driver && toupper(*Driver) == 'C') {
#if defined(CMGO_SUPPORT) #if defined(CMGO_SUPPORT)
txfp = new(g) CMGFAM(this); txfp = new(g) CMGFAM(this);
@@ -578,7 +568,7 @@ PTDB JSONDEF::GetTable(PGLOBAL g, MODE m)
return NULL; return NULL;
#endif #endif
} else if (Driver && toupper(*Driver) == 'J') { } else if (Driver && toupper(*Driver) == 'J') {
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
txfp = new(g) JMGFAM(this); txfp = new(g) JMGFAM(this);
#else #else
sprintf(g->Message, "Mongo %s Driver not available", "Java"); sprintf(g->Message, "Mongo %s Driver not available", "Java");
@@ -587,14 +577,14 @@ PTDB JSONDEF::GetTable(PGLOBAL g, MODE m)
} else { // Driver not specified } else { // Driver not specified
#if defined(CMGO_SUPPORT) #if defined(CMGO_SUPPORT)
txfp = new(g) CMGFAM(this); txfp = new(g) CMGFAM(this);
#else #elif defined(JAVA_SUPPORT)
txfp = new(g) JMGFAM(this); txfp = new(g) JMGFAM(this);
#endif #else // !MONGO_SUPPORT
} // endif Driver
#else
sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "MONGO"); sprintf(g->Message, MSG(NO_FEAT_SUPPORT), "MONGO");
return NULL; return NULL;
#endif // MONGO_SUPPORT #endif // !MONGO_SUPPORT
} // endif Driver
} else if (Zipped) { } else if (Zipped) {
#if defined(ZIP_SUPPORT) #if defined(ZIP_SUPPORT)
if (m == MODE_READ || m == MODE_ANY || m == MODE_ALTER) { 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) PVAL JSONCOL::CalculateArray(PGLOBAL g, PJAR arp, int n)
{ {
//int i, ars, nv = 0, nextsame = Tjp->NextSame; int i, ars, nv = 0, nextsame = Tjp->NextSame;
int i, nv = 0, nextsame = Tjp->NextSame;
bool err; bool err;
OPVAL op = Nodes[n].Op; OPVAL op = Nodes[n].Op;
PVAL val[2], vp = Nodes[n].Valp; PVAL val[2], vp = Nodes[n].Valp;
@@ -1600,12 +1589,18 @@ PVAL JSONCOL::CalculateArray(PGLOBAL g, PJAR arp, int n)
JVALUE jval; JVALUE jval;
vp->Reset(); vp->Reset();
//ars = MY_MIN(Tjp->Limit, arp->size()); ars = MY_MIN(Tjp->Limit, arp->size());
//for (i = 0; i < ars; i++) { if (trace)
for (i = 0; i < arp->size(); i++) { htrc("CalculateArray: size=%d op=%d nextsame=%d\n",
ars, op, nextsame);
for (i = 0; i < ars; i++) {
jvrp = arp->GetValue(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() || (op == OP_CNC && GetJsonNull())) do {
if (jvrp->IsNull()) { if (jvrp->IsNull()) {
jvrp->Value = AllocateValue(g, GetJsonNull(), TYPE_STRING); jvrp->Value = AllocateValue(g, GetJsonNull(), TYPE_STRING);
@@ -1617,13 +1612,16 @@ PVAL JSONCOL::CalculateArray(PGLOBAL g, PJAR arp, int n)
} else } else
jvp = jvrp; jvp = jvrp;
if (trace)
htrc("jvp=%s null=%d\n",
jvp->GetString(g), jvp->IsNull() ? 1 : 0);
if (!nv++) { if (!nv++) {
SetJsonValue(g, vp, jvp, n); SetJsonValue(g, vp, jvp, n);
continue; continue;
} else } else
SetJsonValue(g, MulVal, jvp, n); SetJsonValue(g, MulVal, jvp, n);
// if (!MulVal->IsZero()) {
if (!MulVal->IsNull()) { if (!MulVal->IsNull()) {
switch (op) { switch (op) {
case OP_CNC: case OP_CNC:
@@ -1650,6 +1648,14 @@ PVAL JSONCOL::CalculateArray(PGLOBAL g, PJAR arp, int n)
if (err) if (err)
vp->Reset(); vp->Reset();
if (trace) {
char buf(32);
htrc("vp='%s' err=%d\n",
vp->GetCharString(&buf), err ? 1 : 0);
} // endif trace
} // endif Null } // endif Null
} while (Tjp->NextSame > nextsame); } while (Tjp->NextSame > nextsame);

View File

@@ -36,14 +36,12 @@ class DllExport JSONDEF : public DOSDEF { /* Table description */
friend class TDBJSON; friend class TDBJSON;
friend class TDBJSN; friend class TDBJSN;
friend class TDBJCL; friend class TDBJCL;
#if defined(MONGO_SUPPORT)
#if defined(CMGO_SUPPORT) #if defined(CMGO_SUPPORT)
friend class CMGFAM; friend class CMGFAM;
#endif // CMGO_SUPPORT #endif // CMGO_SUPPORT
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
friend class JMGFAM; friend class JMGFAM;
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
#endif // MONGO_SUPPORT
friend PQRYRES JSONColumns(PGLOBAL, PCSZ, PCSZ, PTOS, bool); friend PQRYRES JSONColumns(PGLOBAL, PCSZ, PCSZ, PTOS, bool);
public: public:
// Constructor // Constructor
@@ -68,17 +66,13 @@ public:
bool Strict; /* Strict syntax checking */ bool Strict; /* Strict syntax checking */
char Sep; /* The Jpath separator */ char Sep; /* The Jpath separator */
const char *Uri; /* MongoDB connection URI */ const char *Uri; /* MongoDB connection URI */
#if defined(MONGO_SUPPORT)
PCSZ Collname; /* External collection name */ PCSZ Collname; /* External collection name */
PSZ Options; /* Colist ; Pipe */ PSZ Options; /* Colist ; Pipe */
PSZ Filter; /* Filter */ PSZ Filter; /* Filter */
PSZ Driver; /* MongoDB Driver (C or JAVA) */ PSZ Driver; /* MongoDB Driver (C or JAVA) */
bool Pipe; /* True if Colist is a pipeline */ bool Pipe; /* True if Colist is a pipeline */
int Version; /* Driver version */ int Version; /* Driver version */
#if defined(JDBC_SUPPORT)
PSZ Wrapname; /* MongoDB java wrapper name */ PSZ Wrapname; /* MongoDB java wrapper name */
#endif // JDBC_SUPPORT
#endif // MONGO_SUPPORT
}; // end of JSONDEF }; // end of JSONDEF
/* -------------------------- TDBJSN class --------------------------- */ /* -------------------------- TDBJSN class --------------------------- */
@@ -90,14 +84,12 @@ public:
class DllExport TDBJSN : public TDBDOS { class DllExport TDBJSN : public TDBDOS {
friend class JSONCOL; friend class JSONCOL;
friend class JSONDEF; friend class JSONDEF;
#if defined(MONGO_SUPPORT)
#if defined(CMGO_SUPPORT) #if defined(CMGO_SUPPORT)
friend class CMGFAM; friend class CMGFAM;
#endif // CMGO_SUPPORT #endif // CMGO_SUPPORT
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
friend class JMGFAM; friend class JMGFAM;
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
#endif // MONGO_SUPPORT
public: public:
// Constructor // Constructor
TDBJSN(PJDEF tdp, PTXF txfp); TDBJSN(PJDEF tdp, PTXF txfp);
@@ -162,14 +154,12 @@ public:
class DllExport JSONCOL : public DOSCOL { class DllExport JSONCOL : public DOSCOL {
friend class TDBJSN; friend class TDBJSN;
friend class TDBJSON; friend class TDBJSON;
#if defined(MONGO_SUPPORT)
#if defined(CMGO_SUPPORT) #if defined(CMGO_SUPPORT)
friend class CMGFAM; friend class CMGFAM;
#endif // CMGO_SUPPORT #endif // CMGO_SUPPORT
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
friend class JMGFAM; friend class JMGFAM;
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
#endif // MONGO_SUPPORT
public: public:
// Constructors // Constructors
JSONCOL(PGLOBAL g, PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i); JSONCOL(PGLOBAL g, PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i);

View File

@@ -650,7 +650,7 @@ bool TDBTBM::IsLocal(PTABLE tbp)
return ((!stricmp(tdbp->Host, "localhost") || return ((!stricmp(tdbp->Host, "localhost") ||
!strcmp(tdbp->Host, "127.0.0.1")) && !strcmp(tdbp->Host, "127.0.0.1")) &&
tdbp->Port == GetDefaultPort()); tdbp->Port == (int)GetDefaultPort());
} // end of IsLocal } // end of IsLocal
/***********************************************************************/ /***********************************************************************/

View File

@@ -120,7 +120,7 @@ PQRYRES TabColumns(PGLOBAL g, THD *thd, const char *db,
FLD_REM, FLD_NO, FLD_CHARSET}; FLD_REM, FLD_NO, FLD_CHARSET};
unsigned int length[] = {0, 4, 16, 4, 4, 4, 4, 4, 0, 32, 32}; unsigned int length[] = {0, 4, 16, 4, 4, 4, 4, 4, 0, 32, 32};
PCSZ fmt; 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 i, n, ncol = sizeof(buftyp) / sizeof(int);
int prec, len, type, scale; int prec, len, type, scale;
int zconv = GetConvSize(); int zconv = GetConvSize();

View File

@@ -53,6 +53,8 @@ class DllExport XMLDEF : public TABDEF { /* Logical table description */
}; // end of XMLDEF }; // end of XMLDEF
#if defined(INCLUDE_TDBXML) #if defined(INCLUDE_TDBXML)
#include "m_ctype.h"
/***********************************************************************/ /***********************************************************************/
/* This is the class declaration for the simple XML tables. */ /* This is the class declaration for the simple XML tables. */
/***********************************************************************/ /***********************************************************************/

View File

@@ -40,7 +40,7 @@ class MBVALS : public BLOCK {
// Methods // Methods
void *GetMemp(void) {return Mblk.Memp;} void *GetMemp(void) {return Mblk.Memp;}
PVBLK Allocate(PGLOBAL g, int type, int len, int prec, 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); bool ReAllocate(PGLOBAL g, int n);
void Free(void); void Free(void);

View File

@@ -1656,10 +1656,19 @@ bool TYPVAL<PSZ>::Compute(PGLOBAL g, PVAL *vp, int np, OPVAL op)
char *p[2], val[2][32]; char *p[2], val[2][32];
int i; int i;
for (i = 0; i < np; i++) if (trace)
p[i] = vp[i]->IsNull() ? NULL : vp[i]->GetCharString(val[i]); htrc("Compute: np=%d op=%d\n", np, op);
for (i = 0; i < np; i++)
if (!vp[i]->IsNull()) {
p[i] = vp[i]->GetCharString(val[i]);
if (trace)
htrc("p[%d]=%s\n", i, p[i]);
} else
return false;
if (p[i]) {
switch (op) { switch (op) {
case OP_CNC: case OP_CNC:
assert(np == 1 || np == 2); assert(np == 1 || np == 2);
@@ -1670,6 +1679,9 @@ bool TYPVAL<PSZ>::Compute(PGLOBAL g, PVAL *vp, int np, OPVAL op)
if ((i = Len - (signed)strlen(Strp)) > 0) if ((i = Len - (signed)strlen(Strp)) > 0)
strncat(Strp, p[np - 1], i); strncat(Strp, p[np - 1], i);
if (trace)
htrc("Strp=%s\n", Strp);
break; break;
case OP_MIN: case OP_MIN:
assert(np == 2); assert(np == 2);
@@ -1686,8 +1698,6 @@ bool TYPVAL<PSZ>::Compute(PGLOBAL g, PVAL *vp, int np, OPVAL op)
} // endswitch op } // endswitch op
Null = false; Null = false;
} // endif p[i]
return false; return false;
} // end of Compute } // end of Compute

View File

@@ -102,7 +102,7 @@ class DllExport VALUE : public BLOCK {
virtual bool SetValue_pval(PVAL valp, bool chktype = false) = 0; virtual bool SetValue_pval(PVAL valp, bool chktype = false) = 0;
virtual bool SetValue_char(const char *p, int n) = 0; virtual bool SetValue_char(const char *p, int n) = 0;
virtual void SetValue_psz(PCSZ s) = 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 int CompareValue(PVAL vp) = 0;
virtual BYTE TestValue(PVAL vp); virtual BYTE TestValue(PVAL vp);
virtual void SetValue(char) {assert(false);} virtual void SetValue(char) {assert(false);}

View File

@@ -16,7 +16,7 @@
#include "assert.h" #include "assert.h"
#include "block.h" #include "block.h"
#include "colblk.h" #include "colblk.h"
#include "m_ctype.h" //#include "m_ctype.h"
#include "reldef.h" #include "reldef.h"
typedef class CMD *PCMD; typedef class CMD *PCMD;

View File

@@ -2052,7 +2052,7 @@ btr_page_reorganize_low(
"InnoDB: Error: page old max ins size %lu" "InnoDB: Error: page old max ins size %lu"
" new max ins size %lu\n" " new max ins size %lu\n"
"InnoDB: Submit a detailed bug report" "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) data_size1, (unsigned long) data_size2,
(unsigned long) max_ins_size1, (unsigned long) max_ins_size1,
(unsigned long) max_ins_size2); (unsigned long) max_ins_size2);

View File

@@ -336,7 +336,7 @@ dict_stats_wait_bg_to_stop_using_table(
unlocking/locking the data dict */ unlocking/locking the data dict */
{ {
while (!dict_stats_stop_bg(table)) { while (!dict_stats_stop_bg(table)) {
DICT_STATS_BG_YIELD(trx); DICT_BG_YIELD(trx);
} }
} }

View File

@@ -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. Copyright (c) 2016, 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under 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 "row0mysql.h"
#include "row0upd.h" #include "row0upd.h"
#include "dict0types.h" #include "dict0types.h"
#include "dict0stats_bg.h"
#include "row0sel.h" #include "row0sel.h"
#include "fts0fts.h" #include "fts0fts.h"
@@ -868,11 +869,26 @@ fts_drop_index(
err = fts_drop_index_tables(trx, index); err = fts_drop_index_tables(trx, index);
for(;;) {
bool retry = false;
if (index->index_fts_syncing) {
retry = true;
}
if (!retry){
fts_free(table); fts_free(table);
break;
}
DICT_BG_YIELD(trx);
}
return(err); return(err);
} }
for(;;) {
bool retry = false;
if (index->index_fts_syncing) {
retry = true;
}
if (!retry){
current_doc_id = table->fts->cache->next_doc_id; current_doc_id = table->fts->cache->next_doc_id;
first_doc_id = table->fts->cache->first_doc_id; first_doc_id = table->fts->cache->first_doc_id;
fts_cache_clear(table->fts->cache); fts_cache_clear(table->fts->cache);
@@ -880,6 +896,10 @@ fts_drop_index(
table->fts->cache = fts_cache_create(table); table->fts->cache = fts_cache_create(table);
table->fts->cache->next_doc_id = current_doc_id; table->fts->cache->next_doc_id = current_doc_id;
table->fts->cache->first_doc_id = first_doc_id; table->fts->cache->first_doc_id = first_doc_id;
break;
}
DICT_BG_YIELD(trx);
}
} else { } else {
fts_cache_t* cache = table->fts->cache; fts_cache_t* cache = table->fts->cache;
fts_index_cache_t* index_cache; fts_index_cache_t* index_cache;
@@ -889,9 +909,17 @@ fts_drop_index(
index_cache = fts_find_index_cache(cache, index); index_cache = fts_find_index_cache(cache, index);
if (index_cache != NULL) { if (index_cache != NULL) {
if (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); fts_words_free(index_cache->words);
rbt_free(index_cache->words); rbt_free(index_cache->words);
break;
}
DICT_BG_YIELD(trx);
} }
ib_vector_remove(cache->indexes, *(void**) index_cache); ib_vector_remove(cache->indexes, *(void**) index_cache);
@@ -4569,10 +4597,16 @@ begin_sync:
index_cache = static_cast<fts_index_cache_t*>( index_cache = static_cast<fts_index_cache_t*>(
ib_vector_get(cache->indexes, i)); 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; 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); error = fts_sync_index(sync, index_cache);
if (error != DB_SUCCESS && !sync->interrupted) { if (error != DB_SUCCESS && !sync->interrupted) {
@@ -4605,11 +4639,33 @@ begin_sync:
end_sync: end_sync:
if (error == DB_SUCCESS && !sync->interrupted) { if (error == DB_SUCCESS && !sync->interrupted) {
error = fts_sync_commit(sync); 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<fts_index_cache_t*>(
ib_vector_get(cache->indexes, i));
if (index_cache->index->index_fts_syncing) {
index_cache->index->index_fts_syncing
= false;
}
}
}
} else { } else {
fts_sync_rollback(sync); fts_sync_rollback(sync);
} }
rw_lock_x_lock(&cache->lock); 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<fts_index_cache_t*>(
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->interrupted = false;
sync->in_progress = false; sync->in_progress = false;
os_event_set(sync->event); os_event_set(sync->event);

View File

@@ -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. Copyright (c) 2016, MariaDB Corporation. All Rights reserved.
This program is free software; you can redistribute it and/or modify it under 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; 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); table = dict_table_open_on_id(table_id, FALSE, DICT_TABLE_OP_NORMAL);
if (table) { if (table) {
@@ -2987,8 +2980,6 @@ fts_optimize_sync_table(
dict_table_close(table, FALSE, FALSE); dict_table_close(table, FALSE, FALSE);
} }
rw_lock_s_unlock(&dict_operation_lock);
} }
/**********************************************************************//** /**********************************************************************//**

View File

@@ -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. Copyright (c) 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under This program is free software; you can redistribute it and/or modify it under

View File

@@ -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. Copyright (c) 2013, 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under 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; 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<ha_innobase_inplace_ctx*>(*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 /* Apply the changes to the data dictionary tables, for all
@@ -6211,8 +6251,13 @@ foreign_fail:
ut_d(dict_table_check_for_dup_indexes( ut_d(dict_table_check_for_dup_indexes(
ctx->new_table, CHECK_ABORTED_OK)); 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) { if (new_clustered) {
/* Since the table has been rebuilt, we remove /* Since the table has been rebuilt, we remove
all persistent statistics corresponding to the all persistent statistics corresponding to the

View File

@@ -4000,7 +4000,7 @@ ibuf_insert_to_index_page_low(
(ulong) zip_size, (ulong) old_bits); (ulong) zip_size, (ulong) old_bits);
fputs("InnoDB: Submit a detailed bug report" fputs("InnoDB: Submit a detailed bug report"
" to http://bugs.mysql.com\n", stderr); " to https://jira.mariadb.org/\n", stderr);
ut_ad(0); ut_ad(0);
DBUG_RETURN(NULL); DBUG_RETURN(NULL);
} }
@@ -4073,7 +4073,7 @@ dump:
" Please run CHECK TABLE on\n" " Please run CHECK TABLE on\n"
"InnoDB: your tables.\n" "InnoDB: your tables.\n"
"InnoDB: Submit a detailed bug report to" "InnoDB: Submit a detailed bug report to"
" http://bugs.mysql.com!\n", stderr); " https://jira.mariadb.org/\n", stderr);
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
@@ -4249,7 +4249,7 @@ ibuf_set_del_mark(
fprintf(stderr, "\nspace %u offset %u" fprintf(stderr, "\nspace %u offset %u"
" (%u records, index id %llu)\n" " (%u records, index id %llu)\n"
"InnoDB: Submit a detailed bug report" "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_space(block),
(unsigned) buf_block_get_page_no(block), (unsigned) buf_block_get_page_no(block),
(unsigned) page_get_n_recs(page), (unsigned) page_get_n_recs(page),
@@ -4313,7 +4313,7 @@ ibuf_delete(
fprintf(stderr, "\nspace %u offset %u" fprintf(stderr, "\nspace %u offset %u"
" (%u records, index id %llu)\n" " (%u records, index id %llu)\n"
"InnoDB: Submit a detailed bug report" "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_space(block),
(unsigned) buf_block_get_page_no(block), (unsigned) buf_block_get_page_no(block),
(unsigned) page_get_n_recs(page), (unsigned) page_get_n_recs(page),
@@ -4384,7 +4384,7 @@ ibuf_restore_pos(
} else { } else {
fprintf(stderr, fprintf(stderr,
"InnoDB: ERROR: Submit the output to" "InnoDB: ERROR: Submit the output to"
" http://bugs.mysql.com\n" " https://jira.mariadb.org/\n"
"InnoDB: ibuf cursor restoration fails!\n" "InnoDB: ibuf cursor restoration fails!\n"
"InnoDB: ibuf record inserted to page %lu:%lu\n", "InnoDB: ibuf record inserted to page %lu:%lu\n",
(ulong) space, (ulong) page_no); (ulong) space, (ulong) page_no);
@@ -4703,7 +4703,7 @@ ibuf_merge_or_delete_for_page(
"InnoDB: to determine if they are corrupt" "InnoDB: to determine if they are corrupt"
" after this.\n\n" " after this.\n\n"
"InnoDB: Please submit a detailed bug report" "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) page_no,
(ulong) (ulong)
fil_page_get_type(block->frame)); fil_page_get_type(block->frame));

View File

@@ -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. Copyright (c) 2013, 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under 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. */ Release the exclusive locks on all index tree. */
UNIV_INLINE UNIV_INLINE

View File

@@ -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) 2012, Facebook Inc.
Copyright (c) 2013, 2017, MariaDB Corporation. Copyright (c) 2013, 2017, MariaDB Corporation.
@@ -704,6 +704,8 @@ struct dict_index_t{
dict_sys->mutex. Other changes are dict_sys->mutex. Other changes are
protected by index->lock. */ protected by index->lock. */
dict_field_t* fields; /*!< array of field descriptions */ 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 #ifndef UNIV_HOTBACKUP
UT_LIST_NODE_T(dict_index_t) UT_LIST_NODE_T(dict_index_t)
indexes;/*!< list of indexes of the table */ indexes;/*!< list of indexes of the table */

View File

@@ -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. Copyright (c) 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under 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 /** Yield the data dictionary latch when waiting
for the background thread to stop accessing a table. for the background thread to stop accessing a table.
@param trx transaction holding the data dictionary locks */ @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); \ row_mysql_unlock_data_dictionary(trx); \
os_thread_sleep(250000); \ os_thread_sleep(250000); \
row_mysql_lock_data_dictionary(trx); \ row_mysql_lock_data_dictionary(trx); \

View File

@@ -215,7 +215,7 @@ mlog_write_initial_log_record_fast(
"%d on page %lu of space %lu in the " "%d on page %lu of space %lu in the "
"doublewrite buffer, continuing anyway.\n" "doublewrite buffer, continuing anyway.\n"
"Please post a bug report to " "Please post a bug report to "
"bugs.mysql.com.\n", "https://jira.mariadb.org/\n",
type, offset, space); type, offset, space);
ut_ad(0); ut_ad(0);
} }

View File

@@ -2451,7 +2451,7 @@ lock_rec_enqueue_waiting(
dict_index_name_print(stderr, trx, index); dict_index_name_print(stderr, trx, index);
fputs(".\n" fputs(".\n"
"InnoDB: Submit a detailed bug report" "InnoDB: Submit a detailed bug report"
" to http://bugs.mysql.com\n", " to https://jira.mariadb.org/\n",
stderr); stderr);
ut_ad(0); ut_ad(0);
} }
@@ -5185,7 +5185,7 @@ lock_table_enqueue_waiting(
ut_print_name(stderr, trx, TRUE, table->name); ut_print_name(stderr, trx, TRUE, table->name);
fputs(".\n" fputs(".\n"
"InnoDB: Submit a detailed bug report" "InnoDB: Submit a detailed bug report"
" to http://bugs.mysql.com\n", " to https://jira.mariadb.org/\n",
stderr); stderr);
ut_ad(0); ut_ad(0);
} }

View File

@@ -1137,7 +1137,7 @@ row_ins_foreign_check_on_constraint(
rec_print(stderr, clust_rec, clust_index); rec_print(stderr, clust_rec, clust_index);
fputs("\n" fputs("\n"
"InnoDB: Submit a detailed bug report to" "InnoDB: Submit a detailed bug report to"
" http://bugs.mysql.com\n", stderr); " https://jira.mariadb.org/\n", stderr);
ut_ad(0); ut_ad(0);
err = DB_SUCCESS; err = DB_SUCCESS;

View File

@@ -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. Copyright (c) 2015, 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under 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 "btr0defragment.h"
#include "fil0fil.h" #include "fil0fil.h"
#include "fil0crypt.h" #include "fil0crypt.h"
#include "srv0srv.h"
#include "ibuf0ibuf.h" #include "ibuf0ibuf.h"
#include "fts0fts.h" #include "fts0fts.h"
#include "fts0types.h" #include "fts0types.h"
@@ -4026,6 +4027,16 @@ row_drop_table_for_mysql(
ut_ad(!table->fts->add_wq); ut_ad(!table->fts->add_wq);
ut_ad(lock_trx_has_sys_table_locks(trx) == 0); 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); row_mysql_unlock_data_dictionary(trx);
fts_optimize_remove_table(table); fts_optimize_remove_table(table);
row_mysql_lock_data_dictionary(trx); row_mysql_lock_data_dictionary(trx);

View File

@@ -2759,8 +2759,6 @@ row_sel_field_store_in_mysql_format_func(
@param[in] field_no templ->rec_field_no or @param[in] field_no templ->rec_field_no or
templ->clust_rec_field_no templ->clust_rec_field_no
or templ->icp_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 @param[in] templ row template
*/ */
static MY_ATTRIBUTE((warn_unused_result)) 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] rec_clust TRUE if the rec in the clustered index
@param[in] index index of rec @param[in] index index of rec
@param[in] offsets array returned by rec_get_offsets(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 */ @return TRUE on success, FALSE if not all columns could be retrieved */
static MY_ATTRIBUTE((warn_unused_result)) static MY_ATTRIBUTE((warn_unused_result))
ibool ibool
@@ -3099,7 +3093,7 @@ row_sel_get_clust_rec_for_mysql(
trx_print(stderr, trx, 600); trx_print(stderr, trx, 600);
fputs("\n" fputs("\n"
"InnoDB: Submit a detailed bug report" "InnoDB: Submit a detailed bug report"
" to http://bugs.mysql.com\n", stderr); " to https://jira.mariadb.org/\n", stderr);
ut_ad(0); ut_ad(0);
} }

View File

@@ -683,7 +683,7 @@ row_undo_mod_del_unmark_sec_and_undo_update(
trx_print(stderr, trx, 0); trx_print(stderr, trx, 0);
fputs("\n" fputs("\n"
"InnoDB: Submit a detailed bug report" "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, ib_logf(IB_LOG_LEVEL_WARN,
"record in index %s was not found" "record in index %s was not found"

View File

@@ -1952,7 +1952,7 @@ row_upd_sec_index_entry(
trx_print(stderr, trx, 0); trx_print(stderr, trx, 0);
fputs("\n" fputs("\n"
"InnoDB: Submit a detailed bug report" "InnoDB: Submit a detailed bug report"
" to http://bugs.mysql.com\n", stderr); " to https://jira.mariadb.org/\n", stderr);
ut_ad(0); ut_ad(0);
break; break;
case ROW_FOUND: case ROW_FOUND:

View File

@@ -1914,7 +1914,7 @@ loop:
" was greater\n" " was greater\n"
"InnoDB: than the new log sequence number " LSN_PF "!\n" "InnoDB: than the new log sequence number " LSN_PF "!\n"
"InnoDB: Please submit a bug report" "InnoDB: Please submit a bug report"
" to http://bugs.mysql.com\n", " to https://jira.mariadb.org\n",
old_lsn, new_lsn); old_lsn, new_lsn);
ut_ad(0); ut_ad(0);
} }

View File

@@ -603,7 +603,7 @@ trx_purge_rseg_get_next_history_log(
"InnoDB: but its length is still" "InnoDB: but its length is still"
" reported as %lu! Make a detailed bug\n" " reported as %lu! Make a detailed bug\n"
"InnoDB: report, and submit it" "InnoDB: report, and submit it"
" to http://bugs.mysql.com\n", " to https://jira.mariadb.org/\n",
(ulong) trx_sys->rseg_history_len); (ulong) trx_sys->rseg_history_len);
ut_ad(0); ut_ad(0);
} }

View File

@@ -1022,7 +1022,7 @@ trx_undo_update_rec_get_update(
fprintf(stderr, "\n" fprintf(stderr, "\n"
"InnoDB: but index has only %lu fields\n" "InnoDB: but index has only %lu fields\n"
"InnoDB: Submit a detailed bug report" "InnoDB: Submit a detailed bug report"
" to http://bugs.mysql.com\n" " to https://jira.mariadb.org/\n"
"InnoDB: Run also CHECK TABLE ", "InnoDB: Run also CHECK TABLE ",
(ulong) dict_index_get_n_fields(index)); (ulong) dict_index_get_n_fields(index));
ut_print_name(stderr, trx, TRUE, index->table_name); ut_print_name(stderr, trx, TRUE, index->table_name);

View File

@@ -63,7 +63,7 @@ ut_dbg_assertion_failed(
fputs("InnoDB: We intentionally generate a memory trap.\n" fputs("InnoDB: We intentionally generate a memory trap.\n"
"InnoDB: Submit a detailed bug report" "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" "InnoDB: If you get repeated assertion failures"
" or crashes, even\n" " or crashes, even\n"
"InnoDB: immediately after the mysqld startup, there may be\n" "InnoDB: immediately after the mysqld startup, there may be\n"

View File

@@ -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 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 it under the terms of the GNU General Public License as published by
@@ -41,6 +41,7 @@
#include "sp_head.h" #include "sp_head.h"
#include "pfs_digest.h" #include "pfs_digest.h"
using std::min;
/** /**
@page PAGE_PERFORMANCE_SCHEMA The Performance Schema main page @page PAGE_PERFORMANCE_SCHEMA The Performance Schema main page
MySQL PERFORMANCE_SCHEMA implementation. 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((uint) user_len <= sizeof(pfs->m_username));
DBUG_ASSERT((host != NULL) || (host_len == 0)); DBUG_ASSERT((host != NULL) || (host_len == 0));
DBUG_ASSERT(host_len >= 0); DBUG_ASSERT(host_len >= 0);
DBUG_ASSERT((uint) host_len <= sizeof(pfs->m_hostname));
host_len= min<size_t>(host_len, sizeof(pfs->m_hostname));
if (unlikely(pfs == NULL)) if (unlikely(pfs == NULL))
return; return;

View File

@@ -2086,7 +2086,7 @@ btr_page_reorganize_low(
"InnoDB: Error: page old max ins size %lu" "InnoDB: Error: page old max ins size %lu"
" new max ins size %lu\n" " new max ins size %lu\n"
"InnoDB: Submit a detailed bug report" "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) data_size1, (unsigned long) data_size2,
(unsigned long) max_ins_size1, (unsigned long) max_ins_size1,
(unsigned long) max_ins_size2); (unsigned long) max_ins_size2);

View File

@@ -4042,7 +4042,7 @@ ibuf_insert_to_index_page_low(
(ulong) zip_size, (ulong) old_bits); (ulong) zip_size, (ulong) old_bits);
fputs("InnoDB: Submit a detailed bug report" fputs("InnoDB: Submit a detailed bug report"
" to http://bugs.mysql.com\n", stderr); " to https://jira.mariadb.org/\n", stderr);
ut_ad(0); ut_ad(0);
DBUG_RETURN(NULL); DBUG_RETURN(NULL);
} }
@@ -4115,7 +4115,7 @@ dump:
" Please run CHECK TABLE on\n" " Please run CHECK TABLE on\n"
"InnoDB: your tables.\n" "InnoDB: your tables.\n"
"InnoDB: Submit a detailed bug report to" "InnoDB: Submit a detailed bug report to"
" http://bugs.mysql.com!\n", stderr); " https://jira.mariadb.org/\n", stderr);
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
@@ -4291,7 +4291,7 @@ ibuf_set_del_mark(
fprintf(stderr, "\nspace %u offset %u" fprintf(stderr, "\nspace %u offset %u"
" (%u records, index id %llu)\n" " (%u records, index id %llu)\n"
"InnoDB: Submit a detailed bug report" "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_space(block),
(unsigned) buf_block_get_page_no(block), (unsigned) buf_block_get_page_no(block),
(unsigned) page_get_n_recs(page), (unsigned) page_get_n_recs(page),
@@ -4355,7 +4355,7 @@ ibuf_delete(
fprintf(stderr, "\nspace %u offset %u" fprintf(stderr, "\nspace %u offset %u"
" (%u records, index id %llu)\n" " (%u records, index id %llu)\n"
"InnoDB: Submit a detailed bug report" "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_space(block),
(unsigned) buf_block_get_page_no(block), (unsigned) buf_block_get_page_no(block),
(unsigned) page_get_n_recs(page), (unsigned) page_get_n_recs(page),
@@ -4426,7 +4426,7 @@ ibuf_restore_pos(
} else { } else {
fprintf(stderr, fprintf(stderr,
"InnoDB: ERROR: Submit the output to" "InnoDB: ERROR: Submit the output to"
" http://bugs.mysql.com\n" " https://jira.mariadb.org/\n"
"InnoDB: ibuf cursor restoration fails!\n" "InnoDB: ibuf cursor restoration fails!\n"
"InnoDB: ibuf record inserted to page %lu:%lu\n", "InnoDB: ibuf record inserted to page %lu:%lu\n",
(ulong) space, (ulong) page_no); (ulong) space, (ulong) page_no);
@@ -4745,7 +4745,7 @@ ibuf_merge_or_delete_for_page(
"InnoDB: to determine if they are corrupt" "InnoDB: to determine if they are corrupt"
" after this.\n\n" " after this.\n\n"
"InnoDB: Please submit a detailed bug report" "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) page_no,
(ulong) (ulong)
fil_page_get_type(block->frame)); fil_page_get_type(block->frame));

View File

@@ -216,7 +216,7 @@ mlog_write_initial_log_record_fast(
"%d on page %lu of space %lu in the " "%d on page %lu of space %lu in the "
"doublewrite buffer, continuing anyway.\n" "doublewrite buffer, continuing anyway.\n"
"Please post a bug report to " "Please post a bug report to "
"bugs.mysql.com.\n", "https://jira.mariadb.org/\n",
type, offset, space); type, offset, space);
ut_ad(0); ut_ad(0);
} }

View File

@@ -2478,7 +2478,7 @@ lock_rec_enqueue_waiting(
dict_index_name_print(stderr, trx, index); dict_index_name_print(stderr, trx, index);
fputs(".\n" fputs(".\n"
"InnoDB: Submit a detailed bug report" "InnoDB: Submit a detailed bug report"
" to http://bugs.mysql.com\n", " to https://jira.mariadb.org/\n",
stderr); stderr);
ut_ad(0); ut_ad(0);
} }
@@ -5226,7 +5226,7 @@ lock_table_enqueue_waiting(
ut_print_name(stderr, trx, TRUE, table->name); ut_print_name(stderr, trx, TRUE, table->name);
fputs(".\n" fputs(".\n"
"InnoDB: Submit a detailed bug report" "InnoDB: Submit a detailed bug report"
" to http://bugs.mysql.com\n", " to https://jira.mariadb.org/\n",
stderr); stderr);
ut_ad(0); ut_ad(0);
} }

View File

@@ -1143,7 +1143,7 @@ row_ins_foreign_check_on_constraint(
rec_print(stderr, clust_rec, clust_index); rec_print(stderr, clust_rec, clust_index);
fputs("\n" fputs("\n"
"InnoDB: Submit a detailed bug report to" "InnoDB: Submit a detailed bug report to"
" http://bugs.mysql.com\n", stderr); " https://jira.mariadb.org/\n", stderr);
ut_ad(0); ut_ad(0);
err = DB_SUCCESS; err = DB_SUCCESS;

View File

@@ -3111,7 +3111,7 @@ row_sel_get_clust_rec_for_mysql(
trx_print(stderr, trx, 600); trx_print(stderr, trx, 600);
fputs("\n" fputs("\n"
"InnoDB: Submit a detailed bug report" "InnoDB: Submit a detailed bug report"
" to http://bugs.mysql.com\n", stderr); " to https://jira.mariadb.org/\n", stderr);
ut_ad(0); ut_ad(0);
} }

View File

@@ -653,7 +653,7 @@ row_undo_mod_del_unmark_sec_and_undo_update(
trx_print(stderr, trx, 0); trx_print(stderr, trx, 0);
fputs("\n" fputs("\n"
"InnoDB: Submit a detailed bug report" "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, ib_logf(IB_LOG_LEVEL_WARN,
"record in index %s was not found" "record in index %s was not found"

View File

@@ -1958,7 +1958,7 @@ row_upd_sec_index_entry(
trx_print(stderr, trx, 0); trx_print(stderr, trx, 0);
fputs("\n" fputs("\n"
"InnoDB: Submit a detailed bug report" "InnoDB: Submit a detailed bug report"
" to http://bugs.mysql.com\n", stderr); " to https://jira.mariadb.org/\n", stderr);
ut_ad(0); ut_ad(0);
break; break;
case ROW_FOUND: case ROW_FOUND:

View File

@@ -2361,7 +2361,7 @@ loop:
" was greater\n" " was greater\n"
"InnoDB: than the new log sequence number " LSN_PF "!\n" "InnoDB: than the new log sequence number " LSN_PF "!\n"
"InnoDB: Please submit a bug report" "InnoDB: Please submit a bug report"
" to http://bugs.mysql.com\n", " to https://jira.mariadb.org\n",
old_lsn, new_lsn); old_lsn, new_lsn);
ut_ad(0); ut_ad(0);
} }

View File

@@ -603,7 +603,7 @@ trx_purge_rseg_get_next_history_log(
"InnoDB: but its length is still" "InnoDB: but its length is still"
" reported as %lu! Make a detailed bug\n" " reported as %lu! Make a detailed bug\n"
"InnoDB: report, and submit it" "InnoDB: report, and submit it"
" to http://bugs.mysql.com\n", " to https://jira.mariadb.org/\n",
(ulong) trx_sys->rseg_history_len); (ulong) trx_sys->rseg_history_len);
ut_ad(0); ut_ad(0);
} }

View File

@@ -1022,7 +1022,7 @@ trx_undo_update_rec_get_update(
fprintf(stderr, "\n" fprintf(stderr, "\n"
"InnoDB: but index has only %lu fields\n" "InnoDB: but index has only %lu fields\n"
"InnoDB: Submit a detailed bug report" "InnoDB: Submit a detailed bug report"
" to http://bugs.mysql.com\n" " to https://jira.mariadb.org/\n"
"InnoDB: Run also CHECK TABLE ", "InnoDB: Run also CHECK TABLE ",
(ulong) dict_index_get_n_fields(index)); (ulong) dict_index_get_n_fields(index));
ut_print_name(stderr, trx, TRUE, index->table_name); ut_print_name(stderr, trx, TRUE, index->table_name);

View File

@@ -63,7 +63,7 @@ ut_dbg_assertion_failed(
fputs("InnoDB: We intentionally generate a memory trap.\n" fputs("InnoDB: We intentionally generate a memory trap.\n"
"InnoDB: Submit a detailed bug report" "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" "InnoDB: If you get repeated assertion failures"
" or crashes, even\n" " or crashes, even\n"
"InnoDB: immediately after the mysqld startup, there may be\n" "InnoDB: immediately after the mysqld startup, there may be\n"