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

Merge branch 'connect/10.2' into 10.2

This commit is contained in:
Sergei Golubchik
2017-10-26 00:00:16 +02:00
37 changed files with 394 additions and 439 deletions

View File

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

View File

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

View File

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

View File

@@ -10,7 +10,7 @@
/* Include relevant MariaDB header file. */ /* Include relevant MariaDB header file. */
/***********************************************************************/ /***********************************************************************/
#include "my_global.h" #include "my_global.h"
#include "sql_class.h" //#include "sql_class.h"
//#include "sql_time.h" //#include "sql_time.h"
#if defined(__WIN__) #if defined(__WIN__)
@@ -35,9 +35,6 @@
#include "array.h" #include "array.h"
#include "filter.h" #include "filter.h"
#include "xindex.h" #include "xindex.h"
#if defined(MONGO_SUPPORT) || defined(JDBC_SUPPORT)
#include "tabext.h"
#endif // MONGO_SUPPORT || JDBC_SUPPORT
/***********************************************************************/ /***********************************************************************/
/* Utility routines. */ /* Utility routines. */
@@ -1406,86 +1403,6 @@ PFIL FILTER::Copy(PTABS t)
} // end of Copy } // end of Copy
#endif // 0 #endif // 0
#if defined(MONGO_SUPPORT)
/***********************************************************************/
/* Make selector json representation for Mongo tables. */
/***********************************************************************/
bool FILTER::MakeSelector(PGLOBAL g, PSTRG s)
{
s->Append('{');
if (Opc == OP_AND || Opc == OP_OR) {
if (GetArgType(0) != TYPE_FILTER || GetArgType(1) != TYPE_FILTER)
return true;
s->Append("\"$");
s->Append(Opc == OP_AND ? "and" : "or");
s->Append("\":[");
if (((PFIL)Arg(0))->MakeSelector(g, s))
return true;
s->Append(',');
if (((PFIL)Arg(1))->MakeSelector(g, s))
return true;
s->Append(']');
} else {
if (GetArgType(0) != TYPE_COLBLK)
return true;
s->Append('"');
s->Append(((PCOL)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 (GetArgType(1) == TYPE_COLBLK) {
s->Append("\"$");
s->Append(((PEXTCOL)Arg(1))->GetJpath(g, false));
s->Append('"');
} else {
char buf[501];
Arg(1)->Prints(g, buf, 500);
s->Append(buf);
} // endif Type
s->Append('}');
} // endif Opc
s->Append('}');
return false;
} // end of MakeSelector
#endif // MONGO_SUPPORT
/*********************************************************************/ /*********************************************************************/
/* Make file output of FILTER contents. */ /* Make file output of FILTER contents. */
/*********************************************************************/ /*********************************************************************/

View File

@@ -61,9 +61,6 @@ class DllExport FILTER : public XOBJECT { /* Filter description block */
//virtual PXOB CheckSubQuery(PGLOBAL, PSQL); //virtual PXOB CheckSubQuery(PGLOBAL, PSQL);
//virtual bool CheckLocal(PTDB); //virtual bool CheckLocal(PTDB);
//virtual int CheckSpcCol(PTDB tdbp, int n); //virtual int CheckSpcCol(PTDB tdbp, int n);
#if defined(MONGO_SUPPORT)
bool MakeSelector(PGLOBAL g, PSTRG s);
#endif // MONGO_SUPPORT
virtual void Printf(PGLOBAL g, FILE *f, uint n); virtual void Printf(PGLOBAL g, FILE *f, uint n);
virtual void Prints(PGLOBAL g, char *ps, uint z); virtual void Prints(PGLOBAL g, char *ps, uint z);
// PFIL Linearize(bool nosep); // PFIL Linearize(bool nosep);

View File

@@ -129,10 +129,13 @@
#if defined(ODBC_SUPPORT) #if defined(ODBC_SUPPORT)
#include "odbccat.h" #include "odbccat.h"
#endif // ODBC_SUPPORT #endif // ODBC_SUPPORT
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
#include "tabjdbc.h" #include "tabjdbc.h"
#include "jdbconn.h" #include "jdbconn.h"
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
#if defined(CMGO_SUPPORT)
#include "cmgoconn.h"
#endif // CMGO_SUPPORT
#include "tabmysql.h" #include "tabmysql.h"
#include "filamdbf.h" #include "filamdbf.h"
#include "tabxcl.h" #include "tabxcl.h"
@@ -171,18 +174,18 @@
#define JSONMAX 10 // JSON Default max grp size #define JSONMAX 10 // JSON Default max grp size
extern "C" { extern "C" {
char version[]= "Version 1.06.0004 September 03, 2017"; char version[]= "Version 1.06.0005 October 14, 2017";
#if defined(__WIN__) #if defined(__WIN__)
char compver[]= "Version 1.06.0004 " __DATE__ " " __TIME__; char compver[]= "Version 1.06.0005 " __DATE__ " " __TIME__;
char slash= '\\'; char slash= '\\';
#else // !__WIN__ #else // !__WIN__
char slash= '/'; char slash= '/';
#endif // !__WIN__ #endif // !__WIN__
} // extern "C" } // extern "C"
#if defined(NEW_MAR) #if MYSQL_VERSION_ID > 100200
#define stored_in_db stored_in_db() #define stored_in_db stored_in_db()
#endif // NEW_MAR) #endif // MYSQL_VERSION_ID
#if defined(XMAP) #if defined(XMAP)
my_bool xmap= false; my_bool xmap= false;
@@ -196,10 +199,10 @@ extern "C" {
} // extern "C" } // extern "C"
#endif // XMSG #endif // XMSG
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
char *JvmPath; char *JvmPath;
char *ClassPath; char *ClassPath;
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
pthread_mutex_t parmut; pthread_mutex_t parmut;
pthread_mutex_t usrmut; pthread_mutex_t usrmut;
@@ -212,9 +215,9 @@ PQRYRES OEMColumns(PGLOBAL g, PTOS topt, char *tab, char *db, bool info);
PQRYRES VirColumns(PGLOBAL g, bool info); PQRYRES VirColumns(PGLOBAL g, bool info);
PQRYRES JSONColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt, bool info); PQRYRES JSONColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt, bool info);
PQRYRES XMLColumns(PGLOBAL g, char *db, char *tab, PTOS topt, bool info); PQRYRES XMLColumns(PGLOBAL g, char *db, char *tab, PTOS topt, bool info);
#if defined(MONGO_SUPPORT) #if defined(JAVA_SUPPORT)
PQRYRES MGOColumns(PGLOBAL g, PCSZ db, PCSZ url, PTOS topt, bool info); PQRYRES MGOColumns(PGLOBAL g, PCSZ db, PCSZ url, PTOS topt, bool info);
#endif // MONGO_SUPPORT #endif // JAVA_SUPPORT
int TranslateJDBCType(int stp, char *tn, int prec, int& len, char& v); int TranslateJDBCType(int stp, char *tn, int prec, int& len, char& v);
void PushWarning(PGLOBAL g, THD *thd, int level); void PushWarning(PGLOBAL g, THD *thd, int level);
bool CheckSelf(PGLOBAL g, TABLE_SHARE *s, PCSZ host, PCSZ db, bool CheckSelf(PGLOBAL g, TABLE_SHARE *s, PCSZ host, PCSZ db,
@@ -222,7 +225,7 @@ bool CheckSelf(PGLOBAL g, TABLE_SHARE *s, PCSZ host, PCSZ db,
bool ZipLoadFile(PGLOBAL, PCSZ, PCSZ, PCSZ, bool, bool); bool ZipLoadFile(PGLOBAL, PCSZ, PCSZ, PCSZ, bool, bool);
bool ExactInfo(void); bool ExactInfo(void);
#if defined(CMGO_SUPPORT) #if defined(CMGO_SUPPORT)
void mongo_init(bool); //void mongo_init(bool);
#endif // CMGO_SUPPORT #endif // CMGO_SUPPORT
USETEMP UseTemp(void); USETEMP UseTemp(void);
int GetConvSize(void); int GetConvSize(void);
@@ -234,6 +237,8 @@ uint GetWorkSize(void);
void SetWorkSize(uint); void SetWorkSize(uint);
extern "C" const char *msglang(void); extern "C" const char *msglang(void);
static char *strz(PGLOBAL g, LEX_STRING &ls);
static void PopUser(PCONNECT xp); static void PopUser(PCONNECT xp);
static PCONNECT GetUser(THD *thd, PCONNECT xp); static PCONNECT GetUser(THD *thd, PCONNECT xp);
static PGLOBAL GetPlug(THD *thd, PCONNECT& lxp); static PGLOBAL GetPlug(THD *thd, PCONNECT& lxp);
@@ -350,21 +355,21 @@ static MYSQL_THDVAR_UINT(json_grp_size,
"max number of rows for JSON aggregate functions.", "max number of rows for JSON aggregate functions.",
NULL, NULL, JSONMAX, 1, INT_MAX, 1); NULL, NULL, JSONMAX, 1, INT_MAX, 1);
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
// Default java wrapper to use with JDBC tables // Default java wrapper to use with JDBC tables
static MYSQL_THDVAR_STR(java_wrapper, static MYSQL_THDVAR_STR(java_wrapper,
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC,
"Java wrapper class name", "Java wrapper class name",
// check_java_wrapper, update_java_wrapper, // check_java_wrapper, update_java_wrapper,
NULL, NULL, "wrappers/JdbcInterface"); NULL, NULL, "wrappers/JdbcInterface");
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
#if defined(MONGO_SUPPORT) #if 0 // This is apparently not acceptable for a plugin
// Enabling MONGO table type // Enabling MONGO table type
static MYSQL_THDVAR_BOOL(enable_mongo, PLUGIN_VAR_RQCMDARG, static MYSQL_THDVAR_BOOL(enable_mongo, PLUGIN_VAR_RQCMDARG,
"Enabling the MongoDB access", "Enabling the MongoDB access",
NULL, NULL, MONGO_ENABLED); NULL, NULL, MONGO_ENABLED);
#endif // MONGO_SUPPORT #endif // 0
#if defined(XMSG) || defined(NEWMSG) #if defined(XMSG) || defined(NEWMSG)
const char *language_names[]= const char *language_names[]=
@@ -421,14 +426,14 @@ extern "C" const char *msglang(void)
} // end of msglang } // end of msglang
#else // !XMSG && !NEWMSG #else // !XMSG && !NEWMSG
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
char *GetJavaWrapper(void) char *GetJavaWrapper(void)
{return connect_hton ? THDVAR(current_thd, java_wrapper) : (char*)"wrappers/JdbcInterface";} {return connect_hton ? THDVAR(current_thd, java_wrapper) : (char*)"wrappers/JdbcInterface";}
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
#if defined(MONGO_SUPPORT) #if defined(JAVA_SUPPORT)
bool MongoEnabled(void) { return THDVAR(current_thd, enable_mongo); } //bool MongoEnabled(void) { return THDVAR(current_thd, enable_mongo); }
#endif // MONGO_SUPPORT #endif // JAVA_SUPPORT
extern "C" const char *msglang(void) extern "C" const char *msglang(void)
{ {
@@ -705,7 +710,7 @@ static int connect_init_func(void *p)
XmlInitParserLib(); XmlInitParserLib();
#endif // LIBXML2_SUPPORT #endif // LIBXML2_SUPPORT
#if defined(CMGO_SUPPORT) #if 0 //defined(CMGO_SUPPORT)
mongo_init(true); mongo_init(true);
#endif // CMGO_SUPPORT #endif // CMGO_SUPPORT
@@ -726,9 +731,9 @@ static int connect_init_func(void *p)
DTVAL::SetTimeShift(); // Initialize time zone shift once for all DTVAL::SetTimeShift(); // Initialize time zone shift once for all
BINCOL::SetEndian(); // Initialize host endian setting BINCOL::SetEndian(); // Initialize host endian setting
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
JAVAConn::SetJVM(); JAVAConn::SetJVM();
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
DBUG_RETURN(0); DBUG_RETURN(0);
} // end of connect_init_func } // end of connect_init_func
@@ -748,12 +753,12 @@ static int connect_done_func(void *)
#endif // LIBXML2_SUPPORT #endif // LIBXML2_SUPPORT
#if defined(CMGO_SUPPORT) #if defined(CMGO_SUPPORT)
mongo_init(false); CMgoConn::mongo_init(false);
#endif // CMGO_SUPPORT #endif // CMGO_SUPPORT
#ifdef JDBC_SUPPORT #ifdef JAVA_SUPPORT
JAVAConn::ResetJVM(); JAVAConn::ResetJVM();
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
#if !defined(__WIN__) #if !defined(__WIN__)
PROFILE_End(); PROFILE_End();
@@ -1758,7 +1763,7 @@ bool ha_connect::IsPartitioned(void)
} // end of IsPartitioned } // end of IsPartitioned
const char *ha_connect::GetDBName(const char* name) PCSZ ha_connect::GetDBName(PCSZ name)
{ {
return (name) ? name : table->s->db.str; return (name) ? name : table->s->db.str;
} // end of GetDBName } // end of GetDBName
@@ -1821,7 +1826,7 @@ void ha_connect::AddColName(char *cp, Field *fp)
/***********************************************************************/ /***********************************************************************/
/* This function sets the current database path. */ /* This function sets the current database path. */
/***********************************************************************/ /***********************************************************************/
bool ha_connect::SetDataPath(PGLOBAL g, const char *path) bool ha_connect::SetDataPath(PGLOBAL g, PCSZ path)
{ {
return (!(datapath= SetPath(g, path))); return (!(datapath= SetPath(g, path)));
} // end of SetDataPath } // end of SetDataPath
@@ -2181,7 +2186,7 @@ int ha_connect::MakeRecord(char *buf)
/***********************************************************************/ /***********************************************************************/
/* Set row values from a MySQL pseudo record. Specific to MySQL. */ /* Set row values from a MySQL pseudo record. Specific to MySQL. */
/***********************************************************************/ /***********************************************************************/
int ha_connect::ScanRecord(PGLOBAL g, uchar *) int ha_connect::ScanRecord(PGLOBAL g, const uchar *)
{ {
char attr_buffer[1024]; char attr_buffer[1024];
char data_buffer[1024]; char data_buffer[1024];
@@ -2324,7 +2329,7 @@ int ha_connect::ScanRecord(PGLOBAL g, uchar *)
/* Check change in index column. Specific to MySQL. */ /* Check change in index column. Specific to MySQL. */
/* Should be elaborated to check for real changes. */ /* Should be elaborated to check for real changes. */
/***********************************************************************/ /***********************************************************************/
int ha_connect::CheckRecord(PGLOBAL g, const uchar *, uchar *newbuf) int ha_connect::CheckRecord(PGLOBAL g, const uchar *, const uchar *newbuf)
{ {
return ScanRecord(g, newbuf); return ScanRecord(g, newbuf);
} // end of dummy CheckRecord } // end of dummy CheckRecord
@@ -2517,7 +2522,7 @@ const char *ha_connect::GetValStr(OPVAL vop, bool neg)
val= (neg) ? " IS NOT NULL" : " IS NULL"; val= (neg) ? " IS NOT NULL" : " IS NULL";
break; break;
case OP_LIKE: case OP_LIKE:
val= " LIKE "; val= (neg) ? " NOT LIKE " : " LIKE ";
break; break;
case OP_XX: case OP_XX:
val= (neg) ? " NOT BETWEEN " : " BETWEEN "; val= (neg) ? " NOT BETWEEN " : " BETWEEN ";
@@ -2886,7 +2891,10 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, const Item *cond)
case Item_func::LE_FUNC: vop= OP_LE; break; case Item_func::LE_FUNC: vop= OP_LE; break;
case Item_func::GE_FUNC: vop= OP_GE; break; case Item_func::GE_FUNC: vop= OP_GE; break;
case Item_func::GT_FUNC: vop= OP_GT; break; case Item_func::GT_FUNC: vop= OP_GT; break;
case Item_func::LIKE_FUNC: vop= OP_LIKE; break; case Item_func::LIKE_FUNC:
vop= OP_LIKE;
neg = ((Item_func_opt_neg *)condf)->negated;
break;
case Item_func::ISNOTNULL_FUNC: case Item_func::ISNOTNULL_FUNC:
neg = true; neg = true;
// fall through // fall through
@@ -4417,8 +4425,8 @@ bool ha_connect::IsSameIndex(PIXDEF xp1, PIXDEF xp2)
return b; return b;
} // end of IsSameIndex } // end of IsSameIndex
MODE ha_connect::CheckMode(PGLOBAL g, THD *thd, MODE ha_connect::CheckMode(PGLOBAL g, THD *thd,
MODE newmode, bool *chk, bool *cras) MODE newmode, bool *chk, bool *cras)
{ {
#if defined(DEVELOPMENT) #if defined(DEVELOPMENT)
if (true) { if (true) {
@@ -5386,13 +5394,11 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
bool cnc= false; bool cnc= false;
int cto= -1, qto= -1; int cto= -1, qto= -1;
#endif // ODBC_SUPPORT #endif // ODBC_SUPPORT
#if defined(JDBC_SUPPORT) || defined(MONGO_SUPPORT) #if defined(JAVA_SUPPORT)
#if defined(JDBC_SUPPORT)
PJPARM sjp= NULL; PJPARM sjp= NULL;
#endif // JDBC_SUPPORT
PCSZ driver= NULL; PCSZ driver= NULL;
char *url= NULL; char *url= NULL;
#endif // JDBC_SUPPORT || MONGO_SUPPORT #endif // JAVA_SUPPORT
uint tm, fnc= FNC_NO, supfnc= (FNC_NO | FNC_COL); uint tm, fnc= FNC_NO, supfnc= (FNC_NO | FNC_COL);
bool bif, ok= false, dbf= false; bool bif, ok= false, dbf= false;
TABTYPE ttp= TAB_UNDEF; TABTYPE ttp= TAB_UNDEF;
@@ -5453,9 +5459,9 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
if ((ucnc= GetListOption(g, "UseDSN", topt->oplist))) if ((ucnc= GetListOption(g, "UseDSN", topt->oplist)))
cnc= (!*ucnc || *ucnc == 'y' || *ucnc == 'Y' || atoi(ucnc) != 0); cnc= (!*ucnc || *ucnc == 'y' || *ucnc == 'Y' || atoi(ucnc) != 0);
#endif #endif
#if defined(JDBC_SUPPORT) || defined(MONGO_SUPPORT) #if defined(JAVA_SUPPORT)
driver= GetListOption(g, "Driver", topt->oplist, NULL); driver= GetListOption(g, "Driver", topt->oplist, NULL);
#endif // JDBC_SUPPORT || MONGO_SUPPORT #endif // JAVA_SUPPORT
#if defined(PROMPT_OK) #if defined(PROMPT_OK)
cop= atoi(GetListOption(g, "checkdsn", topt->oplist, "0")); cop= atoi(GetListOption(g, "checkdsn", topt->oplist, "0"));
#endif // PROMPT_OK #endif // PROMPT_OK
@@ -5542,7 +5548,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
supfnc |= (FNC_TABLE | FNC_DSN | FNC_DRIVER); supfnc |= (FNC_TABLE | FNC_DSN | FNC_DRIVER);
break; break;
#endif // ODBC_SUPPORT #endif // ODBC_SUPPORT
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
case TAB_JDBC: case TAB_JDBC:
if (fnc & FNC_DRIVER) { if (fnc & FNC_DRIVER) {
ok = true; ok = true;
@@ -5576,7 +5582,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
supfnc |= (FNC_DRIVER | FNC_TABLE); supfnc |= (FNC_DRIVER | FNC_TABLE);
break; break;
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
case TAB_DBF: case TAB_DBF:
dbf = true; dbf = true;
// fall through // fall through
@@ -5633,10 +5639,8 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
ok = true; ok = true;
break; break;
#endif // __WIN__ #endif // __WIN__
#if defined(PIVOT_SUPPORT)
case TAB_PIVOT: case TAB_PIVOT:
supfnc = FNC_NO; supfnc = FNC_NO;
#endif // PIVOT_SUPPORT
case TAB_PRX: case TAB_PRX:
case TAB_TBL: case TAB_TBL:
case TAB_XCL: case TAB_XCL:
@@ -5667,14 +5671,14 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
ok = true; ok = true;
break; break;
#if defined(MONGO_SUPPORT) #if defined(JAVA_SUPPORT)
case TAB_MONGO: case TAB_MONGO:
if (!topt->tabname) if (!topt->tabname)
topt->tabname = tab; topt->tabname = tab;
ok = true; ok = true;
break; break;
#endif // MONGO_SUPPORT #endif // JAVA_SUPPORT
case TAB_VIR: case TAB_VIR:
ok = true; ok = true;
break; break;
@@ -5747,7 +5751,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
break; break;
#endif // ODBC_SUPPORT #endif // ODBC_SUPPORT
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
case TAB_JDBC: case TAB_JDBC:
switch (fnc) { switch (fnc) {
case FNC_NO: case FNC_NO:
@@ -5776,7 +5780,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
} // endswitch info } // endswitch info
break; break;
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
case TAB_MYSQL: case TAB_MYSQL:
qrp = MyColumns(g, thd, host, db, user, pwd, tab, qrp = MyColumns(g, thd, host, db, user, pwd, tab,
NULL, port, fnc == FNC_COL); NULL, port, fnc == FNC_COL);
@@ -5806,25 +5810,21 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
} // endif OcrColumns } // endif OcrColumns
break; break;
#if defined(PIVOT_SUPPORT)
case TAB_PIVOT: case TAB_PIVOT:
qrp = PivotColumns(g, tab, src, pic, fcl, skc, host, db, user, pwd, port); qrp = PivotColumns(g, tab, src, pic, fcl, skc, host, db, user, pwd, port);
break; break;
#endif // PIVOT_SUPPORT
case TAB_VIR: case TAB_VIR:
qrp = VirColumns(g, fnc == FNC_COL); qrp = VirColumns(g, fnc == FNC_COL);
break; break;
case TAB_JSON: case TAB_JSON:
qrp = JSONColumns(g, db, dsn, topt, fnc == FNC_COL); qrp = JSONColumns(g, db, dsn, topt, fnc == FNC_COL);
break; break;
#if defined(MONGO_SUPPORT) #if defined(JAVA_SUPPORT)
case TAB_MONGO: case TAB_MONGO:
if (!(url = strz(g, create_info->connect_string)) || !*url) url = strz(g, create_info->connect_string);
url = "mongodb://localhost:27017";
qrp = MGOColumns(g, db, url, topt, fnc == FNC_COL); qrp = MGOColumns(g, db, url, topt, fnc == FNC_COL);
break; break;
#endif // MONGO_SUPPORT #endif // JAVA_SUPPORT
#if defined(LIBXML2_SUPPORT) || defined(DOMDOC_SUPPORT) #if defined(LIBXML2_SUPPORT) || defined(DOMDOC_SUPPORT)
case TAB_XML: case TAB_XML:
qrp = XMLColumns(g, (char*)db, tab, topt, fnc == FNC_COL); qrp = XMLColumns(g, (char*)db, tab, topt, fnc == FNC_COL);
@@ -5949,7 +5949,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
break; break;
case FLD_SCHEM: case FLD_SCHEM:
#if defined(ODBC_SUPPORT) || defined(JDBC_SUPPORT) #if defined(ODBC_SUPPORT) || defined(JAVA_SUPPORT)
if ((ttp == TAB_ODBC || ttp == TAB_JDBC) && crp->Kdata) { if ((ttp == TAB_ODBC || ttp == TAB_JDBC) && crp->Kdata) {
if (schem && stricmp(schem, crp->Kdata->GetCharValue(i))) { if (schem && stricmp(schem, crp->Kdata->GetCharValue(i))) {
sprintf(g->Message, sprintf(g->Message,
@@ -5960,7 +5960,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
schem = crp->Kdata->GetCharValue(i); schem = crp->Kdata->GetCharValue(i);
} // endif ttp } // endif ttp
#endif // ODBC_SUPPORT || JDBC_SUPPORT #endif // ODBC_SUPPORT || JAVA_SUPPORT
default: default:
break; // Ignore break; // Ignore
} // endswitch Fld } // endswitch Fld
@@ -6008,7 +6008,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
} else } else
#endif // ODBC_SUPPORT #endif // ODBC_SUPPORT
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
if (ttp == TAB_JDBC) { if (ttp == TAB_JDBC) {
int plgtyp; int plgtyp;
@@ -7151,7 +7151,7 @@ static MYSQL_SYSVAR_STR(errmsg_dir_path, msg_path,
"../../../../storage/connect/"); // for testing "../../../../storage/connect/"); // for testing
#endif // XMSG #endif // XMSG
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
static MYSQL_SYSVAR_STR(jvm_path, JvmPath, static MYSQL_SYSVAR_STR(jvm_path, JvmPath,
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC,
"Path to the directory where is the JVM lib", "Path to the directory where is the JVM lib",
@@ -7163,7 +7163,7 @@ static MYSQL_SYSVAR_STR(class_path, ClassPath,
"Java class path", "Java class path",
// check_class_path, update_class_path, // check_class_path, update_class_path,
NULL, NULL, NULL); NULL, NULL, NULL);
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
static struct st_mysql_sys_var* connect_system_variables[]= { static struct st_mysql_sys_var* connect_system_variables[]= {
@@ -7184,14 +7184,14 @@ static struct st_mysql_sys_var* connect_system_variables[]= {
#endif // XMSG #endif // XMSG
MYSQL_SYSVAR(json_null), MYSQL_SYSVAR(json_null),
MYSQL_SYSVAR(json_grp_size), MYSQL_SYSVAR(json_grp_size),
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
MYSQL_SYSVAR(jvm_path), MYSQL_SYSVAR(jvm_path),
MYSQL_SYSVAR(class_path), MYSQL_SYSVAR(class_path),
MYSQL_SYSVAR(java_wrapper), MYSQL_SYSVAR(java_wrapper),
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
#if defined(MONGO_SUPPORT) #if defined(JAVA_SUPPORT)
MYSQL_SYSVAR(enable_mongo), //MYSQL_SYSVAR(enable_mongo),
#endif // MONGO_SUPPORT #endif // JAVA_SUPPORT
NULL NULL
}; };
@@ -7208,7 +7208,7 @@ maria_declare_plugin(connect)
0x0106, /* version number (1.05) */ 0x0106, /* version number (1.05) */
NULL, /* status variables */ NULL, /* status variables */
connect_system_variables, /* system variables */ connect_system_variables, /* system variables */
"1.06.0004", /* string version */ "1.06.0005", /* string version */
MariaDB_PLUGIN_MATURITY_STABLE /* maturity */ MariaDB_PLUGIN_MATURITY_STABLE /* maturity */
} }
maria_declare_plugin_end; maria_declare_plugin_end;

View File

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

View File

@@ -17,7 +17,7 @@
/* Include relevant MariaDB header file. */ /* Include relevant MariaDB header file. */
/***********************************************************************/ /***********************************************************************/
#include <my_global.h> #include <my_global.h>
#include <m_string.h> //#include <m_string.h>
#if defined(__WIN__) #if defined(__WIN__)
#include <direct.h> // for getcwd #include <direct.h> // for getcwd
#if defined(__BORLANDC__) #if defined(__BORLANDC__)
@@ -57,6 +57,7 @@ extern "C" HINSTANCE s_hModule; // Saved module handle
extern char *JvmPath; // The connect_jvm_path global variable value extern char *JvmPath; // The connect_jvm_path global variable value
extern char *ClassPath; // The connect_class_path global variable value extern char *ClassPath; // The connect_class_path global variable value
char *GetPluginDir(void);
char *GetJavaWrapper(void); // The connect_java_wrapper variable value char *GetJavaWrapper(void); // The connect_java_wrapper variable value
/***********************************************************************/ /***********************************************************************/
@@ -453,7 +454,7 @@ bool JAVAConn::Open(PGLOBAL g)
vm_args.options = options; vm_args.options = options;
vm_args.ignoreUnrecognized = false; // invalid options make the JVM init fail vm_args.ignoreUnrecognized = false; // invalid options make the JVM init fail
//=============== load and initialize Java VM and JNI interface ============= //=============== load and initialize Java VM and JNI interface =============
rc = CreateJavaVM(&jvm, (void**)&env, &vm_args); // YES !! rc = CreateJavaVM(&jvm, (void**)&env, &vm_args); // YES !!
delete options; // we then no longer need the initialisation options. delete options; // we then no longer need the initialisation options.

View File

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

View File

@@ -6,7 +6,7 @@
#define DEFAULT_QUERY_TIMEOUT -1 // means do not set #define DEFAULT_QUERY_TIMEOUT -1 // means do not set
typedef struct jdbc_parms { typedef struct jdbc_parms {
int CheckSize(int rows); int CheckSize(int rows);
PCSZ Driver; // JDBC driver PCSZ Driver; // JDBC driver
PCSZ Url; // Driver URL PCSZ Url; // Driver URL
PCSZ User; // User connect info PCSZ User; // User connect info

View File

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

View File

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

View File

@@ -43,7 +43,6 @@ typedef struct {
int len; int len;
} STRG, *PSG; } STRG, *PSG;
bool IsNum(PSZ s);
char *NextChr(PSZ s, char sep); char *NextChr(PSZ s, char sep);
char *GetJsonNull(void); char *GetJsonNull(void);
@@ -57,8 +56,8 @@ PSZ Serialize(PGLOBAL g, PJSON jsp, char *fn, int pretty);
bool SerializeArray(JOUT *js, PJAR jarp, bool b); bool SerializeArray(JOUT *js, PJAR jarp, bool b);
bool SerializeObject(JOUT *js, PJOB jobp); bool SerializeObject(JOUT *js, PJOB jobp);
bool SerializeValue(JOUT *js, PJVAL jvp); bool SerializeValue(JOUT *js, PJVAL jvp);
bool IsNum(PSZ s);
char *NextChr(PSZ s, char sep); char *NextChr(PSZ s, char sep);
DllExport bool IsNum(PSZ s);
/***********************************************************************/ /***********************************************************************/
/* Class JOUT. Used by Serialize. */ /* Class JOUT. Used by Serialize. */

View File

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

View File

@@ -18,12 +18,13 @@
#include "plgdbsem.h" #include "plgdbsem.h"
#include "xtable.h" #include "xtable.h"
#include "tabext.h" #include "tabext.h"
#include "filter.h"
#if defined(CMGO_SUPPORT) #if defined(CMGO_SUPPORT)
#include "tabcmg.h" #include "tabcmg.h"
#endif // MONGO_SUPPORT #endif // CMGO_SUPPORT
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
#include "tabjmg.h" #include "tabjmg.h"
#endif // JDBC_SUPPORT #endif // JAVA_SUPPORT
#include "resource.h" #include "resource.h"
/***********************************************************************/ /***********************************************************************/
@@ -32,8 +33,89 @@
#define MAXCOL 200 /* Default max column nb in result */ #define MAXCOL 200 /* Default max column nb in result */
#define TYPE_UNKNOWN 12 /* Must be greater than other types */ #define TYPE_UNKNOWN 12 /* Must be greater than other types */
bool MakeSelector(PGLOBAL g, PFIL fp, PSTRG s);
bool IsNum(PSZ s); bool IsNum(PSZ s);
/***********************************************************************/
/* Make selector json representation for Mongo tables. */
/***********************************************************************/
bool MakeSelector(PGLOBAL g, PFIL fp, PSTRG s)
{
OPVAL opc = fp->GetOpc();
s->Append('{');
if (opc == OP_AND || opc == OP_OR) {
if (fp->GetArgType(0) != TYPE_FILTER || fp->GetArgType(1) != TYPE_FILTER)
return true;
s->Append("\"$");
s->Append(opc == OP_AND ? "and" : "or");
s->Append("\":[");
if (MakeSelector(g, (PFIL)fp->Arg(0), s))
return true;
s->Append(',');
if (MakeSelector(g, (PFIL)fp->Arg(1), s))
return true;
s->Append(']');
} else {
if (fp->GetArgType(0) != TYPE_COLBLK)
return true;
s->Append('"');
s->Append(((PCOL)fp->Arg(0))->GetJpath(g, false));
s->Append("\":{\"$");
switch (opc) {
case OP_EQ:
s->Append("eq");
break;
case OP_NE:
s->Append("ne");
break;
case OP_GT:
s->Append("gt");
break;
case OP_GE:
s->Append("gte");
break;
case OP_LT:
s->Append("lt");
break;
case OP_LE:
s->Append("lte");
break;
case OP_NULL:
case OP_LIKE:
case OP_EXIST:
default:
return true;
} // endswitch Opc
s->Append("\":");
if (fp->GetArgType(1) == TYPE_COLBLK) {
s->Append("\"$");
s->Append(((PEXTCOL)fp->Arg(1))->GetJpath(g, false));
s->Append('"');
} else {
char buf[501];
fp->Arg(1)->Prints(g, buf, 500);
s->Append(buf);
} // endif Type
s->Append('}');
} // endif opc
s->Append('}');
return false;
} // end of MakeSelector
/***********************************************************************/ /***********************************************************************/
/* MGOColumns: construct the result blocks containing the description */ /* MGOColumns: construct the result blocks containing the description */
/* of all the columns of a document contained inside MongoDB. */ /* of all the columns of a document contained inside MongoDB. */
@@ -49,7 +131,7 @@ PQRYRES MGOColumns(PGLOBAL g, PCSZ db, PCSZ uri, PTOS topt, bool info)
int i, n = 0; int i, n = 0;
PCSZ drv; PCSZ drv;
PBCOL bcp; PBCOL bcp;
MGODISC *cmgd; MGODISC *cmgd = NULL;
PQRYRES qrp; PQRYRES qrp;
PCOLRES crp; PCOLRES crp;
@@ -72,7 +154,7 @@ PQRYRES MGOColumns(PGLOBAL g, PCSZ db, PCSZ uri, PTOS topt, bool info)
goto err; goto err;
#endif #endif
} else if (drv && toupper(*drv) == 'J') { } else if (drv && toupper(*drv) == 'J') {
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
cmgd = new(g) JMGDISC(g, (int*)length); cmgd = new(g) JMGDISC(g, (int*)length);
#else #else
sprintf(g->Message, "Mongo %s Driver not available", "Java"); sprintf(g->Message, "Mongo %s Driver not available", "Java");
@@ -142,7 +224,7 @@ skipit:
return qrp; return qrp;
err: err:
if (cmgd->tmgp) if (cmgd && cmgd->tmgp)
cmgd->tmgp->CloseDB(g); cmgd->tmgp->CloseDB(g);
return NULL; return NULL;
@@ -181,7 +263,7 @@ int MGODISC::GetColumns(PGLOBAL g, PCSZ db, PCSZ uri, PTOS topt)
/* Open the MongoDB collection. */ /* Open the MongoDB collection. */
/*********************************************************************/ /*********************************************************************/
tdp = new(g) MGODEF; tdp = new(g) MGODEF;
tdp->Uri = uri; tdp->Uri = (uri && *uri) ? uri : "mongodb://localhost:27017";
tdp->Driver = drv; tdp->Driver = drv;
tdp->Tabname = GetStringTableOption(g, topt, "Name", NULL); tdp->Tabname = GetStringTableOption(g, topt, "Name", NULL);
tdp->Tabname = GetStringTableOption(g, topt, "Tabname", tdp->Tabname); tdp->Tabname = GetStringTableOption(g, topt, "Tabname", tdp->Tabname);
@@ -346,7 +428,7 @@ PTDB MGODEF::GetTable(PGLOBAL g, MODE m)
return NULL; return NULL;
#endif #endif
} else if (Driver && toupper(*Driver) == 'J') { } else if (Driver && toupper(*Driver) == 'J') {
#if defined(JDBC_SUPPORT) #if defined(JAVA_SUPPORT)
if (Catfunc == FNC_COL) if (Catfunc == FNC_COL)
return new(g) TDBJGL(this); return new(g) TDBJGL(this);
else else

View File

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

View File

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

View File

@@ -1,5 +1,4 @@
SET GLOBAL connect_class_path='C:/MariaDB-10.2/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo2.jar'; SET GLOBAL connect_class_path='C:/MariaDB-10.2/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo2.jar';
set connect_enable_mongo=1;
# #
# Test the MONGO table type # Test the MONGO table type
# #
@@ -310,7 +309,7 @@ loc_0 double(12,6) NOT NULL `FIELD_FORMAT`='loc.0',
loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1', loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1',
pop int(11) NOT NULL, pop int(11) NOT NULL,
state char(2) NOT NULL) state char(2) NOT NULL)
ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE='MONGO' TABNAME='cities' ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE=JSON TABNAME='cities'
OPTION_LIST='Driver=Java,Version=2' CONNECTION='mongodb://localhost:27017' LRECL=4096 DATA_CHARSET='utf8'; OPTION_LIST='Driver=Java,Version=2' CONNECTION='mongodb://localhost:27017' LRECL=4096 DATA_CHARSET='utf8';
# Using SQL for grouping # Using SQL for grouping
SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC;
@@ -382,4 +381,3 @@ planner 167 41.75
postcard 23 5.75 postcard 23 5.75
DROP TABLE t1; DROP TABLE t1;
true true
set connect_enable_mongo=0;

View File

@@ -1,5 +1,4 @@
SET GLOBAL connect_class_path='C:/MariaDB-10.2/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo3.jar'; SET GLOBAL connect_class_path='C:/MariaDB-10.2/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo3.jar';
set connect_enable_mongo=1;
# #
# Test the MONGO table type # Test the MONGO table type
# #
@@ -310,7 +309,7 @@ loc_0 double(12,6) NOT NULL `FIELD_FORMAT`='loc.0',
loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1', loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1',
pop int(11) NOT NULL, pop int(11) NOT NULL,
state char(2) NOT NULL) state char(2) NOT NULL)
ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE='MONGO' TABNAME='cities' ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE=JSON TABNAME='cities'
OPTION_LIST='Driver=Java,Version=3' CONNECTION='mongodb://localhost:27017' LRECL=4096 DATA_CHARSET='utf8'; OPTION_LIST='Driver=Java,Version=3' CONNECTION='mongodb://localhost:27017' LRECL=4096 DATA_CHARSET='utf8';
# Using SQL for grouping # Using SQL for grouping
SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC;
@@ -382,4 +381,3 @@ planner 167 41.75
postcard 23 5.75 postcard 23 5.75
DROP TABLE t1; DROP TABLE t1;
true true
set connect_enable_mongo=0;

View File

@@ -1,4 +1,3 @@
set connect_enable_mongo=1;
# #
# Test the MONGO table type # Test the MONGO table type
# #
@@ -309,7 +308,7 @@ loc_0 double(12,6) NOT NULL `FIELD_FORMAT`='loc.0',
loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1', loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1',
pop int(11) NOT NULL, pop int(11) NOT NULL,
state char(2) NOT NULL) state char(2) NOT NULL)
ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE='MONGO' TABNAME='cities' ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE=JSON TABNAME='cities'
OPTION_LIST='Driver=C,Version=0' CONNECTION='mongodb://localhost:27017' LRECL=1024 DATA_CHARSET='utf8'; OPTION_LIST='Driver=C,Version=0' CONNECTION='mongodb://localhost:27017' LRECL=1024 DATA_CHARSET='utf8';
# Using SQL for grouping # Using SQL for grouping
SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC;
@@ -381,4 +380,3 @@ planner 167 41.75
postcard 23 5.75 postcard 23 5.75
DROP TABLE t1; DROP TABLE t1;
true true
set connect_enable_mongo=0;

View File

@@ -1,4 +1,3 @@
set connect_enable_mongo=1;
# #
# Test the MONGO table type # Test the MONGO table type
# #
@@ -305,7 +304,7 @@ loc_0 double(12,6) NOT NULL `FIELD_FORMAT`='loc.0',
loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1', loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1',
pop int(11) NOT NULL, pop int(11) NOT NULL,
state char(2) NOT NULL) state char(2) NOT NULL)
ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE='MONGO' TABNAME='cities' ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE=MONGO TABNAME='cities'
OPTION_LIST='Driver=C,Version=0' DATA_CHARSET='utf8'; OPTION_LIST='Driver=C,Version=0' DATA_CHARSET='utf8';
# Using SQL for grouping # Using SQL for grouping
SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC;
@@ -377,4 +376,3 @@ planner 167 41.750000
postcard 23 5.750000 postcard 23 5.750000
DROP TABLE t1; DROP TABLE t1;
true true
set connect_enable_mongo=0;

View File

@@ -1,5 +1,4 @@
SET GLOBAL connect_class_path='C:/MariaDB-10.2/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo2.jar'; SET GLOBAL connect_class_path='C:/MariaDB-10.2/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo2.jar';
set connect_enable_mongo=1;
# #
# Test the MONGO table type # Test the MONGO table type
# #
@@ -306,7 +305,7 @@ loc_0 double(12,6) NOT NULL `FIELD_FORMAT`='loc.0',
loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1', loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1',
pop int(11) NOT NULL, pop int(11) NOT NULL,
state char(2) NOT NULL) state char(2) NOT NULL)
ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE='MONGO' TABNAME='cities' ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE=MONGO TABNAME='cities'
OPTION_LIST='Driver=Java,Version=2' DATA_CHARSET='utf8'; OPTION_LIST='Driver=Java,Version=2' DATA_CHARSET='utf8';
# Using SQL for grouping # Using SQL for grouping
SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC;
@@ -378,4 +377,3 @@ planner 167 41.75
postcard 23 5.75 postcard 23 5.75
DROP TABLE t1; DROP TABLE t1;
true true
set connect_enable_mongo=0;

View File

@@ -1,5 +1,4 @@
SET GLOBAL connect_class_path='C:/MariaDB-10.2/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo3.jar'; SET GLOBAL connect_class_path='C:/MariaDB-10.2/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo3.jar';
set connect_enable_mongo=1;
# #
# Test the MONGO table type # Test the MONGO table type
# #
@@ -306,7 +305,7 @@ loc_0 double(12,6) NOT NULL `FIELD_FORMAT`='loc.0',
loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1', loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1',
pop int(11) NOT NULL, pop int(11) NOT NULL,
state char(2) NOT NULL) state char(2) NOT NULL)
ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE='MONGO' TABNAME='cities' ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE=MONGO TABNAME='cities'
OPTION_LIST='Driver=Java,Version=3' DATA_CHARSET='utf8'; OPTION_LIST='Driver=Java,Version=3' DATA_CHARSET='utf8';
# Using SQL for grouping # Using SQL for grouping
SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC;
@@ -378,4 +377,3 @@ planner 167 41.75
postcard 23 5.75 postcard 23 5.75
DROP TABLE t1; DROP TABLE t1;
true true
set connect_enable_mongo=0;

View File

@@ -9,29 +9,13 @@ t1 CREATE TABLE `t1` (
) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`='ODBC' `CATFUNC`='Sources' ) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`='ODBC' `CATFUNC`='Sources'
SELECT * FROM t1; SELECT * FROM t1;
Name Description Name Description
dBASE Files Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)
PLUGDB_DEBUG PLUGODBC_Driver
PLUGDB_ODBC PLUGODBC_Driver
SafeDB_ODBC SDB_ODBC_Driver
Firebird Firebird/InterBase(r) driver
ConnectEngineXLS Microsoft Excel Driver (*.xls)
Excel Files Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb) Excel Files Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)
MariaODBC MySQL ODBC 5.2a Driver
MariaODBCbeta MariaDB ODBC 1.0 Driver
MyODBC MySQL ODBC 5.2a Driver
MS Access Database Microsoft Access Driver (*.mdb, *.accdb) MS Access Database Microsoft Access Driver (*.mdb, *.accdb)
MS Access Db1 Microsoft Access Driver (*.mdb)
MySQL-ANSI MySQL ODBC 5.3 ANSI Driver
MySQL-Unicode MySQL ODBC 5.3 Unicode Driver
Xtreme Sample Database 2008 Microsoft Access Driver (*.mdb)
PlugDB test PLUGODBC_Driver
SQLite3 Datasource SQLite3 ODBC Driver
SQLite Datasource SQLite ODBC Driver
SQLite UTF-8 Datasource SQLite ODBC (UTF-8) Driver
ORACLE_TEST Oracle in XE ORACLE_TEST Oracle in XE
ConnectEnginePostgresql PostgreSQL ODBC Driver(ANSI) SQLServer_Test SQL Server Native Client 11.0
Firebird Firebird/InterBase(r) driver
ConnectEngineOracle Oracle in XE ConnectEngineOracle Oracle in XE
ConnectEngineSQLServer SQL Server ConnectEngineSQLServer SQL Server Native Client 11.0
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CATFUNC=Drivers; CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CATFUNC=Drivers;
SHOW CREATE TABLE t1; SHOW CREATE TABLE t1;
@@ -42,51 +26,12 @@ t1 CREATE TABLE `t1` (
) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`='ODBC' `CATFUNC`='Drivers' ) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`='ODBC' `CATFUNC`='Drivers'
SELECT * FROM t1; SELECT * FROM t1;
Description Attributes Description Attributes
SQL Server UsageCount=1;SQLLevel=1;FileUsage=0;DriverODBCVer=03.50;ConnectFunctions=YYY;APILevel=2;CPTimeout=60; SQL Server APILevel=2;ConnectFunctions=YYY;CPTimeout=60;DriverODBCVer=03.50;FileUsage=0;SQLLevel=1;UsageCount=1;
Microsoft ODBC for Oracle UsageCount=1;SQLLevel=1;FileUsage=0;DriverODBCVer=02.50;ConnectFunctions=YYY;APILevel=1;CPTimeout=120;
Microsoft Access Driver (*.mdb) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=2;FileExtns=*.mdb;SQLLevel=0;
Microsoft Access-Treiber (*.mdb) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=2;FileExtns=*.mdb;SQLLevel=0;
Driver do Microsoft Access (*.mdb) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=2;FileExtns=*.mdb;SQLLevel=0;
Microsoft dBase Driver (*.dbf) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.dbf,*.ndx,*.mdx;SQLLevel=0;
Microsoft dBase-Treiber (*.dbf) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.dbf,*.ndx,*.mdx;SQLLevel=0;
Driver do Microsoft dBase (*.dbf) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.dbf,*.ndx,*.mdx;SQLLevel=0;
Microsoft Excel Driver (*.xls) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.xls;SQLLevel=0;
Microsoft Excel-Treiber (*.xls) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.xls;SQLLevel=0;
Driver do Microsoft Excel(*.xls) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.xls;SQLLevel=0;
Microsoft Paradox Driver (*.db ) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.db;SQLLevel=0;
Microsoft Paradox-Treiber (*.db ) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.db;SQLLevel=0;
Driver do Microsoft Paradox (*.db ) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.db;SQLLevel=0;
Microsoft Text Driver (*.txt; *.csv) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.,*.asc,*.csv,*.tab,*.txt,*.csv;SQLLevel=0;
Microsoft Text-Treiber (*.txt; *.csv) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.,*.asc,*.csv,*.tab,*.txt,*.csv;SQLLevel=0;
Driver da Microsoft para arquivos texto (*.txt; *.csv) UsageCount=1;APILevel=1;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.,*.asc,*.csv,*.tab,*.txt,*.csv;SQLLevel=0;
Microsoft Visual FoxPro Driver UsageCount=1;APILevel=0;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.dbf,*.cdx,*.idx,*.fpt;SQLLevel=0;
Microsoft FoxPro VFP Driver (*.dbf) UsageCount=1;APILevel=0;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.dbf,*.cdx,*.idx,*.fpt;SQLLevel=0;
Microsoft dBase VFP Driver (*.dbf) UsageCount=1;APILevel=0;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.dbf,*.cdx,*.idx,*.fpt;SQLLevel=0;
Microsoft Visual FoxPro-Treiber UsageCount=1;APILevel=0;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.dbf,*.cdx,*.idx,*.fpt;SQLLevel=0;
Driver para o Microsoft Visual FoxPro UsageCount=1;APILevel=0;ConnectFunctions=YYN;DriverODBCVer=02.50;FileUsage=1;FileExtns=*.dbf,*.cdx,*.idx,*.fpt;SQLLevel=0;
SQL Native Client UsageCount=1;APILevel=2;ConnectFunctions=YYY;CPTimeout=60;DriverODBCVer=09.00;FileUsage=0;SQLLevel=1;
CR Sybase Wire Protocol ODBC Driver 6.0 UsageCount=1;APILevel=1;ConnectFunctions=YYY;DriverODBCVer=3.52;FileUsage=0;SQLLevel=0;CPTimeout=60;HelpRootDirectory=C:\Program Files\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\win32_x86\odbc\help;
CR SQL Server Native Wire Protocol ODBC Driver 6.0 UsageCount=1;APILevel=1;ConnectFunctions=YYY;DriverODBCVer=3.52;FileUsage=0;SQLLevel=1;CPTimeout=60;HelpRootDirectory=C:\Program Files\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\win32_x86\odbc\help;
CR SQL Server Classic Wire Protocol ODBC Driver 6.0 UsageCount=1;APILevel=1;ConnectFunctions=YYY;DriverODBCVer=3.52;FileUsage=0;SQLLevel=1;CPTimeout=60;HelpRootDirectory=C:\Program Files\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\win32_x86\odbc\help;
CR TextFile ODBC Driver 6.0 UsageCount=1;APILevel=1;ConnectFunctions=YYY;DriverODBCVer=3.52;FileUsage=1;FileExtns=*.*;SQLLevel=0;CPTimeout=60;HelpRootDirectory=C:\Program Files\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\win32_x86\odbc\help;
PLUGODBC_Driver UsageCount=1;
SDB_ODBC_Driver UsageCount=2;
Microsoft Access Text Driver (*.txt, *.csv) SQLLevel=0;FileExtns=*.txt, *.csv;FileUsage=2;DriverODBCVer=02.50;ConnectFunctions=YYN;APILevel=1;UsageCount=3;
Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx) SQLLevel=0;FileExtns=*.dbf, *.ndx, *.mdx;FileUsage=2;DriverODBCVer=02.50;ConnectFunctions=YYN;APILevel=1;UsageCount=3;
Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb) SQLLevel=0;FileExtns=*.xls,*.xlsx, *.xlsb;FileUsage=2;DriverODBCVer=02.50;ConnectFunctions=YYN;APILevel=1;UsageCount=3;
Microsoft Access Driver (*.mdb, *.accdb) SQLLevel=0;FileExtns=*.mdb,*.accdb;FileUsage=2;DriverODBCVer=02.50;ConnectFunctions=YYN;APILevel=1;UsageCount=3;
SQLite3 ODBC Driver UsageCount=1;
SQLite ODBC Driver UsageCount=1;
SQLite ODBC (UTF-8) Driver UsageCount=1;
Oracle in XE ConnectionFunctions=YYY;DriverODBCVer=03.51;CPTimeout=60;FileUsage=0;APILevel=1;SQLLevel=1; Oracle in XE ConnectionFunctions=YYY;DriverODBCVer=03.51;CPTimeout=60;FileUsage=0;APILevel=1;SQLLevel=1;
Oracle in instantclient_12_1 APILevel=1;ConnectionFunctions=YYY;CPTimeout=60;DriverODBCVer=03.51;FileUsage=0;SQLLevel=1;
PostgreSQL ODBC Driver(ANSI) APILevel=1;ConnectFunctions=YYN;DriverODBCVer=09.02.0100;FileUsage=0;SQLLevel=1;
PostgreSQL ODBC Driver(UNICODE) APILevel=1;ConnectFunctions=YYN;DriverODBCVer=09.02.0100;FileUsage=0;SQLLevel=1;
SQL Server Native Client 11.0 UsageCount=1;APILevel=2;ConnectFunctions=YYY;CPTimeout=60;DriverODBCVer=03.80;FileUsage=0;SQLLevel=1; SQL Server Native Client 11.0 UsageCount=1;APILevel=2;ConnectFunctions=YYY;CPTimeout=60;DriverODBCVer=03.80;FileUsage=0;SQLLevel=1;
MariaDB ODBC 1.0 Driver UsageCount=1; ODBC Driver 13 for SQL Server UsageCount=1;APILevel=2;ConnectFunctions=YYY;CPTimeout=60;DriverODBCVer=03.80;FileUsage=0;SQLLevel=1;
SQL Server Native Client RDA 11.0 UsageCount=1;APILevel=2;ConnectFunctions=YYY;CPTimeout=60;DriverODBCVer=03.80;FileUsage=0;SQLLevel=1;
Firebird/InterBase(r) driver UsageCount=1;FileExtns=*.fdb,*.gdb;APILevel=1;ConnectFunctions=YYY;FileUsage=0;DriverODBCVer=03.51;SQLLevel=1; Firebird/InterBase(r) driver UsageCount=1;FileExtns=*.fdb,*.gdb;APILevel=1;ConnectFunctions=YYY;FileUsage=0;DriverODBCVer=03.51;SQLLevel=1;
MySQL ODBC 5.3 ANSI Driver UsageCount=1;
MySQL ODBC 5.3 Unicode Driver UsageCount=1;
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CATFUNC=Tables CONNECTION='Not important'; CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=ODBC CATFUNC=Tables CONNECTION='Not important';
SHOW CREATE TABLE t1; SHOW CREATE TABLE t1;
@@ -154,9 +99,9 @@ EMP_NO FIRST_NAME LAST_NAME PHONE_EXT HIRE_DATE DEPT_NO JOB_CODE JOB_GRADE JOB_C
113 Mary Page 845 1993-04-12 00:00:00 671 Eng 4 USA 48000.00 Page, Mary 113 Mary Page 845 1993-04-12 00:00:00 671 Eng 4 USA 48000.00 Page, Mary
114 Bill Parker 247 1993-06-01 00:00:00 623 Eng 5 USA 35000.00 Parker, Bill 114 Bill Parker 247 1993-06-01 00:00:00 623 Eng 5 USA 35000.00 Parker, Bill
118 Takashi Yamamoto 23 1993-07-01 00:00:00 115 SRep 4 Japan 7480000.00 Yamamoto, Takashi 118 Takashi Yamamoto 23 1993-07-01 00:00:00 115 SRep 4 Japan 7480000.00 Yamamoto, Takashi
121 Roberto Ferrari 1 1993-07-12 00:00:00 125 SRep 4 Italy 99000000.00 Ferrari, Roberto 121 Roberto Ferrari 1 1993-07-12 00:00:00 125 SRep 4 Italy 33000.00 Ferrari, Roberto
127 Michael Yanowski 492 1993-08-09 00:00:00 100 SRep 4 USA 44000.00 Yanowski, Michael 127 Michael Yanowski 492 1993-08-09 00:00:00 100 SRep 4 USA 44000.00 Yanowski, Michael
134 Jacques Glon NULL 1993-08-23 00:00:00 123 SRep 4 France 390500.00 Glon, Jacques 134 Jacques Glon NULL 1993-08-23 00:00:00 123 SRep 4 France 38500.00 Glon, Jacques
136 Scott Johnson 265 1993-09-13 00:00:00 623 Doc 3 USA 60000.00 Johnson, Scott 136 Scott Johnson 265 1993-09-13 00:00:00 623 Doc 3 USA 60000.00 Johnson, Scott
138 T.J. Green 218 1993-11-01 00:00:00 621 Eng 4 USA 36000.00 Green, T.J. 138 T.J. Green 218 1993-11-01 00:00:00 621 Eng 4 USA 36000.00 Green, T.J.
141 Pierre Osborne NULL 1994-01-03 00:00:00 121 SRep 4 Switzerland 110000.00 Osborne, Pierre 141 Pierre Osborne NULL 1994-01-03 00:00:00 121 SRep 4 Switzerland 110000.00 Osborne, Pierre

