Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
b1b6b503
Commit
b1b6b503
authored
Aug 30, 2017
by
Olivier Bertrand
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'ob-10.1' into 10.1
parents
af727451
5c42d86a
Changes
10
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
120 additions
and
1213 deletions
+120
-1213
storage/connect/CMakeLists.txt
storage/connect/CMakeLists.txt
+31
-9
storage/connect/ha_connect.cc
storage/connect/ha_connect.cc
+24
-7
storage/connect/mongofam.cpp
storage/connect/mongofam.cpp
+0
-271
storage/connect/mongofam.h
storage/connect/mongofam.h
+0
-65
storage/connect/mycat.cc
storage/connect/mycat.cc
+10
-1
storage/connect/tabext.cpp
storage/connect/tabext.cpp
+52
-43
storage/connect/tabext.h
storage/connect/tabext.h
+1
-0
storage/connect/tabmgo.cpp
storage/connect/tabmgo.cpp
+0
-677
storage/connect/tabmgo.h
storage/connect/tabmgo.h
+0
-128
storage/connect/tabmysql.cpp
storage/connect/tabmysql.cpp
+2
-12
No files found.
storage/connect/CMakeLists.txt
View file @
b1b6b503
...
...
@@ -245,9 +245,9 @@ int main() {
ENDIF
(
CONNECT_WITH_ODBC
)
#
# JDBC with
out MongoDB Java Driver
# JDBC with
MongoDB Java Driver included but disabled
#
#
OPTION(CONNECT_WITH_MONGO "Compile CONNECT storage engine with MONGO support" ON)
OPTION
(
CONNECT_WITH_MONGO
"Compile CONNECT storage engine with MONGO support"
ON
)
OPTION
(
CONNECT_WITH_JDBC
"Compile CONNECT storage engine with JDBC support"
ON
)
IF
(
CONNECT_WITH_JDBC
)
...
...
@@ -264,13 +264,6 @@ IF(CONNECT_WITH_JDBC)
JdbcInterface.java ApacheInterface.java MariadbInterface.java
MysqlInterface.java OracleInterface.java PostgresqlInterface.java
JavaWrappers.jar
)
# TODO: Find how to compile and install the java wrapper classes
# Find required libraries and include directories
SET
(
JAVA_SOURCES JdbcInterface.java
)
add_jar
(
JdbcInterface
${
JAVA_SOURCES
}
)
install_jar
(
JdbcInterface DESTINATION
${
INSTALL_PLUGINDIR
}
COMPONENT connect-engine
)
INSTALL
(
FILES
${
CMAKE_CURRENT_SOURCE_DIR
}
/JavaWrappers.jar
DESTINATION
${
INSTALL_PLUGINDIR
}
COMPONENT connect-engine
)
add_definitions
(
-DJDBC_SUPPORT
)
IF
(
CONNECT_WITH_MONGO
)
SET
(
CONNECT_SOURCES
${
CONNECT_SOURCES
}
...
...
@@ -348,4 +341,33 @@ MYSQL_ADD_PLUGIN(connect ${CONNECT_SOURCES}
LINK_LIBRARIES
${
ZLIB_LIBRARY
}
${
XML_LIBRARY
}
${
ICONV_LIBRARY
}
${
ODBC_LIBRARY
}
${
JDBC_LIBRARY
}
${
IPHLPAPI_LIBRARY
}
)
IF
(
NOT TARGET connect
)
RETURN
()
ENDIF
()
# Install some extra files that belong to connect engine
IF
(
WIN32
)
# install ha_connect.lib
GET_TARGET_PROPERTY
(
CONNECT_LOCATION connect LOCATION
)
STRING
(
REPLACE
"dll"
"lib"
CONNECT_LIB
${
CONNECT_LOCATION
}
)
IF
(
CMAKE_CONFIGURATION_TYPES
)
STRING
(
REPLACE
"
${
CMAKE_CFG_INTDIR
}
"
"
\$
{CMAKE_INSTALL_CONFIG_NAME}"
CONNECT_LIB
${
CONNECT_LIB
}
)
ENDIF
()
INSTALL
(
FILES
${
CONNECT_LIB
}
DESTINATION
${
INSTALL_PLUGINDIR
}
COMPONENT connect-engine
)
ENDIF
(
WIN32
)
IF
(
CONNECT_WITH_JDBC AND JAVA_FOUND AND JNI_FOUND
)
# TODO: Find how to compile and install the java wrapper classes
# Find required libraries and include directories
SET
(
JAVA_SOURCES JdbcInterface.java
)
add_jar
(
JdbcInterface
${
JAVA_SOURCES
}
)
INSTALL
(
FILES
${
CMAKE_CURRENT_SOURCE_DIR
}
/JavaWrappers.jar
${
CMAKE_CURRENT_BINARY_DIR
}
/JdbcInterface.jar
DESTINATION
${
INSTALL_PLUGINDIR
}
COMPONENT connect-engine
)
ENDIF
()
storage/connect/ha_connect.cc
View file @
b1b6b503
...
...
@@ -171,9 +171,9 @@
#define JSONMAX 10 // JSON Default max grp size
extern
"C"
{
char
version
[]
=
"Version 1.06.000
1 April 17
, 2017"
;
char
version
[]
=
"Version 1.06.000
3 August 28
, 2017"
;
#if defined(__WIN__)
char
compver
[]
=
"Version 1.06.000
1
"
__DATE__
" "
__TIME__
;
char
compver
[]
=
"Version 1.06.000
3
"
__DATE__
" "
__TIME__
;
char
slash
=
'\\'
;
#else // !__WIN__
char
slash
=
'/'
;
...
...
@@ -182,7 +182,10 @@ extern "C" {
#if defined(NEW_MAR)
#define stored_in_db stored_in_db()
#endif // NEW_MAR)
#define MONGO_ENABLED 1
#else // !NEW_MAR
#define MONGO_ENABLED 0
#endif // !NEW_MAR)
#if defined(XMAP)
my_bool
xmap
=
false
;
...
...
@@ -359,6 +362,13 @@ static MYSQL_THDVAR_STR(java_wrapper,
NULL
,
NULL
,
"wrappers/JdbcInterface"
);
#endif // JDBC_SUPPORT
#if defined(MONGO_SUPPORT)
// Enabling MONGO table type
static
MYSQL_THDVAR_BOOL
(
enable_mongo
,
PLUGIN_VAR_RQCMDARG
,
"Enabling the MongoDB access"
,
NULL
,
NULL
,
MONGO_ENABLED
);
#endif // MONGO_SUPPORT
#if defined(XMSG) || defined(NEWMSG)
const
char
*
language_names
[]
=
{
...
...
@@ -419,6 +429,10 @@ char *GetJavaWrapper(void)
{
return
connect_hton
?
THDVAR
(
current_thd
,
java_wrapper
)
:
(
char
*
)
"wrappers/JdbcInterface"
;}
#endif // JDBC_SUPPORT
#if defined(MONGO_SUPPORT)
bool
MongoEnabled
(
void
)
{
return
THDVAR
(
current_thd
,
enable_mongo
);
}
#endif // MONGO_SUPPORT
extern
"C"
const
char
*
msglang
(
void
)
{
#if defined(FRENCH)
...
...
@@ -7176,7 +7190,10 @@ static struct st_mysql_sys_var* connect_system_variables[]= {
MYSQL_SYSVAR
(
class_path
),
MYSQL_SYSVAR
(
java_wrapper
),
#endif // JDBC_SUPPORT
NULL
#if defined(MONGO_SUPPORT)
MYSQL_SYSVAR
(
enable_mongo
),
#endif // MONGO_SUPPORT
NULL
};
maria_declare_plugin
(
connect
)
...
...
@@ -7185,14 +7202,14 @@ maria_declare_plugin(connect)
&
connect_storage_engine
,
"CONNECT"
,
"Olivier Bertrand"
,
"Management of External Data (SQL/MED), including many file formats"
,
"Management of External Data (SQL/
NOSQL/
MED), including many file formats"
,
PLUGIN_LICENSE_GPL
,
connect_init_func
,
/* Plugin Init */
connect_done_func
,
/* Plugin Deinit */
0x0106
,
/* version number (1.05) */
NULL
,
/* status variables */
connect_system_variables
,
/* system variables */
"1.06.000
1
"
,
/* string version */
MariaDB_PLUGIN_MATURITY_BETA
/* maturity */
"1.06.000
3
"
,
/* string version */
MariaDB_PLUGIN_MATURITY_STABLE
/* maturity */
}
maria_declare_plugin_end
;
storage/connect/mongofam.cpp
deleted
100644 → 0
View file @
af727451
/************ MONGO FAM C++ Program Source Code File (.CPP) ************/
/* PROGRAM NAME: mongofam.cpp */
/* ------------- */
/* Version 1.3 */
/* */
/* COPYRIGHT: */
/* ---------- */
/* (C) Copyright to the author Olivier BERTRAND 20017 */
/* */
/* WHAT THIS PROGRAM DOES: */
/* ----------------------- */
/* This program are the MongoDB access method classes. */
/* */
/***********************************************************************/
/***********************************************************************/
/* Include relevant sections of the System header files. */
/***********************************************************************/
#include "my_global.h"
/***********************************************************************/
/* Include application header files: */
/* global.h is header containing all global declarations. */
/* plgdbsem.h is header containing the DB application declarations. */
/* filamtxt.h is header containing the file AM classes declarations. */
/***********************************************************************/
#include "global.h"
#include "plgdbsem.h"
#include "reldef.h"
#include "filamtxt.h"
#include "tabdos.h"
#include "tabjson.h"
#include "mongofam.h"
#if defined(UNIX) || defined(UNIV_LINUX)
#include "osutil.h"
#endif
/* --------------------------- Class MGOFAM -------------------------- */
/***********************************************************************/
/* Constructors. */
/***********************************************************************/
MGOFAM
::
MGOFAM
(
PJDEF
tdp
)
:
DOSFAM
((
PDOSDEF
)
NULL
)
{
Cmgp
=
NULL
;
Pcg
.
Tdbp
=
NULL
;
if
(
tdp
)
{
Pcg
.
Uristr
=
tdp
->
Uri
;
Pcg
.
Db_name
=
tdp
->
Schema
;
Pcg
.
Coll_name
=
tdp
->
Collname
;
Pcg
.
Options
=
tdp
->
Options
;
Pcg
.
Filter
=
tdp
->
Filter
;
Pcg
.
Pipe
=
tdp
->
Pipe
&&
tdp
->
Options
!=
NULL
;
}
else
{
Pcg
.
Uristr
=
NULL
;
Pcg
.
Db_name
=
NULL
;
Pcg
.
Coll_name
=
NULL
;
Pcg
.
Options
=
NULL
;
Pcg
.
Filter
=
NULL
;
Pcg
.
Pipe
=
false
;
}
// endif tdp
To_Fbt
=
NULL
;
Mode
=
MODE_ANY
;
Done
=
false
;
Lrecl
=
tdp
->
Lrecl
+
tdp
->
Ending
;
}
// end of MGOFAM standard constructor
MGOFAM
::
MGOFAM
(
PMGOFAM
tdfp
)
:
DOSFAM
(
tdfp
)
{
Pcg
=
tdfp
->
Pcg
;
To_Fbt
=
tdfp
->
To_Fbt
;
Mode
=
tdfp
->
Mode
;
Done
=
tdfp
->
Done
;
}
// end of MGOFAM copy constructor
/***********************************************************************/
/* Reset: reset position values at the beginning of file. */
/***********************************************************************/
void
MGOFAM
::
Reset
(
void
)
{
TXTFAM
::
Reset
();
Fpos
=
Tpos
=
Spos
=
0
;
}
// end of Reset
/***********************************************************************/
/* MGO GetFileLength: returns file size in number of bytes. */
/***********************************************************************/
int
MGOFAM
::
GetFileLength
(
PGLOBAL
g
)
{
return
0
;
}
// end of GetFileLength
/***********************************************************************/
/* Cardinality: returns the number of documents in the collection. */
/* This function can be called with a null argument to test the */
/* availability of Cardinality implementation (1 yes, 0 no). */
/***********************************************************************/
int
MGOFAM
::
Cardinality
(
PGLOBAL
g
)
{
if
(
!
g
)
return
1
;
return
(
!
Init
(
g
))
?
Cmgp
->
CollSize
(
g
)
:
0
;
}
// end of Cardinality
/***********************************************************************/
/* Note: This function is not really implemented yet. */
/***********************************************************************/
int
MGOFAM
::
MaxBlkSize
(
PGLOBAL
,
int
s
)
{
return
s
;
}
// end of MaxBlkSize
/***********************************************************************/
/* Init: initialize MongoDB processing. */
/***********************************************************************/
bool
MGOFAM
::
Init
(
PGLOBAL
g
)
{
if
(
Done
)
return
false
;
/*********************************************************************/
/* Open an C connection for this table. */
/*********************************************************************/
if
(
!
Cmgp
)
{
Pcg
.
Tdbp
=
Tdbp
;
Cmgp
=
new
(
g
)
CMgoConn
(
g
,
&
Pcg
);
}
else
if
(
Cmgp
->
IsConnected
())
Cmgp
->
Close
();
if
(
Cmgp
->
Connect
(
g
))
return
true
;
Done
=
true
;
return
false
;
}
// end of Init
/***********************************************************************/
/* OpenTableFile: Open a MongoDB table. */
/***********************************************************************/
bool
MGOFAM
::
OpenTableFile
(
PGLOBAL
g
)
{
Mode
=
Tdbp
->
GetMode
();
if
(
Pcg
.
Pipe
&&
Mode
!=
MODE_READ
)
{
strcpy
(
g
->
Message
,
"Pipeline tables are read only"
);
return
true
;
}
// endif Pipe
if
(
Init
(
g
))
return
true
;
if
(
Mode
==
MODE_DELETE
&&
!
Tdbp
->
GetNext
())
// Delete all documents
return
Cmgp
->
DocDelete
(
g
);
else
if
(
Mode
==
MODE_INSERT
)
Cmgp
->
MakeColumnGroups
(
g
);
return
false
;
}
// end of OpenTableFile
/***********************************************************************/
/* GetRowID: return the RowID of last read record. */
/***********************************************************************/
int
MGOFAM
::
GetRowID
(
void
)
{
return
Rows
;
}
// end of GetRowID
/***********************************************************************/
/* GetPos: return the position of last read record. */
/***********************************************************************/
int
MGOFAM
::
GetPos
(
void
)
{
return
Fpos
;
}
// end of GetPos
/***********************************************************************/
/* GetNextPos: return the position of next record. */
/***********************************************************************/
int
MGOFAM
::
GetNextPos
(
void
)
{
return
Fpos
;
// TODO
}
// end of GetNextPos
/***********************************************************************/
/* SetPos: Replace the table at the specified position. */
/***********************************************************************/
bool
MGOFAM
::
SetPos
(
PGLOBAL
g
,
int
pos
)
{
Fpos
=
pos
;
Placed
=
true
;
return
false
;
}
// end of SetPos
/***********************************************************************/
/* Record file position in case of UPDATE or DELETE. */
/***********************************************************************/
bool
MGOFAM
::
RecordPos
(
PGLOBAL
g
)
{
strcpy
(
g
->
Message
,
"MGOFAM::RecordPos NIY"
);
return
true
;
}
// end of RecordPos
/***********************************************************************/
/* Initialize Fpos and the current position for indexed DELETE. */
/***********************************************************************/
int
MGOFAM
::
InitDelete
(
PGLOBAL
g
,
int
fpos
,
int
spos
)
{
strcpy
(
g
->
Message
,
"MGOFAM::InitDelete NIY"
);
return
RC_FX
;
}
// end of InitDelete
/***********************************************************************/
/* Skip one record in file. */
/***********************************************************************/
int
MGOFAM
::
SkipRecord
(
PGLOBAL
g
,
bool
header
)
{
return
RC_OK
;
// Dummy
}
// end of SkipRecord
/***********************************************************************/
/* ReadBuffer: Get next document from a collection. */
/***********************************************************************/
int
MGOFAM
::
ReadBuffer
(
PGLOBAL
g
)
{
int
rc
=
Cmgp
->
ReadNext
(
g
);
if
(
rc
!=
RC_OK
)
return
rc
;
strncpy
(
Tdbp
->
GetLine
(),
Cmgp
->
GetDocument
(
g
),
Lrecl
);
return
RC_OK
;
}
// end of ReadBuffer
/***********************************************************************/
/* WriteBuffer: File write routine for MGO access method. */
/***********************************************************************/
int
MGOFAM
::
WriteBuffer
(
PGLOBAL
g
)
{
return
Cmgp
->
Write
(
g
);
}
// end of WriteBuffer
/***********************************************************************/
/* Data Base delete line routine for MGO and BLK access methods. */
/***********************************************************************/
int
MGOFAM
::
DeleteRecords
(
PGLOBAL
g
,
int
irc
)
{
return
(
irc
==
RC_OK
)
?
WriteBuffer
(
g
)
:
RC_OK
;
}
// end of DeleteRecords
/***********************************************************************/
/* Table file close routine for MGO access method. */
/***********************************************************************/
void
MGOFAM
::
CloseTableFile
(
PGLOBAL
g
,
bool
)
{
Cmgp
->
Close
();
Done
=
false
;
}
// end of CloseTableFile
/***********************************************************************/
/* Rewind routine for MGO access method. */
/***********************************************************************/
void
MGOFAM
::
Rewind
(
void
)
{
Cmgp
->
Rewind
();
}
// end of Rewind
storage/connect/mongofam.h
deleted
100644 → 0
View file @
af727451
/************** MongoFam H Declares Source Code File (.H) **************/
/* Name: mongofam.h Version 1.4 */
/* */
/* (C) Copyright to the author Olivier BERTRAND 2017 */
/* */
/* This file contains the MongoDB access method classes declares. */
/***********************************************************************/
#include "cmgoconn.h"
typedef
class
TXTFAM
*
PTXF
;
typedef
class
MGOFAM
*
PMGOFAM
;
typedef
class
MGODEF
*
PMGODEF
;
typedef
class
TDBMGO
*
PTDBMGO
;
/***********************************************************************/
/* This is the MongoDB Access Method class declaration. */
/***********************************************************************/
class
DllExport
MGOFAM
:
public
DOSFAM
{
friend
void
mongo_init
(
bool
);
public:
// Constructor
MGOFAM
(
PJDEF
tdp
);
MGOFAM
(
PMGOFAM
txfp
);
// Implementation
virtual
AMT
GetAmType
(
void
)
{
return
TYPE_AM_MGO
;
}
virtual
bool
GetUseTemp
(
void
)
{
return
false
;
}
virtual
int
GetPos
(
void
);
virtual
int
GetNextPos
(
void
);
void
SetTdbp
(
PTDBDOS
tdbp
)
{
Tdbp
=
tdbp
;
}
virtual
PTXF
Duplicate
(
PGLOBAL
g
)
{
return
(
PTXF
)
new
(
g
)
MGOFAM
(
this
);
}
void
SetLrecl
(
int
lrecl
)
{
Lrecl
=
lrecl
;
}
// Methods
virtual
void
Reset
(
void
);
virtual
int
GetFileLength
(
PGLOBAL
g
);
virtual
int
Cardinality
(
PGLOBAL
g
);
virtual
int
MaxBlkSize
(
PGLOBAL
g
,
int
s
);
virtual
bool
AllocateBuffer
(
PGLOBAL
g
)
{
return
false
;
}
virtual
int
GetRowID
(
void
);
virtual
bool
RecordPos
(
PGLOBAL
g
);
virtual
bool
SetPos
(
PGLOBAL
g
,
int
recpos
);
virtual
int
SkipRecord
(
PGLOBAL
g
,
bool
header
);
virtual
bool
OpenTableFile
(
PGLOBAL
g
);
virtual
int
ReadBuffer
(
PGLOBAL
g
);
virtual
int
WriteBuffer
(
PGLOBAL
g
);
virtual
int
DeleteRecords
(
PGLOBAL
g
,
int
irc
);
virtual
void
CloseTableFile
(
PGLOBAL
g
,
bool
abort
);
virtual
void
Rewind
(
void
);
protected:
virtual
bool
OpenTempFile
(
PGLOBAL
g
)
{
return
false
;
}
virtual
bool
MoveIntermediateLines
(
PGLOBAL
g
,
bool
*
b
)
{
return
false
;
}
virtual
int
RenameTempFile
(
PGLOBAL
g
)
{
return
RC_OK
;
}
virtual
int
InitDelete
(
PGLOBAL
g
,
int
fpos
,
int
spos
);
bool
Init
(
PGLOBAL
g
);
// Members
CMgoConn
*
Cmgp
;
// Points to a C Mongo connection class
CMGOPARM
Pcg
;
// Parms passed to Cmgp
PFBLOCK
To_Fbt
;
// Pointer to temp file block
MODE
Mode
;
bool
Done
;
// Init done
};
// end of class MGOFAM
storage/connect/mycat.cc
View file @
b1b6b503
...
...
@@ -111,6 +111,9 @@
extern
"C"
HINSTANCE
s_hModule
;
// Saved module handle
#endif // !__WIN__
#if defined(MONGO_SUPPORT)
bool
MongoEnabled
(
void
);
#endif // MONGO_SUPPORT
PQRYRES
OEMColumns
(
PGLOBAL
g
,
PTOS
topt
,
char
*
tab
,
char
*
db
,
bool
info
);
/***********************************************************************/
...
...
@@ -558,7 +561,13 @@ PRELDEF MYCAT::MakeTableDesc(PGLOBAL g, PTABLE tablep, LPCSTR am)
case
TAB_VIR
:
tdp
=
new
(
g
)
VIRDEF
;
break
;
case
TAB_JSON
:
tdp
=
new
(
g
)
JSONDEF
;
break
;
#if defined(MONGO_SUPPORT)
case
TAB_MONGO
:
tdp
=
new
(
g
)
MGODEF
;
break
;
case
TAB_MONGO
:
if
(
MongoEnabled
())
tdp
=
new
(
g
)
MGODEF
;
else
strcpy
(
g
->
Message
,
"MONGO type not enabled"
);
break
;
#endif // MONGO_SUPPORT
#if defined(ZIP_SUPPORT)
case
TAB_ZIP
:
tdp
=
new
(
g
)
ZIPDEF
;
break
;
...
...
storage/connect/tabext.cpp
View file @
b1b6b503
...
...
@@ -279,10 +279,57 @@ int TDBEXT::Decode(PCSZ txt, char *buf, size_t n)
}
// end of Decode
/***********************************************************************/
/* MakeSQL: make the SQL statement use with remote connection. */
/* TODO: when implementing remote filtering, column only used in */
/* local filter should be removed from column list. */
/* MakeSrcdef: make the SQL statement from SRDEF option. */
/***********************************************************************/
bool
TDBEXT
::
MakeSrcdef
(
PGLOBAL
g
)
{
char
*
catp
=
strstr
(
Srcdef
,
"%s"
);
if
(
catp
)
{
char
*
fil1
,
*
fil2
;
PCSZ
ph
=
((
EXTDEF
*
)
To_Def
)
->
Phpos
;
if
(
!
ph
)
ph
=
(
strstr
(
catp
+
2
,
"%s"
))
?
"WH"
:
"W"
;
if
(
stricmp
(
ph
,
"H"
))
{
fil1
=
(
To_CondFil
&&
*
To_CondFil
->
Body
)
?
To_CondFil
->
Body
:
PlugDup
(
g
,
"1=1"
);
}
// endif ph
if
(
stricmp
(
ph
,
"W"
))
{
fil2
=
(
To_CondFil
&&
To_CondFil
->
Having
&&
*
To_CondFil
->
Having
)
?
To_CondFil
->
Having
:
PlugDup
(
g
,
"1=1"
);
}
// endif ph
if
(
!
stricmp
(
ph
,
"W"
))
{
Query
=
new
(
g
)
STRING
(
g
,
strlen
(
Srcdef
)
+
strlen
(
fil1
));
Query
->
SetLength
(
sprintf
(
Query
->
GetStr
(),
Srcdef
,
fil1
));
}
else
if
(
!
stricmp
(
ph
,
"WH"
))
{
Query
=
new
(
g
)
STRING
(
g
,
strlen
(
Srcdef
)
+
strlen
(
fil1
)
+
strlen
(
fil2
));
Query
->
SetLength
(
sprintf
(
Query
->
GetStr
(),
Srcdef
,
fil1
,
fil2
));
}
else
if
(
!
stricmp
(
ph
,
"H"
))
{
Query
=
new
(
g
)
STRING
(
g
,
strlen
(
Srcdef
)
+
strlen
(
fil2
));
Query
->
SetLength
(
sprintf
(
Query
->
GetStr
(),
Srcdef
,
fil2
));
}
else
if
(
!
stricmp
(
ph
,
"HW"
))
{
Query
=
new
(
g
)
STRING
(
g
,
strlen
(
Srcdef
)
+
strlen
(
fil1
)
+
strlen
(
fil2
));
Query
->
SetLength
(
sprintf
(
Query
->
GetStr
(),
Srcdef
,
fil2
,
fil1
));
}
else
{
strcpy
(
g
->
Message
,
"MakeSQL: Wrong place holders specification"
);
return
true
;
}
// endif's ph
}
else
Query
=
new
(
g
)
STRING
(
g
,
0
,
Srcdef
);
return
false
;
}
// end of MakeSrcdef
/***********************************************************************/
/* MakeSQL: make the SQL statement use with remote connection. */
/* TODO: when implementing remote filtering, column only used in */
/* local filter should be removed from column list. */
/***********************************************************************/
bool
TDBEXT
::
MakeSQL
(
PGLOBAL
g
,
bool
cnt
)
{
PCSZ
schmp
=
NULL
;
...
...
@@ -292,46 +339,8 @@ bool TDBEXT::MakeSQL(PGLOBAL g, bool cnt)
PTABLE
tablep
=
To_Table
;
PCOL
colp
;
if
(
Srcdef
)
{
if
((
catp
=
strstr
(
Srcdef
,
"%s"
)))
{
char
*
fil1
,
*
fil2
;
PCSZ
ph
=
((
EXTDEF
*
)
To_Def
)
->
Phpos
;
if
(
!
ph
)
ph
=
(
strstr
(
catp
+
2
,
"%s"
))
?
"WH"
:
"W"
;
if
(
stricmp
(
ph
,
"H"
))
{
fil1
=
(
To_CondFil
&&
*
To_CondFil
->
Body
)
?
To_CondFil
->
Body
:
PlugDup
(
g
,
"1=1"
);
}
// endif ph
if
(
stricmp
(
ph
,
"W"
))
{
fil2
=
(
To_CondFil
&&
To_CondFil
->
Having
&&
*
To_CondFil
->
Having
)
?
To_CondFil
->
Having
:
PlugDup
(
g
,
"1=1"
);
}
// endif ph
if
(
!
stricmp
(
ph
,
"W"
))
{
Query
=
new
(
g
)
STRING
(
g
,
strlen
(
Srcdef
)
+
strlen
(
fil1
));
Query
->
SetLength
(
sprintf
(
Query
->
GetStr
(),
Srcdef
,
fil1
));
}
else
if
(
!
stricmp
(
ph
,
"WH"
))
{
Query
=
new
(
g
)
STRING
(
g
,
strlen
(
Srcdef
)
+
strlen
(
fil1
)
+
strlen
(
fil2
));
Query
->
SetLength
(
sprintf
(
Query
->
GetStr
(),
Srcdef
,
fil1
,
fil2
));
}
else
if
(
!
stricmp
(
ph
,
"H"
))
{
Query
=
new
(
g
)
STRING
(
g
,
strlen
(
Srcdef
)
+
strlen
(
fil2
));
Query
->
SetLength
(
sprintf
(
Query
->
GetStr
(),
Srcdef
,
fil2
));
}
else
if
(
!
stricmp
(
ph
,
"HW"
))
{
Query
=
new
(
g
)
STRING
(
g
,
strlen
(
Srcdef
)
+
strlen
(
fil1
)
+
strlen
(
fil2
));
Query
->
SetLength
(
sprintf
(
Query
->
GetStr
(),
Srcdef
,
fil2
,
fil1
));
}
else
{
strcpy
(
g
->
Message
,
"MakeSQL: Wrong place holders specification"
);
return
true
;
}
// endif's ph
}
else
Query
=
new
(
g
)
STRING
(
g
,
0
,
Srcdef
);
return
false
;
}
// endif Srcdef
if
(
Srcdef
)
return
MakeSrcdef
(
g
);
// Allocate the string used to contain the Query
Query
=
new
(
g
)
STRING
(
g
,
1023
,
"SELECT "
);
...
...
storage/connect/tabext.h
View file @
b1b6b503
...
...
@@ -126,6 +126,7 @@ class DllExport TDBEXT : public TDB {
protected:
// Internal functions
virtual
bool
MakeSrcdef
(
PGLOBAL
g
);
virtual
bool
MakeSQL
(
PGLOBAL
g
,
bool
cnt
);
//virtual bool MakeInsert(PGLOBAL g);
virtual
bool
MakeCommand
(
PGLOBAL
g
);
...
...
storage/connect/tabmgo.cpp
deleted
100644 → 0
View file @
af727451
This diff is collapsed.
Click to expand it.
storage/connect/tabmgo.h
deleted
100644 → 0
View file @
af727451
/**************** tabmgo H Declares Source Code File (.H) **************/
/* Name: tabmgo.h Version 1.1 */
/* */
/* (C) Copyright to the author Olivier BERTRAND 2017 */
/* */
/* This file contains the MongoDB classes declares. */
/***********************************************************************/
#include "mongo.h"
#include "cmgoconn.h"
/***********************************************************************/
/* Class used to get the columns of a mongo collection. */
/***********************************************************************/
class
MGODISC
:
public
BLOCK
{
public:
// Constructor
MGODISC
(
PGLOBAL
g
,
int
*
lg
);
// Functions
int
GetColumns
(
PGLOBAL
g
,
char
*
db
,
PTOS
topt
);
bool
FindInDoc
(
PGLOBAL
g
,
bson_iter_t
*
iter
,
const
bson_t
*
doc
,
char
*
pcn
,
char
*
pfmt
,
int
i
,
int
k
,
bool
b
);
// Members
BCOL
bcol
;
PBCOL
bcp
,
fbcp
,
pbcp
;
PMGODEF
tdp
;
TDBMGO
*
tmgp
;
int
*
length
;
int
n
,
k
,
lvl
;
bool
all
;
};
// end of MGODISC
/* -------------------------- TDBMGO class --------------------------- */
/***********************************************************************/
/* This is the MongoDB Table Type class declaration. */
/* The table is a collection, each record being a document. */
/***********************************************************************/
class
DllExport
TDBMGO
:
public
TDBEXT
{
friend
class
MGOCOL
;
friend
class
MGODEF
;
friend
class
MGODISC
;
friend
PQRYRES
MGOColumns
(
PGLOBAL
,
char
*
,
PTOS
,
bool
);
public:
// Constructor
TDBMGO
(
MGODEF
*
tdp
);
TDBMGO
(
TDBMGO
*
tdbp
);
// Implementation
virtual
AMT
GetAmType
(
void
)
{
return
TYPE_AM_MGO
;}
virtual
PTDB
Duplicate
(
PGLOBAL
g
)
{
return
(
PTDB
)
new
(
g
)
TDBMGO
(
this
);}
// Methods
virtual
PTDB
Clone
(
PTABS
t
);
virtual
PCOL
MakeCol
(
PGLOBAL
g
,
PCOLDEF
cdp
,
PCOL
cprec
,
int
n
);
virtual
PCOL
InsertSpecialColumn
(
PCOL
colp
);
virtual
int
RowNumber
(
PGLOBAL
g
,
bool
b
=
FALSE
)
{
return
N
;}
// Database routines
virtual
int
Cardinality
(
PGLOBAL
g
);
virtual
int
GetMaxSize
(
PGLOBAL
g
);
virtual
bool
OpenDB
(
PGLOBAL
g
);
virtual
int
ReadDB
(
PGLOBAL
g
);
virtual
int
WriteDB
(
PGLOBAL
g
);
virtual
int
DeleteDB
(
PGLOBAL
g
,
int
irc
);
virtual
void
CloseDB
(
PGLOBAL
g
);
virtual
bool
ReadKey
(
PGLOBAL
g
,
OPVAL
op
,
const
key_range
*
kr
);
protected:
bool
Init
(
PGLOBAL
g
);
// Members
CMgoConn
*
Cmgp
;
// Points to a C Mongo connection class
CMGOPARM
Pcg
;
// Parms passed to Cmgp
const
Item
*
Cnd
;
// The first condition
int
Fpos
;
// The current row index
int
N
;
// The current Rownum
int
B
;
// Array index base
bool
Done
;
// Init done
};
// end of class TDBMGO
/* --------------------------- MGOCOL class -------------------------- */
/***********************************************************************/
/* Class MGOCOL: MongoDB access method column descriptor. */
/***********************************************************************/
class
DllExport
MGOCOL
:
public
EXTCOL
{
friend
class
TDBMGO
;
friend
class
FILTER
;
public:
// Constructors
MGOCOL
(
PGLOBAL
g
,
PCOLDEF
cdp
,
PTDB
tdbp
,
PCOL
cprec
,
int
i
);
MGOCOL
(
MGOCOL
*
colp
,
PTDB
tdbp
);
// Constructor used in copy process
// Implementation
virtual
int
GetAmType
(
void
)
{
return
Tmgp
->
GetAmType
();
}
// Methods
virtual
PSZ
GetJpath
(
PGLOBAL
g
,
bool
proj
);
virtual
void
ReadColumn
(
PGLOBAL
g
);
virtual
void
WriteColumn
(
PGLOBAL
g
);
protected:
// Default constructor not to be used
MGOCOL
(
void
)
{}
// Members
TDBMGO
*
Tmgp
;
// To the MGO table block
char
*
Jpath
;
// The json path
};
// end of class MGOCOL
/***********************************************************************/
/* This is the class declaration for the MONGO catalog table. */
/***********************************************************************/
class
DllExport
TDBGOL
:
public
TDBCAT
{
public:
// Constructor
TDBGOL
(
PMGODEF
tdp
);
protected:
// Specific routines
virtual
PQRYRES
GetResult
(
PGLOBAL
g
);
// Members
PTOS
Topt
;
char
*
Db
;
};
// end of class TDBGOL
storage/connect/tabmysql.cpp
View file @
b1b6b503
...
...
@@ -513,18 +513,8 @@ bool TDBMYSQL::MakeSelect(PGLOBAL g, bool mx)
if
(
Query
)
return
false
;
// already done
if
(
Srcdef
)
{
if
(
strstr
(
Srcdef
,
"%s"
))
{
char
*
fil
;
fil
=
(
To_CondFil
)
?
To_CondFil
->
Body
:
PlugDup
(
g
,
"1=1"
);
Query
=
new
(
g
)
STRING
(
g
,
strlen
(
Srcdef
)
+
strlen
(
fil
));
Query
->
SetLength
(
sprintf
(
Query
->
GetStr
(),
Srcdef
,
fil
));
}
else
Query
=
new
(
g
)
STRING
(
g
,
0
,
Srcdef
);
return
false
;
}
// endif Srcdef
if
(
Srcdef
)
return
MakeSrcdef
(
g
);
// Allocate the string used to contain Query
Query
=
new
(
g
)
STRING
(
g
,
1023
,
"SELECT "
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment