Skip to content

Commit 5b9c32e

Browse files
committed
Merge remote-tracking branch 'connect/10.2' into 10.2
2 parents 22c322c + bf34e9d commit 5b9c32e

32 files changed

+440
-214
lines changed

storage/connect/CMakeLists.txt

Lines changed: 50 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ int main() {
245245
ENDIF(CONNECT_WITH_ODBC)
246246

247247
#
248-
# JDBC and MongoDB Java Driver
248+
# JDBC with MongoDB Java Driver included but disabled
249249
#
250250
OPTION(CONNECT_WITH_MONGO "Compile CONNECT storage engine with MONGO support" ON)
251251
OPTION(CONNECT_WITH_JDBC "Compile CONNECT storage engine with JDBC support" ON)
@@ -265,13 +265,13 @@ IF(CONNECT_WITH_JDBC)
265265
MysqlInterface.java OracleInterface.java PostgresqlInterface.java
266266
JavaWrappers.jar)
267267
add_definitions(-DJDBC_SUPPORT)
268-
IF(CONNECT_WITH_MONGO)
268+
IF(CONNECT_WITH_MONGO)
269269
SET(CONNECT_SOURCES ${CONNECT_SOURCES}
270270
jmgfam.cpp jmgoconn.cpp mongo.cpp tabjmg.cpp
271271
jmgfam.h jmgoconn.h mongo.h tabjmg.h
272272
Mongo2Interface.java Mongo3Interface.java)
273-
add_definitions(-DMONGO_SUPPORT)
274-
ENDIF()
273+
add_definitions(-DMONGO_SUPPORT -DMONGO_ENABLED=0)
274+
ENDIF()
275275
ELSE()
276276
SET(JDBC_LIBRARY "")
277277
ENDIF()
@@ -290,33 +290,36 @@ IF(CONNECT_WITH_ZIP)
290290
ENDIF(CONNECT_WITH_ZIP)
291291

292292
#
293-
# MONGO C Driver (CMAKE NOT YET WORKING)
293+
# MONGO C Driver
294294
#
295295

296-
#IF(CONNECT_WITH_MONGO)
297-
# IF(WIN32)
298-
# # Adding some typical places to search in
299-
# SET(PC_MONGO_INCLUDE_DIRS
300-
# C:/mongo-c-driver/include
301-
# D:/mongo-c-driver/include)
302-
# SET(PC_MONGO_LIBRARY_DIRS
303-
# C:/mongo-c-driver/lib
304-
# D:/mongo-c-driver/lib)
305-
# ENDIF(WIN32)
306-
# FIND_PACKAGE(libmongoc 1.7)
307-
# IF (MONGO_FOUND)
308-
# INCLUDE_DIRECTORIES(${MONGO_INCLUDE_DIR})
309-
# SET(MONGO_LIBRARY ${MONGO_LIBRARIES})
310-
# SET(CONNECT_SOURCES ${CONNECT_SOURCES}
311-
# cmgoconn.cpp cmgfam.cpp tabcmg.cpp
312-
# cmgoconn.h cmgfam.h tabcmg.h)
313-
# add_definitions(-DCMGO_SUPPORT)
314-
# IF (NOT JAVA_FOUND AND JNI_FOUND)
315-
# SET(CONNECT_SOURCES ${CONNECT_SOURCES} mongo.cpp mongo.h)
316-
# add_definitions(-DMONGO_SUPPORT)
317-
# ENDIF (NOT JAVA_FOUND AND JNI_FOUND)
318-
# ENDIF(MONGO_FOUND)
319-
#ENDIF(CONNECT_WITH_MONGO)
296+
IF(CONNECT_WITH_MONGO)
297+
IF(WIN32)
298+
# Adding some typical places to search in
299+
SET(PC_MONGO_INCLUDE_DIRS
300+
C:/mongo-c-driver/include
301+
D:/mongo-c-driver/include)
302+
SET(PC_MONGO_LIBRARY_DIRS
303+
C:/mongo-c-driver/lib
304+
D:/mongo-c-driver/lib)
305+
ENDIF(WIN32)
306+
FIND_PACKAGE(libmongoc-1.0 1.7)
307+
IF (libmongoc-1.0_FOUND)
308+
INCLUDE_DIRECTORIES(${MONGOC_INCLUDE_DIRS})
309+
SET(MONGOC_LIBRARY ${MONGOC_LIBRARIES})
310+
SET(CONNECT_SOURCES ${CONNECT_SOURCES}
311+
cmgoconn.cpp cmgfam.cpp tabcmg.cpp
312+
cmgoconn.h cmgfam.h tabcmg.h)
313+
add_definitions(-DCMGO_SUPPORT)
314+
IF (NOT JAVA_FOUND AND JNI_FOUND)
315+
SET(CONNECT_SOURCES ${CONNECT_SOURCES} mongo.cpp mongo.h)
316+
add_definitions(-DMONGO_SUPPORT -DMONGO_ENABLED=1)
317+
ELSE ()
318+
remove_definitions(-DMONGO_ENABLED=0)
319+
add_definitions(-DMONGO_ENABLED=1)
320+
ENDIF (NOT JAVA_FOUND AND JNI_FOUND)
321+
ENDIF(libmongoc-1.0_FOUND)
322+
ENDIF(CONNECT_WITH_MONGO)
320323