View File

@@ -1,4 +1,4 @@
set connect_enable_mongo=1; #set connect_enable_mongo=1;
--echo # --echo #
--echo # Test the MONGO table type --echo # Test the MONGO table type
@@ -156,7 +156,7 @@ eval CREATE TABLE t1 (
loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1', loc_1 char(12) NOT NULL `FIELD_FORMAT`='loc.1',
pop int(11) NOT NULL, pop int(11) NOT NULL,
state char(2) NOT NULL) state char(2) NOT NULL)
ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE='MONGO' TABNAME='cities' ENGINE=CONNECT CONNECTION='mongodb://localhost:27017' TABLE_TYPE=$TYPE TABNAME='cities'
OPTION_LIST='Driver=$DRV,Version=$VERS' $CONN DATA_CHARSET='utf8'; OPTION_LIST='Driver=$DRV,Version=$VERS' $CONN DATA_CHARSET='utf8';
--echo # Using SQL for grouping --echo # Using SQL for grouping
SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC; SELECT state, sum(pop) AS totalPop FROM t1 GROUP BY state HAVING totalPop >= 10000000 ORDER BY totalPop DESC;
@@ -204,4 +204,4 @@ SELECT * FROM t1;
DROP TABLE t1; DROP TABLE t1;
--exec $MONGO --eval "db.testcoll.drop()" --quiet --exec $MONGO --eval "db.testcoll.drop()" --quiet
set connect_enable_mongo=0; #set connect_enable_mongo=0;

