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