321324

322325
#
@@ -337,9 +340,25 @@ MYSQL_ADD_PLUGIN(connect ${CONNECT_SOURCES}
337340
STORAGE_ENGINE
338341
COMPONENT connect-engine
339342
RECOMPILE_FOR_EMBEDDED
340-
# LINK_LIBRARIES ${ZLIB_LIBRARY} ${XML_LIBRARY} ${ICONV_LIBRARY} $(MONGO_LIBRARY)
341343
LINK_LIBRARIES ${ZLIB_LIBRARY} ${XML_LIBRARY} ${ICONV_LIBRARY}
342-
${ODBC_LIBRARY} ${JDBC_LIBRARY} ${IPHLPAPI_LIBRARY})
344+
${ODBC_LIBRARY} ${JDBC_LIBRARY} ${MONGOC_LIBRARY} ${IPHLPAPI_LIBRARY})
345+
346+
IF(NOT TARGET connect)
347+
RETURN()
348+
ENDIF()
349+
350+
# Install some extra files that belong to connect engine
351+
IF(WIN32)
352+
# install ha_connect.lib
353+
GET_TARGET_PROPERTY(CONNECT_LOCATION connect LOCATION)
354+
STRING(REPLACE "dll" "lib" CONNECT_LIB ${CONNECT_LOCATION})
355+
IF(CMAKE_CONFIGURATION_TYPES)
356+
STRING(REPLACE "${CMAKE_CFG_INTDIR}" "\${CMAKE_INSTALL_CONFIG_NAME}"
357+
CONNECT_LIB ${CONNECT_LIB})
358+
ENDIF()
359+
INSTALL(FILES ${CONNECT_LIB}
360+
DESTINATION ${INSTALL_PLUGINDIR} COMPONENT connect-engine)
361+
ENDIF(WIN32)
343362

344363
IF(NOT TARGET connect)
345364
RETURN()
@@ -368,4 +387,3 @@ IF(CONNECT_WITH_JDBC AND JAVA_FOUND AND JNI_FOUND)
368387
${CMAKE_CURRENT_BINARY_DIR}/JdbcInterface.jar
369388
DESTINATION ${INSTALL_PLUGINDIR} COMPONENT connect-engine)
370389
ENDIF()
371-

storage/connect/ha_connect.cc

Lines changed: 41 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -171,9 +171,9 @@
171171
#define JSONMAX 10 // JSON Default max grp size
172172

173173
extern "C" {
174-
char version[]= "Version 1.06.0001 April 17, 2017";
174+
char version[]= "Version 1.06.0004 September 03, 2017";
175175
#if defined(__WIN__)
176-
char compver[]= "Version 1.06.0001 " __DATE__ " " __TIME__;
176+
char compver[]= "Version 1.06.0004 " __DATE__ " " __TIME__;
177177
char slash= '\\';
178178
#else // !__WIN__
179179
char slash= '/';
@@ -359,6 +359,13 @@ static MYSQL_THDVAR_STR(java_wrapper,
359359
NULL, NULL, "wrappers/JdbcInterface");
360360
#endif // JDBC_SUPPORT
361361

362+
#if defined(MONGO_SUPPORT)
363+
// Enabling MONGO table type
364+
static MYSQL_THDVAR_BOOL(enable_mongo, PLUGIN_VAR_RQCMDARG,
365+
"Enabling the MongoDB access",
366+
NULL, NULL, MONGO_ENABLED);
367+
#endif // MONGO_SUPPORT
368+
362369
#if defined(XMSG) || defined(NEWMSG)
363370
const char *language_names[]=
364371
{
@@ -419,6 +426,10 @@ char *GetJavaWrapper(void)
419426
{return connect_hton ? THDVAR(current_thd, java_wrapper) : (char*)"wrappers/JdbcInterface";}
420427
#endif // JDBC_SUPPORT
421428

429+
#if defined(MONGO_SUPPORT)
430+
bool MongoEnabled(void) { return THDVAR(current_thd, enable_mongo); }
431+
#endif // MONGO_SUPPORT
432+
422433
extern "C" const char *msglang(void)
423434
{
424435
#if defined(FRENCH)
@@ -1285,9 +1296,14 @@ PCSZ ha_connect::GetStringOption(PCSZ opname, PCSZ sdef)
12851296
else
12861297
opval= GetListOption(xp->g, opname, options->oplist);
12871298

1288-
} else if (!stricmp(opname, "Query_String"))
1289-
opval= thd_query_string(table->in_use)->str;
1290-
else if (!stricmp(opname, "Partname"))
1299+
} else if (!stricmp(opname, "Query_String")) {
1300+
// This escapes everything and returns a wrong query
1301+
// opval = thd_query_string(table->in_use)->str;
1302+
opval = (PCSZ)PlugSubAlloc(xp->g, NULL,
1303+
thd_query_string(table->in_use)->length + 1);
1304+
strcpy((char*)opval, thd_query_string(table->in_use)->str);
1305+
// sprintf((char*)opval, "%s", thd_query_string(table->in_use)->str);
1306+
} else if (!stricmp(opname, "Partname"))
12911307
opval= partname;
12921308
else if (!stricmp(opname, "Table_charset")) {
12931309
const CHARSET_INFO *chif= (tshp) ? tshp->table_charset
@@ -1433,7 +1449,7 @@ PFOS ha_connect::GetFieldOptionStruct(Field *fdp)
14331449
void *ha_connect::GetColumnOption(PGLOBAL g, void *field, PCOLINFO pcf)
14341450
{
14351451
const char *cp;
1436-
char *chset, v;
1452+
char *chset, v = 0;
14371453
ha_field_option_struct *fop;
14381454
Field* fp;
14391455
Field* *fldp;
@@ -1486,7 +1502,6 @@ void *ha_connect::GetColumnOption(PGLOBAL g, void *field, PCOLINFO pcf)
14861502
} // endif fop
14871503

14881504
chset = (char *)fp->charset()->name;
1489-
v = (!strcmp(chset, "binary")) ? 'B' : 0;
14901505

14911506
switch (fp->type()) {
14921507
case MYSQL_TYPE_BLOB:
@@ -1501,8 +1516,9 @@ void *ha_connect::GetColumnOption(PGLOBAL g, void *field, PCOLINFO pcf)
15011516

15021517
switch (pcf->Type) {
15031518
case TYPE_STRING:
1504-
// Do something for case
1505-
cp= fp->charset()->name;
1519+
case TYPE_BIN:
1520+
// Do something for case
1521+
cp= chset;
15061522

15071523
// Find if collation name ends by _ci
15081524
if (!strcmp(cp + strlen(cp) - 3, "_ci")) {
@@ -2114,6 +2130,11 @@ int ha_connect::MakeRecord(char *buf)
21142130
charset= tdbp->data_charset();
21152131
rc= fp->store(p, strlen(p), charset, CHECK_FIELD_WARN);
21162132
break;
2133+
case TYPE_BIN:
2134+
p = value->GetCharValue();
2135+
charset = &my_charset_bin;
2136+
rc = fp->store(p, strlen(p), charset, CHECK_FIELD_WARN);
2137+
break;
21172138
case TYPE_DOUBLE:
21182139
rc= fp->store(value->GetFloatValue());
21192140
break;
@@ -5163,7 +5184,8 @@ static bool add_field(String *sql, const char *field_name, int typ, int len,
51635184
error|= sql->append("` ");
51645185
error|= sql->append(type);
51655186

5166-
if (len && typ != TYPE_DATE && (typ != TYPE_DOUBLE || dec >= 0)) {
5187+
if (typ == TYPE_STRING ||
5188+
(len && typ != TYPE_DATE && (typ != TYPE_DOUBLE || dec >= 0))) {
51675189
error|= sql->append('(');
51685190
error|= sql->append_ulonglong(len);
51695191

@@ -6389,6 +6411,7 @@ int ha_connect::create(const char *name, TABLE *table_arg,
63896411
case MYSQL_TYPE_VARCHAR:
63906412
case MYSQL_TYPE_VAR_STRING:
63916413
case MYSQL_TYPE_STRING:
6414+
#if 0
63926415
if (!fp->field_length) {
63936416
sprintf(g->Message, "Unsupported 0 length for column %s",
63946417
fp->field_name);
@@ -6398,7 +6421,7 @@ int ha_connect::create(const char *name, TABLE *table_arg,
63986421
MYF(0), fp->field_name);
63996422
DBUG_RETURN(rc);
64006423
} // endif fp
6401-
6424+
#endif // 0
64026425
break; // To be checked
64036426
case MYSQL_TYPE_BIT:
64046427
case MYSQL_TYPE_NULL:
@@ -7166,7 +7189,10 @@ static struct st_mysql_sys_var* connect_system_variables[]= {
71667189
MYSQL_SYSVAR(class_path),
71677190
MYSQL_SYSVAR(java_wrapper),
71687191
#endif // JDBC_SUPPORT
7169-
NULL
7192+
#if defined(MONGO_SUPPORT)
7193+
MYSQL_SYSVAR(enable_mongo),
7194+
#endif // MONGO_SUPPORT
7195+
NULL
71707196
};
71717197

71727198
maria_declare_plugin(connect)
@@ -7175,14 +7201,14 @@ maria_declare_plugin(connect)
71757201
&connect_storage_engine,
71767202
"CONNECT",
71777203
"Olivier Bertrand",
7178-
"Management of External Data (SQL/MED), including many file formats",
7204+
"Management of External Data (SQL/NOSQL/MED), including many file formats",
71797205
PLUGIN_LICENSE_GPL,
71807206
connect_init_func, /* Plugin Init */
71817207
connect_done_func, /* Plugin Deinit */
71827208
0x0106, /* version number (1.05) */
71837209
NULL, /* status variables */
71847210
connect_system_variables, /* system variables */
7185-
"1.06.0001", /* string version */
7186-
MariaDB_PLUGIN_MATURITY_BETA /* maturity */
7211+
"1.06.0004", /* string version */
7212+
MariaDB_PLUGIN_MATURITY_STABLE /* maturity */
71877213
}
71887214
maria_declare_plugin_end;

storage/connect/ha_connect.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,13 @@ const char *GetValStr(OPVAL vop, bool neg);
348348
PFIL CondFilter(PGLOBAL g, Item *cond);
349349
//PFIL CheckFilter(PGLOBAL g);
350350

351+
/** admin commands - called from mysql_admin_table */
352+
virtual int check(THD* thd, HA_CHECK_OPT* check_opt)
353+
{
354+
// TODO: implement it
355+
return HA_ADMIN_OK; // Just to avoid error message with checktables
356+
} // end of check
357+
351358
/**
352359
Number of rows in table. It will only be called if
353360
(table_flags() & (HA_HAS_RECORDS | HA_STATS_RECORDS_IS_EXACT)) != 0

storage/connect/jsonudf.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -539,7 +539,7 @@ PVAL JSNX::CalculateArray(PGLOBAL g, PJAR arp, int n)
539539
SetJsonValue(g, MulVal, jvp, n);
540540

541541
if (!MulVal->IsNull()) {
542-
switch (op) {
542+
switch (op) {
543543
case OP_CNC:
544544
if (Nodes[n].CncVal) {
545545
val[0] = Nodes[n].CncVal;

storage/connect/mycat.cc

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@
111111
extern "C" HINSTANCE s_hModule; // Saved module handle
112112
#endif // !__WIN__
113113

114+
#if defined(MONGO_SUPPORT)
115+
bool MongoEnabled(void);
116+
#endif // MONGO_SUPPORT
114117
PQRYRES OEMColumns(PGLOBAL g, PTOS topt, char *tab, char *db, bool info);
115118

116119
/***********************************************************************/
@@ -558,7 +561,13 @@ PRELDEF MYCAT::MakeTableDesc(PGLOBAL g, PTABLE tablep, LPCSTR am)
558561
case TAB_VIR: tdp= new(g) VIRDEF; break;
559562
case TAB_JSON: tdp= new(g) JSONDEF; break;
560563
#if defined(MONGO_SUPPORT)
561-
case TAB_MONGO: tdp = new(g) MGODEF; break;
564+
case TAB_MONGO:
565+
if (MongoEnabled())
566+
tdp = new(g) MGODEF;
567+
else
568+
strcpy(g->Message, "MONGO type not enabled");
569+
570+
break;
562571
#endif // MONGO_SUPPORT
563572
#if defined(ZIP_SUPPORT)
564573
case TAB_ZIP: tdp= new(g) ZIPDEF; break;

storage/connect/myconn.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,7 @@ int MYSQLC::Open(PGLOBAL g, const char *host, const char *db,
472472
int pt, const char *csname)
473473
{
474474
const char *pipe = NULL;
475-
uint cto = 6000, nrt = 12000;
475+
uint cto = 10, nrt = 20;
476476
my_bool my_true= 1;
477477

478478
m_DB = mysql_init(NULL);
@@ -525,7 +525,8 @@ int MYSQLC::Open(PGLOBAL g, const char *host, const char *db,
525525
mysql_options(m_DB, MYSQL_OPT_USE_THREAD_SPECIFIC_MEMORY,
526526
(char*)&my_true);
527527

528-
if (!mysql_real_connect(m_DB, host, user, pwd, db, pt, pipe, CLIENT_MULTI_RESULTS)) {
528+
if (!mysql_real_connect(m_DB, host, user, pwd, db, pt, pipe,
529+
CLIENT_MULTI_RESULTS | CLIENT_REMEMBER_OPTIONS)) {
529530
#if defined(_DEBUG)
530531
sprintf(g->Message, "mysql_real_connect failed: (%d) %s",
531532
mysql_errno(m_DB), mysql_error(m_DB));

storage/connect/mysql-test/connect/r/json_java_2.result

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
SET GLOBAL connect_class_path='C:/MariaDB-10.2/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo2.jar';
2+
set connect_enable_mongo=1;
23
#
34
# Test the MONGO table type
45
#
@@ -25,7 +26,6 @@ address_street 1 CHAR 38 38 0 0 address.street
2526
address_zipcode 1 CHAR 5 5 0 0 address.zipcode
2627
borough 1 CHAR 13 13 0 0
2728
cuisine 1 CHAR 64 64 0 0
28-
grades 1 CHAR 0 0 0 1
2929
grades_date 1 CHAR 256 256 0 1 grades.0.date
3030
grades_grade 1 CHAR 14 14 0 1 grades.0.grade
3131
grades_score 5 BIGINT 2 2 0 1 grades.0.score
@@ -72,20 +72,19 @@ t1 CREATE TABLE `t1` (
7272
`address_zipcode` char(5) NOT NULL `FIELD_FORMAT`='address.zipcode',
7373
`borough` char(13) NOT NULL,
7474
`cuisine` char(64) NOT NULL,
75-
`grades` char(1) DEFAULT NULL,
7675
`grades_date` varchar(256) DEFAULT NULL `FIELD_FORMAT`='grades.0.date',
7776
`grades_grade` char(14) DEFAULT NULL `FIELD_FORMAT`='grades.0.grade',
7877
`grades_score` bigint(2) DEFAULT NULL `FIELD_FORMAT`='grades.0.score',
7978
`name` char(98) NOT NULL,
8079
`restaurant_id` char(8) NOT NULL
8180
) ENGINE=CONNECT DEFAULT CHARSET=latin1 CONNECTION='mongodb://localhost:27017' `TABLE_TYPE`='JSON' `TABNAME`='restaurants' `OPTION_LIST`='Level=1,Driver=Java,Version=2' `DATA_CHARSET`='utf8' `LRECL`=4096
8281
SELECT * FROM t1 LIMIT 5;
83-
_id address_building address_coord address_street address_zipcode borough cuisine grades grades_date grades_grade grades_score name restaurant_id
84-
58ada47de5a51ddfcd5ed51c 1007 -73.856077 Morris Park Ave 10462 Bronx Bakery 2 2014-03-03T00:00:00.000Z A 2 Morris Park Bake Shop 30075445
85-
58ada47de5a51ddfcd5ed51d 469 -73.961704 Flatbush Avenue 11225 Brooklyn Hamburgers 2 2014-12-30T00:00:00.000Z A 8 Wendy'S 30112340
86-
58ada47de5a51ddfcd5ed51e 351 -73.98513559999999 West 57 Street 10019 Manhattan Irish 2 2014-09-06T00:00:00.000Z A 2 Dj Reynolds Pub And Restaurant 30191841
87-
58ada47de5a51ddfcd5ed51f 2780 -73.98241999999999 Stillwell Avenue 11224 Brooklyn American 2 2014-06-10T00:00:00.000Z A 5 Riviera Caterer 40356018
88-
58ada47de5a51ddfcd5ed520 97-22 -73.8601152 63 Road 11374 Queens Jewish/Kosher 2 2014-11-24T00:00:00.000Z Z 20 Tov Kosher Kitchen 40356068
82+
_id address_building address_coord address_street address_zipcode borough cuisine grades_date grades_grade grades_score name restaurant_id
83+
58ada47de5a51ddfcd5ed51c 1007 -73.856077 Morris Park Ave 10462 Bronx Bakery 2014-03-03T00:00:00.000Z A 2 Morris Park Bake Shop 30075445
84+
58ada47de5a51ddfcd5ed51d 469 -73.961704 Flatbush Avenue 11225 Brooklyn Hamburgers 2014-12-30T00:00:00.000Z A 8 Wendy'S 30112340
85+
58ada47de5a51ddfcd5ed51e 351 -73.98513559999999 West 57 Street 10019 Manhattan Irish 2014-09-06T00:00:00.000Z A 2 Dj Reynolds Pub And Restaurant 30191841
86+
58ada47de5a51ddfcd5ed51f 2780 -73.98241999999999 Stillwell Avenue 11224 Brooklyn American 2014-06-10T00:00:00.000Z A 5 Riviera Caterer 40356018
87+
58ada47de5a51ddfcd5ed520 97-22 -73.8601152 63 Road 11374 Queens Jewish/Kosher 2014-11-24T00:00:00.000Z Z 20 Tov Kosher Kitchen 40356068
8988
DROP TABLE t1;
9089
#
9190
# Dropping a column
@@ -259,7 +258,6 @@ t1 CREATE TABLE `t1` (
259258
`address_street` char(38) NOT NULL `FIELD_FORMAT`='address.street',
260259
`address_zipcode` char(5) NOT NULL `FIELD_FORMAT`='address.zipcode',
261260
`borough` char(13) NOT NULL,
262-
`grades` char(1) DEFAULT NULL,
263261
`grades_date` char(24) DEFAULT NULL `FIELD_FORMAT`='grades.0.date',
264262
`grades_grade` char(14) DEFAULT NULL `FIELD_FORMAT`='grades.0.grade',
265263
`grades_score` bigint(2) DEFAULT NULL `FIELD_FORMAT`='grades.0.score',
@@ -384,3 +382,4 @@ planner 167 41.75
384382
postcard 23 5.75
385383
DROP TABLE t1;
386384
true
385+
set connect_enable_mongo=0;

0 commit comments

Comments
 (0)