View File

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

View File

@@ -11,7 +11,7 @@
#include "block.h" #include "block.h"
#include "catalog.h" #include "catalog.h"
#include "my_sys.h" //#include "my_sys.h"
#include "mycat.h" #include "mycat.h"
typedef class INDEXDEF *PIXDEF; typedef class INDEXDEF *PIXDEF;
@@ -114,7 +114,7 @@ public:
int Sort; /* Table already sorted ??? */ int Sort; /* Table already sorted ??? */
int Multiple; /* 0: No 1: DIR 2: Section 3: filelist */ int Multiple; /* 0: No 1: DIR 2: Section 3: filelist */
int Degree; /* Number of columns in the table */ int Degree; /* Number of columns in the table */
int Pseudo; /* Bit: 1 ROWID }Ok, 2 FILEID Ok */ int Pseudo; /* Bit: 1 ROWID }Ok, 2 FILEID Ok */
bool Read_Only; /* true for read only tables */ bool Read_Only; /* true for read only tables */
const CHARSET_INFO *m_data_charset; const CHARSET_INFO *m_data_charset;
const char *csname; /* Table charset name */ const char *csname; /* Table charset name */

View File

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

View File

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

View File

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

View File

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

View File

@@ -120,7 +120,7 @@ PQRYRES TabColumns(PGLOBAL g, THD *thd, const char *db,
FLD_REM, FLD_NO, FLD_CHARSET}; FLD_REM, FLD_NO, FLD_CHARSET};
unsigned int length[] = {0, 4, 16, 4, 4, 4, 4, 4, 0, 32, 32}; unsigned int length[] = {0, 4, 16, 4, 4, 4, 4, 4, 0, 32, 32};
PCSZ fmt; PCSZ fmt;
char *pn, *tn, *fld, *colname, v; //, *chset; char *pn, *tn, *fld, *colname, v; // *chset
int i, n, ncol = sizeof(buftyp) / sizeof(int); int i, n, ncol = sizeof(buftyp) / sizeof(int);
int prec, len, type, scale; int prec, len, type, scale;
int zconv = GetConvSize(); int zconv = GetConvSize();
@@ -185,7 +185,7 @@ PQRYRES TabColumns(PGLOBAL g, THD *thd, const char *db,
colname = (char *)fp->field_name; colname = (char *)fp->field_name;
crp->Kdata->SetValue(colname, i); crp->Kdata->SetValue(colname, i);
// chset = (char *)fp->charset()->name; // chset = (char *)fp->charset()->name;
// v = (!strcmp(chset, "binary")) ? 'B' : 0; // v = (!strcmp(chset, "binary")) ? 'B' : 0;
v = 0; v = 0;

View File

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

View File

@@ -40,7 +40,7 @@ class MBVALS : public BLOCK {
// Methods // Methods
void *GetMemp(void) {return Mblk.Memp;} void *GetMemp(void) {return Mblk.Memp;}
PVBLK Allocate(PGLOBAL g, int type, int len, int prec, PVBLK Allocate(PGLOBAL g, int type, int len, int prec,
int n, bool sub = FALSE); int n, bool sub = false);
bool ReAllocate(PGLOBAL g, int n); bool ReAllocate(PGLOBAL g, int n);
void Free(void); void Free(void);

View File

@@ -1656,39 +1656,48 @@ bool TYPVAL<PSZ>::Compute(PGLOBAL g, PVAL *vp, int np, OPVAL op)
char *p[2], val[2][32]; char *p[2], val[2][32];
int i; int i;
for (i = 0; i < np; i++) if (trace)
p[i] = vp[i]->IsNull() ? NULL : vp[i]->GetCharString(val[i]); htrc("Compute: np=%d op=%d\n", np, op);
if (p[i-1]) { for (i = 0; i < np; i++)
switch (op) { if (!vp[i]->IsNull()) {
case OP_CNC: p[i] = vp[i]->GetCharString(val[i]);
assert(np == 1 || np == 2);
if (np == 2) if (trace)
SetValue_psz(p[0]); htrc("p[%d]=%s\n", i, p[i]);
if ((i = Len - (signed)strlen(Strp)) > 0) } else
strncat(Strp, p[np - 1], i); return false;
break; switch (op) {
case OP_MIN: case OP_CNC:
assert(np == 2); assert(np == 1 || np == 2);
SetValue_psz((strcmp(p[0], p[1]) < 0) ? p[0] : p[1]);
break;
case OP_MAX:
assert(np == 2);
SetValue_psz((strcmp(p[0], p[1]) > 0) ? p[0] : p[1]);
break;
default:
// sprintf(g->Message, MSG(BAD_EXP_OPER), op);
strcpy(g->Message, "Function not supported");
return true;
} // endswitch op
Null = false; if (np == 2)
} // endif p[i] SetValue_psz(p[0]);
Null = false; if ((i = Len - (signed)strlen(Strp)) > 0)
strncat(Strp, p[np - 1], i);
if (trace)
htrc("Strp=%s\n", Strp);
break;
case OP_MIN:
assert(np == 2);
SetValue_psz((strcmp(p[0], p[1]) < 0) ? p[0] : p[1]);
break;
case OP_MAX:
assert(np == 2);
SetValue_psz((strcmp(p[0], p[1]) > 0) ? p[0] : p[1]);
break;
default:
// sprintf(g->Message, MSG(BAD_EXP_OPER), op);
strcpy(g->Message, "Function not supported");
return true;
} // endswitch op
Null = false;
return false; return false;
} // end of Compute } // end of Compute

View File

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

View File

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