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
425437b2
Commit
425437b2
authored
Dec 03, 2019
by
Oleksandr Byelkin
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'connect/10.2' into 10.2
parents
f8b5e147
f0da39be
Changes
27
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
27 changed files
with
529 additions
and
348 deletions
+529
-348
storage/connect/CMakeLists.txt
storage/connect/CMakeLists.txt
+7
-4
storage/connect/connect.cc
storage/connect/connect.cc
+32
-32
storage/connect/connect.h
storage/connect/connect.h
+2
-0
storage/connect/filter.h
storage/connect/filter.h
+0
-1
storage/connect/ha_connect.cc
storage/connect/ha_connect.cc
+19
-12
storage/connect/mycat.cc
storage/connect/mycat.cc
+11
-104
storage/connect/mycat.h
storage/connect/mycat.h
+2
-2
storage/connect/myconn.cpp
storage/connect/myconn.cpp
+5
-5
storage/connect/plgdbsem.h
storage/connect/plgdbsem.h
+18
-11
storage/connect/reldef.cpp
storage/connect/reldef.cpp
+198
-80
storage/connect/reldef.h
storage/connect/reldef.h
+6
-3
storage/connect/restget.cpp
storage/connect/restget.cpp
+17
-23
storage/connect/tabcmg.cpp
storage/connect/tabcmg.cpp
+14
-9
storage/connect/tabdos.cpp
storage/connect/tabdos.cpp
+16
-7
storage/connect/tabdos.h
storage/connect/tabdos.h
+0
-1
storage/connect/tabfix.cpp
storage/connect/tabfix.cpp
+1
-1
storage/connect/tabfmt.cpp
storage/connect/tabfmt.cpp
+3
-2
storage/connect/tabjson.cpp
storage/connect/tabjson.cpp
+27
-17
storage/connect/tabmysql.cpp
storage/connect/tabmysql.cpp
+7
-2
storage/connect/tabrest.cpp
storage/connect/tabrest.cpp
+90
-22
storage/connect/tabrest.h
storage/connect/tabrest.h
+19
-0
storage/connect/tabutil.cpp
storage/connect/tabutil.cpp
+14
-2
storage/connect/tabutil.h
storage/connect/tabutil.h
+2
-1
storage/connect/tabvct.cpp
storage/connect/tabvct.cpp
+3
-0
storage/connect/tabxml.cpp
storage/connect/tabxml.cpp
+3
-1
storage/connect/xindex.cpp
storage/connect/xindex.cpp
+9
-5
storage/connect/xtable.h
storage/connect/xtable.h
+4
-1
No files found.
storage/connect/CMakeLists.txt
View file @
425437b2
...
@@ -318,6 +318,9 @@ ENDIF(CONNECT_WITH_MONGO)
...
@@ -318,6 +318,9 @@ ENDIF(CONNECT_WITH_MONGO)
OPTION
(
CONNECT_WITH_REST
"Compile CONNECT storage engine with REST support"
ON
)
OPTION
(
CONNECT_WITH_REST
"Compile CONNECT storage engine with REST support"
ON
)
IF
(
CONNECT_WITH_REST
)
IF
(
CONNECT_WITH_REST
)
MESSAGE
(
STATUS
"=====> REST support is ON"
)
SET
(
CONNECT_SOURCES
${
CONNECT_SOURCES
}
tabrest.cpp tabrest.h
)
add_definitions
(
-DREST_SUPPORT
)
FIND_PACKAGE
(
cpprestsdk QUIET
)
FIND_PACKAGE
(
cpprestsdk QUIET
)
IF
(
cpprestsdk_FOUND
)
IF
(
cpprestsdk_FOUND
)
IF
(
UNIX
)
IF
(
UNIX
)
...
@@ -331,10 +334,10 @@ IF(CONNECT_WITH_REST)
...
@@ -331,10 +334,10 @@ IF(CONNECT_WITH_REST)
# Comment it out if not needed depending on your cpprestsdk installation.
# Comment it out if not needed depending on your cpprestsdk installation.
SET
(
CMAKE_CXX_FLAGS_DEBUG
"
${
CMAKE_CXX_FLAGS_DEBUG
}
/MDd"
)
SET
(
CMAKE_CXX_FLAGS_DEBUG
"
${
CMAKE_CXX_FLAGS_DEBUG
}
/MDd"
)
ENDIF
(
UNIX
)
ENDIF
(
UNIX
)
IF
(
REST_LIBRARY
)
# IF(REST_LIBRARY) why this? how about Windows
SET
(
CONNECT_SOURCES
${
CONNECT_SOURCES
}
tabrest.cpp restget.cpp tabrest.h
)
SET
(
CONNECT_SOURCES
${
CONNECT_SOURCES
}
restget.cpp
)
add_definitions
(
-DREST_SUPPORT
)
add_definitions
(
-DREST_SOURCE
)
ENDIF
()
#
ENDIF()
ELSE
(
NOT cpprestsdk_FOUND
)
ELSE
(
NOT cpprestsdk_FOUND
)
# MESSAGE(STATUS "=====> cpprestsdk package not found")
# MESSAGE(STATUS "=====> cpprestsdk package not found")
ENDIF
(
cpprestsdk_FOUND
)
ENDIF
(
cpprestsdk_FOUND
)
...
...
storage/connect/connect.cc
View file @
425437b2
...
@@ -566,7 +566,7 @@ int CntCloseTable(PGLOBAL g, PTDB tdbp, bool nox, bool abort)
...
@@ -566,7 +566,7 @@ int CntCloseTable(PGLOBAL g, PTDB tdbp, bool nox, bool abort)
rc
=
tdbp
->
DeleteDB
(
g
,
RC_EF
);
// Specific A.M. delete routine
rc
=
tdbp
->
DeleteDB
(
g
,
RC_EF
);
// Specific A.M. delete routine
}
else
if
(
tdbp
->
GetMode
()
==
MODE_UPDATE
&&
tdbp
->
IsIndexed
())
}
else
if
(
tdbp
->
GetMode
()
==
MODE_UPDATE
&&
tdbp
->
IsIndexed
())
rc
=
((
PTDBDO
X
)
tdbp
)
->
Txfp
->
UpdateSortedRows
(
g
);
rc
=
((
PTDBDO
S
)
tdbp
)
->
GetTxfp
()
->
UpdateSortedRows
(
g
);
switch
(
rc
)
{
switch
(
rc
)
{
case
RC_FX
:
case
RC_FX
:
...
@@ -593,7 +593,7 @@ int CntCloseTable(PGLOBAL g, PTDB tdbp, bool nox, bool abort)
...
@@ -593,7 +593,7 @@ int CntCloseTable(PGLOBAL g, PTDB tdbp, bool nox, bool abort)
if
(
!
tdbp
->
IsRemote
())
{
if
(
!
tdbp
->
IsRemote
())
{
// Make all the eventual indexes
// Make all the eventual indexes
PTDBDO
X
tbxp
=
(
PTDBDOX
)
tdbp
;
PTDBDO
S
tbxp
=
(
PTDBDOS
)
tdbp
;
tbxp
->
ResetKindex
(
g
,
NULL
);
tbxp
->
ResetKindex
(
g
,
NULL
);
tbxp
->
SetKey_Col
(
NULL
);
tbxp
->
SetKey_Col
(
NULL
);
rc
=
tbxp
->
ResetTableOpt
(
g
,
true
,
tbxp
->
GetDef
()
->
Indexable
()
==
1
);
rc
=
tbxp
->
ResetTableOpt
(
g
,
true
,
tbxp
->
GetDef
()
->
Indexable
()
==
1
);
...
@@ -622,8 +622,8 @@ int CntCloseTable(PGLOBAL g, PTDB tdbp, bool nox, bool abort)
...
@@ -622,8 +622,8 @@ int CntCloseTable(PGLOBAL g, PTDB tdbp, bool nox, bool abort)
int
CntIndexInit
(
PGLOBAL
g
,
PTDB
ptdb
,
int
id
,
bool
sorted
)
int
CntIndexInit
(
PGLOBAL
g
,
PTDB
ptdb
,
int
id
,
bool
sorted
)
{
{
PIXDEF
xdp
;
PIXDEF
xdp
;
PTDBDO
X
tdbp
;
PTDBDO
S
tdbp
;
DO
X
DEF
*
dfp
;
DO
S
DEF
*
dfp
;
if
(
!
ptdb
)
if
(
!
ptdb
)
return
-
1
;
return
-
1
;
...
@@ -633,9 +633,9 @@ int CntIndexInit(PGLOBAL g, PTDB ptdb, int id, bool sorted)
...
@@ -633,9 +633,9 @@ int CntIndexInit(PGLOBAL g, PTDB ptdb, int id, bool sorted)
}
else
if
(
ptdb
->
GetDef
()
->
Indexable
()
==
3
)
{
}
else
if
(
ptdb
->
GetDef
()
->
Indexable
()
==
3
)
{
return
1
;
return
1
;
}
else
}
else
tdbp
=
(
PTDBDO
X
)
ptdb
;
tdbp
=
(
PTDBDO
S
)
ptdb
;
dfp
=
(
DO
XDEF
*
)
tdbp
->
To_Def
;
dfp
=
(
DO
SDEF
*
)
tdbp
->
GetDef
()
;
//if (!(k= colp->GetKey()))
//if (!(k= colp->GetKey()))
// if (colp->GetOpt() >= 2) {
// if (colp->GetOpt() >= 2) {
...
@@ -645,16 +645,16 @@ int CntIndexInit(PGLOBAL g, PTDB ptdb, int id, bool sorted)
...
@@ -645,16 +645,16 @@ int CntIndexInit(PGLOBAL g, PTDB ptdb, int id, bool sorted)
// This is a pseudo indexed sorted block optimized column
// This is a pseudo indexed sorted block optimized column
// return 0;
// return 0;
if
(
tdbp
->
To_Kindex
)
if
(
tdbp
->
GetKindex
()
)
if
(((
XXBASE
*
)
tdbp
->
To_Kindex
)
->
GetID
()
==
id
)
{
if
(((
XXBASE
*
)
tdbp
->
GetKindex
()
)
->
GetID
()
==
id
)
{
tdbp
->
To_Kindex
->
Reset
();
// Same index
tdbp
->
GetKindex
()
->
Reset
();
// Same index
return
(
tdbp
->
To_Kindex
->
IsMul
())
?
2
:
1
;
return
(
tdbp
->
GetKindex
()
->
IsMul
())
?
2
:
1
;
}
else
{
}
else
{
tdbp
->
To_Kindex
->
Close
();
tdbp
->
GetKindex
()
->
Close
();
tdbp
->
To_Kindex
=
NULL
;
tdbp
->
SetKindex
(
NULL
)
;
}
// endif colp
}
// endif colp
for
(
xdp
=
dfp
->
To_Indx
;
xdp
;
xdp
=
xdp
->
GetNext
())
for
(
xdp
=
dfp
->
GetIndx
()
;
xdp
;
xdp
=
xdp
->
GetNext
())
if
(
xdp
->
GetID
()
==
id
)
if
(
xdp
->
GetID
()
==
id
)
break
;
break
;
...
@@ -676,7 +676,7 @@ int CntIndexInit(PGLOBAL g, PTDB ptdb, int id, bool sorted)
...
@@ -676,7 +676,7 @@ int CntIndexInit(PGLOBAL g, PTDB ptdb, int id, bool sorted)
if
(
tdbp
->
InitialyzeIndex
(
g
,
xdp
,
sorted
))
if
(
tdbp
->
InitialyzeIndex
(
g
,
xdp
,
sorted
))
return
0
;
return
0
;
return
(
tdbp
->
To_Kindex
->
IsMul
())
?
2
:
1
;
return
(
tdbp
->
GetKindex
()
->
IsMul
())
?
2
:
1
;
}
// end of CntIndexInit
}
// end of CntIndexInit
#if defined(WORDS_BIGENDIAN)
#if defined(WORDS_BIGENDIAN)
...
@@ -710,7 +710,7 @@ RCODE CntIndexRead(PGLOBAL g, PTDB ptdb, OPVAL op,
...
@@ -710,7 +710,7 @@ RCODE CntIndexRead(PGLOBAL g, PTDB ptdb, OPVAL op,
int
n
,
x
;
int
n
,
x
;
RCODE
rc
;
RCODE
rc
;
XXBASE
*
xbp
;
XXBASE
*
xbp
;
PTDBDO
X
tdbp
;
PTDBDO
S
tdbp
;
if
(
!
ptdb
)
if
(
!
ptdb
)
return
RC_FX
;
return
RC_FX
;
...
@@ -736,12 +736,12 @@ RCODE CntIndexRead(PGLOBAL g, PTDB ptdb, OPVAL op,
...
@@ -736,12 +736,12 @@ RCODE CntIndexRead(PGLOBAL g, PTDB ptdb, OPVAL op,
goto
rnd
;
goto
rnd
;
}
else
}
else
tdbp
=
(
PTDBDO
X
)
ptdb
;
tdbp
=
(
PTDBDO
S
)
ptdb
;
// Set reference values and index operator
// Set reference values and index operator
if
(
!
tdbp
->
To_Link
||
!
tdbp
->
To_Kindex
)
{
if
(
!
tdbp
->
GetLink
()
||
!
tdbp
->
GetKindex
()
)
{
// if (!tdbp->To_Xdp) {
// if (!tdbp->To_Xdp) {
sprintf
(
g
->
Message
,
"Index not initialized for table %s"
,
tdbp
->
Name
);
sprintf
(
g
->
Message
,
"Index not initialized for table %s"
,
tdbp
->
GetName
()
);
return
RC_FX
;
return
RC_FX
;
#if 0
#if 0
} // endif !To_Xdp
} // endif !To_Xdp
...
@@ -754,7 +754,7 @@ RCODE CntIndexRead(PGLOBAL g, PTDB ptdb, OPVAL op,
...
@@ -754,7 +754,7 @@ RCODE CntIndexRead(PGLOBAL g, PTDB ptdb, OPVAL op,
#endif // 0
#endif // 0
}
// endif !To_Kindex
}
// endif !To_Kindex
xbp
=
(
XXBASE
*
)
tdbp
->
To_Kindex
;
xbp
=
(
XXBASE
*
)
tdbp
->
GetKindex
()
;
if
(
kr
)
{
if
(
kr
)
{
char
*
kp
=
(
char
*
)
kr
->
key
;
char
*
kp
=
(
char
*
)
kr
->
key
;
...
@@ -764,13 +764,13 @@ RCODE CntIndexRead(PGLOBAL g, PTDB ptdb, OPVAL op,
...
@@ -764,13 +764,13 @@ RCODE CntIndexRead(PGLOBAL g, PTDB ptdb, OPVAL op,
PVAL
valp
;
PVAL
valp
;
PCOL
colp
;
PCOL
colp
;
for
(
n
=
0
;
n
<
tdbp
->
Knum
;
n
++
)
{
for
(
n
=
0
;
n
<
tdbp
->
GetKnum
()
;
n
++
)
{
colp
=
(
PCOL
)
tdbp
->
To_Key_Col
[
n
]
;
colp
=
(
PCOL
)
tdbp
->
Key
(
n
)
;
if
(
colp
->
GetColUse
(
U_NULLS
))
if
(
colp
->
GetColUse
(
U_NULLS
))
kp
++
;
// Skip null byte
kp
++
;
// Skip null byte
valp
=
tdbp
->
To_Link
[
n
]
->
GetValue
();
valp
=
tdbp
->
Link
(
n
)
->
GetValue
();
if
(
!
valp
->
IsTypeNum
())
{
if
(
!
valp
->
IsTypeNum
())
{
if
(
colp
->
GetColUse
(
U_VAR
))
{
if
(
colp
->
GetColUse
(
U_VAR
))
{
...
@@ -840,7 +840,7 @@ int CntIndexRange(PGLOBAL g, PTDB ptdb, const uchar* *key, uint *len,
...
@@ -840,7 +840,7 @@ int CntIndexRange(PGLOBAL g, PTDB ptdb, const uchar* *key, uint *len,
bool
b
,
rcb
;
bool
b
,
rcb
;
PVAL
valp
;
PVAL
valp
;
PCOL
colp
;
PCOL
colp
;
PTDBDO
X
tdbp
;
PTDBDO
S
tdbp
;
XXBASE
*
xbp
;
XXBASE
*
xbp
;
if
(
!
ptdb
)
if
(
!
ptdb
)
...
@@ -865,35 +865,35 @@ int CntIndexRange(PGLOBAL g, PTDB ptdb, const uchar* *key, uint *len,
...
@@ -865,35 +865,35 @@ int CntIndexRange(PGLOBAL g, PTDB ptdb, const uchar* *key, uint *len,
return
k
[
1
]
-
k
[
0
]
+
1
;
return
k
[
1
]
-
k
[
0
]
+
1
;
}
else
}
else
tdbp
=
(
PTDBDO
X
)
ptdb
;
tdbp
=
(
PTDBDO
S
)
ptdb
;
if
(
!
tdbp
->
To_Kindex
||
!
tdbp
->
To_Link
)
{
if
(
!
tdbp
->
GetKindex
()
||
!
tdbp
->
GetLink
()
)
{
if
(
!
tdbp
->
To_Xdp
)
{
if
(
!
tdbp
->
GetXdp
()
)
{
sprintf
(
g
->
Message
,
"Index not initialized for table %s"
,
tdbp
->
Name
);
sprintf
(
g
->
Message
,
"Index not initialized for table %s"
,
tdbp
->
GetName
()
);
DBUG_PRINT
(
"Range"
,
(
"%s"
,
g
->
Message
));
DBUG_PRINT
(
"Range"
,
(
"%s"
,
g
->
Message
));
return
-
1
;
return
-
1
;
}
else
// Dynamic index
}
else
// Dynamic index
return
tdbp
->
To_Xdp
->
GetMaxSame
();
// TODO a better estimate
return
tdbp
->
GetXdp
()
->
GetMaxSame
();
// TODO a better estimate
}
else
}
else
xbp
=
(
XXBASE
*
)
tdbp
->
To_Kindex
;
xbp
=
(
XXBASE
*
)
tdbp
->
GetKindex
()
;
for
(
b
=
false
,
i
=
0
;
i
<
2
;
i
++
)
{
for
(
b
=
false
,
i
=
0
;
i
<
2
;
i
++
)
{
p
=
kp
=
key
[
i
];
p
=
kp
=
key
[
i
];
if
(
kp
)
{
if
(
kp
)
{
for
(
n
=
0
;
n
<
tdbp
->
Knum
;
n
++
)
{
for
(
n
=
0
;
n
<
tdbp
->
GetKnum
()
;
n
++
)
{
if
(
kmap
[
i
]
&
(
key_part_map
)(
1
<<
n
))
{
if
(
kmap
[
i
]
&
(
key_part_map
)(
1
<<
n
))
{
if
(
b
==
true
)
if
(
b
==
true
)
// Cannot do indexing with missing intermediate key
// Cannot do indexing with missing intermediate key
return
-
1
;
return
-
1
;
colp
=
(
PCOL
)
tdbp
->
To_Key_Col
[
n
]
;
colp
=
(
PCOL
)
tdbp
->
Key
(
n
)
;
if
(
colp
->
GetColUse
(
U_NULLS
))
if
(
colp
->
GetColUse
(
U_NULLS
))
p
++
;
// Skip null byte ???
p
++
;
// Skip null byte ???
valp
=
tdbp
->
To_Link
[
n
]
->
GetValue
();
valp
=
tdbp
->
Link
(
n
)
->
GetValue
();
if
(
!
valp
->
IsTypeNum
())
{
if
(
!
valp
->
IsTypeNum
())
{
if
(
colp
->
GetColUse
(
U_VAR
))
{
if
(
colp
->
GetColUse
(
U_VAR
))
{
...
...
storage/connect/connect.h
View file @
425437b2
...
@@ -46,6 +46,7 @@ int CntIndexRange(PGLOBAL g, PTDB ptdb, const uchar* *key, uint *len,
...
@@ -46,6 +46,7 @@ int CntIndexRange(PGLOBAL g, PTDB ptdb, const uchar* *key, uint *len,
bool
*
incl
,
key_part_map
*
kmap
);
bool
*
incl
,
key_part_map
*
kmap
);
PGLOBAL
CntExit
(
PGLOBAL
g
);
PGLOBAL
CntExit
(
PGLOBAL
g
);
#if 0
/***********************************************************************/
/***********************************************************************/
/* Definition of classes XKPDEF, DOXDEF, TDBDOX */
/* Definition of classes XKPDEF, DOXDEF, TDBDOX */
/* These classes purpose is chiefly to access protected items! */
/* These classes purpose is chiefly to access protected items! */
...
@@ -76,3 +77,4 @@ class XKPDEF: public KPARTDEF {
...
@@ -76,3 +77,4 @@ class XKPDEF: public KPARTDEF {
public:
public:
XKPDEF(const char *name, int n) : KPARTDEF((PSZ)name, n) {}
XKPDEF(const char *name, int n) : KPARTDEF((PSZ)name, n) {}
}; // end of class XKPDEF
}; // end of class XKPDEF
#endif // 0
storage/connect/filter.h
View file @
425437b2
...
@@ -48,7 +48,6 @@ class DllExport FILTER : public XOBJECT { /* Filter description block */
...
@@ -48,7 +48,6 @@ class DllExport FILTER : public XOBJECT { /* Filter description block */
PVAL
&
Val
(
int
i
)
{
return
Test
[
i
].
Value
;}
PVAL
&
Val
(
int
i
)
{
return
Test
[
i
].
Value
;}
bool
&
Conv
(
int
i
)
{
return
Test
[
i
].
Conv
;}
bool
&
Conv
(
int
i
)
{
return
Test
[
i
].
Conv
;}
void
SetNext
(
PFIL
filp
)
{
Next
=
filp
;}
void
SetNext
(
PFIL
filp
)
{
Next
=
filp
;}
bool
MakeSelector
(
PGLOBAL
g
,
PSTRG
s
);
// Methods
// Methods
virtual
void
Reset
(
void
);
virtual
void
Reset
(
void
);
...
...
storage/connect/ha_connect.cc
View file @
425437b2
...
@@ -170,9 +170,9 @@
...
@@ -170,9 +170,9 @@
#define JSONMAX 10 // JSON Default max grp size
#define JSONMAX 10 // JSON Default max grp size
extern
"C"
{
extern
"C"
{
char
version
[]
=
"Version 1.0
6.0010 June 01
, 2019"
;
char
version
[]
=
"Version 1.0
7.0001 November 12
, 2019"
;
#if defined(__WIN__)
#if defined(__WIN__)
char
compver
[]
=
"Version 1.0
6.0010
"
__DATE__
" "
__TIME__
;
char
compver
[]
=
"Version 1.0
7.0001
"
__DATE__
" "
__TIME__
;
char
slash
=
'\\'
;
char
slash
=
'\\'
;
#else // !__WIN__
#else // !__WIN__
char
slash
=
'/'
;
char
slash
=
'/'
;
...
@@ -1045,6 +1045,8 @@ TABTYPE ha_connect::GetRealType(PTOS pos)
...
@@ -1045,6 +1045,8 @@ TABTYPE ha_connect::GetRealType(PTOS pos)
case
TAB_REST
:
case
TAB_REST
:
type
=
TAB_NIY
;
type
=
TAB_NIY
;
break
;
break
;
default:
break
;
}
// endswitch type
}
// endswitch type
#endif // REST_SUPPORT
#endif // REST_SUPPORT
...
@@ -2965,9 +2967,9 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, const Item *cond)
...
@@ -2965,9 +2967,9 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, const Item *cond)
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
:
case
Item_func
:
:
LIKE_FUNC
:
vop
=
OP_LIKE
;
vop
=
OP_LIKE
;
neg
=
((
Item_func_opt_neg
*
)
condf
)
->
negated
;
neg
=
((
Item_func_like
*
)
condf
)
->
negated
;
break
;
break
;
case
Item_func
:
:
ISNOTNULL_FUNC
:
case
Item_func
:
:
ISNOTNULL_FUNC
:
neg
=
true
;
neg
=
true
;
// fall through
// fall through
...
@@ -3785,9 +3787,9 @@ int ha_connect::index_init(uint idx, bool sorted)
...
@@ -3785,9 +3787,9 @@ int ha_connect::index_init(uint idx, bool sorted)
active_index
=
MAX_KEY
;
active_index
=
MAX_KEY
;
rc
=
HA_ERR_INTERNAL_ERROR
;
rc
=
HA_ERR_INTERNAL_ERROR
;
}
else
if
(
tdbp
->
GetKindex
())
{
}
else
if
(
tdbp
->
GetKindex
())
{
if
(((
PTDBDO
X
)
tdbp
)
->
To_Kindex
->
GetNum_K
())
{
if
(((
PTDBDO
S
)
tdbp
)
->
GetKindex
()
->
GetNum_K
())
{
if
(
tdbp
->
GetFtype
()
!=
RECFM_NAF
)
if
(
tdbp
->
GetFtype
()
!=
RECFM_NAF
)
((
PTDBDO
X
)
tdbp
)
->
GetTxfp
()
->
ResetBuffer
(
g
);
((
PTDBDO
S
)
tdbp
)
->
GetTxfp
()
->
ResetBuffer
(
g
);
active_index
=
idx
;
active_index
=
idx
;
// } else { // Void table
// } else { // Void table
...
@@ -5632,6 +5634,8 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
...
@@ -5632,6 +5634,8 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
case
TAB_CSV
:
case
TAB_CSV
:
ttp
=
TAB_REST
;
ttp
=
TAB_REST
;
break
;
break
;
default:
break
;
}
// endswitch type
}
// endswitch type
#endif // REST_SUPPORT
#endif // REST_SUPPORT
}
// endif ttp
}
// endif ttp
...
@@ -6041,7 +6045,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
...
@@ -6041,7 +6045,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
}
// endif !nblin
}
// endif !nblin
for
(
i
=
0
;
!
rc
&&
i
<
qrp
->
Nblin
;
i
++
)
{
for
(
i
=
0
;
!
rc
&&
i
<
qrp
->
Nblin
;
i
++
)
{
typ
=
len
=
prec
=
dec
=
0
;
typ
=
len
=
prec
=
dec
=
flg
=
0
;
tm
=
NOT_NULL_FLAG
;
tm
=
NOT_NULL_FLAG
;
cnm
=
(
char
*
)
"noname"
;
cnm
=
(
char
*
)
"noname"
;
dft
=
xtra
=
key
=
fmt
=
tn
=
NULL
;
dft
=
xtra
=
key
=
fmt
=
tn
=
NULL
;
...
@@ -6081,6 +6085,9 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
...
@@ -6081,6 +6085,9 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
if
(
crp
->
Kdata
->
GetIntValue
(
i
))
if
(
crp
->
Kdata
->
GetIntValue
(
i
))
tm
=
0
;
// Nullable
tm
=
0
;
// Nullable
break
;
case
FLD_FLAG
:
flg
=
crp
->
Kdata
->
GetIntValue
(
i
);
break
;
break
;
case
FLD_FORMAT
:
case
FLD_FORMAT
:
fmt
=
(
crp
->
Kdata
)
?
crp
->
Kdata
->
GetCharValue
(
i
)
:
NULL
;
fmt
=
(
crp
->
Kdata
)
?
crp
->
Kdata
->
GetCharValue
(
i
)
:
NULL
;
...
@@ -6212,7 +6219,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
...
@@ -6212,7 +6219,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
// Now add the field
// Now add the field
if
(
add_field
(
&
sql
,
cnm
,
typ
,
prec
,
dec
,
key
,
tm
,
rem
,
dft
,
xtra
,
if
(
add_field
(
&
sql
,
cnm
,
typ
,
prec
,
dec
,
key
,
tm
,
rem
,
dft
,
xtra
,
fmt
,
0
,
dbf
,
v
))
fmt
,
flg
,
dbf
,
v
))
rc
=
HA_ERR_OUT_OF_MEM
;
rc
=
HA_ERR_OUT_OF_MEM
;
}
// endfor i
}
// endfor i
...
@@ -7358,14 +7365,14 @@ maria_declare_plugin(connect)
...
@@ -7358,14 +7365,14 @@ maria_declare_plugin(connect)
&
connect_storage_engine
,
&
connect_storage_engine
,
"CONNECT"
,
"CONNECT"
,
"Olivier Bertrand"
,
"Olivier Bertrand"
,
"Management of External Data (SQL/NOSQL/MED), including
many file forma
ts"
,
"Management of External Data (SQL/NOSQL/MED), including
Rest query resul
ts"
,
PLUGIN_LICENSE_GPL
,
PLUGIN_LICENSE_GPL
,
connect_init_func
,
/* Plugin Init */
connect_init_func
,
/* Plugin Init */
connect_done_func
,
/* Plugin Deinit */
connect_done_func
,
/* Plugin Deinit */
0x010
6
,
/* version number (1.06
) */
0x010
7
,
/* version number (1.07
) */
NULL
,
/* status variables */
NULL
,
/* status variables */
connect_system_variables
,
/* system variables */
connect_system_variables
,
/* system variables */
"1.0
6.0010
"
,
/* string version */
"1.0
7.0001
"
,
/* string version */
MariaDB_PLUGIN_MATURITY_STABLE
/* maturity */
MariaDB_PLUGIN_MATURITY_STABLE
/* maturity */
}
}
maria_declare_plugin_end
;
maria_declare_plugin_end
;
storage/connect/mycat.cc
View file @
425437b2
...
@@ -95,7 +95,7 @@
...
@@ -95,7 +95,7 @@
#endif // ZIP_SUPPORT
#endif // ZIP_SUPPORT
#if defined(REST_SUPPORT)
#if defined(REST_SUPPORT)
#include "tabrest.h"
#include "tabrest.h"
#endif // R
est
_SUPPORT
#endif // R
EST
_SUPPORT
#include "mycat.h"
#include "mycat.h"
/***********************************************************************/
/***********************************************************************/
...
@@ -104,8 +104,9 @@
...
@@ -104,8 +104,9 @@
#if defined(__WIN__)
#if defined(__WIN__)
extern
"C"
HINSTANCE
s_hModule
;
// Saved module handle
extern
"C"
HINSTANCE
s_hModule
;
// Saved module handle
#endif // !__WIN__
#endif // !__WIN__
#if defined(JAVA_SUPPORT) || defined(CMGO_SUPPORT)
PQRYRES
OEMColumns
(
PGLOBAL
g
,
PTOS
topt
,
char
*
tab
,
char
*
db
,
bool
info
);
bool
MongoEnabled
(
void
);
#endif // JAVA_SUPPORT || CMGO_SUPPORT
/***********************************************************************/
/***********************************************************************/
/* Get the plugin directory. */
/* Get the plugin directory. */
...
@@ -347,100 +348,6 @@ uint GetFuncID(const char *func)
...
@@ -347,100 +348,6 @@ uint GetFuncID(const char *func)
return
fnc
;
return
fnc
;
}
// end of GetFuncID
}
// end of GetFuncID
/***********************************************************************/
/* OEMColumn: Get table column info for an OEM table. */
/***********************************************************************/
PQRYRES
OEMColumns
(
PGLOBAL
g
,
PTOS
topt
,
char
*
tab
,
char
*
db
,
bool
info
)
{
typedef
PQRYRES
(
__stdcall
*
XCOLDEF
)
(
PGLOBAL
,
void
*
,
char
*
,
char
*
,
bool
);
const
char
*
module
,
*
subtype
;
char
c
,
soname
[
_MAX_PATH
],
getname
[
40
]
=
"Col"
;
#if defined(__WIN__)
HANDLE
hdll
;
/* Handle to the external DLL */
#else // !__WIN__
void
*
hdll
;
/* Handle for the loaded shared library */
#endif // !__WIN__
XCOLDEF
coldef
=
NULL
;
PQRYRES
qrp
=
NULL
;
module
=
topt
->
module
;
subtype
=
topt
->
subtype
;
if
(
!
module
||
!
subtype
)
return
NULL
;
/*********************************************************************/
/* Ensure that the .dll doesn't have a path. */
/* This is done to ensure that only approved dll from the system */
/* directories are used (to make this even remotely secure). */
/*********************************************************************/
if
(
check_valid_path
(
module
,
strlen
(
module
)))
{
strcpy
(
g
->
Message
,
"Module cannot contain a path"
);
return
NULL
;
}
else
PlugSetPath
(
soname
,
module
,
GetPluginDir
());
// The exported name is always in uppercase
for
(
int
i
=
0
;
;
i
++
)
{
c
=
subtype
[
i
];
getname
[
i
+
3
]
=
toupper
(
c
);
if
(
!
c
)
break
;
}
// endfor i
#if defined(__WIN__)
// Load the Dll implementing the table
if
(
!
(
hdll
=
LoadLibrary
(
soname
)))
{
char
buf
[
256
];
DWORD
rc
=
GetLastError
();
sprintf
(
g
->
Message
,
MSG
(
DLL_LOAD_ERROR
),
rc
,
soname
);
FormatMessage
(
FORMAT_MESSAGE_FROM_SYSTEM
|
FORMAT_MESSAGE_IGNORE_INSERTS
,
NULL
,
rc
,
0
,
(
LPTSTR
)
buf
,
sizeof
(
buf
),
NULL
);
strcat
(
strcat
(
g
->
Message
,
": "
),
buf
);
return
NULL
;
}
// endif hDll
// Get the function returning an instance of the external DEF class
if
(
!
(
coldef
=
(
XCOLDEF
)
GetProcAddress
((
HINSTANCE
)
hdll
,
getname
)))
{
sprintf
(
g
->
Message
,
MSG
(
PROCADD_ERROR
),
GetLastError
(),
getname
);
FreeLibrary
((
HMODULE
)
hdll
);
return
NULL
;
}
// endif coldef
#else // !__WIN__
const
char
*
error
=
NULL
;
// Load the desired shared library
if
(
!
(
hdll
=
dlopen
(
soname
,
RTLD_LAZY
)))
{
error
=
dlerror
();
sprintf
(
g
->
Message
,
MSG
(
SHARED_LIB_ERR
),
soname
,
SVP
(
error
));
return
NULL
;
}
// endif Hdll
// Get the function returning an instance of the external DEF class
if
(
!
(
coldef
=
(
XCOLDEF
)
dlsym
(
hdll
,
getname
)))
{
error
=
dlerror
();
sprintf
(
g
->
Message
,
MSG
(
GET_FUNC_ERR
),
getname
,
SVP
(
error
));
dlclose
(
hdll
);
return
NULL
;
}
// endif coldef
#endif // !__WIN__
// Just in case the external Get function does not set error messages
sprintf
(
g
->
Message
,
"Error getting column info from %s"
,
subtype
);
// Get the table column definition
qrp
=
coldef
(
g
,
topt
,
tab
,
db
,
info
);
#if defined(__WIN__)
FreeLibrary
((
HMODULE
)
hdll
);
#else // !__WIN__
dlclose
(
hdll
);
#endif // !__WIN__
return
qrp
;
}
// end of OEMColumns
/* ------------------------- Class CATALOG --------------------------- */
/* ------------------------- Class CATALOG --------------------------- */
/***********************************************************************/
/***********************************************************************/
...
@@ -481,10 +388,10 @@ void MYCAT::Reset(void)
...
@@ -481,10 +388,10 @@ void MYCAT::Reset(void)
/* GetTableDesc: retrieve a table descriptor. */
/* GetTableDesc: retrieve a table descriptor. */
/* Look for a table descriptor matching the name and type. */
/* Look for a table descriptor matching the name and type. */
/***********************************************************************/
/***********************************************************************/
P
REL
DEF
MYCAT
::
GetTableDesc
(
PGLOBAL
g
,
PTABLE
tablep
,
P
TAB
DEF
MYCAT
::
GetTableDesc
(
PGLOBAL
g
,
PTABLE
tablep
,
LPCSTR
type
,
PRELDEF
*
)
LPCSTR
type
,
PRELDEF
*
)
{
{
P
REL
DEF
tdp
=
NULL
;
P
TAB
DEF
tdp
=
NULL
;
if
(
trace
(
1
))
if
(
trace
(
1
))
htrc
(
"GetTableDesc: name=%s am=%s
\n
"
,
tablep
->
GetName
(),
SVP
(
type
));
htrc
(
"GetTableDesc: name=%s am=%s
\n
"
,
tablep
->
GetName
(),
SVP
(
type
));
...
@@ -505,12 +412,12 @@ PRELDEF MYCAT::GetTableDesc(PGLOBAL g, PTABLE tablep,
...
@@ -505,12 +412,12 @@ PRELDEF MYCAT::GetTableDesc(PGLOBAL g, PTABLE tablep,
/* MakeTableDesc: make a table/view description. */
/* MakeTableDesc: make a table/view description. */
/* Note: caller must check if name already exists before calling it. */
/* Note: caller must check if name already exists before calling it. */
/***********************************************************************/
/***********************************************************************/
P
REL
DEF
MYCAT
::
MakeTableDesc
(
PGLOBAL
g
,
PTABLE
tablep
,
LPCSTR
am
)
P
TAB
DEF
MYCAT
::
MakeTableDesc
(
PGLOBAL
g
,
PTABLE
tablep
,
LPCSTR
am
)
{
{
TABTYPE
tc
;
TABTYPE
tc
;
LPCSTR
name
=
(
PSZ
)
PlugDup
(
g
,
tablep
->
GetName
());
LPCSTR
name
=
(
PSZ
)
PlugDup
(
g
,
tablep
->
GetName
());
LPCSTR
schema
=
(
PSZ
)
PlugDup
(
g
,
tablep
->
GetSchema
());
LPCSTR
schema
=
(
PSZ
)
PlugDup
(
g
,
tablep
->
GetSchema
());
P
REL
DEF
tdp
=
NULL
;
P
TAB
DEF
tdp
=
NULL
;
if
(
trace
(
1
))
if
(
trace
(
1
))
htrc
(
"MakeTableDesc: name=%s schema=%s am=%s
\n
"
,
htrc
(
"MakeTableDesc: name=%s schema=%s am=%s
\n
"
,
...
@@ -578,8 +485,8 @@ PRELDEF MYCAT::MakeTableDesc(PGLOBAL g, PTABLE tablep, LPCSTR am)
...
@@ -578,8 +485,8 @@ PRELDEF MYCAT::MakeTableDesc(PGLOBAL g, PTABLE tablep, LPCSTR am)
}
// endswitch
}
// endswitch
// Do make the table/view definition
// Do make the table/view definition
if
(
tdp
&&
tdp
->
Define
(
g
,
this
,
name
,
schema
,
am
))
if
(
tdp
&&
tdp
->
Define
(
g
,
this
,
name
,
schema
,
am
))
tdp
=
NULL
;
tdp
=
NULL
;
if
(
trace
(
1
))
if
(
trace
(
1
))
htrc
(
"Table %s made
\n
"
,
am
);
htrc
(
"Table %s made
\n
"
,
am
);
...
@@ -592,7 +499,7 @@ PRELDEF MYCAT::MakeTableDesc(PGLOBAL g, PTABLE tablep, LPCSTR am)
...
@@ -592,7 +499,7 @@ PRELDEF MYCAT::MakeTableDesc(PGLOBAL g, PTABLE tablep, LPCSTR am)
/***********************************************************************/
/***********************************************************************/
PTDB
MYCAT
::
GetTable
(
PGLOBAL
g
,
PTABLE
tablep
,
MODE
mode
,
LPCSTR
type
)
PTDB
MYCAT
::
GetTable
(
PGLOBAL
g
,
PTABLE
tablep
,
MODE
mode
,
LPCSTR
type
)
{
{
P
REL
DEF
tdp
;
P
TAB
DEF
tdp
;
PTDB
tdbp
=
NULL
;
PTDB
tdbp
=
NULL
;
// LPCSTR name= tablep->GetName();
// LPCSTR name= tablep->GetName();
...
...
storage/connect/mycat.h
View file @
425437b2
...
@@ -102,14 +102,14 @@ class MYCAT : public CATALOG {
...
@@ -102,14 +102,14 @@ class MYCAT : public CATALOG {
// Methods
// Methods
void
Reset
(
void
);
void
Reset
(
void
);
bool
StoreIndex
(
PGLOBAL
,
PTABDEF
)
{
return
false
;}
// Temporary
bool
StoreIndex
(
PGLOBAL
,
PTABDEF
)
{
return
false
;}
// Temporary
P
REL
DEF
GetTableDesc
(
PGLOBAL
g
,
PTABLE
tablep
,
P
TAB
DEF
GetTableDesc
(
PGLOBAL
g
,
PTABLE
tablep
,
LPCSTR
type
,
PRELDEF
*
prp
=
NULL
);
LPCSTR
type
,
PRELDEF
*
prp
=
NULL
);
PTDB
GetTable
(
PGLOBAL
g
,
PTABLE
tablep
,
PTDB
GetTable
(
PGLOBAL
g
,
PTABLE
tablep
,
MODE
mode
=
MODE_READ
,
LPCSTR
type
=
NULL
);
MODE
mode
=
MODE_READ
,
LPCSTR
type
=
NULL
);
void
ClearDB
(
PGLOBAL
g
);
void
ClearDB
(
PGLOBAL
g
);
protected:
protected:
P
REL
DEF
MakeTableDesc
(
PGLOBAL
g
,
PTABLE
tablep
,
LPCSTR
am
);
P
TAB
DEF
MakeTableDesc
(
PGLOBAL
g
,
PTABLE
tablep
,
LPCSTR
am
);
// Members
// Members
ha_connect
*
Hc
;
// The Connect handler
ha_connect
*
Hc
;
// The Connect handler
...
...
storage/connect/myconn.cpp
View file @
425437b2
...
@@ -472,7 +472,7 @@ int MYSQLC::Open(PGLOBAL g, const char *host, const char *db,
...
@@ -472,7 +472,7 @@ int MYSQLC::Open(PGLOBAL g, const char *host, const char *db,
int
pt
,
const
char
*
csname
)
int
pt
,
const
char
*
csname
)
{
{
const
char
*
pipe
=
NULL
;
const
char
*
pipe
=
NULL
;
uint
cto
=
10
,
nrt
=
20
;
//uint
cto = 10, nrt = 20;
my_bool
my_true
=
1
;
my_bool
my_true
=
1
;
m_DB
=
mysql_init
(
NULL
);
m_DB
=
mysql_init
(
NULL
);
...
@@ -485,11 +485,11 @@ int MYSQLC::Open(PGLOBAL g, const char *host, const char *db,
...
@@ -485,11 +485,11 @@ int MYSQLC::Open(PGLOBAL g, const char *host, const char *db,
if
(
trace
(
1
))
if
(
trace
(
1
))
htrc
(
"MYSQLC Open: m_DB=%.4X size=%d
\n
"
,
m_DB
,
(
int
)
sizeof
(
*
m_DB
));
htrc
(
"MYSQLC Open: m_DB=%.4X size=%d
\n
"
,
m_DB
,
(
int
)
sizeof
(
*
m_DB
));
// Removed to do like FEDERATED do
// Removed to do like FEDERATED do
es
//mysql_options(m_DB, MYSQL_READ_DEFAULT_GROUP, "client-mariadb");
//mysql_options(m_DB, MYSQL_READ_DEFAULT_GROUP, "client-mariadb");
mysql_options
(
m_DB
,
MYSQL_OPT_USE_REMOTE_CONNECTION
,
NULL
);
//
mysql_options(m_DB, MYSQL_OPT_USE_REMOTE_CONNECTION, NULL);
mysql_options
(
m_DB
,
MYSQL_OPT_CONNECT_TIMEOUT
,
&
cto
);
//
mysql_options(m_DB, MYSQL_OPT_CONNECT_TIMEOUT, &cto);
mysql_options
(
m_DB
,
MYSQL_OPT_READ_TIMEOUT
,
&
nrt
);
//
mysql_options(m_DB, MYSQL_OPT_READ_TIMEOUT, &nrt);
//mysql_options(m_DB, MYSQL_OPT_WRITE_TIMEOUT, ...);
//mysql_options(m_DB, MYSQL_OPT_WRITE_TIMEOUT, ...);
#if defined(__WIN__)
#if defined(__WIN__)
...
...
storage/connect/plgdbsem.h
View file @
425437b2
...
@@ -149,16 +149,22 @@ enum AMT {TYPE_AM_ERROR = 0, /* Type not defined */
...
@@ -149,16 +149,22 @@ enum AMT {TYPE_AM_ERROR = 0, /* Type not defined */
TYPE_AM_MGO
=
194
,
/* MGO access method type no */
TYPE_AM_MGO
=
194
,
/* MGO access method type no */
TYPE_AM_OUT
=
200
};
/* Output relations (storage) */
TYPE_AM_OUT
=
200
};
/* Output relations (storage) */
enum
RECFM
{
RECFM_NAF
=
-
2
,
/* Not a file */
enum
RECFM
{
RECFM_DFLT
=
0
,
/* Default table type */
RECFM_OEM
=
-
1
,
/* OEM file access method */
RECFM_NAF
=
1
,
/* Not a file table */
RECFM_VAR
=
0
,
/* Varying length DOS files */
RECFM_OEM
=
2
,
/* OEM table */
RECFM_FIX
=
1
,
/* Fixed length DOS files */
RECFM_VAR
=
3
,
/* Varying length DOS files */
RECFM_BIN
=
2
,
/* Binary DOS files (also fixed) */
RECFM_FIX
=
4
,
/* Fixed length DOS files */
RECFM_VCT
=
3
,
/* VCT formatted files */
RECFM_BIN
=
5
,
/* Binary DOS files (also fixed) */
RECFM_ODBC
=
4
,
/* Table accessed via ODBC */
RECFM_DBF
=
6
,
/* DBase formatted file */
RECFM_JDBC
=
5
,
/* Table accessed via JDBC */
RECFM_CSV
=
7
,
/* CSV file */
RECFM_PLG
=
6
,
/* Table accessed via PLGconn */
RECFM_FMT
=
8
,
/* FMT formatted file */
RECFM_DBF
=
7
};
/* DBase formatted file */
RECFM_VCT
=
9
,
/* VCT formatted files */
RECFM_XML
=
10
,
/* XML formatted files */
RECFM_JASON
=
11
,
/* JASON formatted files */
RECFM_DIR
=
12
,
/* DIR table */
RECFM_ODBC
=
13
,
/* Table accessed via ODBC */
RECFM_JDBC
=
14
,
/* Table accessed via JDBC */
RECFM_PLG
=
15
};
/* Table accessed via PLGconn */
enum
MISC
{
DB_TABNO
=
1
,
/* DB routines in Utility Table */
enum
MISC
{
DB_TABNO
=
1
,
/* DB routines in Utility Table */
MAX_MULT_KEY
=
10
,
/* Max multiple key number */
MAX_MULT_KEY
=
10
,
/* Max multiple key number */
...
@@ -537,7 +543,8 @@ enum XFLD {FLD_NO = 0, /* Not a field definition item */
...
@@ -537,7 +543,8 @@ enum XFLD {FLD_NO = 0, /* Not a field definition item */
FLD_FORMAT
=
16
,
/* Field format */
FLD_FORMAT
=
16
,
/* Field format */
FLD_CAT
=
17
,
/* Table catalog */
FLD_CAT
=
17
,
/* Table catalog */
FLD_SCHEM
=
18
,
/* Table schema */
FLD_SCHEM
=
18
,
/* Table schema */
FLD_TABNAME
=
19
};
/* Column Table name */
FLD_TABNAME
=
19
,
/* Column Table name */
FLD_FLAG
=
20
};
/* Field flag (CONNECT specific) */
/***********************************************************************/
/***********************************************************************/
/* Result of last SQL noconv query. */
/* Result of last SQL noconv query. */
...
...
storage/connect/reldef.cpp
View file @
425437b2
This diff is collapsed.
Click to expand it.
storage/connect/reldef.h
View file @
425437b2
...
@@ -84,10 +84,12 @@ class DllExport TABDEF : public RELDEF { /* Logical table descriptor */
...
@@ -84,10 +84,12 @@ class DllExport TABDEF : public RELDEF { /* Logical table descriptor */
void
SetNext
(
PTABDEF
tdfp
)
{
Next
=
tdfp
;}
void
SetNext
(
PTABDEF
tdfp
)
{
Next
=
tdfp
;}
int
GetMultiple
(
void
)
{
return
Multiple
;}
int
GetMultiple
(
void
)
{
return
Multiple
;}
int
GetPseudo
(
void
)
{
return
Pseudo
;}
int
GetPseudo
(
void
)
{
return
Pseudo
;}
PCSZ
GetPath
(
void
);
RECFM
GetRecfm
(
void
)
{
return
Recfm
;}
PCSZ
GetPath
(
void
);
//PSZ GetPath(void)
//PSZ GetPath(void)
// {return (Database) ? (PSZ)Database : Cat->GetDataPath();}
// {return (Database) ? (PSZ)Database : Cat->GetDataPath();}
bool
SepIndex
(
void
)
{
return
GetBoolCatInfo
(
"SepIndex"
,
false
);}
RECFM
GetTableFormat
(
const
char
*
type
);
bool
SepIndex
(
void
)
{
return
GetBoolCatInfo
(
"SepIndex"
,
false
);}
bool
IsReadOnly
(
void
)
{
return
Read_Only
;}
bool
IsReadOnly
(
void
)
{
return
Read_Only
;}
virtual
AMT
GetDefType
(
void
)
{
return
TYPE_AM_TAB
;}
virtual
AMT
GetDefType
(
void
)
{
return
TYPE_AM_TAB
;}
virtual
PIXDEF
GetIndx
(
void
)
{
return
NULL
;}
virtual
PIXDEF
GetIndx
(
void
)
{
return
NULL
;}
...
@@ -108,7 +110,8 @@ class DllExport TABDEF : public RELDEF { /* Logical table descriptor */
...
@@ -108,7 +110,8 @@ class DllExport TABDEF : public RELDEF { /* Logical table descriptor */
// Members
// Members
PCSZ
Schema
;
/* Table schema (for ODBC) */
PCSZ
Schema
;
/* Table schema (for ODBC) */
PCSZ
Desc
;
/* Table description */
PCSZ
Desc
;
/* Table description */
uint
Catfunc
;
/* Catalog function ID */
RECFM
Recfm
;
/* File or table format */
uint
Catfunc
;
/* Catalog function ID */
int
Card
;
/* (max) number of rows in table */
int
Card
;
/* (max) number of rows in table */
int
Elemt
;
/* Number of rows in blocks or rowset */
int
Elemt
;
/* Number of rows in blocks or rowset */
int
Sort
;
/* Table already sorted ??? */
int
Sort
;
/* Table already sorted ??? */
...
...
storage/connect/restget.cpp
View file @
425437b2
...
@@ -4,12 +4,6 @@
...
@@ -4,12 +4,6 @@
/***********************************************************************/
/***********************************************************************/
#include <cpprest/filestream.h>
#include <cpprest/filestream.h>
#include <cpprest/http_client.h>
#include <cpprest/http_client.h>
#if defined(MARIADB)
#include <my_global.h>
#else
#include "mini-global.h"
#define _OS_H_INCLUDED // Prevent os.h to be called
#endif
using
namespace
utility
::
conversions
;
// String conversions utilities
using
namespace
utility
::
conversions
;
// String conversions utilities
using
namespace
web
;
// Common features like URIs.
using
namespace
web
;
// Common features like URIs.
...
@@ -17,24 +11,24 @@ using namespace web::http; // Common HTTP functionality
...
@@ -17,24 +11,24 @@ using namespace web::http; // Common HTTP functionality
using
namespace
web
::
http
::
client
;
// HTTP client features
using
namespace
web
::
http
::
client
;
// HTTP client features
using
namespace
concurrency
::
streams
;
// Asynchronous streams
using
namespace
concurrency
::
streams
;
// Asynchronous streams
#include "global.h"
typedef
const
char
*
PCSZ
;
/***********************************************************************/
/***********************************************************************/
/* Make a local copy of the requested file. */
/* Make a local copy of the requested file. */
/***********************************************************************/
/***********************************************************************/
int
restGetFile
(
PGLOBAL
g
,
PCSZ
http
,
PCSZ
uri
,
PCSZ
fn
)
int
restGetFile
(
char
*
m
,
bool
xt
,
PCSZ
http
,
PCSZ
uri
,
PCSZ
fn
)
{
{
int
rc
=
0
;
int
rc
=
0
;
bool
xt
=
trace
(
515
);
auto
fileStream
=
std
::
make_shared
<
ostream
>
();
auto
fileStream
=
std
::
make_shared
<
ostream
>
();
if
(
!
http
||
!
fn
)
{
if
(
!
http
||
!
fn
)
{
strcpy
(
g
->
Message
,
"Missing http or filename"
);
//strcpy(g->Message, "Missing http or filename");
return
2
;
strcpy
(
m
,
"Missing http or filename"
);
return
2
;
}
// endif
}
// endif
if
(
xt
)
if
(
xt
)
htrc
(
"restGetFile: fn=%s
\n
"
,
fn
);
fprintf
(
stderr
,
"restGetFile: fn=%s
\n
"
,
fn
);
// Open stream to output file.
// Open stream to output file.
pplx
::
task
<
void
>
requestTask
=
fstream
::
open_ostream
(
to_string_t
(
fn
))
pplx
::
task
<
void
>
requestTask
=
fstream
::
open_ostream
(
to_string_t
(
fn
))
...
@@ -42,7 +36,7 @@ int restGetFile(PGLOBAL g, PCSZ http, PCSZ uri, PCSZ fn)
...
@@ -42,7 +36,7 @@ int restGetFile(PGLOBAL g, PCSZ http, PCSZ uri, PCSZ fn)
*
fileStream
=
outFile
;
*
fileStream
=
outFile
;
if
(
xt
)
if
(
xt
)
htrc
(
"Outfile isopen=%d
\n
"
,
outFile
.
is_open
());
fprintf
(
stderr
,
"Outfile isopen=%d
\n
"
,
outFile
.
is_open
());
// Create http_client to send the request.
// Create http_client to send the request.
http_client
client
(
to_string_t
(
http
));
http_client
client
(
to_string_t
(
http
));
...
@@ -58,8 +52,8 @@ int restGetFile(PGLOBAL g, PCSZ http, PCSZ uri, PCSZ fn)
...
@@ -58,8 +52,8 @@ int restGetFile(PGLOBAL g, PCSZ http, PCSZ uri, PCSZ fn)
// Handle response headers arriving.
// Handle response headers arriving.
.
then
([
=
](
http_response
response
)
{
.
then
([
=
](
http_response
response
)
{
if
(
xt
)
if
(
xt
)
htrc
(
"Received response status code:%u
\n
"
,
fprintf
(
stderr
,
"Received response status code:%u
\n
"
,
response
.
status_code
());
response
.
status_code
());
// Write response body into the file.
// Write response body into the file.
return
response
.
body
().
read_to_end
(
fileStream
->
streambuf
());
return
response
.
body
().
read_to_end
(
fileStream
->
streambuf
());
...
@@ -68,27 +62,27 @@ int restGetFile(PGLOBAL g, PCSZ http, PCSZ uri, PCSZ fn)
...
@@ -68,27 +62,27 @@ int restGetFile(PGLOBAL g, PCSZ http, PCSZ uri, PCSZ fn)
// Close the file stream.
// Close the file stream.
.
then
([
=
](
size_t
n
)
{
.
then
([
=
](
size_t
n
)
{
if
(
xt
)
if
(
xt
)
htrc
(
"Return size=%
u
\n
"
,
n
);
fprintf
(
stderr
,
"Return size=%z
u
\n
"
,
n
);
return
fileStream
->
close
();
return
fileStream
->
close
();
});
});
// Wait for all the outstanding I/O to complete and handle any exceptions
// Wait for all the outstanding I/O to complete and handle any exceptions
try
{
try
{
requestTask
.
wait
();
if
(
xt
)
if
(
xt
)
htrc
(
"In Wait
\n
"
);
fprintf
(
stderr
,
"Waiting
\n
"
);
requestTask
.
wait
();
}
catch
(
const
std
::
exception
&
e
)
{
}
catch
(
const
std
::
exception
&
e
)
{
if
(
xt
)
if
(
xt
)
htrc
(
"Error exception: %s
\n
"
,
e
.
what
());
fprintf
(
stderr
,
"Error exception: %s
\n
"
,
e
.
what
());
sprintf
(
g
->
Message
,
"Error exception: %s"
,
e
.
what
());
rc
=
1
;
sprintf
(
m
,
"Error exception: %s"
,
e
.
what
());
rc
=
1
;
}
// end try/catch
}
// end try/catch
if
(
xt
)
if
(
xt
)
htrc
(
"restget done: rc=%d
\n
"
,
rc
);
fprintf
(
stderr
,
"restget done: rc=%d
\n
"
,
rc
);
return
rc
;
return
rc
;
}
// end of restGetFile
}
// end of restGetFile
storage/connect/tabcmg.cpp
View file @
425437b2
...
@@ -53,25 +53,30 @@ bool CMGDISC::FindInDoc(PGLOBAL g, bson_iter_t *iter, const bson_t *doc,
...
@@ -53,25 +53,30 @@ bool CMGDISC::FindInDoc(PGLOBAL g, bson_iter_t *iter, const bson_t *doc,
{
{
if
(
!
doc
||
bson_iter_init
(
iter
,
doc
))
{
if
(
!
doc
||
bson_iter_init
(
iter
,
doc
))
{
const
char
*
key
;
const
char
*
key
;
char
colname
[
65
];
char
colname
[
65
];
char
fmt
[
129
];
char
fmt
[
129
];
bool
newcol
;
bool
newcol
;
size_t
n
;
while
(
bson_iter_next
(
iter
))
{
while
(
bson_iter_next
(
iter
))
{
key
=
bson_iter_key
(
iter
);
key
=
bson_iter_key
(
iter
);
newcol
=
true
;
newcol
=
true
;
if
(
pcn
)
{
if
(
pcn
)
{
strncpy
(
colname
,
pcn
,
64
);
n
=
sizeof
(
colname
)
-
1
;
colname
[
64
]
=
0
;
strncpy
(
colname
,
pcn
,
n
);
strncat
(
strncat
(
colname
,
"_"
,
65
),
key
,
65
);
colname
[
n
]
=
0
;
n
-=
strlen
(
colname
);
strncat
(
strncat
(
colname
,
"_"
,
n
),
key
,
n
-
1
);
}
else
}
else
strcpy
(
colname
,
key
);
strcpy
(
colname
,
key
);
if
(
pfmt
)
{
if
(
pfmt
)
{
strncpy
(
fmt
,
pfmt
,
128
);
n
=
sizeof
(
fmt
)
-
1
;
fmt
[
128
]
=
0
;
strncpy
(
fmt
,
pfmt
,
n
);
strncat
(
strncat
(
fmt
,
"."
,
129
),
key
,
129
);
fmt
[
n
]
=
0
;
n
-=
strlen
(
fmt
);
strncat
(
strncat
(
fmt
,
"."
,
n
),
key
,
n
-
1
);
}
else
}
else
strcpy
(
fmt
,
key
);
strcpy
(
fmt
,
key
);
...
...
storage/connect/tabdos.cpp
View file @
425437b2
...
@@ -45,7 +45,7 @@
...
@@ -45,7 +45,7 @@
#include "global.h"
#include "global.h"
#include "osutil.h"
#include "osutil.h"
#include "plgdbsem.h"
#include "plgdbsem.h"
#include "catalog.h"
//
#include "catalog.h"
#include "mycat.h"
#include "mycat.h"
#include "xindex.h"
#include "xindex.h"
#include "filamap.h"
#include "filamap.h"
...
@@ -161,7 +161,12 @@ bool DOSDEF::DefineAM(PGLOBAL g, LPCSTR am, int)
...
@@ -161,7 +161,12 @@ bool DOSDEF::DefineAM(PGLOBAL g, LPCSTR am, int)
//Last = GetIntCatInfo("Last", 0);
//Last = GetIntCatInfo("Last", 0);
Ending
=
GetIntCatInfo
(
"Ending"
,
CRLF
);
Ending
=
GetIntCatInfo
(
"Ending"
,
CRLF
);
if
(
Recfm
==
RECFM_FIX
||
Recfm
==
RECFM_BIN
)
{
if
(
Ending
<=
0
)
{
Ending
=
(
Recfm
==
RECFM_BIN
||
Recfm
==
RECFM_VCT
)
?
0
:
CRLF
;
SetIntCatInfo
(
"Ending"
,
Ending
);
}
// endif ending
if
(
Recfm
==
RECFM_FIX
||
Recfm
==
RECFM_BIN
)
{
Huge
=
GetBoolCatInfo
(
"Huge"
,
Cat
->
GetDefHuge
());
Huge
=
GetBoolCatInfo
(
"Huge"
,
Cat
->
GetDefHuge
());
Padded
=
GetBoolCatInfo
(
"Padded"
,
false
);
Padded
=
GetBoolCatInfo
(
"Padded"
,
false
);
Blksize
=
GetIntCatInfo
(
"Blksize"
,
0
);
Blksize
=
GetIntCatInfo
(
"Blksize"
,
0
);
...
@@ -191,7 +196,8 @@ bool DOSDEF::GetOptFileName(PGLOBAL g, char *filename)
...
@@ -191,7 +196,8 @@ bool DOSDEF::GetOptFileName(PGLOBAL g, char *filename)
case
RECFM_FIX
:
ftype
=
".fop"
;
break
;
case
RECFM_FIX
:
ftype
=
".fop"
;
break
;
case
RECFM_BIN
:
ftype
=
".bop"
;
break
;
case
RECFM_BIN
:
ftype
=
".bop"
;
break
;
case
RECFM_VCT
:
ftype
=
".vop"
;
break
;
case
RECFM_VCT
:
ftype
=
".vop"
;
break
;
case
RECFM_DBF
:
ftype
=
".dbp"
;
break
;
case
RECFM_CSV
:
ftype
=
".cop"
;
break
;
case
RECFM_DBF
:
ftype
=
".dbp"
;
break
;
default:
default:
sprintf
(
g
->
Message
,
MSG
(
INVALID_FTYPE
),
Recfm
);
sprintf
(
g
->
Message
,
MSG
(
INVALID_FTYPE
),
Recfm
);
return
true
;
return
true
;
...
@@ -261,7 +267,8 @@ bool DOSDEF::DeleteIndexFile(PGLOBAL g, PIXDEF pxdf)
...
@@ -261,7 +267,8 @@ bool DOSDEF::DeleteIndexFile(PGLOBAL g, PIXDEF pxdf)
case
RECFM_FIX
:
ftype
=
".fnx"
;
break
;
case
RECFM_FIX
:
ftype
=
".fnx"
;
break
;
case
RECFM_BIN
:
ftype
=
".bnx"
;
break
;
case
RECFM_BIN
:
ftype
=
".bnx"
;
break
;
case
RECFM_VCT
:
ftype
=
".vnx"
;
break
;
case
RECFM_VCT
:
ftype
=
".vnx"
;
break
;
case
RECFM_DBF
:
ftype
=
".dbx"
;
break
;
case
RECFM_CSV
:
ftype
=
".cnx"
;
break
;
case
RECFM_DBF
:
ftype
=
".dbx"
;
break
;
default:
default:
sprintf
(
g
->
Message
,
MSG
(
BAD_RECFM_VAL
),
Recfm
);
sprintf
(
g
->
Message
,
MSG
(
BAD_RECFM_VAL
),
Recfm
);
return
true
;
return
true
;
...
@@ -2257,7 +2264,7 @@ int TDBDOS::ReadDB(PGLOBAL g)
...
@@ -2257,7 +2264,7 @@ int TDBDOS::ReadDB(PGLOBAL g)
/***********************************************************************/
/***********************************************************************/
bool
TDBDOS
::
PrepareWriting
(
PGLOBAL
)
bool
TDBDOS
::
PrepareWriting
(
PGLOBAL
)
{
{
if
(
!
Ftype
&&
(
Mode
==
MODE_INSERT
||
Txfp
->
GetUseTemp
()))
{
if
(
Ftype
==
RECFM_VAR
&&
(
Mode
==
MODE_INSERT
||
Txfp
->
GetUseTemp
()))
{
char
*
p
;
char
*
p
;
/*******************************************************************/
/*******************************************************************/
...
@@ -2542,7 +2549,8 @@ void DOSCOL::ReadColumn(PGLOBAL g)
...
@@ -2542,7 +2549,8 @@ void DOSCOL::ReadColumn(PGLOBAL g)
/*********************************************************************/
/*********************************************************************/
/* For a variable length file, check if the field exists. */
/* For a variable length file, check if the field exists. */
/*********************************************************************/
/*********************************************************************/
if
(
tdbp
->
Ftype
==
RECFM_VAR
&&
strlen
(
tdbp
->
To_Line
)
<
(
unsigned
)
Deplac
)
if
((
tdbp
->
Ftype
==
RECFM_VAR
||
tdbp
->
Ftype
==
RECFM_CSV
)
&&
strlen
(
tdbp
->
To_Line
)
<
(
unsigned
)
Deplac
)
field
=
0
;
field
=
0
;
else
if
(
Dsp
)
else
if
(
Dsp
)
for
(
i
=
0
;
i
<
field
;
i
++
)
for
(
i
=
0
;
i
<
field
;
i
++
)
...
@@ -2552,7 +2560,8 @@ void DOSCOL::ReadColumn(PGLOBAL g)
...
@@ -2552,7 +2560,8 @@ void DOSCOL::ReadColumn(PGLOBAL g)
switch
(
tdbp
->
Ftype
)
{
switch
(
tdbp
->
Ftype
)
{
case
RECFM_VAR
:
case
RECFM_VAR
:
case
RECFM_FIX
:
// Fixed length text file
case
RECFM_FIX
:
// Fixed length text file
case
RECFM_DBF
:
// Fixed length DBase file
case
RECFM_CSV
:
// Variable length CSV or FMT file
case
RECFM_DBF
:
// Fixed length DBase file
if
(
Nod
)
switch
(
Buf_Type
)
{
if
(
Nod
)
switch
(
Buf_Type
)
{
case
TYPE_INT
:
case
TYPE_INT
:
case
TYPE_SHORT
:
case
TYPE_SHORT
:
...
...
storage/connect/tabdos.h
View file @
425437b2
...
@@ -80,7 +80,6 @@ class DllExport DOSDEF : public TABDEF { /* Logical table description */
...
@@ -80,7 +80,6 @@ class DllExport DOSDEF : public TABDEF { /* Logical table description */
PCSZ
Entry
;
/* Zip entry name or pattern */
PCSZ
Entry
;
/* Zip entry name or pattern */
PCSZ
Pwd
;
/* Zip password */
PCSZ
Pwd
;
/* Zip password */
PIXDEF
To_Indx
;
/* To index definitions blocks */
PIXDEF
To_Indx
;
/* To index definitions blocks */
RECFM
Recfm
;
/* 0:VAR, 1:FIX, 2:BIN, 3:VCT, 6:DBF */
bool
Mapped
;
/* 0: disk file, 1: memory mapped file */
bool
Mapped
;
/* 0: disk file, 1: memory mapped file */
bool
Zipped
;
/* true for zipped table file */
bool
Zipped
;
/* true for zipped table file */
bool
Mulentries
;
/* true for multiple entries */
bool
Mulentries
;
/* true for multiple entries */
...
...
storage/connect/tabfix.cpp
View file @
425437b2
...
@@ -84,7 +84,7 @@ PTDB TDBFIX::Clone(PTABS t)
...
@@ -84,7 +84,7 @@ PTDB TDBFIX::Clone(PTABS t)
tp
=
new
(
g
)
TDBFIX
(
g
,
this
);
tp
=
new
(
g
)
TDBFIX
(
g
,
this
);
if
(
Ftype
<
2
)
{
if
(
Ftype
==
RECFM_VAR
||
Ftype
==
RECFM_FIX
)
{
// File is text
// File is text
PDOSCOL
cp1
,
cp2
;
PDOSCOL
cp1
,
cp2
;
...
...
storage/connect/tabfmt.cpp
View file @
425437b2
/************* TabFmt C++ Program Source Code File (.CPP) **************/
/************* TabFmt C++ Program Source Code File (.CPP) **************/
/* PROGRAM NAME: TABFMT */
/* PROGRAM NAME: TABFMT */
/* ------------- */
/* ------------- */
/* Version 3.9.
2
*/
/* Version 3.9.
3
*/
/* */
/* */
/* COPYRIGHT: */
/* COPYRIGHT: */
/* ---------- */
/* ---------- */
/* (C) Copyright to the author Olivier BERTRAND 2001 - 201
7
*/
/* (C) Copyright to the author Olivier BERTRAND 2001 - 201
9
*/
/* */
/* */
/* WHAT THIS PROGRAM DOES: */
/* WHAT THIS PROGRAM DOES: */
/* ----------------------- */
/* ----------------------- */
...
@@ -477,6 +477,7 @@ bool CSVDEF::DefineAM(PGLOBAL g, LPCSTR am, int poff)
...
@@ -477,6 +477,7 @@ bool CSVDEF::DefineAM(PGLOBAL g, LPCSTR am, int poff)
if
(
DOSDEF
::
DefineAM
(
g
,
"CSV"
,
poff
))
if
(
DOSDEF
::
DefineAM
(
g
,
"CSV"
,
poff
))
return
true
;
return
true
;
Recfm
=
RECFM_CSV
;
GetCharCatInfo
(
"Separator"
,
","
,
buf
,
sizeof
(
buf
));
GetCharCatInfo
(
"Separator"
,
","
,
buf
,
sizeof
(
buf
));
Sep
=
(
strlen
(
buf
)
==
2
&&
buf
[
0
]
==
'\\'
&&
buf
[
1
]
==
't'
)
?
'\t'
:
*
buf
;
Sep
=
(
strlen
(
buf
)
==
2
&&
buf
[
0
]
==
'\\'
&&
buf
[
1
]
==
't'
)
?
'\t'
:
*
buf
;
Quoted
=
GetIntCatInfo
(
"Quoted"
,
-
1
);
Quoted
=
GetIntCatInfo
(
"Quoted"
,
-
1
);
...
...
storage/connect/tabjson.cpp
View file @
425437b2
...
@@ -394,10 +394,11 @@ int JSONDISC::GetColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt)
...
@@ -394,10 +394,11 @@ int JSONDISC::GetColumns(PGLOBAL g, PCSZ db, PCSZ dsn, PTOS topt)
bool
JSONDISC
::
Find
(
PGLOBAL
g
,
PJVAL
jvp
,
PCSZ
key
,
int
j
)
bool
JSONDISC
::
Find
(
PGLOBAL
g
,
PJVAL
jvp
,
PCSZ
key
,
int
j
)
{
{
char
*
p
,
*
pc
=
colname
+
strlen
(
colname
);
char
*
p
,
*
pc
=
colname
+
strlen
(
colname
);
int
ars
;
int
ars
;
PJOB
job
;
size_t
n
;
PJAR
jar
;
PJOB
job
;
PJAR
jar
;
if
((
valp
=
jvp
?
jvp
->
GetValue
()
:
NULL
))
{
if
((
valp
=
jvp
?
jvp
->
GetValue
()
:
NULL
))
{
jcol
.
Type
=
valp
->
GetType
();
jcol
.
Type
=
valp
->
GetType
();
...
@@ -423,8 +424,10 @@ bool JSONDISC::Find(PGLOBAL g, PJVAL jvp, PCSZ key, int j)
...
@@ -423,8 +424,10 @@ bool JSONDISC::Find(PGLOBAL g, PJVAL jvp, PCSZ key, int j)
PCSZ
k
=
jrp
->
GetKey
();
PCSZ
k
=
jrp
->
GetKey
();
if
(
*
k
!=
'$'
)
{
if
(
*
k
!=
'$'
)
{
strncat
(
strncat
(
fmt
,
sep
,
128
),
k
,
128
);
n
=
sizeof
(
fmt
)
-
strlen
(
fmt
)
-
1
;
strncat
(
strncat
(
colname
,
"_"
,
64
),
k
,
64
);
strncat
(
strncat
(
fmt
,
sep
,
n
),
k
,
n
-
strlen
(
sep
));
n
=
sizeof
(
colname
)
-
strlen
(
colname
)
-
1
;
strncat
(
strncat
(
colname
,
"_"
,
n
),
k
,
n
-
1
);
}
// endif Key
}
// endif Key
if
(
Find
(
g
,
jrp
->
GetVal
(),
k
,
j
+
1
))
if
(
Find
(
g
,
jrp
->
GetVal
(),
k
,
j
+
1
))
...
@@ -443,19 +446,26 @@ bool JSONDISC::Find(PGLOBAL g, PJVAL jvp, PCSZ key, int j)
...
@@ -443,19 +446,26 @@ bool JSONDISC::Find(PGLOBAL g, PJVAL jvp, PCSZ key, int j)
ars
=
MY_MIN
(
jar
->
GetSize
(
false
),
1
);
ars
=
MY_MIN
(
jar
->
GetSize
(
false
),
1
);
for
(
int
k
=
0
;
k
<
ars
;
k
++
)
{
for
(
int
k
=
0
;
k
<
ars
;
k
++
)
{
if
(
!
tdp
->
Xcol
||
stricmp
(
tdp
->
Xcol
,
key
))
{
n
=
sizeof
(
fmt
)
-
(
strlen
(
fmt
)
+
1
);
sprintf
(
buf
,
"%d"
,
k
);
if
(
tdp
->
Uri
)
strncat
(
strncat
(
fmt
,
sep
,
128
),
buf
,
128
);
else
strncat
(
strncat
(
strncat
(
fmt
,
"["
,
128
),
buf
,
128
),
"]"
,
128
);
if
(
all
)
if
(
!
tdp
->
Xcol
||
stricmp
(
tdp
->
Xcol
,
key
))
{
strncat
(
strncat
(
colname
,
"_"
,
64
),
buf
,
64
);
sprintf
(
buf
,
"%d"
,
k
);
}
else
if
(
tdp
->
Uri
)
{
strncat
(
fmt
,
(
tdp
->
Uri
?
sep
:
"[*]"
),
128
);
strncat
(
strncat
(
fmt
,
sep
,
n
),
buf
,
n
-
strlen
(
sep
));
}
else
{
strncat
(
strncat
(
fmt
,
"["
,
n
),
buf
,
n
-
1
);
strncat
(
fmt
,
"]"
,
n
-
(
strlen
(
buf
)
+
1
));
}
// endif uri
if
(
all
)
{
n
=
sizeof
(
colname
)
-
(
strlen
(
colname
)
+
1
);
strncat
(
strncat
(
colname
,
"_"
,
n
),
buf
,
n
-
1
);
}
// endif all
}
else
{
strncat
(
fmt
,
(
tdp
->
Uri
?
sep
:
"[*]"
),
n
);
}
if
(
Find
(
g
,
jar
->
GetValue
(
k
),
""
,
j
))
if
(
Find
(
g
,
jar
->
GetValue
(
k
),
""
,
j
))
return
true
;
return
true
;
...
...
storage/connect/tabmysql.cpp
View file @
425437b2
...
@@ -342,11 +342,13 @@ bool MYSQLDEF::DefineAM(PGLOBAL g, LPCSTR am, int)
...
@@ -342,11 +342,13 @@ bool MYSQLDEF::DefineAM(PGLOBAL g, LPCSTR am, int)
Delayed
=
!!
GetIntCatInfo
(
"Delayed"
,
0
);
Delayed
=
!!
GetIntCatInfo
(
"Delayed"
,
0
);
}
else
{
}
else
{
// MYSQL access from a PROXY table
// MYSQL access from a PROXY table
Tabschema
=
GetStringCatInfo
(
g
,
"Database"
,
Tabschema
?
Tabschema
:
PlugDup
(
g
,
"*"
));
TABLE_SHARE
*
s
;
Tabschema
=
GetStringCatInfo
(
g
,
"Database"
,
Tabschema
?
Tabschema
:
PlugDup
(
g
,
"*"
));
Isview
=
GetBoolCatInfo
(
"View"
,
false
);
Isview
=
GetBoolCatInfo
(
"View"
,
false
);
// We must get other connection parms from the calling table
// We must get other connection parms from the calling table
Remove_tshp
(
Cat
);
s
=
Remove_tshp
(
Cat
);
url
=
GetStringCatInfo
(
g
,
"Connect"
,
NULL
);
url
=
GetStringCatInfo
(
g
,
"Connect"
,
NULL
);
if
(
!
url
||
!*
url
)
{
if
(
!
url
||
!*
url
)
{
...
@@ -365,6 +367,9 @@ bool MYSQLDEF::DefineAM(PGLOBAL g, LPCSTR am, int)
...
@@ -365,6 +367,9 @@ bool MYSQLDEF::DefineAM(PGLOBAL g, LPCSTR am, int)
}
// endif url
}
// endif url
Tabname
=
Name
;
Tabname
=
Name
;
// Needed for column description
Restore_tshp
(
Cat
,
s
);
}
// endif am
}
// endif am
if
((
Srcdef
=
GetStringCatInfo
(
g
,
"Srcdef"
,
NULL
)))
{
if
((
Srcdef
=
GetStringCatInfo
(
g
,
"Srcdef"
,
NULL
)))
{
...
...
storage/connect/tabrest.cpp
View file @
425437b2
/*************** Rest C++ Program Source Code File (.CPP) **************/
/*************** Rest C++ Program Source Code File (.CPP) **************/
/* PROGRAM NAME: Rest Version 1.
5
*/
/* PROGRAM NAME: Rest Version 1.
6
*/
/* (C) Copyright to the author Olivier BERTRAND 2018 - 2019 */
/* (C) Copyright to the author Olivier BERTRAND 2018 - 2019 */
/* This program is the REST Web API support for MariaDB. */
/* This program is the REST Web API support for MariaDB. */
/* When compiled without MARIADB defined, it is the EOM module code. */
/* When compiled without MARIADB defined, it is the EOM module code. */
...
@@ -36,17 +36,7 @@
...
@@ -36,17 +36,7 @@
#include "tabfmt.h"
#include "tabfmt.h"
#include "tabrest.h"
#include "tabrest.h"
/***********************************************************************/
static
XGETREST
getRestFnc
=
NULL
;
/* Get the file from the Web. */
/***********************************************************************/
int
restGetFile
(
PGLOBAL
g
,
PCSZ
http
,
PCSZ
uri
,
PCSZ
fn
);
#if defined(__WIN__)
static
PCSZ
slash
=
"
\\
"
;
#else // !__WIN__
static
PCSZ
slash
=
"/"
;
#define stricmp strcasecmp
#endif // !__WIN__
#if !defined(MARIADB)
#if !defined(MARIADB)
/***********************************************************************/
/***********************************************************************/
...
@@ -75,6 +65,74 @@ PTABDEF __stdcall GetREST(PGLOBAL g, void *memp)
...
@@ -75,6 +65,74 @@ PTABDEF __stdcall GetREST(PGLOBAL g, void *memp)
}
// end of GetREST
}
// end of GetREST
#endif // !MARIADB
#endif // !MARIADB
/***********************************************************************/
/* GetREST: get the external TABDEF from OEM module. */
/***********************************************************************/
XGETREST
GetRestFunction
(
PGLOBAL
g
)
{
if
(
getRestFnc
)
return
getRestFnc
;
#if !defined(REST_SOURCE)
if
(
trace
(
515
))
htrc
(
"Looking for GetRest library
\n
"
);
#if defined(__WIN__)
HANDLE
Hdll
;
const
char
*
soname
=
"GetRest.dll"
;
// Module name
if
(
!
(
Hdll
=
LoadLibrary
(
soname
)))
{
char
buf
[
256
];
DWORD
rc
=
GetLastError
();
sprintf
(
g
->
Message
,
MSG
(
DLL_LOAD_ERROR
),
rc
,
soname
);
FormatMessage
(
FORMAT_MESSAGE_FROM_SYSTEM
|
FORMAT_MESSAGE_IGNORE_INSERTS
,
NULL
,
rc
,
0
,
(
LPTSTR
)
buf
,
sizeof
(
buf
),
NULL
);
strcat
(
strcat
(
g
->
Message
,
": "
),
buf
);
return
NULL
;
}
// endif Hdll
// Get the function returning an instance of the external DEF class
if
(
!
(
getRestFnc
=
(
XGETREST
)
GetProcAddress
((
HINSTANCE
)
Hdll
,
"restGetFile"
)))
{
char
buf
[
256
];
DWORD
rc
=
GetLastError
();
sprintf
(
g
->
Message
,
MSG
(
PROCADD_ERROR
),
rc
,
"restGetFile"
);
FormatMessage
(
FORMAT_MESSAGE_FROM_SYSTEM
|
FORMAT_MESSAGE_IGNORE_INSERTS
,
NULL
,
rc
,
0
,
(
LPTSTR
)
buf
,
sizeof
(
buf
),
NULL
);
strcat
(
strcat
(
g
->
Message
,
": "
),
buf
);
FreeLibrary
((
HMODULE
)
Hdll
);
return
NULL
;
}
// endif getRestFnc
#else // !__WIN__
void
*
Hso
;
const
char
*
error
=
NULL
;
const
char
*
soname
=
"GetRest.so"
;
// Module name
// Load the desired shared library
if
(
!
(
Hso
=
dlopen
(
soname
,
RTLD_LAZY
)))
{
error
=
dlerror
();
sprintf
(
g
->
Message
,
MSG
(
SHARED_LIB_ERR
),
soname
,
SVP
(
error
));
return
NULL
;
}
// endif Hdll
// Get the function returning an instance of the external DEF class
if
(
!
(
getRestFnc
=
(
XGETREST
)
dlsym
(
Hso
,
"restGetFile"
)))
{
error
=
dlerror
();
sprintf
(
g
->
Message
,
MSG
(
GET_FUNC_ERR
),
"restGetFile"
,
SVP
(
error
));
dlclose
(
Hso
);
return
NULL
;
}
// endif getdef
#endif // !__WIN__
#else
getRestFnc
=
restGetFile
;
#endif
return
getRestFnc
;
}
// end of GetRestFunction
/***********************************************************************/
/***********************************************************************/
/* Return the columns definition to MariaDB. */
/* Return the columns definition to MariaDB. */
/***********************************************************************/
/***********************************************************************/
...
@@ -87,6 +145,10 @@ PQRYRES __stdcall ColREST(PGLOBAL g, PTOS tp, char *tab, char *db, bool info)
...
@@ -87,6 +145,10 @@ PQRYRES __stdcall ColREST(PGLOBAL g, PTOS tp, char *tab, char *db, bool info)
PQRYRES
qrp
=
NULL
;
PQRYRES
qrp
=
NULL
;
char
filename
[
_MAX_PATH
+
1
];
// MAX PATH ???
char
filename
[
_MAX_PATH
+
1
];
// MAX PATH ???
PCSZ
http
,
uri
,
fn
,
ftype
;
PCSZ
http
,
uri
,
fn
,
ftype
;
XGETREST
grf
=
GetRestFunction
(
g
);
if
(
!
grf
)
return
NULL
;
http
=
GetStringTableOption
(
g
,
tp
,
"Http"
,
NULL
);
http
=
GetStringTableOption
(
g
,
tp
,
"Http"
,
NULL
);
uri
=
GetStringTableOption
(
g
,
tp
,
"Uri"
,
NULL
);
uri
=
GetStringTableOption
(
g
,
tp
,
"Uri"
,
NULL
);
...
@@ -100,11 +162,11 @@ PQRYRES __stdcall ColREST(PGLOBAL g, PTOS tp, char *tab, char *db, bool info)
...
@@ -100,11 +162,11 @@ PQRYRES __stdcall ColREST(PGLOBAL g, PTOS tp, char *tab, char *db, bool info)
// We used the file name relative to recorded datapath
// We used the file name relative to recorded datapath
strcat
(
strcat
(
strcat
(
strcpy
(
filename
,
"."
),
slash
),
db
),
slash
);
strcat
(
strcat
(
strcat
(
strcpy
(
filename
,
"."
),
slash
),
db
),
slash
);
strncat
(
filename
,
fn
,
_MAX_PATH
);
strncat
(
filename
,
fn
,
_MAX_PATH
-
strlen
(
filename
)
);
// Retrieve the file from the web and copy it locally
// Retrieve the file from the web and copy it locally
if
(
http
&&
restGetFile
(
g
,
http
,
uri
,
filename
))
{
if
(
http
&&
grf
(
g
->
Message
,
trace
(
515
)
,
http
,
uri
,
filename
))
{
// sprintf(g->Message, "Failed to get file at %s", http);
// sprintf(g->Message, "Failed to get file at %s", http);
}
else
if
(
!
stricmp
(
ftype
,
"XML"
))
}
else
if
(
!
stricmp
(
ftype
,
"XML"
))
qrp
=
XMLColumns
(
g
,
db
,
tab
,
tp
,
info
);
qrp
=
XMLColumns
(
g
,
db
,
tab
,
tp
,
info
);
else
if
(
!
stricmp
(
ftype
,
"JSON"
))
else
if
(
!
stricmp
(
ftype
,
"JSON"
))
...
@@ -124,9 +186,14 @@ PQRYRES __stdcall ColREST(PGLOBAL g, PTOS tp, char *tab, char *db, bool info)
...
@@ -124,9 +186,14 @@ PQRYRES __stdcall ColREST(PGLOBAL g, PTOS tp, char *tab, char *db, bool info)
/***********************************************************************/
/***********************************************************************/
bool
RESTDEF
::
DefineAM
(
PGLOBAL
g
,
LPCSTR
am
,
int
poff
)
bool
RESTDEF
::
DefineAM
(
PGLOBAL
g
,
LPCSTR
am
,
int
poff
)
{
{
char
filename
[
_MAX_PATH
+
1
];
char
filename
[
_MAX_PATH
+
1
];
int
rc
=
0
,
n
;
int
rc
=
0
,
n
;
LPCSTR
ftype
;
bool
xt
=
trace
(
515
);
LPCSTR
ftype
;
XGETREST
grf
=
GetRestFunction
(
g
);
if
(
!
grf
)
return
true
;
#if defined(MARIADB)
#if defined(MARIADB)
ftype
=
GetStringCatInfo
(
g
,
"Type"
,
"JSON"
);
ftype
=
GetStringCatInfo
(
g
,
"Type"
,
"JSON"
);
...
@@ -135,7 +202,7 @@ bool RESTDEF::DefineAM(PGLOBAL g, LPCSTR am, int poff)
...
@@ -135,7 +202,7 @@ bool RESTDEF::DefineAM(PGLOBAL g, LPCSTR am, int poff)
ftype
=
GetStringCatInfo
(
g
,
"Ftype"
,
"JSON"
);
ftype
=
GetStringCatInfo
(
g
,
"Ftype"
,
"JSON"
);
#endif // !MARIADB
#endif // !MARIADB
if
(
trace
(
515
)
)
if
(
xt
)
htrc
(
"ftype = %s am = %s
\n
"
,
ftype
,
SVP
(
am
));
htrc
(
"ftype = %s am = %s
\n
"
,
ftype
,
SVP
(
am
));
n
=
(
!
stricmp
(
ftype
,
"JSON"
))
?
1
n
=
(
!
stricmp
(
ftype
,
"JSON"
))
?
1
...
@@ -154,12 +221,13 @@ bool RESTDEF::DefineAM(PGLOBAL g, LPCSTR am, int poff)
...
@@ -154,12 +221,13 @@ bool RESTDEF::DefineAM(PGLOBAL g, LPCSTR am, int poff)
// We used the file name relative to recorded datapath
// We used the file name relative to recorded datapath
//PlugSetPath(filename, Fn, GetPath());
//PlugSetPath(filename, Fn, GetPath());
strncat
(
strcpy
(
filename
,
GetPath
()),
Fn
,
_MAX_PATH
);
strcpy
(
filename
,
GetPath
());
strncat
(
filename
,
Fn
,
_MAX_PATH
-
strlen
(
filename
));
// Retrieve the file from the web and copy it locally
// Retrieve the file from the web and copy it locally
rc
=
restGetFile
(
g
,
Http
,
Uri
,
filename
);
rc
=
grf
(
g
->
Message
,
xt
,
Http
,
Uri
,
filename
);
if
(
trace
(
515
)
)
if
(
xt
)
htrc
(
"Return from restGetFile: rc=%d
\n
"
,
rc
);
htrc
(
"Return from restGetFile: rc=%d
\n
"
,
rc
);
if
(
rc
)
if
(
rc
)
...
@@ -175,7 +243,7 @@ bool RESTDEF::DefineAM(PGLOBAL g, LPCSTR am, int poff)
...
@@ -175,7 +243,7 @@ bool RESTDEF::DefineAM(PGLOBAL g, LPCSTR am, int poff)
if
(
Tdp
&&
Tdp
->
Define
(
g
,
Cat
,
Name
,
Schema
,
"REST"
))
if
(
Tdp
&&
Tdp
->
Define
(
g
,
Cat
,
Name
,
Schema
,
"REST"
))
Tdp
=
NULL
;
// Error occured
Tdp
=
NULL
;
// Error occured
if
(
trace
(
515
)
)
if
(
xt
)
htrc
(
"Tdp defined
\n
"
,
rc
);
htrc
(
"Tdp defined
\n
"
,
rc
);
// Return true in case of error
// Return true in case of error
...
...
storage/connect/tabrest.h
View file @
425437b2
...
@@ -5,6 +5,25 @@
...
@@ -5,6 +5,25 @@
/***********************************************************************/
/***********************************************************************/
#pragma once
#pragma once
#if defined(__WIN__)
static
PCSZ
slash
=
"
\\
"
;
#else // !__WIN__
static
PCSZ
slash
=
"/"
;
#define stricmp strcasecmp
#endif // !__WIN__
typedef
int
(
__stdcall
*
XGETREST
)
(
char
*
,
bool
,
PCSZ
,
PCSZ
,
PCSZ
);
/***********************************************************************/
/* Functions used by REST. */
/***********************************************************************/
XGETREST
GetRestFunction
(
PGLOBAL
g
);
int
restGetFile
(
char
*
m
,
bool
x
,
PCSZ
http
,
PCSZ
uri
,
PCSZ
fn
);
#if defined(MARIADB)
PQRYRES
RESTColumns
(
PGLOBAL
g
,
PTOS
tp
,
char
*
tab
,
char
*
db
,
bool
info
);
#endif // !MARIADB
/***********************************************************************/
/***********************************************************************/
/* Restest table. */
/* Restest table. */
/***********************************************************************/
/***********************************************************************/
...
...
storage/connect/tabutil.cpp
View file @
425437b2
...
@@ -59,11 +59,23 @@ int GetConvSize(void);
...
@@ -59,11 +59,23 @@ int GetConvSize(void);
/* Used by MYSQL tables to get MySQL parameters from the calling proxy */
/* Used by MYSQL tables to get MySQL parameters from the calling proxy */
/* table (PROXY, TBL, XCL, or OCCUR) when used by one of these. */
/* table (PROXY, TBL, XCL, or OCCUR) when used by one of these. */
/************************************************************************/
/************************************************************************/
void
Remove_tshp
(
PCATLG
cat
)
TABLE_SHARE
*
Remove_tshp
(
PCATLG
cat
)
{
{
((
MYCAT
*
)
cat
)
->
GetHandler
()
->
tshp
=
NULL
;
TABLE_SHARE
*
s
=
((
MYCAT
*
)
cat
)
->
GetHandler
()
->
tshp
;
((
MYCAT
*
)
cat
)
->
GetHandler
()
->
tshp
=
NULL
;
return
s
;
}
// end of Remove_thsp
}
// end of Remove_thsp
/************************************************************************/
/* Used by MYSQL tables to get MySQL parameters from the calling proxy */
/* table (PROXY, TBL, XCL, or OCCUR) when used by one of these. */
/************************************************************************/
void
Restore_tshp
(
PCATLG
cat
,
TABLE_SHARE
*
s
)
{
((
MYCAT
*
)
cat
)
->
GetHandler
()
->
tshp
=
s
;
}
// end of Restore_thsp
/************************************************************************/
/************************************************************************/
/* GetTableShare: allocates and open a table share. */
/* GetTableShare: allocates and open a table share. */
/************************************************************************/
/************************************************************************/
...
...
storage/connect/tabutil.h
View file @
425437b2
...
@@ -18,7 +18,8 @@ TABLE_SHARE *GetTableShare(PGLOBAL g, THD *thd, const char *db,
...
@@ -18,7 +18,8 @@ TABLE_SHARE *GetTableShare(PGLOBAL g, THD *thd, const char *db,
PQRYRES
TabColumns
(
PGLOBAL
g
,
THD
*
thd
,
const
char
*
db
,
PQRYRES
TabColumns
(
PGLOBAL
g
,
THD
*
thd
,
const
char
*
db
,
const
char
*
name
,
bool
&
info
);
const
char
*
name
,
bool
&
info
);
void
Remove_tshp
(
PCATLG
cat
);
TABLE_SHARE
*
Remove_tshp
(
PCATLG
cat
);
void
Restore_tshp
(
PCATLG
cat
,
TABLE_SHARE
*
s
);
/* -------------------------- PROXY classes -------------------------- */
/* -------------------------- PROXY classes -------------------------- */
...
...
storage/connect/tabvct.cpp
View file @
425437b2
...
@@ -115,11 +115,14 @@ bool VCTDEF::DefineAM(PGLOBAL g, LPCSTR, int poff)
...
@@ -115,11 +115,14 @@ bool VCTDEF::DefineAM(PGLOBAL g, LPCSTR, int poff)
Recfm
=
RECFM_VCT
;
Recfm
=
RECFM_VCT
;
// poff is no more in use; This will have to be revisited
#if 0
// For packed files the logical record length is calculated in poff
// For packed files the logical record length is calculated in poff
if (poff != Lrecl) {
if (poff != Lrecl) {
Lrecl = poff;
Lrecl = poff;
SetIntCatInfo("Lrecl", poff);
SetIntCatInfo("Lrecl", poff);
} // endif poff
} // endif poff
#endif // 0
Padded
=
false
;
Padded
=
false
;
Blksize
=
0
;
Blksize
=
0
;
...
...
storage/connect/tabxml.cpp
View file @
425437b2
...
@@ -240,7 +240,9 @@ PQRYRES XMLColumns(PGLOBAL g, char *db, char *tab, PTOS topt, bool info)
...
@@ -240,7 +240,9 @@ PQRYRES XMLColumns(PGLOBAL g, char *db, char *tab, PTOS topt, bool info)
more:
more:
if
(
vp
->
atp
)
{
if
(
vp
->
atp
)
{
strncpy
(
colname
,
vp
->
atp
->
GetName
(
g
),
sizeof
(
colname
));
size_t
z
=
sizeof
(
colname
)
-
1
;
strncpy
(
colname
,
vp
->
atp
->
GetName
(
g
),
z
);
colname
[
z
]
=
0
;
strncat
(
xcol
->
Name
,
colname
,
XLEN
(
xcol
->
Name
));
strncat
(
xcol
->
Name
,
colname
,
XLEN
(
xcol
->
Name
));
switch
(
vp
->
atp
->
GetText
(
g
,
buf
,
sizeof
(
buf
)))
{
switch
(
vp
->
atp
->
GetText
(
g
,
buf
,
sizeof
(
buf
)))
{
...
...
storage/connect/xindex.cpp
View file @
425437b2
...
@@ -659,7 +659,7 @@ bool XINDEX::Make(PGLOBAL g, PIXDEF sxp)
...
@@ -659,7 +659,7 @@ bool XINDEX::Make(PGLOBAL g, PIXDEF sxp)
/* Not true for DBF tables because of eventual soft deleted lines. */
/* Not true for DBF tables because of eventual soft deleted lines. */
/* Note: for Num_K = 1 any non null value is Ok. */
/* Note: for Num_K = 1 any non null value is Ok. */
/*********************************************************************/
/*********************************************************************/
if
(
Srtd
&&
!
filp
&&
Tdbp
->
Ftype
!=
RECFM_VAR
if
(
Srtd
&&
!
filp
&&
Tdbp
->
Ftype
!=
RECFM_VAR
&&
Tdbp
->
Ftype
!=
RECFM_CSV
&&
Tdbp
->
Txfp
->
GetAmType
()
!=
TYPE_AM_DBF
)
{
&&
Tdbp
->
Txfp
->
GetAmType
()
!=
TYPE_AM_DBF
)
{
Incr
=
(
Num_K
>
1
)
?
To_Rec
[
1
]
:
Num_K
;
Incr
=
(
Num_K
>
1
)
?
To_Rec
[
1
]
:
Num_K
;
PlgDBfree
(
Record
);
PlgDBfree
(
Record
);
...
@@ -837,7 +837,8 @@ bool XINDEX::SaveIndex(PGLOBAL g, PIXDEF sxp)
...
@@ -837,7 +837,8 @@ bool XINDEX::SaveIndex(PGLOBAL g, PIXDEF sxp)
case
RECFM_FIX
:
ftype
=
".fnx"
;
break
;
case
RECFM_FIX
:
ftype
=
".fnx"
;
break
;
case
RECFM_BIN
:
ftype
=
".bnx"
;
break
;
case
RECFM_BIN
:
ftype
=
".bnx"
;
break
;
case
RECFM_VCT
:
ftype
=
".vnx"
;
break
;
case
RECFM_VCT
:
ftype
=
".vnx"
;
break
;
case
RECFM_DBF
:
ftype
=
".dbx"
;
break
;
case
RECFM_CSV
:
ftype
=
".cnx"
;
break
;
case
RECFM_DBF
:
ftype
=
".dbx"
;
break
;
default:
default:
sprintf
(
g
->
Message
,
MSG
(
INVALID_FTYPE
),
Tdbp
->
Ftype
);
sprintf
(
g
->
Message
,
MSG
(
INVALID_FTYPE
),
Tdbp
->
Ftype
);
return
true
;
return
true
;
...
@@ -990,7 +991,8 @@ bool XINDEX::Init(PGLOBAL g)
...
@@ -990,7 +991,8 @@ bool XINDEX::Init(PGLOBAL g)
case
RECFM_FIX
:
ftype
=
".fnx"
;
break
;
case
RECFM_FIX
:
ftype
=
".fnx"
;
break
;
case
RECFM_BIN
:
ftype
=
".bnx"
;
break
;
case
RECFM_BIN
:
ftype
=
".bnx"
;
break
;
case
RECFM_VCT
:
ftype
=
".vnx"
;
break
;
case
RECFM_VCT
:
ftype
=
".vnx"
;
break
;
case
RECFM_DBF
:
ftype
=
".dbx"
;
break
;
case
RECFM_CSV
:
ftype
=
".cnx"
;
break
;
case
RECFM_DBF
:
ftype
=
".dbx"
;
break
;
default:
default:
sprintf
(
g
->
Message
,
MSG
(
INVALID_FTYPE
),
Tdbp
->
Ftype
);
sprintf
(
g
->
Message
,
MSG
(
INVALID_FTYPE
),
Tdbp
->
Ftype
);
return
true
;
return
true
;
...
@@ -1243,7 +1245,8 @@ bool XINDEX::MapInit(PGLOBAL g)
...
@@ -1243,7 +1245,8 @@ bool XINDEX::MapInit(PGLOBAL g)
case
RECFM_FIX
:
ftype
=
".fnx"
;
break
;
case
RECFM_FIX
:
ftype
=
".fnx"
;
break
;
case
RECFM_BIN
:
ftype
=
".bnx"
;
break
;
case
RECFM_BIN
:
ftype
=
".bnx"
;
break
;
case
RECFM_VCT
:
ftype
=
".vnx"
;
break
;
case
RECFM_VCT
:
ftype
=
".vnx"
;
break
;
case
RECFM_DBF
:
ftype
=
".dbx"
;
break
;
case
RECFM_CSV
:
ftype
=
".cnx"
;
break
;
case
RECFM_DBF
:
ftype
=
".dbx"
;
break
;
default:
default:
sprintf
(
g
->
Message
,
MSG
(
INVALID_FTYPE
),
Tdbp
->
Ftype
);
sprintf
(
g
->
Message
,
MSG
(
INVALID_FTYPE
),
Tdbp
->
Ftype
);
return
true
;
return
true
;
...
@@ -1457,7 +1460,8 @@ bool XINDEX::GetAllSizes(PGLOBAL g,/* int &ndif,*/ int &numk)
...
@@ -1457,7 +1460,8 @@ bool XINDEX::GetAllSizes(PGLOBAL g,/* int &ndif,*/ int &numk)
case
RECFM_FIX
:
ftype
=
".fnx"
;
break
;
case
RECFM_FIX
:
ftype
=
".fnx"
;
break
;
case
RECFM_BIN
:
ftype
=
".bnx"
;
break
;
case
RECFM_BIN
:
ftype
=
".bnx"
;
break
;
case
RECFM_VCT
:
ftype
=
".vnx"
;
break
;
case
RECFM_VCT
:
ftype
=
".vnx"
;
break
;
case
RECFM_DBF
:
ftype
=
".dbx"
;
break
;
case
RECFM_CSV
:
ftype
=
".cnx"
;
break
;
case
RECFM_DBF
:
ftype
=
".dbx"
;
break
;
default:
default:
sprintf
(
g
->
Message
,
MSG
(
INVALID_FTYPE
),
Tdbp
->
Ftype
);
sprintf
(
g
->
Message
,
MSG
(
INVALID_FTYPE
),
Tdbp
->
Ftype
);
return
true
;
return
true
;
...
...
storage/connect/xtable.h
View file @
425437b2
...
@@ -173,9 +173,12 @@ class DllExport TDBASE : public TDB {
...
@@ -173,9 +173,12 @@ class DllExport TDBASE : public TDB {
inline
void
SetKindex
(
PKXBASE
kxp
)
{
To_Kindex
=
kxp
;}
inline
void
SetKindex
(
PKXBASE
kxp
)
{
To_Kindex
=
kxp
;}
// Properties
// Properties
virtual
PKXBASE
GetKindex
(
void
)
{
return
To_Kindex
;}
PKXBASE
GetKindex
(
void
)
{
return
To_Kindex
;}
PXOB
*
GetLink
(
void
)
{
return
To_Link
;}
PIXDEF
GetXdp
(
void
)
{
return
To_Xdp
;}
void
ResetKindex
(
PGLOBAL
g
,
PKXBASE
kxp
);
void
ResetKindex
(
PGLOBAL
g
,
PKXBASE
kxp
);
PCOL
Key
(
int
i
)
{
return
(
To_Key_Col
)
?
To_Key_Col
[
i
]
:
NULL
;}
PCOL
Key
(
int
i
)
{
return
(
To_Key_Col
)
?
To_Key_Col
[
i
]
:
NULL
;}
PXOB
Link
(
int
i
)
{
return
(
To_Link
)
?
To_Link
[
i
]
:
NULL
;
}
// Methods
// Methods
virtual
bool
IsUsingTemp
(
PGLOBAL
)
{
return
false
;}
virtual
bool
IsUsingTemp
(
PGLOBAL
)
{
return
false
;}
...
...
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