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
2cfccbe4
Commit
2cfccbe4
authored
Oct 25, 2016
by
Sergei Golubchik
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'connect/10.0' into 10.0
parents
de9ea40f
b7aee7db
Changes
9
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
196 additions
and
271 deletions
+196
-271
storage/connect/JdbcInterface.java
storage/connect/JdbcInterface.java
+14
-2
storage/connect/filamdbf.cpp
storage/connect/filamdbf.cpp
+68
-18
storage/connect/filamdbf.h
storage/connect/filamdbf.h
+1
-1
storage/connect/ha_connect.cc
storage/connect/ha_connect.cc
+48
-36
storage/connect/jdbconn.cpp
storage/connect/jdbconn.cpp
+42
-207
storage/connect/jdbconn.h
storage/connect/jdbconn.h
+1
-0
storage/connect/json.cpp
storage/connect/json.cpp
+1
-1
storage/connect/reldef.cpp
storage/connect/reldef.cpp
+6
-2
storage/connect/tabjdbc.cpp
storage/connect/tabjdbc.cpp
+15
-4
No files found.
storage/connect/JdbcInterface.java
View file @
2cfccbe4
...
...
@@ -340,6 +340,18 @@ public class JdbcInterface {
return
m
;
}
// end of GetMaxValue
public
String
GetQuoteString
()
{
String
qs
=
null
;
try
{
qs
=
dbmd
.
getIdentifierQuoteString
();
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
// end try/catch
return
qs
;
}
// end of GetQuoteString
public
int
GetColumns
(
String
[]
parms
)
{
int
ncol
=
-
1
;
...
...
@@ -680,11 +692,11 @@ public class JdbcInterface {
return
0
;
}
// end of TimestampField
public
String
ObjectField
(
int
n
,
String
name
)
{
public
Object
ObjectField
(
int
n
,
String
name
)
{
if
(
rs
==
null
)
{
System
.
out
.
println
(
"No result set"
);
}
else
try
{
return
(
n
>
0
)
?
rs
.
getObject
(
n
)
.
toString
()
:
rs
.
getObject
(
name
).
toString
(
);
return
(
n
>
0
)
?
rs
.
getObject
(
n
)
:
rs
.
getObject
(
name
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
...
...
storage/connect/filamdbf.cpp
View file @
2cfccbe4
...
...
@@ -383,7 +383,7 @@ DBFBASE::DBFBASE(DBFBASE *txfp)
/* and header length. Set Records, check that Reclen is equal to lrecl and */
/* return the header length or 0 in case of error. */
/****************************************************************************/
int
DBFBASE
::
ScanHeader
(
PGLOBAL
g
,
PSZ
fn
ame
,
int
lrecl
,
char
*
defpath
)
int
DBFBASE
::
ScanHeader
(
PGLOBAL
g
,
PSZ
fn
,
int
lrecl
,
int
*
rln
,
char
*
defpath
)
{
int
rc
;
char
filename
[
_MAX_PATH
];
...
...
@@ -393,7 +393,7 @@ int DBFBASE::ScanHeader(PGLOBAL g, PSZ fname, int lrecl, char *defpath)
/************************************************************************/
/* Open the input file. */
/************************************************************************/
PlugSetPath
(
filename
,
fn
ame
,
defpath
);
PlugSetPath
(
filename
,
fn
,
defpath
);
if
(
!
(
infile
=
global_fopen
(
g
,
MSGID_CANNOT_OPEN
,
filename
,
"rb"
)))
return
0
;
// Assume file does not exist
...
...
@@ -410,11 +410,7 @@ int DBFBASE::ScanHeader(PGLOBAL g, PSZ fname, int lrecl, char *defpath)
}
else
if
(
rc
==
RC_FX
)
return
-
1
;
if
((
int
)
header
.
Reclen
()
!=
lrecl
)
{
sprintf
(
g
->
Message
,
MSG
(
BAD_LRECL
),
lrecl
,
header
.
Reclen
());
return
-
1
;
}
// endif Lrecl
*
rln
=
(
int
)
header
.
Reclen
();
Records
=
(
int
)
header
.
Records
();
return
(
int
)
header
.
Headlen
();
}
// end of ScanHeader
...
...
@@ -431,9 +427,27 @@ int DBFFAM::Cardinality(PGLOBAL g)
if
(
!
g
)
return
1
;
if
(
!
Headlen
)
if
((
Headlen
=
ScanHeader
(
g
,
To_File
,
Lrecl
,
Tdbp
->
GetPath
()))
<
0
)
return
-
1
;
// Error in ScanHeader
if
(
!
Headlen
)
{
int
rln
=
0
;
// Record length in the file header
Headlen
=
ScanHeader
(
g
,
To_File
,
Lrecl
,
&
rln
,
Tdbp
->
GetPath
());
if
(
Headlen
<
0
)
return
-
1
;
// Error in ScanHeader
if
(
rln
&&
Lrecl
!=
rln
)
{
// This happens always on some Linux platforms
sprintf
(
g
->
Message
,
MSG
(
BAD_LRECL
),
Lrecl
,
rln
);
if
(
Accept
)
{
Lrecl
=
rln
;
PushWarning
(
g
,
Tdbp
);
}
else
return
-
1
;
}
// endif rln
}
// endif Headlen
// Set number of blocks for later use
Block
=
(
Records
>
0
)
?
(
Records
+
Nrec
-
1
)
/
Nrec
:
0
;
...
...
@@ -565,7 +579,13 @@ bool DBFFAM::AllocateBuffer(PGLOBAL g)
if
(
Lrecl
!=
reclen
)
{
sprintf
(
g
->
Message
,
MSG
(
BAD_LRECL
),
Lrecl
,
reclen
);
return
true
;
if
(
Accept
)
{
Lrecl
=
reclen
;
PushWarning
(
g
,
Tdbp
);
}
else
return
true
;
}
// endif Lrecl
hlen
=
HEADLEN
*
(
n
+
1
)
+
2
;
...
...
@@ -641,8 +661,14 @@ bool DBFFAM::AllocateBuffer(PGLOBAL g)
if
((
rc
=
dbfhead
(
g
,
Stream
,
Tdbp
->
GetFile
(
g
),
&
header
))
==
RC_OK
)
{
if
(
Lrecl
!=
(
int
)
header
.
Reclen
())
{
sprintf
(
g
->
Message
,
MSG
(
BAD_LRECL
),
Lrecl
,
header
.
Reclen
());
return
true
;
}
// endif Lrecl
if
(
Accept
)
{
Lrecl
=
header
.
Reclen
();
PushWarning
(
g
,
Tdbp
);
}
else
return
true
;
}
// endif Lrecl
Records
=
(
int
)
header
.
Records
();
Headlen
=
(
int
)
header
.
Headlen
();
...
...
@@ -916,9 +942,27 @@ int DBMFAM::Cardinality(PGLOBAL g)
if
(
!
g
)
return
1
;
if
(
!
Headlen
)
if
((
Headlen
=
ScanHeader
(
g
,
To_File
,
Lrecl
,
Tdbp
->
GetPath
()))
<
0
)
return
-
1
;
// Error in ScanHeader
if
(
!
Headlen
)
{
int
rln
=
0
;
// Record length in the file header
Headlen
=
ScanHeader
(
g
,
To_File
,
Lrecl
,
&
rln
,
Tdbp
->
GetPath
());
if
(
Headlen
<
0
)
return
-
1
;
// Error in ScanHeader
if
(
rln
&&
Lrecl
!=
rln
)
{
// This happens always on some Linux platforms
sprintf
(
g
->
Message
,
MSG
(
BAD_LRECL
),
Lrecl
,
rln
);
if
(
Accept
)
{
Lrecl
=
rln
;
PushWarning
(
g
,
Tdbp
);
}
else
return
-
1
;
}
// endif rln
}
// endif Headlen
// Set number of blocks for later use
Block
=
(
Records
>
0
)
?
(
Records
+
Nrec
-
1
)
/
Nrec
:
0
;
...
...
@@ -961,8 +1005,14 @@ bool DBMFAM::AllocateBuffer(PGLOBAL g)
if
(
Lrecl
!=
(
int
)
hp
->
Reclen
())
{
sprintf
(
g
->
Message
,
MSG
(
BAD_LRECL
),
Lrecl
,
hp
->
Reclen
());
return
true
;
}
// endif Lrecl
if
(
Accept
)
{
Lrecl
=
hp
->
Reclen
();
PushWarning
(
g
,
Tdbp
);
}
else
return
true
;
}
// endif Lrecl
Records
=
(
int
)
hp
->
Records
();
Headlen
=
(
int
)
hp
->
Headlen
();
...
...
storage/connect/filamdbf.h
View file @
2cfccbe4
...
...
@@ -31,7 +31,7 @@ class DllExport DBFBASE {
DBFBASE
(
PDBF
txfp
);
// Implementation
int
ScanHeader
(
PGLOBAL
g
,
PSZ
fname
,
int
lrecl
,
char
*
defpath
);
int
ScanHeader
(
PGLOBAL
g
,
PSZ
fname
,
int
lrecl
,
int
*
rlen
,
char
*
defpath
);
protected:
// Default constructor, not to be used
...
...
storage/connect/ha_connect.cc
View file @
2cfccbe4
...
...
@@ -224,6 +224,7 @@ uint GetWorkSize(void);
void
SetWorkSize
(
uint
);
extern
"C"
const
char
*
msglang
(
void
);
static
void
PopUser
(
PCONNECT
xp
);
static
PCONNECT
GetUser
(
THD
*
thd
,
PCONNECT
xp
);
static
PGLOBAL
GetPlug
(
THD
*
thd
,
PCONNECT
&
lxp
);
...
...
@@ -831,34 +832,43 @@ ha_connect::~ha_connect(void)
table
?
table
->
s
->
table_name
.
str
:
"<null>"
,
xp
,
xp
?
xp
->
count
:
0
);
if
(
xp
)
{
PCONNECT
p
;
PopUser
(
xp
);
}
// end of ha_connect destructor
xp
->
count
--
;
for
(
p
=
user_connect
::
to_users
;
p
;
p
=
p
->
next
)
if
(
p
==
xp
)
break
;
/****************************************************************************/
/* Check whether this user can be removed. */
/****************************************************************************/
static
void
PopUser
(
PCONNECT
xp
)
{
if
(
xp
)
{
xp
->
count
--
;
if
(
p
&&
!
p
->
count
)
{
if
(
p
->
next
)
p
->
next
->
previous
=
p
->
previous
;
if
(
!
xp
->
count
)
{
PCONNECT
p
;
if
(
p
->
previous
)
p
->
previous
->
next
=
p
->
next
;
else
user_connect
::
to_users
=
p
->
next
;
for
(
p
=
user_connect
::
to_users
;
p
;
p
=
p
->
next
)
if
(
p
==
xp
)
break
;
}
// endif p
if
(
p
)
{
if
(
p
->
next
)
p
->
next
->
previous
=
p
->
previous
;
if
(
!
xp
->
count
)
{
PlugCleanup
(
xp
->
g
,
true
)
;
delete
xp
;
}
// endif count
if
(
p
->
previous
)
p
->
previous
->
next
=
p
->
next
;
else
user_connect
::
to_users
=
p
->
next
;
}
// endif x
p
}
// endif
p
}
// end of ha_connect destructor
PlugCleanup
(
xp
->
g
,
true
);
delete
xp
;
}
// endif count
}
// endif xp
}
// end of PopUser
/****************************************************************************/
...
...
@@ -866,7 +876,7 @@ ha_connect::~ha_connect(void)
/****************************************************************************/
static
PCONNECT
GetUser
(
THD
*
thd
,
PCONNECT
xp
)
{
if
(
!
thd
)
if
(
!
thd
)
return
NULL
;
if
(
xp
&&
thd
==
xp
->
thdp
)
...
...
@@ -890,7 +900,6 @@ static PCONNECT GetUser(THD *thd, PCONNECT xp)
return
xp
;
}
// end of GetUser
/****************************************************************************/
/* Get the global pointer of the user of this handler. */
/****************************************************************************/
...
...
@@ -5261,7 +5270,18 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
if
(
!
(
shm
=
(
char
*
)
db
))
db
=
table_s
->
db
.
str
;
// Default value
// Check table type
// Save stack and allocation environment and prepare error return
if
(
g
->
jump_level
==
MAX_JUMP
)
{
strcpy
(
g
->
Message
,
MSG
(
TOO_MANY_JUMPS
));
goto
jer
;
}
// endif jump_level
if
((
rc
=
setjmp
(
g
->
jumper
[
++
g
->
jump_level
]))
!=
0
)
{
my_message
(
ER_UNKNOWN_ERROR
,
g
->
Message
,
MYF
(
0
));
goto
err
;
}
// endif rc
// Check table type
if
(
ttp
==
TAB_UNDEF
)
{
topt
->
type
=
(
src
)
?
"MYSQL"
:
(
tab
)
?
"PROXY"
:
"DOS"
;
ttp
=
GetTypeID
(
topt
->
type
);
...
...
@@ -5270,20 +5290,9 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
}
else
if
(
ttp
==
TAB_NIY
)
{
sprintf
(
g
->
Message
,
"Unsupported table type %s"
,
topt
->
type
);
my_message
(
ER_UNKNOWN_ERROR
,
g
->
Message
,
MYF
(
0
));
return
HA_ERR_INTERNAL_ERROR
;
goto
err
;
}
// endif ttp
// Save stack and allocation environment and prepare error return
if
(
g
->
jump_level
==
MAX_JUMP
)
{
strcpy
(
g
->
Message
,
MSG
(
TOO_MANY_JUMPS
));
return
HA_ERR_INTERNAL_ERROR
;
}
// endif jump_level
if
((
rc
=
setjmp
(
g
->
jumper
[
++
g
->
jump_level
]))
!=
0
)
{
my_message
(
ER_UNKNOWN_ERROR
,
g
->
Message
,
MYF
(
0
));
goto
err
;
}
// endif rc
if
(
!
tab
)
{
if
(
ttp
==
TAB_TBL
)
{
// Make tab the first table of the list
...
...
@@ -5843,6 +5852,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
rc
=
init_table_share
(
thd
,
table_s
,
create_info
,
&
sql
);
g
->
jump_level
--
;
PopUser
(
xp
);
return
rc
;
}
// endif ok
...
...
@@ -5850,7 +5860,9 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
err:
g
->
jump_level
--
;
return
HA_ERR_INTERNAL_ERROR
;
jer:
PopUser
(
xp
);
return
HA_ERR_INTERNAL_ERROR
;
}
// end of connect_assisted_discovery
/**
...
...
storage/connect/jdbconn.cpp
View file @
2cfccbe4
This diff is collapsed.
Click to expand it.
storage/connect/jdbconn.h
View file @
2cfccbe4
...
...
@@ -165,6 +165,7 @@ class JDBConn : public BLOCK {
jmethodID
xpid
;
// The ExecutePrep method ID
jmethodID
pcid
;
// The ClosePrepStmt method ID
jmethodID
errid
;
// The GetErrmsg method ID
jmethodID
objfldid
;
// The ObjectField method ID
jmethodID
chrfldid
;
// The StringField method ID
jmethodID
intfldid
;
// The IntField method ID
jmethodID
dblfldid
;
// The DoubleField method ID
...
...
storage/connect/json.cpp
View file @
2cfccbe4
...
...
@@ -595,7 +595,7 @@ PSZ Serialize(PGLOBAL g, PJSON jsp, char *fn, int pretty)
fputs
(
EL
,
fs
);
fclose
(
fs
);
str
=
(
err
)
?
NULL
:
strcpy
(
g
->
Message
,
"Ok"
);
}
else
if
(
!
err
)
{
}
else
if
(
!
err
)
{
str
=
((
JOUTSTR
*
)
jp
)
->
Strp
;
jp
->
WriteChr
(
'\0'
);
PlugSubAlloc
(
g
,
NULL
,
((
JOUTSTR
*
)
jp
)
->
N
);
...
...
storage/connect/reldef.cpp
View file @
2cfccbe4
...
...
@@ -294,7 +294,7 @@ int TABDEF::GetColCatInfo(PGLOBAL g)
nlg
+=
nof
;
case
TAB_DIR
:
case
TAB_XML
:
poff
=
loff
+
1
;
poff
=
loff
+
(
pcf
->
Flags
&
U_VIRTUAL
?
0
:
1
)
;
break
;
case
TAB_INI
:
case
TAB_MAC
:
...
...
@@ -440,7 +440,11 @@ int TABDEF::GetColCatInfo(PGLOBAL g)
}
// endswitch tc
// lrecl must be at least recln to avoid buffer overflow
recln
=
MY_MAX
(
recln
,
Hc
->
GetIntegerOption
(
"Lrecl"
));
if
(
trace
)
htrc
(
"Lrecl: Calculated=%d defined=%d
\n
"
,
recln
,
Hc
->
GetIntegerOption
(
"Lrecl"
));
recln
=
MY_MAX
(
recln
,
Hc
->
GetIntegerOption
(
"Lrecl"
));
Hc
->
SetIntegerOption
(
"Lrecl"
,
recln
);
((
PDOSDEF
)
this
)
->
SetLrecl
(
recln
);
}
// endif Lrecl
...
...
storage/connect/tabjdbc.cpp
View file @
2cfccbe4
...
...
@@ -686,6 +686,9 @@ bool TDBJDBC::MakeInsert(PGLOBAL g)
else
Prepared
=
true
;
if
(
trace
)
htrc
(
"Insert=%s
\n
"
,
Query
->
GetStr
());
return
false
;
}
// end of MakeInsert
...
...
@@ -733,17 +736,18 @@ bool TDBJDBC::MakeCommand(PGLOBAL g)
// If so, it must be quoted in the original query
strlwr
(
strcat
(
strcat
(
strcpy
(
name
,
" "
),
Name
),
" "
));
if
(
!
strstr
(
" update delete low_priority ignore quick from "
,
name
))
strlwr
(
strcpy
(
name
,
Name
));
// Not a keyword
else
if
(
strstr
(
" update delete low_priority ignore quick from "
,
name
))
{
strlwr
(
strcat
(
strcat
(
strcpy
(
name
,
qc
),
Name
),
qc
));
k
+=
2
;
}
else
strlwr
(
strcpy
(
name
,
Name
));
// Not a keyword
if
((
p
=
strstr
(
qrystr
,
name
)))
{
for
(
i
=
0
;
i
<
p
-
qrystr
;
i
++
)
stmt
[
i
]
=
(
Qrystr
[
i
]
==
'`'
)
?
*
qc
:
Qrystr
[
i
];
stmt
[
i
]
=
0
;
k
=
i
+
(
int
)
strlen
(
Name
);
k
+
=
i
+
(
int
)
strlen
(
Name
);
if
(
qtd
&&
*
(
p
-
1
)
==
' '
)
strcat
(
strcat
(
strcat
(
stmt
,
qc
),
TableName
),
qc
);
...
...
@@ -765,6 +769,9 @@ bool TDBJDBC::MakeCommand(PGLOBAL g)
return
NULL
;
}
// endif p
if
(
trace
)
htrc
(
"Command=%s
\n
"
,
stmt
);
Query
=
new
(
g
)
STRING
(
g
,
0
,
stmt
);
return
(
!
Query
->
GetSize
());
}
// end of MakeCommand
...
...
@@ -1214,6 +1221,10 @@ int TDBJDBC::WriteDB(PGLOBAL g)
}
// endif oom
Query
->
RepLast
(
')'
);
if
(
trace
>
1
)
htrc
(
"Inserting: %s
\n
"
,
Query
->
GetStr
());
rc
=
Jcp
->
ExecuteUpdate
(
Query
->
GetStr
());
Query
->
Truncate
(
len
);
// Restore query
...
...
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