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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
2bd94951
Commit
2bd94951
authored
8 years ago
by
Sergei Golubchik
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'connect/10.0' into 10.0
1.04.0008
parents
077f29a9
a2934d27
Changes
34
Show whitespace changes
Inline
Side-by-side
Showing
34 changed files
with
962 additions
and
1708 deletions
+962
-1708
storage/connect/ApacheInterface.java
storage/connect/ApacheInterface.java
+58
-0
storage/connect/CMakeLists.txt
storage/connect/CMakeLists.txt
+16
-12
storage/connect/Client.java
storage/connect/Client.java
+183
-0
storage/connect/JdbcApacheInterface.class
storage/connect/JdbcApacheInterface.class
+0
-0
storage/connect/JdbcApacheInterface.java
storage/connect/JdbcApacheInterface.java
+0
-709
storage/connect/JdbcDSInterface.class
storage/connect/JdbcDSInterface.class
+0
-0
storage/connect/JdbcDSInterface.java
storage/connect/JdbcDSInterface.java
+0
-743
storage/connect/JdbcInterface.class
storage/connect/JdbcInterface.class
+0
-0
storage/connect/JdbcInterface.java
storage/connect/JdbcInterface.java
+86
-40
storage/connect/MariadbInterface.java
storage/connect/MariadbInterface.java
+69
-0
storage/connect/MysqlInterface.java
storage/connect/MysqlInterface.java
+69
-0
storage/connect/OracleInterface.java
storage/connect/OracleInterface.java
+69
-0
storage/connect/PostgresqlInterface.java
storage/connect/PostgresqlInterface.java
+69
-0
storage/connect/connect.h
storage/connect/connect.h
+2
-1
storage/connect/csort.cpp
storage/connect/csort.cpp
+8
-5
storage/connect/ha_connect.cc
storage/connect/ha_connect.cc
+32
-19
storage/connect/jdbconn.cpp
storage/connect/jdbconn.cpp
+142
-97
storage/connect/jdbconn.h
storage/connect/jdbconn.h
+8
-5
storage/connect/jsonudf.cpp
storage/connect/jsonudf.cpp
+8
-4
storage/connect/mysql-test/connect/r/jdbc.result
storage/connect/mysql-test/connect/r/jdbc.result
+11
-9
storage/connect/mysql-test/connect/r/jdbc_new.result
storage/connect/mysql-test/connect/r/jdbc_new.result
+10
-11
storage/connect/mysql-test/connect/std_data/JdbcMariaDB.jar
storage/connect/mysql-test/connect/std_data/JdbcMariaDB.jar
+0
-0
storage/connect/mysql-test/connect/t/jdbc.test
storage/connect/mysql-test/connect/t/jdbc.test
+8
-4
storage/connect/mysql-test/connect/t/jdbc_new.test
storage/connect/mysql-test/connect/t/jdbc_new.test
+5
-0
storage/connect/mysql-test/connect/t/jdbconn.inc
storage/connect/mysql-test/connect/t/jdbconn.inc
+7
-6
storage/connect/mysql-test/connect/t/jdbconn_cleanup.inc
storage/connect/mysql-test/connect/t/jdbconn_cleanup.inc
+2
-0
storage/connect/odbccat.h
storage/connect/odbccat.h
+1
-1
storage/connect/odbconn.cpp
storage/connect/odbconn.cpp
+11
-6
storage/connect/odbconn.h
storage/connect/odbconn.h
+1
-1
storage/connect/tabjdbc.cpp
storage/connect/tabjdbc.cpp
+29
-9
storage/connect/tabjdbc.h
storage/connect/tabjdbc.h
+8
-3
storage/connect/tabodbc.cpp
storage/connect/tabodbc.cpp
+34
-13
storage/connect/tabodbc.h
storage/connect/tabodbc.h
+10
-5
storage/connect/xindex.cpp
storage/connect/xindex.cpp
+6
-5
No files found.
storage/connect/ApacheInterface.java
0 → 100644
View file @
2bd94951
package
wrappers
;
import
java.sql.*
;
import
java.util.Hashtable
;
import
org.apache.commons.dbcp2.BasicDataSource
;
public
class
ApacheInterface
extends
JdbcInterface
{
static
Hashtable
<
String
,
BasicDataSource
>
pool
=
new
Hashtable
<
String
,
BasicDataSource
>();
public
ApacheInterface
()
{
this
(
true
);
}
// end of default constructor
public
ApacheInterface
(
boolean
b
)
{
super
(
b
);
}
// end of constructor
@Override
public
int
JdbcConnect
(
String
[]
parms
,
int
fsize
,
boolean
scrollable
)
{
int
rc
=
0
;
String
url
=
parms
[
1
];
BasicDataSource
ds
=
null
;
if
(
DEBUG
)
System
.
out
.
println
(
"Connecting to Apache data source"
);
try
{
CheckURL
(
url
,
null
);
if
((
ds
=
pool
.
get
(
url
))
==
null
)
{
ds
=
new
BasicDataSource
();
ds
.
setDriverClassName
(
parms
[
0
]);
ds
.
setUrl
(
url
);
ds
.
setUsername
(
parms
[
2
]);
ds
.
setPassword
(
parms
[
3
]);
pool
.
put
(
url
,
ds
);
}
// endif ds
// Get a connection from the data source
conn
=
ds
.
getConnection
();
// Get the data base meta data object
dbmd
=
conn
.
getMetaData
();
// Get a statement from the connection
stmt
=
GetStmt
(
fsize
,
scrollable
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
rc
=
-
2
;
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
rc
=
-
3
;
}
// end try/catch
return
rc
;
}
// end of JdbcConnect
}
// end of class ApacheInterface
This diff is collapsed.
Click to expand it.
storage/connect/CMakeLists.txt
View file @
2bd94951
...
...
@@ -235,25 +235,29 @@ ENDIF(CONNECT_WITH_ODBC)
#
# JDBC
#
OPTION
(
CONNECT_WITH_JDBC
"Compile CONNECT storage engine with JDBC support"
ON
)
IF
(
APPLE
)
OPTION
(
CONNECT_WITH_JDBC
"some comment"
OFF
)
ELSE
()
OPTION
(
CONNECT_WITH_JDBC
"some comment"
ON
)
ENDIF
()
IF
(
CONNECT_WITH_JDBC
)
# TODO: detect Java SDK and the presence of JDBC connectors
# TODO: Find how to compile and install the java wrapper class
# Find required libraries and include directories
FIND_PACKAGE
(
Java 1.6
)
FIND_PACKAGE
(
JNI
)
IF
(
JAVA_FOUND AND JNI_FOUND
)
INCLUDE
(
UseJava
)
INCLUDE_DIRECTORIES
(
${
JAVA_INCLUDE_PATH
}
)
INCLUDE_DIRECTORIES
(
${
JAVA_INCLUDE_PATH2
}
)
# SET(JDBC_LIBRARY ${JAVA_JVM_LIBRARY})
# SET(JDBC_LIBRARY ${JAVA_JVM_LIBRARY})
will be dynamically linked
SET
(
CONNECT_SOURCES
${
CONNECT_SOURCES
}
JdbcInterface.java JdbcInterface.class
JdbcDSInterface.java JdbcDSInterface.class
JdbcApacheInterface.java JdbcApacheInterface.class
jdbconn.cpp tabjdbc.cpp jdbconn.h tabjdbc.h jdbccat.h
)
jdbconn.cpp tabjdbc.cpp jdbconn.h tabjdbc.h jdbccat.h
JdbcInterface.java ApacheInterface.java MariadbInterface.java
MysqlInterface.java OracleInterface.java PostgresqlInterface.java
)
# 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
)
add_definitions
(
-DJDBC_SUPPORT
)
ELSE
()
SET
(
JDBC_LIBRARY
""
)
...
...
This diff is collapsed.
Click to expand it.
storage/connect/Client.java
0 → 100644
View file @
2bd94951
package
wrappers
;
import
java.io.BufferedReader
;
import
java.io.Console
;
import
java.io.IOException
;
import
java.io.InputStreamReader
;
public
class
Client
{
static
boolean
DEBUG
=
true
;
static
final
Console
c
=
System
.
console
();
static
JdbcInterface
jdi
=
null
;
public
static
void
main
(
String
[]
args
)
{
int
rc
,
n
,
ncol
,
i
=
0
,
fsize
=
0
;
boolean
scrollable
=
false
;
String
s
;
String
[]
parms
=
new
String
[
4
];
if
(
args
.
length
>
0
)
try
{
i
=
Integer
.
parseInt
(
args
[
i
]);
}
catch
(
NumberFormatException
e
)
{
i
=
0
;
}
// end try/catch
switch
(
i
)
{
case
1
:
jdi
=
new
ApacheInterface
(
DEBUG
);
break
;
case
2
:
jdi
=
new
MysqlInterface
(
DEBUG
);
break
;
case
3
:
jdi
=
new
MariadbInterface
(
DEBUG
);
break
;
case
4
:
jdi
=
new
OracleInterface
(
DEBUG
);
break
;
case
5
:
jdi
=
new
PostgresqlInterface
(
DEBUG
);
break
;
default
:
jdi
=
new
JdbcInterface
(
DEBUG
);
}
// endswitch i
parms
[
0
]
=
getLine
(
"Driver: "
,
false
);
parms
[
1
]
=
getLine
(
"URL: "
,
false
);
parms
[
2
]
=
getLine
(
"User: "
,
false
);
parms
[
3
]
=
getLine
(
"Password: "
,
true
);
s
=
getLine
(
"Fsize: "
,
false
);
fsize
=
(
s
!=
null
)
?
Integer
.
parseInt
(
s
)
:
0
;
s
=
getLine
(
"Scrollable: "
,
false
);
scrollable
=
(
s
!=
null
)
?
s
.
toLowerCase
().
charAt
(
0
)
!=
'n'
:
false
;
rc
=
jdi
.
JdbcConnect
(
parms
,
fsize
,
scrollable
);
if
(
rc
==
0
)
{
String
query
;
System
.
out
.
println
(
"Successfully connected to "
+
parms
[
1
]);
while
((
query
=
getLine
(
"Query: "
,
false
))
!=
null
)
{
n
=
jdi
.
Execute
(
query
);
System
.
out
.
println
(
"Returned n = "
+
n
);
if
((
ncol
=
jdi
.
GetResult
())
>
0
)
PrintResult
(
ncol
);
else
System
.
out
.
println
(
"Affected rows = "
+
n
);
}
// endwhile
rc
=
jdi
.
JdbcDisconnect
();
System
.
out
.
println
(
"Disconnect returned "
+
rc
);
}
else
System
.
out
.
println
(
jdi
.
GetErrmsg
()
+
" rc="
+
rc
);
}
// end of main
private
static
void
PrintResult
(
int
ncol
)
{
// Get result set meta data
int
i
;
String
columnName
;
// Get the column names; column indices start from 1
for
(
i
=
1
;
i
<=
ncol
;
i
++)
{
columnName
=
jdi
.
ColumnName
(
i
);
if
(
columnName
==
null
)
return
;
// Get the name of the column's table name
//String tableName = rsmd.getTableName(i);
if
(
i
>
1
)
System
.
out
.
print
(
"\t"
);
System
.
out
.
print
(
columnName
);
}
// endfor i
System
.
out
.
println
();
// Loop through the result set
while
(
jdi
.
ReadNext
()
>
0
)
{
for
(
i
=
1
;
i
<=
ncol
;
i
++)
{
if
(
i
>
1
)
System
.
out
.
print
(
"\t"
);
if
(
DEBUG
)
System
.
out
.
print
(
"("
+
jdi
.
ColumnType
(
i
,
null
)
+
")"
);
switch
(
jdi
.
ColumnType
(
i
,
null
))
{
case
java
.
sql
.
Types
.
VARCHAR
:
case
java
.
sql
.
Types
.
LONGVARCHAR
:
case
java
.
sql
.
Types
.
CHAR
:
System
.
out
.
print
(
jdi
.
StringField
(
i
,
null
));
break
;
case
java
.
sql
.
Types
.
INTEGER
:
System
.
out
.
print
(
jdi
.
IntField
(
i
,
null
));
break
;
case
java
.
sql
.
Types
.
BIGINT
:
System
.
out
.
print
(
jdi
.
BigintField
(
i
,
null
));
break
;
case
java
.
sql
.
Types
.
TIMESTAMP
:
System
.
out
.
print
(
jdi
.
TimestampField
(
i
,
null
));
break
;
case
java
.
sql
.
Types
.
TIME
:
System
.
out
.
print
(
jdi
.
TimeField
(
i
,
null
));
break
;
case
java
.
sql
.
Types
.
DATE
:
System
.
out
.
print
(
jdi
.
DateField
(
i
,
null
));
break
;
case
java
.
sql
.
Types
.
SMALLINT
:
System
.
out
.
print
(
jdi
.
IntField
(
i
,
null
));
break
;
case
java
.
sql
.
Types
.
DOUBLE
:
case
java
.
sql
.
Types
.
REAL
:
case
java
.
sql
.
Types
.
FLOAT
:
case
java
.
sql
.
Types
.
DECIMAL
:
System
.
out
.
print
(
jdi
.
DoubleField
(
i
,
null
));
break
;
case
java
.
sql
.
Types
.
BOOLEAN
:
System
.
out
.
print
(
jdi
.
BooleanField
(
i
,
null
));
default
:
break
;
}
// endswitch Type
}
// endfor i
System
.
out
.
println
();
}
// end while rs
}
// end of PrintResult
// ==================================================================
private
static
String
getLine
(
String
p
,
boolean
b
)
{
String
response
;
if
(
c
!=
null
)
{
// Standard console mode
if
(
b
)
{
response
=
new
String
(
c
.
readPassword
(
p
));
}
else
response
=
c
.
readLine
(
p
);
}
else
{
// For instance when testing from Eclipse
BufferedReader
in
=
new
BufferedReader
(
new
InputStreamReader
(
System
.
in
));
System
.
out
.
print
(
p
);
try
{
// Cannot suppress echo for password entry
response
=
in
.
readLine
();
}
catch
(
IOException
e
)
{
response
=
""
;
}
// end of try/catch
}
// endif c
return
(
response
.
isEmpty
())
?
null
:
response
;
}
// end of getLine
}
// end of class Client
This diff is collapsed.
Click to expand it.
storage/connect/JdbcApacheInterface.class
deleted
100644 → 0
View file @
077f29a9
File deleted
This diff is collapsed.
Click to expand it.
storage/connect/JdbcApacheInterface.java
deleted
100644 → 0
View file @
077f29a9
import
java.math.*
;
import
java.sql.*
;
import
java.util.Collections
;
import
java.util.Hashtable
;
import
java.util.List
;
import
org.apache.commons.dbcp2.BasicDataSource
;
public
class
JdbcApacheInterface
{
boolean
DEBUG
=
false
;
String
Errmsg
=
"No error"
;
Connection
conn
=
null
;
DatabaseMetaData
dbmd
=
null
;
Statement
stmt
=
null
;
PreparedStatement
pstmt
=
null
;
ResultSet
rs
=
null
;
ResultSetMetaData
rsmd
=
null
;
static
Hashtable
<
String
,
BasicDataSource
>
pool
=
new
Hashtable
<
String
,
BasicDataSource
>();
// === Constructors/finalize =========================================
public
JdbcApacheInterface
()
{
this
(
true
);
}
// end of default constructor
public
JdbcApacheInterface
(
boolean
b
)
{
DEBUG
=
b
;
}
// end of constructor
private
void
SetErrmsg
(
Exception
e
)
{
if
(
DEBUG
)
System
.
out
.
println
(
e
.
getMessage
());
Errmsg
=
e
.
toString
();
}
// end of SetErrmsg
private
void
SetErrmsg
(
String
s
)
{
if
(
DEBUG
)
System
.
out
.
println
(
s
);
Errmsg
=
s
;
}
// end of SetErrmsg
public
String
GetErrmsg
()
{
String
err
=
Errmsg
;
Errmsg
=
"No error"
;
return
err
;
}
// end of GetErrmsg
public
int
JdbcConnect
(
String
[]
parms
,
int
fsize
,
boolean
scrollable
)
{
int
rc
=
0
;
String
url
=
parms
[
1
];
BasicDataSource
ds
=
null
;
if
(
url
==
null
)
{
SetErrmsg
(
"URL cannot be null"
);
return
-
1
;
}
// endif url
try
{
if
((
ds
=
pool
.
get
(
url
))
==
null
)
{
ds
=
new
BasicDataSource
();
ds
.
setDriverClassName
(
parms
[
0
]);
ds
.
setUrl
(
url
);
ds
.
setUsername
(
parms
[
2
]);
ds
.
setPassword
(
parms
[
3
]);
pool
.
put
(
url
,
ds
);
}
// endif ds
// Get a connection from the data source
conn
=
ds
.
getConnection
();
// Get the data base meta data object
dbmd
=
conn
.
getMetaData
();
// Get a statement from the connection
if
(
scrollable
)
stmt
=
conn
.
createStatement
(
java
.
sql
.
ResultSet
.
TYPE_SCROLL_INSENSITIVE
,
java
.
sql
.
ResultSet
.
CONCUR_READ_ONLY
);
else
stmt
=
conn
.
createStatement
(
java
.
sql
.
ResultSet
.
TYPE_FORWARD_ONLY
,
java
.
sql
.
ResultSet
.
CONCUR_READ_ONLY
);
if
(
DEBUG
)
System
.
out
.
println
(
"Statement type = "
+
stmt
.
getResultSetType
()
+
" concurrency = "
+
stmt
.
getResultSetConcurrency
());
if
(
DEBUG
)
// Get the fetch size of a statement
System
.
out
.
println
(
"Default fetch size = "
+
stmt
.
getFetchSize
());
if
(
fsize
!=
0
)
{
// Set the fetch size
stmt
.
setFetchSize
(
fsize
);
if
(
DEBUG
)
System
.
out
.
println
(
"New fetch size = "
+
stmt
.
getFetchSize
());
}
// endif fsize
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
rc
=
-
2
;
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
rc
=
-
3
;
}
// end try/catch
return
rc
;
}
// end of JdbcConnect
public
int
CreatePrepStmt
(
String
sql
)
{
int
rc
=
0
;
try
{
pstmt
=
conn
.
prepareStatement
(
sql
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
rc
=
-
1
;
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
rc
=
-
2
;
}
// end try/catch
return
rc
;
}
// end of CreatePrepStmt
public
void
SetStringParm
(
int
i
,
String
s
)
{
try
{
pstmt
.
setString
(
i
,
s
);
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
}
// end try/catch
}
// end of SetStringParm
public
void
SetIntParm
(
int
i
,
int
n
)
{
try
{
pstmt
.
setInt
(
i
,
n
);
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
}
// end try/catch
}
// end of SetIntParm
public
void
SetShortParm
(
int
i
,
short
n
)
{
try
{
pstmt
.
setShort
(
i
,
n
);
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
}
// end try/catch
}
// end of SetShortParm
public
void
SetBigintParm
(
int
i
,
long
n
)
{
try
{
pstmt
.
setLong
(
i
,
n
);
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
}
// end try/catch
}
// end of SetBigintParm
public
void
SetFloatParm
(
int
i
,
float
f
)
{
try
{
pstmt
.
setFloat
(
i
,
f
);
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
}
// end try/catch
}
// end of SetFloatParm
public
void
SetDoubleParm
(
int
i
,
double
d
)
{
try
{
pstmt
.
setDouble
(
i
,
d
);
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
}
// end try/catch
}
// end of SetDoubleParm
public
void
SetTimestampParm
(
int
i
,
Timestamp
t
)
{
try
{
pstmt
.
setTimestamp
(
i
,
t
);
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
}
// end try/catch
}
// end of SetTimestampParm
public
int
ExecutePrep
()
{
int
n
=
-
3
;
if
(
pstmt
!=
null
)
try
{
n
=
pstmt
.
executeUpdate
();
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
n
=
-
1
;
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
n
=
-
2
;
}
//end try/catch
return
n
;
}
// end of ExecutePrep
public
boolean
ClosePrepStmt
()
{
boolean
b
=
false
;
if
(
pstmt
!=
null
)
try
{
pstmt
.
close
();
pstmt
=
null
;
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
b
=
true
;
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
b
=
true
;
}
// end try/catch
return
b
;
}
// end of ClosePrepStmt
public
int
JdbcDisconnect
()
{
int
rc
=
0
;
// Cancel pending statement
if
(
stmt
!=
null
)
try
{
System
.
out
.
println
(
"Cancelling statement"
);
stmt
.
cancel
();
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
rc
+=
1
;
}
// nothing more we can do
// Close the statement and the connection
if
(
rs
!=
null
)
try
{
if
(
DEBUG
)
System
.
out
.
println
(
"Closing result set"
);
rs
.
close
();
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
rc
=
2
;
}
// nothing more we can do
if
(
stmt
!=
null
)
try
{
if
(
DEBUG
)
System
.
out
.
println
(
"Closing statement"
);
stmt
.
close
();
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
rc
+=
4
;
}
// nothing more we can do
ClosePrepStmt
();
if
(
conn
!=
null
)
try
{
if
(
DEBUG
)
System
.
out
.
println
(
"Closing connection"
);
conn
.
close
();
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
rc
+=
8
;
}
//end try/catch
if
(
DEBUG
)
System
.
out
.
println
(
"All closed"
);
return
rc
;
}
// end of JdbcDisconnect
public
int
GetMaxValue
(
int
n
)
{
int
m
=
0
;
try
{
switch
(
n
)
{
case
1
:
// Max columns in table
m
=
dbmd
.
getMaxColumnsInTable
();
break
;
case
2
:
// Max catalog name length
m
=
dbmd
.
getMaxCatalogNameLength
();
break
;
case
3
:
// Max schema name length
m
=
dbmd
.
getMaxSchemaNameLength
();
break
;
case
4
:
// Max table name length
m
=
dbmd
.
getMaxTableNameLength
();
break
;
case
5
:
// Max column name length
m
=
dbmd
.
getMaxColumnNameLength
();
break
;
}
// endswitch n
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
m
=
-
1
;
}
// end try/catch
return
m
;
}
// end of GetMaxValue
public
int
GetColumns
(
String
[]
parms
)
{
int
ncol
=
0
;
try
{
if
(
rs
!=
null
)
rs
.
close
();
rs
=
dbmd
.
getColumns
(
parms
[
0
],
parms
[
1
],
parms
[
2
],
parms
[
3
]);
if
(
rs
!=
null
)
{
rsmd
=
rs
.
getMetaData
();
ncol
=
rsmd
.
getColumnCount
();
}
// endif rs
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
// end try/catch
return
ncol
;
}
// end of GetColumns
public
int
GetTables
(
String
[]
parms
)
{
int
ncol
=
0
;
String
[]
typ
=
null
;
if
(
parms
[
3
]
!=
null
)
{
typ
=
new
String
[
1
];
typ
[
0
]
=
parms
[
3
];
}
// endif parms
try
{
if
(
rs
!=
null
)
rs
.
close
();
rs
=
dbmd
.
getTables
(
parms
[
0
],
parms
[
1
],
parms
[
2
],
typ
);
if
(
rs
!=
null
)
{
rsmd
=
rs
.
getMetaData
();
ncol
=
rsmd
.
getColumnCount
();
}
// endif rs
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
// end try/catch
return
ncol
;
}
// end of GetColumns
public
int
Execute
(
String
query
)
{
int
n
=
0
;
if
(
DEBUG
)
System
.
out
.
println
(
"Executing '"
+
query
+
"'"
);
try
{
boolean
b
=
stmt
.
execute
(
query
);
if
(
b
==
false
)
{
n
=
stmt
.
getUpdateCount
();
if
(
rs
!=
null
)
rs
.
close
();
}
// endif b
if
(
DEBUG
)
System
.
out
.
println
(
"Query '"
+
query
+
"' executed: n = "
+
n
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
n
=
-
1
;
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
n
=
-
2
;
}
//end try/catch
return
n
;
}
// end of Execute
public
int
GetResult
()
{
int
ncol
=
0
;
try
{
rs
=
stmt
.
getResultSet
();
if
(
rs
!=
null
)
{
rsmd
=
rs
.
getMetaData
();
ncol
=
rsmd
.
getColumnCount
();
if
(
DEBUG
)
System
.
out
.
println
(
"Result set has "
+
rsmd
.
getColumnCount
()
+
" column(s)"
);
}
// endif rs
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
ncol
=
-
1
;
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
ncol
=
-
2
;
}
//end try/catch
return
ncol
;
}
// end of GetResult
public
int
ExecuteQuery
(
String
query
)
{
int
ncol
=
0
;
if
(
DEBUG
)
System
.
out
.
println
(
"Executing query '"
+
query
+
"'"
);
try
{
rs
=
stmt
.
executeQuery
(
query
);
rsmd
=
rs
.
getMetaData
();
ncol
=
rsmd
.
getColumnCount
();
if
(
DEBUG
)
{
System
.
out
.
println
(
"Query '"
+
query
+
"' executed successfully"
);
System
.
out
.
println
(
"Result set has "
+
rsmd
.
getColumnCount
()
+
" column(s)"
);
}
// endif DEBUG
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
ncol
=
-
1
;
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
ncol
=
-
2
;
}
//end try/catch
return
ncol
;
}
// end of ExecuteQuery
public
int
ExecuteUpdate
(
String
query
)
{
int
n
=
0
;
if
(
DEBUG
)
System
.
out
.
println
(
"Executing update query '"
+
query
+
"'"
);
try
{
n
=
stmt
.
executeUpdate
(
query
);
if
(
DEBUG
)
System
.
out
.
println
(
"Update Query '"
+
query
+
"' executed: n = "
+
n
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
n
=
-
1
;
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
n
=
-
2
;
}
//end try/catch
return
n
;
}
// end of ExecuteUpdate
public
int
ReadNext
()
{
if
(
rs
!=
null
)
{
try
{
return
rs
.
next
()
?
1
:
0
;
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
return
-
1
;
}
//end try/catch
}
else
return
0
;
}
// end of ReadNext
public
boolean
Fetch
(
int
row
)
{
if
(
rs
!=
null
)
{
try
{
return
rs
.
absolute
(
row
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
return
false
;
}
//end try/catch
}
else
return
false
;
}
// end of Fetch
public
String
ColumnName
(
int
n
)
{
if
(
rsmd
==
null
)
{
System
.
out
.
println
(
"No result metadata"
);
}
else
try
{
return
rsmd
.
getColumnLabel
(
n
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
null
;
}
// end of ColumnName
public
int
ColumnType
(
int
n
,
String
name
)
{
if
(
rsmd
==
null
)
{
System
.
out
.
println
(
"No result metadata"
);
}
else
try
{
if
(
n
==
0
)
n
=
rs
.
findColumn
(
name
);
return
rsmd
.
getColumnType
(
n
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
666
;
// Not a type
}
// end of ColumnType
public
String
ColumnDesc
(
int
n
,
int
[]
val
)
{
if
(
rsmd
==
null
)
{
System
.
out
.
println
(
"No result metadata"
);
return
null
;
}
else
try
{
val
[
0
]
=
rsmd
.
getColumnType
(
n
);
val
[
1
]
=
rsmd
.
getPrecision
(
n
);
val
[
2
]
=
rsmd
.
getScale
(
n
);
val
[
3
]
=
rsmd
.
isNullable
(
n
);
return
rsmd
.
getColumnLabel
(
n
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
null
;
}
// end of ColumnDesc
public
String
StringField
(
int
n
,
String
name
)
{
if
(
rs
==
null
)
{
System
.
out
.
println
(
"No result set"
);
}
else
try
{
return
(
n
>
0
)
?
rs
.
getString
(
n
)
:
rs
.
getString
(
name
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
null
;
}
// end of StringField
public
int
IntField
(
int
n
,
String
name
)
{
if
(
rs
==
null
)
{
System
.
out
.
println
(
"No result set"
);
}
else
try
{
return
(
n
>
0
)
?
rs
.
getInt
(
n
)
:
rs
.
getInt
(
name
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
0
;
}
// end of IntField
public
long
BigintField
(
int
n
,
String
name
)
{
if
(
rs
==
null
)
{
System
.
out
.
println
(
"No result set"
);
}
else
try
{
BigDecimal
bigDecimal
=
(
n
>
0
)
?
rs
.
getBigDecimal
(
n
)
:
rs
.
getBigDecimal
(
name
);
return
bigDecimal
!=
null
?
bigDecimal
.
longValue
()
:
0
;
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
0
;
}
// end of BiginttField
public
double
DoubleField
(
int
n
,
String
name
)
{
if
(
rs
==
null
)
{
System
.
out
.
println
(
"No result set"
);
}
else
try
{
return
(
n
>
0
)
?
rs
.
getDouble
(
n
)
:
rs
.
getDouble
(
name
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
0
.;
}
// end of DoubleField
public
float
FloatField
(
int
n
,
String
name
)
{
if
(
rs
==
null
)
{
System
.
out
.
println
(
"No result set"
);
}
else
try
{
return
(
n
>
0
)
?
rs
.
getFloat
(
n
)
:
rs
.
getFloat
(
name
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
0
;
}
// end of FloatField
public
boolean
BooleanField
(
int
n
,
String
name
)
{
if
(
rs
==
null
)
{
System
.
out
.
println
(
"No result set"
);
}
else
try
{
return
(
n
>
0
)
?
rs
.
getBoolean
(
n
)
:
rs
.
getBoolean
(
name
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
false
;
}
// end of BooleanField
public
Date
DateField
(
int
n
,
String
name
)
{
if
(
rs
==
null
)
{
System
.
out
.
println
(
"No result set"
);
}
else
try
{
return
(
n
>
0
)
?
rs
.
getDate
(
n
)
:
rs
.
getDate
(
name
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
null
;
}
// end of DateField
public
Time
TimeField
(
int
n
,
String
name
)
{
if
(
rs
==
null
)
{
System
.
out
.
println
(
"No result set"
);
}
else
try
{
return
(
n
>
0
)
?
rs
.
getTime
(
n
)
:
rs
.
getTime
(
name
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
null
;
}
// end of TimeField
public
Timestamp
TimestampField
(
int
n
,
String
name
)
{
if
(
rs
==
null
)
{
System
.
out
.
println
(
"No result set"
);
}
else
try
{
return
(
n
>
0
)
?
rs
.
getTimestamp
(
n
)
:
rs
.
getTimestamp
(
name
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
null
;
}
// end of TimestampField
public
String
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
();
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
null
;
}
// end of ObjectField
public
int
GetDrivers
(
String
[]
s
,
int
mxs
)
{
int
n
=
0
;
List
<
Driver
>
drivers
=
Collections
.
list
(
DriverManager
.
getDrivers
());
int
size
=
Math
.
min
(
mxs
,
drivers
.
size
());
for
(
int
i
=
0
;
i
<
size
;
i
++)
{
Driver
driver
=
(
Driver
)
drivers
.
get
(
i
);
// Get name of driver
s
[
n
++]
=
driver
.
getClass
().
getName
();
// Get version info
s
[
n
++]
=
driver
.
getMajorVersion
()
+
"."
+
driver
.
getMinorVersion
();
s
[
n
++]
=
driver
.
jdbcCompliant
()
?
"Yes"
:
"No"
;
s
[
n
++]
=
driver
.
toString
();
}
// endfor i
return
size
;
}
// end of GetDrivers
/**
* Adds the specified path to the java library path
* from Fahd Shariff blog
*
* @param pathToAdd the path to add
static public int addLibraryPath(String pathToAdd) {
System.out.println("jpath = " + pathToAdd);
try {
Field usrPathsField = ClassLoader.class.getDeclaredField("usr_paths");
usrPathsField.setAccessible(true);
//get array of paths
String[] paths = (String[])usrPathsField.get(null);
//check if the path to add is already present
for (String path : paths) {
System.out.println("path = " + path);
if (path.equals(pathToAdd))
return -5;
} // endfor path
//add the new path
String[] newPaths = Arrays.copyOf(paths, paths.length + 1);
newPaths[paths.length] = pathToAdd;
usrPathsField.set(null, newPaths);
System.setProperty("java.library.path",
System.getProperty("java.library.path") + File.pathSeparator + pathToAdd);
Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
fieldSysPath.setAccessible(true);
fieldSysPath.set(null, null);
} catch (Exception e) {
SetErrmsg(e);
return -1;
} // end try/catch
return 0;
} // end of addLibraryPath
*/
}
// end of class JdbcApacheInterface
This diff is collapsed.
Click to expand it.
storage/connect/JdbcDSInterface.class
deleted
100644 → 0
View file @
077f29a9
File deleted
This diff is collapsed.
Click to expand it.
storage/connect/JdbcDSInterface.java
deleted
100644 → 0
View file @
077f29a9
import
java.math.*
;
import
java.sql.*
;
import
java.util.Collections
;
import
java.util.Hashtable
;
import
java.util.List
;
import
javax.sql.DataSource
;
import
org.mariadb.jdbc.MariaDbDataSource
;
import
org.postgresql.jdbc2.optional.PoolingDataSource
;
import
com.mysql.cj.jdbc.MysqlDataSource
;
import
oracle.jdbc.pool.OracleDataSource
;
public
class
JdbcDSInterface
{
boolean
DEBUG
=
false
;
String
Errmsg
=
"No error"
;
Connection
conn
=
null
;
DatabaseMetaData
dbmd
=
null
;
Statement
stmt
=
null
;
PreparedStatement
pstmt
=
null
;
ResultSet
rs
=
null
;
ResultSetMetaData
rsmd
=
null
;
Hashtable
<
String
,
DataSource
>
dst
=
null
;
// === Constructors/finalize =========================================
public
JdbcDSInterface
()
{
this
(
true
);
}
// end of default constructor
public
JdbcDSInterface
(
boolean
b
)
{
DEBUG
=
b
;
dst
=
new
Hashtable
<
String
,
DataSource
>();
}
// end of constructor
private
void
SetErrmsg
(
Exception
e
)
{
if
(
DEBUG
)
System
.
out
.
println
(
e
.
getMessage
());
Errmsg
=
e
.
toString
();
}
// end of SetErrmsg
private
void
SetErrmsg
(
String
s
)
{
if
(
DEBUG
)
System
.
out
.
println
(
s
);
Errmsg
=
s
;
}
// end of SetErrmsg
public
String
GetErrmsg
()
{
String
err
=
Errmsg
;
Errmsg
=
"No error"
;
return
err
;
}
// end of GetErrmsg
public
int
JdbcConnect
(
String
[]
parms
,
int
fsize
,
boolean
scrollable
)
{
int
rc
=
0
;
String
url
=
parms
[
1
];
DataSource
ds
=
null
;
MysqlDataSource
mds
=
null
;
MariaDbDataSource
ads
=
null
;
OracleDataSource
ods
=
null
;
PoolingDataSource
pds
=
null
;
if
(
url
==
null
)
{
SetErrmsg
(
"URL cannot be null"
);
return
-
1
;
}
// endif driver
try
{
if
((
ds
=
dst
.
get
(
url
))
==
null
)
{
if
(
url
.
toLowerCase
().
contains
(
"mysql"
))
{
mds
=
new
MysqlDataSource
();
mds
.
setURL
(
url
);
mds
.
setUser
(
parms
[
2
]);
mds
.
setPassword
(
parms
[
3
]);
ds
=
mds
;
}
else
if
(
url
.
toLowerCase
().
contains
(
"mariadb"
))
{
ads
=
new
MariaDbDataSource
();
ads
.
setUrl
(
url
);
ads
.
setUser
(
parms
[
2
]);
ads
.
setPassword
(
parms
[
3
]);
ds
=
ads
;
}
else
if
(
url
.
toLowerCase
().
contains
(
"oracle"
))
{
ods
=
new
OracleDataSource
();
ods
.
setURL
(
url
);
ods
.
setUser
(
parms
[
2
]);
ods
.
setPassword
(
parms
[
3
]);
ds
=
ods
;
}
else
if
(
url
.
toLowerCase
().
contains
(
"postgresql"
))
{
pds
=
new
PoolingDataSource
();
pds
.
setUrl
(
url
);
pds
.
setUser
(
parms
[
2
]);
pds
.
setPassword
(
parms
[
3
]);
ds
=
pds
;
}
else
{
SetErrmsg
(
"Unsupported driver"
);
return
-
4
;
}
// endif driver
dst
.
put
(
url
,
ds
);
}
// endif ds
// Get a connection from the data source
conn
=
ds
.
getConnection
();
// Get the data base meta data object
dbmd
=
conn
.
getMetaData
();
// Get a statement from the connection
if
(
scrollable
)
stmt
=
conn
.
createStatement
(
java
.
sql
.
ResultSet
.
TYPE_SCROLL_INSENSITIVE
,
java
.
sql
.
ResultSet
.
CONCUR_READ_ONLY
);
else
stmt
=
conn
.
createStatement
(
java
.
sql
.
ResultSet
.
TYPE_FORWARD_ONLY
,
java
.
sql
.
ResultSet
.
CONCUR_READ_ONLY
);
if
(
DEBUG
)
System
.
out
.
println
(
"Statement type = "
+
stmt
.
getResultSetType
()
+
" concurrency = "
+
stmt
.
getResultSetConcurrency
());
if
(
DEBUG
)
// Get the fetch size of a statement
System
.
out
.
println
(
"Default fetch size = "
+
stmt
.
getFetchSize
());
if
(
fsize
!=
0
)
{
// Set the fetch size
stmt
.
setFetchSize
(
fsize
);
if
(
DEBUG
)
System
.
out
.
println
(
"New fetch size = "
+
stmt
.
getFetchSize
());
}
// endif fsize
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
rc
=
-
2
;
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
rc
=
-
3
;
}
// end try/catch
return
rc
;
}
// end of JdbcConnect
public
int
CreatePrepStmt
(
String
sql
)
{
int
rc
=
0
;
try
{
pstmt
=
conn
.
prepareStatement
(
sql
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
rc
=
-
1
;
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
rc
=
-
2
;
}
// end try/catch
return
rc
;
}
// end of CreatePrepStmt
public
void
SetStringParm
(
int
i
,
String
s
)
{
try
{
pstmt
.
setString
(
i
,
s
);
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
}
// end try/catch
}
// end of SetStringParm
public
void
SetIntParm
(
int
i
,
int
n
)
{
try
{
pstmt
.
setInt
(
i
,
n
);
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
}
// end try/catch
}
// end of SetIntParm
public
void
SetShortParm
(
int
i
,
short
n
)
{
try
{
pstmt
.
setShort
(
i
,
n
);
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
}
// end try/catch
}
// end of SetShortParm
public
void
SetBigintParm
(
int
i
,
long
n
)
{
try
{
pstmt
.
setLong
(
i
,
n
);
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
}
// end try/catch
}
// end of SetBigintParm
public
void
SetFloatParm
(
int
i
,
float
f
)
{
try
{
pstmt
.
setFloat
(
i
,
f
);
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
}
// end try/catch
}
// end of SetFloatParm
public
void
SetDoubleParm
(
int
i
,
double
d
)
{
try
{
pstmt
.
setDouble
(
i
,
d
);
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
}
// end try/catch
}
// end of SetDoubleParm
public
void
SetTimestampParm
(
int
i
,
Timestamp
t
)
{
try
{
pstmt
.
setTimestamp
(
i
,
t
);
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
}
// end try/catch
}
// end of SetTimestampParm
public
int
ExecutePrep
()
{
int
n
=
-
3
;
if
(
pstmt
!=
null
)
try
{
n
=
pstmt
.
executeUpdate
();
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
n
=
-
1
;
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
n
=
-
2
;
}
//end try/catch
return
n
;
}
// end of ExecutePrep
public
boolean
ClosePrepStmt
()
{
boolean
b
=
false
;
if
(
pstmt
!=
null
)
try
{
pstmt
.
close
();
pstmt
=
null
;
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
b
=
true
;
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
b
=
true
;
}
// end try/catch
return
b
;
}
// end of ClosePrepStmt
public
int
JdbcDisconnect
()
{
int
rc
=
0
;
// Cancel pending statement
if
(
stmt
!=
null
)
try
{
System
.
out
.
println
(
"Cancelling statement"
);
stmt
.
cancel
();
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
rc
+=
1
;
}
// nothing more we can do
// Close the statement and the connection
if
(
rs
!=
null
)
try
{
if
(
DEBUG
)
System
.
out
.
println
(
"Closing result set"
);
rs
.
close
();
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
rc
=
2
;
}
// nothing more we can do
if
(
stmt
!=
null
)
try
{
if
(
DEBUG
)
System
.
out
.
println
(
"Closing statement"
);
stmt
.
close
();
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
rc
+=
4
;
}
// nothing more we can do
ClosePrepStmt
();
if
(
conn
!=
null
)
try
{
if
(
DEBUG
)
System
.
out
.
println
(
"Closing connection"
);
conn
.
close
();
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
rc
+=
8
;
}
//end try/catch
if
(
DEBUG
)
System
.
out
.
println
(
"All closed"
);
return
rc
;
}
// end of JdbcDisconnect
public
int
GetMaxValue
(
int
n
)
{
int
m
=
0
;
try
{
switch
(
n
)
{
case
1
:
// Max columns in table
m
=
dbmd
.
getMaxColumnsInTable
();
break
;
case
2
:
// Max catalog name length
m
=
dbmd
.
getMaxCatalogNameLength
();
break
;
case
3
:
// Max schema name length
m
=
dbmd
.
getMaxSchemaNameLength
();
break
;
case
4
:
// Max table name length
m
=
dbmd
.
getMaxTableNameLength
();
break
;
case
5
:
// Max column name length
m
=
dbmd
.
getMaxColumnNameLength
();
break
;
}
// endswitch n
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
m
=
-
1
;
}
// end try/catch
return
m
;
}
// end of GetMaxValue
public
int
GetColumns
(
String
[]
parms
)
{
int
ncol
=
0
;
try
{
if
(
rs
!=
null
)
rs
.
close
();
rs
=
dbmd
.
getColumns
(
parms
[
0
],
parms
[
1
],
parms
[
2
],
parms
[
3
]);
if
(
rs
!=
null
)
{
rsmd
=
rs
.
getMetaData
();
ncol
=
rsmd
.
getColumnCount
();
}
// endif rs
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
// end try/catch
return
ncol
;
}
// end of GetColumns
public
int
GetTables
(
String
[]
parms
)
{
int
ncol
=
0
;
String
[]
typ
=
null
;
if
(
parms
[
3
]
!=
null
)
{
typ
=
new
String
[
1
];
typ
[
0
]
=
parms
[
3
];
}
// endif parms
try
{
if
(
rs
!=
null
)
rs
.
close
();
rs
=
dbmd
.
getTables
(
parms
[
0
],
parms
[
1
],
parms
[
2
],
typ
);
if
(
rs
!=
null
)
{
rsmd
=
rs
.
getMetaData
();
ncol
=
rsmd
.
getColumnCount
();
}
// endif rs
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
// end try/catch
return
ncol
;
}
// end of GetColumns
public
int
Execute
(
String
query
)
{
int
n
=
0
;
if
(
DEBUG
)
System
.
out
.
println
(
"Executing '"
+
query
+
"'"
);
try
{
boolean
b
=
stmt
.
execute
(
query
);
if
(
b
==
false
)
{
n
=
stmt
.
getUpdateCount
();
if
(
rs
!=
null
)
rs
.
close
();
}
// endif b
if
(
DEBUG
)
System
.
out
.
println
(
"Query '"
+
query
+
"' executed: n = "
+
n
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
n
=
-
1
;
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
n
=
-
2
;
}
//end try/catch
return
n
;
}
// end of Execute
public
int
GetResult
()
{
int
ncol
=
0
;
try
{
rs
=
stmt
.
getResultSet
();
if
(
rs
!=
null
)
{
rsmd
=
rs
.
getMetaData
();
ncol
=
rsmd
.
getColumnCount
();
if
(
DEBUG
)
System
.
out
.
println
(
"Result set has "
+
rsmd
.
getColumnCount
()
+
" column(s)"
);
}
// endif rs
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
ncol
=
-
1
;
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
ncol
=
-
2
;
}
//end try/catch
return
ncol
;
}
// end of GetResult
public
int
ExecuteQuery
(
String
query
)
{
int
ncol
=
0
;
if
(
DEBUG
)
System
.
out
.
println
(
"Executing query '"
+
query
+
"'"
);
try
{
rs
=
stmt
.
executeQuery
(
query
);
rsmd
=
rs
.
getMetaData
();
ncol
=
rsmd
.
getColumnCount
();
if
(
DEBUG
)
{
System
.
out
.
println
(
"Query '"
+
query
+
"' executed successfully"
);
System
.
out
.
println
(
"Result set has "
+
rsmd
.
getColumnCount
()
+
" column(s)"
);
}
// endif DEBUG
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
ncol
=
-
1
;
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
ncol
=
-
2
;
}
//end try/catch
return
ncol
;
}
// end of ExecuteQuery
public
int
ExecuteUpdate
(
String
query
)
{
int
n
=
0
;
if
(
DEBUG
)
System
.
out
.
println
(
"Executing update query '"
+
query
+
"'"
);
try
{
n
=
stmt
.
executeUpdate
(
query
);
if
(
DEBUG
)
System
.
out
.
println
(
"Update Query '"
+
query
+
"' executed: n = "
+
n
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
n
=
-
1
;
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
n
=
-
2
;
}
//end try/catch
return
n
;
}
// end of ExecuteUpdate
public
int
ReadNext
()
{
if
(
rs
!=
null
)
{
try
{
return
rs
.
next
()
?
1
:
0
;
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
return
-
1
;
}
//end try/catch
}
else
return
0
;
}
// end of ReadNext
public
boolean
Fetch
(
int
row
)
{
if
(
rs
!=
null
)
{
try
{
return
rs
.
absolute
(
row
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
return
false
;
}
//end try/catch
}
else
return
false
;
}
// end of Fetch
public
String
ColumnName
(
int
n
)
{
if
(
rsmd
==
null
)
{
System
.
out
.
println
(
"No result metadata"
);
}
else
try
{
return
rsmd
.
getColumnLabel
(
n
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
null
;
}
// end of ColumnName
public
int
ColumnType
(
int
n
,
String
name
)
{
if
(
rsmd
==
null
)
{
System
.
out
.
println
(
"No result metadata"
);
}
else
try
{
if
(
n
==
0
)
n
=
rs
.
findColumn
(
name
);
return
rsmd
.
getColumnType
(
n
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
666
;
// Not a type
}
// end of ColumnType
public
String
ColumnDesc
(
int
n
,
int
[]
val
)
{
if
(
rsmd
==
null
)
{
System
.
out
.
println
(
"No result metadata"
);
return
null
;
}
else
try
{
val
[
0
]
=
rsmd
.
getColumnType
(
n
);
val
[
1
]
=
rsmd
.
getPrecision
(
n
);
val
[
2
]
=
rsmd
.
getScale
(
n
);
val
[
3
]
=
rsmd
.
isNullable
(
n
);
return
rsmd
.
getColumnLabel
(
n
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
null
;
}
// end of ColumnDesc
public
String
StringField
(
int
n
,
String
name
)
{
if
(
rs
==
null
)
{
System
.
out
.
println
(
"No result set"
);
}
else
try
{
return
(
n
>
0
)
?
rs
.
getString
(
n
)
:
rs
.
getString
(
name
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
null
;
}
// end of StringField
public
int
IntField
(
int
n
,
String
name
)
{
if
(
rs
==
null
)
{
System
.
out
.
println
(
"No result set"
);
}
else
try
{
return
(
n
>
0
)
?
rs
.
getInt
(
n
)
:
rs
.
getInt
(
name
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
0
;
}
// end of IntField
public
long
BigintField
(
int
n
,
String
name
)
{
if
(
rs
==
null
)
{
System
.
out
.
println
(
"No result set"
);
}
else
try
{
BigDecimal
bigDecimal
=
(
n
>
0
)
?
rs
.
getBigDecimal
(
n
)
:
rs
.
getBigDecimal
(
name
);
return
bigDecimal
!=
null
?
bigDecimal
.
longValue
()
:
0
;
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
0
;
}
// end of BiginttField
public
double
DoubleField
(
int
n
,
String
name
)
{
if
(
rs
==
null
)
{
System
.
out
.
println
(
"No result set"
);
}
else
try
{
return
(
n
>
0
)
?
rs
.
getDouble
(
n
)
:
rs
.
getDouble
(
name
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
0
.;
}
// end of DoubleField
public
float
FloatField
(
int
n
,
String
name
)
{
if
(
rs
==
null
)
{
System
.
out
.
println
(
"No result set"
);
}
else
try
{
return
(
n
>
0
)
?
rs
.
getFloat
(
n
)
:
rs
.
getFloat
(
name
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
0
;
}
// end of FloatField
public
boolean
BooleanField
(
int
n
,
String
name
)
{
if
(
rs
==
null
)
{
System
.
out
.
println
(
"No result set"
);
}
else
try
{
return
(
n
>
0
)
?
rs
.
getBoolean
(
n
)
:
rs
.
getBoolean
(
name
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
false
;
}
// end of BooleanField
public
Date
DateField
(
int
n
,
String
name
)
{
if
(
rs
==
null
)
{
System
.
out
.
println
(
"No result set"
);
}
else
try
{
return
(
n
>
0
)
?
rs
.
getDate
(
n
)
:
rs
.
getDate
(
name
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
null
;
}
// end of DateField
public
Time
TimeField
(
int
n
,
String
name
)
{
if
(
rs
==
null
)
{
System
.
out
.
println
(
"No result set"
);
}
else
try
{
return
(
n
>
0
)
?
rs
.
getTime
(
n
)
:
rs
.
getTime
(
name
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
null
;
}
// end of TimeField
public
Timestamp
TimestampField
(
int
n
,
String
name
)
{
if
(
rs
==
null
)
{
System
.
out
.
println
(
"No result set"
);
}
else
try
{
return
(
n
>
0
)
?
rs
.
getTimestamp
(
n
)
:
rs
.
getTimestamp
(
name
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
null
;
}
// end of TimestampField
public
String
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
();
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
null
;
}
// end of ObjectField
public
int
GetDrivers
(
String
[]
s
,
int
mxs
)
{
int
n
=
0
;
List
<
Driver
>
drivers
=
Collections
.
list
(
DriverManager
.
getDrivers
());
int
size
=
Math
.
min
(
mxs
,
drivers
.
size
());
for
(
int
i
=
0
;
i
<
size
;
i
++)
{
Driver
driver
=
(
Driver
)
drivers
.
get
(
i
);
// Get name of driver
s
[
n
++]
=
driver
.
getClass
().
getName
();
// Get version info
s
[
n
++]
=
driver
.
getMajorVersion
()
+
"."
+
driver
.
getMinorVersion
();
s
[
n
++]
=
driver
.
jdbcCompliant
()
?
"Yes"
:
"No"
;
s
[
n
++]
=
driver
.
toString
();
}
// endfor i
return
size
;
}
// end of GetDrivers
/**
* Adds the specified path to the java library path
* from Fahd Shariff blog
*
* @param pathToAdd the path to add
static public int addLibraryPath(String pathToAdd) {
System.out.println("jpath = " + pathToAdd);
try {
Field usrPathsField = ClassLoader.class.getDeclaredField("usr_paths");
usrPathsField.setAccessible(true);
//get array of paths
String[] paths = (String[])usrPathsField.get(null);
//check if the path to add is already present
for (String path : paths) {
System.out.println("path = " + path);
if (path.equals(pathToAdd))
return -5;
} // endfor path
//add the new path
String[] newPaths = Arrays.copyOf(paths, paths.length + 1);
newPaths[paths.length] = pathToAdd;
usrPathsField.set(null, newPaths);
System.setProperty("java.library.path",
System.getProperty("java.library.path") + File.pathSeparator + pathToAdd);
Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
fieldSysPath.setAccessible(true);
fieldSysPath.set(null, null);
} catch (Exception e) {
SetErrmsg(e);
return -1;
} // end try/catch
return 0;
} // end of addLibraryPath
*/
}
// end of class JdbcDSInterface
This diff is collapsed.
Click to expand it.
storage/connect/JdbcInterface.class
deleted
100644 → 0
View file @
077f29a9
File deleted
This diff is collapsed.
Click to expand it.
storage/connect/JdbcInterface.java
View file @
2bd94951
package
wrappers
;
import
java.math.*
;
import
java.sql.*
;
//import java.util.Arrays;
import
java.util.Collections
;
import
java.util.Hashtable
;
import
java.util.List
;
//import java.io.File;
//import java.lang.reflect.Field
;
import
javax.sql.DataSource
;
public
class
JdbcInterface
{
// This is used by DS classes
static
Hashtable
<
String
,
DataSource
>
dst
=
null
;
boolean
DEBUG
=
false
;
boolean
CatisSchema
=
false
;
String
Errmsg
=
"No error"
;
Connection
conn
=
null
;
DatabaseMetaData
dbmd
=
null
;
...
...
@@ -18,14 +24,14 @@ public class JdbcInterface {
// === Constructors/finalize =========================================
public
JdbcInterface
()
{
this
(
tru
e
);
this
(
fals
e
);
}
// end of default constructor
public
JdbcInterface
(
boolean
b
)
{
DEBUG
=
b
;
}
// end of constructor
pr
ivate
void
SetErrmsg
(
Exception
e
)
{
pr
otected
void
SetErrmsg
(
Exception
e
)
{
if
(
DEBUG
)
System
.
out
.
println
(
e
.
getMessage
());
...
...
@@ -39,6 +45,22 @@ public class JdbcInterface {
return
err
;
}
// end of GetErrmsg
protected
void
CheckURL
(
String
url
,
String
vendor
)
throws
Exception
{
if
(
url
==
null
)
throw
new
Exception
(
"URL cannot be null"
);
String
[]
tk
=
url
.
split
(
":"
,
3
);
if
(!
tk
[
0
].
equals
(
"jdbc"
)
||
tk
[
1
]
==
null
)
throw
new
Exception
(
"Invalid URL"
);
if
(
vendor
!=
null
&&
!
tk
[
1
].
equals
(
vendor
))
throw
new
Exception
(
"Wrong URL for this wrapper"
);
// Some drivers use Catalog as Schema
CatisSchema
=
tk
[
1
].
equals
(
"mysql"
)
||
tk
[
1
].
equals
(
"mariadb"
);
}
// end of CatalogIsSchema
public
int
JdbcConnect
(
String
[]
parms
,
int
fsize
,
boolean
scrollable
)
{
int
rc
=
0
;
...
...
@@ -59,6 +81,8 @@ public class JdbcInterface {
if
(
DEBUG
)
System
.
out
.
println
(
"URL="
+
parms
[
1
]);
CheckURL
(
parms
[
1
],
null
);
if
(
parms
[
2
]
!=
null
&&
!
parms
[
2
].
isEmpty
())
{
if
(
DEBUG
)
System
.
out
.
println
(
"user="
+
parms
[
2
]
+
" pwd="
+
parms
[
3
]);
...
...
@@ -74,6 +98,24 @@ public class JdbcInterface {
dbmd
=
conn
.
getMetaData
();
// Get a statement from the connection
stmt
=
GetStmt
(
fsize
,
scrollable
);
}
catch
(
ClassNotFoundException
e
)
{
SetErrmsg
(
e
);
rc
=
-
1
;
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
rc
=
-
2
;
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
rc
=
-
3
;
}
// end try/catch
return
rc
;
}
// end of JdbcConnect
protected
Statement
GetStmt
(
int
fsize
,
boolean
scrollable
)
throws
SQLException
,
Exception
{
Statement
stmt
=
null
;
if
(
scrollable
)
stmt
=
conn
.
createStatement
(
java
.
sql
.
ResultSet
.
TYPE_SCROLL_INSENSITIVE
,
java
.
sql
.
ResultSet
.
CONCUR_READ_ONLY
);
else
...
...
@@ -95,19 +137,9 @@ public class JdbcInterface {
}
// endif fsize
}
catch
(
ClassNotFoundException
e
)
{
SetErrmsg
(
e
);
rc
=
-
1
;
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
rc
=
-
2
;
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
rc
=
-
3
;
}
// end try/catch
return
stmt
;
}
// end of GetStmt
return
rc
;
}
// end of JdbcConnect
public
int
CreatePrepStmt
(
String
sql
)
{
int
rc
=
0
;
...
...
@@ -227,7 +259,9 @@ public class JdbcInterface {
// Cancel pending statement
if
(
stmt
!=
null
)
try
{
if
(
DEBUG
)
System
.
out
.
println
(
"Cancelling statement"
);
stmt
.
cancel
();
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
...
...
@@ -307,10 +341,14 @@ public class JdbcInterface {
}
// end of GetMaxValue
public
int
GetColumns
(
String
[]
parms
)
{
int
ncol
=
0
;
int
ncol
=
-
1
;
try
{
if
(
rs
!=
null
)
rs
.
close
();
if
(
CatisSchema
)
rs
=
dbmd
.
getColumns
(
parms
[
1
],
null
,
parms
[
2
],
parms
[
3
]);
else
rs
=
dbmd
.
getColumns
(
parms
[
0
],
parms
[
1
],
parms
[
2
],
parms
[
3
]);
if
(
rs
!=
null
)
{
...
...
@@ -326,7 +364,7 @@ public class JdbcInterface {
}
// end of GetColumns
public
int
GetTables
(
String
[]
parms
)
{
int
ncol
=
0
;
int
ncol
=
-
1
;
String
[]
typ
=
null
;
if
(
parms
[
3
]
!=
null
)
{
...
...
@@ -336,6 +374,10 @@ public class JdbcInterface {
try
{
if
(
rs
!=
null
)
rs
.
close
();
if
(
CatisSchema
)
rs
=
dbmd
.
getTables
(
parms
[
1
],
null
,
parms
[
2
],
typ
);
else
rs
=
dbmd
.
getTables
(
parms
[
0
],
parms
[
1
],
parms
[
2
],
typ
);
if
(
rs
!=
null
)
{
...
...
@@ -599,40 +641,43 @@ public class JdbcInterface {
return
false
;
}
// end of BooleanField
public
Date
DateField
(
int
n
,
String
name
)
{
public
int
DateField
(
int
n
,
String
name
)
{
if
(
rs
==
null
)
{
System
.
out
.
println
(
"No result set"
);
}
else
try
{
return
(
n
>
0
)
?
rs
.
getDate
(
n
)
:
rs
.
getDate
(
name
);
Date
d
=
(
n
>
0
)
?
rs
.
getDate
(
n
)
:
rs
.
getDate
(
name
);
return
(
d
!=
null
)
?
(
int
)(
d
.
getTime
()
/
1000
)
:
0
;
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
null
;
return
0
;
}
// end of DateField
public
Time
TimeField
(
int
n
,
String
name
)
{
public
int
TimeField
(
int
n
,
String
name
)
{
if
(
rs
==
null
)
{
System
.
out
.
println
(
"No result set"
);
}
else
try
{
return
(
n
>
0
)
?
rs
.
getTime
(
n
)
:
rs
.
getTime
(
name
);
Time
t
=
(
n
>
0
)
?
rs
.
getTime
(
n
)
:
rs
.
getTime
(
name
);
return
(
t
!=
null
)
?
(
int
)(
t
.
getTime
()
/
1000
)
:
0
;
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
null
;
return
0
;
}
// end of TimeField
public
Timestamp
TimestampField
(
int
n
,
String
name
)
{
public
int
TimestampField
(
int
n
,
String
name
)
{
if
(
rs
==
null
)
{
System
.
out
.
println
(
"No result set"
);
}
else
try
{
return
(
n
>
0
)
?
rs
.
getTimestamp
(
n
)
:
rs
.
getTimestamp
(
name
);
Timestamp
ts
=
(
n
>
0
)
?
rs
.
getTimestamp
(
n
)
:
rs
.
getTimestamp
(
name
);
return
(
ts
!=
null
)
?
(
int
)(
ts
.
getTime
()
/
1000
)
:
0
;
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
}
//end try/catch
return
null
;
return
0
;
}
// end of TimestampField
public
String
ObjectField
(
int
n
,
String
name
)
{
...
...
@@ -710,3 +755,4 @@ public class JdbcInterface {
*/
}
// end of class JdbcInterface
This diff is collapsed.
Click to expand it.
storage/connect/MariadbInterface.java
0 → 100644
View file @
2bd94951
package
wrappers
;
import
java.sql.*
;
import
java.util.Hashtable
;
import
javax.sql.DataSource
;
import
org.mariadb.jdbc.MariaDbDataSource
;
public
class
MariadbInterface
extends
JdbcInterface
{
public
MariadbInterface
()
{
this
(
true
);
}
// end of default constructor
public
MariadbInterface
(
boolean
b
)
{
super
(
b
);
if
(
dst
==
null
)
dst
=
new
Hashtable
<
String
,
DataSource
>();
}
// end of default constructor
@Override
public
int
JdbcConnect
(
String
[]
parms
,
int
fsize
,
boolean
scrollable
)
{
int
rc
=
0
;
String
url
=
parms
[
1
];
DataSource
ds
=
null
;
MariaDbDataSource
ads
=
null
;
if
(
DEBUG
)
System
.
out
.
println
(
"Connecting to MariaDB data source"
);
try
{
CheckURL
(
url
,
"mariadb"
);
if
((
ds
=
dst
.
get
(
url
))
==
null
)
{
ads
=
new
MariaDbDataSource
();
ads
.
setUrl
(
url
);
if
(
parms
[
2
]
!=
null
)
ads
.
setUser
(
parms
[
2
]);
if
(
parms
[
3
]
!=
null
)
ads
.
setPassword
(
parms
[
3
]);
ds
=
ads
;
dst
.
put
(
url
,
ds
);
}
// endif ds
// Get a connection from the data source
conn
=
ds
.
getConnection
();
// Get the data base meta data object
dbmd
=
conn
.
getMetaData
();
// Get a statement from the connection
stmt
=
GetStmt
(
fsize
,
scrollable
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
rc
=
-
2
;
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
rc
=
-
3
;
}
// end try/catch
return
rc
;
}
// end of JdbcConnect
}
This diff is collapsed.
Click to expand it.
storage/connect/MysqlInterface.java
0 → 100644
View file @
2bd94951
package
wrappers
;
import
java.sql.*
;
import
java.util.Hashtable
;
import
javax.sql.DataSource
;
import
com.mysql.cj.jdbc.MysqlDataSource
;
public
class
MysqlInterface
extends
JdbcInterface
{
public
MysqlInterface
()
{
this
(
true
);
}
// end of default constructor
public
MysqlInterface
(
boolean
b
)
{
super
(
b
);
if
(
dst
==
null
)
dst
=
new
Hashtable
<
String
,
DataSource
>();
}
// end of default constructor
@Override
public
int
JdbcConnect
(
String
[]
parms
,
int
fsize
,
boolean
scrollable
)
{
int
rc
=
0
;
String
url
=
parms
[
1
];
DataSource
ds
=
null
;
MysqlDataSource
mds
=
null
;
if
(
DEBUG
)
System
.
out
.
println
(
"Connecting to MySQL data source"
);
try
{
CheckURL
(
url
,
"mysql"
);
if
((
ds
=
dst
.
get
(
url
))
==
null
)
{
mds
=
new
MysqlDataSource
();
mds
.
setUrl
(
url
);
if
(
parms
[
2
]
!=
null
)
mds
.
setUser
(
parms
[
2
]);
if
(
parms
[
3
]
!=
null
)
mds
.
setPassword
(
parms
[
3
]);
ds
=
mds
;
dst
.
put
(
url
,
ds
);
}
// endif ds
// Get a connection from the data source
conn
=
ds
.
getConnection
();
// Get the data base meta data object
dbmd
=
conn
.
getMetaData
();
// Get a statement from the connection
stmt
=
GetStmt
(
fsize
,
scrollable
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
rc
=
-
2
;
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
rc
=
-
3
;
}
// end try/catch
return
rc
;
}
// end of JdbcConnect
}
// end of class MysqlInterface
This diff is collapsed.
Click to expand it.
storage/connect/OracleInterface.java
0 → 100644
View file @
2bd94951
package
wrappers
;
import
java.sql.*
;
import
java.util.Hashtable
;
import
javax.sql.DataSource
;
import
oracle.jdbc.pool.OracleDataSource
;
public
class
OracleInterface
extends
JdbcInterface
{
public
OracleInterface
()
{
this
(
true
);
}
// end of OracleInterface constructor
public
OracleInterface
(
boolean
b
)
{
super
(
b
);
if
(
dst
==
null
)
dst
=
new
Hashtable
<
String
,
DataSource
>();
}
// end of OracleInterface constructor
@Override
public
int
JdbcConnect
(
String
[]
parms
,
int
fsize
,
boolean
scrollable
)
{
int
rc
=
0
;
String
url
=
parms
[
1
];
DataSource
ds
=
null
;
OracleDataSource
ods
=
null
;
if
(
DEBUG
)
System
.
out
.
println
(
"Connecting to Oracle data source"
);
try
{
CheckURL
(
url
,
"oracle"
);
if
((
ds
=
dst
.
get
(
url
))
==
null
)
{
ods
=
new
OracleDataSource
();
ods
.
setURL
(
url
);
if
(
parms
[
2
]
!=
null
)
ods
.
setUser
(
parms
[
2
]);
if
(
parms
[
3
]
!=
null
)
ods
.
setPassword
(
parms
[
3
]);
ds
=
ods
;
dst
.
put
(
url
,
ds
);
}
// endif ds
// Get a connection from the data source
conn
=
ds
.
getConnection
();
// Get the data base meta data object
dbmd
=
conn
.
getMetaData
();
// Get a statement from the connection
stmt
=
GetStmt
(
fsize
,
scrollable
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
rc
=
-
2
;
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
rc
=
-
3
;
}
// end try/catch
return
rc
;
}
// end of JdbcConnect
}
// end of class OracleInterface
This diff is collapsed.
Click to expand it.
storage/connect/PostgresqlInterface.java
0 → 100644
View file @
2bd94951
package
wrappers
;
import
java.sql.*
;
import
java.util.Hashtable
;
import
javax.sql.DataSource
;
import
org.postgresql.jdbc2.optional.PoolingDataSource
;
public
class
PostgresqlInterface
extends
JdbcInterface
{
public
PostgresqlInterface
()
{
this
(
true
);
}
// end of constructor
public
PostgresqlInterface
(
boolean
b
)
{
super
(
b
);
if
(
dst
==
null
)
dst
=
new
Hashtable
<
String
,
DataSource
>();
}
// end of constructor
@Override
public
int
JdbcConnect
(
String
[]
parms
,
int
fsize
,
boolean
scrollable
)
{
int
rc
=
0
;
String
url
=
parms
[
1
];
DataSource
ds
=
null
;
PoolingDataSource
pds
=
null
;
if
(
DEBUG
)
System
.
out
.
println
(
"Connecting to Postgresql data source"
);
try
{
CheckURL
(
url
,
"postgresql"
);
if
((
ds
=
dst
.
get
(
url
))
==
null
)
{
pds
=
new
PoolingDataSource
();
pds
.
setUrl
(
url
);
if
(
parms
[
2
]
!=
null
)
pds
.
setUser
(
parms
[
2
]);
if
(
parms
[
3
]
!=
null
)
pds
.
setPassword
(
parms
[
3
]);
ds
=
pds
;
dst
.
put
(
url
,
ds
);
}
// endif ds
// Get a connection from the data source
conn
=
ds
.
getConnection
();
// Get the data base meta data object
dbmd
=
conn
.
getMetaData
();
// Get a statement from the connection
stmt
=
GetStmt
(
fsize
,
scrollable
);
}
catch
(
SQLException
se
)
{
SetErrmsg
(
se
);
rc
=
-
2
;
}
catch
(
Exception
e
)
{
SetErrmsg
(
e
);
rc
=
-
3
;
}
// end try/catch
return
rc
;
}
// end of JdbcConnect
}
// end of class PostgresqlInterface
This diff is collapsed.
Click to expand it.
storage/connect/connect.h
View file @
2bd94951
...
...
@@ -65,7 +65,8 @@ class TDBDOX: public TDBDOS {
friend
int
CntIndexRange
(
PGLOBAL
,
PTDB
,
const
uchar
**
,
uint
*
,
bool
*
,
key_part_map
*
);
friend
class
ha_connect
;
};
// end of class TDBDOX
TDBDOX
()
:
TDBDOS
((
PGLOBAL
)
0
,
(
PTDBDOS
)
0
)
{}
/* Never called */
};
// end of class TDBDOX
class
XKPDEF
:
public
KPARTDEF
{
friend
class
TDBDOX
;
...
...
This diff is collapsed.
Click to expand it.
storage/connect/csort.cpp
View file @
2bd94951
...
...
@@ -5,7 +5,7 @@
/* */
/* COPYRIGHT: */
/* ---------- */
/* (C) Copyright to the author Olivier Bertrand 1995-201
2
*/
/* (C) Copyright to the author Olivier Bertrand 1995-201
6
*/
/* */
/* WHAT THIS PROGRAM DOES: */
/* ----------------------- */
...
...
@@ -721,7 +721,7 @@ int CSORT::Qsortc(void)
void
CSORT
::
Qstc
(
int
*
base
,
int
*
max
)
{
register
int
*
i
,
*
j
,
*
jj
,
*
lt
,
*
eq
,
*
gt
,
*
mid
;
int
c
,
lo
,
hi
,
rc
;
int
c
=
0
,
lo
,
hi
,
rc
;
size_t
zlo
,
zhi
,
cnm
;
zlo
=
zhi
=
cnm
=
0
;
// Avoid warning message
...
...
@@ -774,8 +774,11 @@ void CSORT::Qstc(int *base, int *max)
/*****************************************************************/
/* Small group. Do special quicker processing. */
/*****************************************************************/
if
((
rc
=
Qcompare
(
base
,
(
i
=
base
+
1
)))
>
0
)
c
=
*
base
,
*
base
=
*
i
,
*
i
=
c
;
if
((
rc
=
Qcompare
(
base
,
(
i
=
base
+
1
)))
>
0
)
{
c
=
*
base
;
*
base
=
*
i
;
*
i
=
c
;
}
// endif rc
if
(
Pof
)
Pof
[
base
-
Pex
]
=
Pof
[
i
-
Pex
]
=
(
rc
)
?
1
:
2
;
...
...
This diff is collapsed.
Click to expand it.
storage/connect/ha_connect.cc
View file @
2bd94951
...
...
@@ -171,9 +171,9 @@
#define JSONMAX 10 // JSON Default max grp size
extern
"C"
{
char
version
[]
=
"Version 1.04.000
6 May 08
, 2016"
;
char
version
[]
=
"Version 1.04.000
8 August 10
, 2016"
;
#if defined(__WIN__)
char
compver
[]
=
"Version 1.04.000
6
"
__DATE__
" "
__TIME__
;
char
compver
[]
=
"Version 1.04.000
8
"
__DATE__
" "
__TIME__
;
char
slash
=
'\\'
;
#else // !__WIN__
char
slash
=
'/'
;
...
...
@@ -195,7 +195,6 @@ extern "C" {
#if defined(JDBC_SUPPORT)
char
*
JvmPath
;
char
*
ClassPath
;
char
*
Wrapper
;
#endif // JDBC_SUPPORT
#if defined(__WIN__)
...
...
@@ -211,7 +210,7 @@ PQRYRES OEMColumns(PGLOBAL g, PTOS topt, char *tab, char *db, bool info);
PQRYRES
VirColumns
(
PGLOBAL
g
,
bool
info
);
PQRYRES
JSONColumns
(
PGLOBAL
g
,
char
*
db
,
PTOS
topt
,
bool
info
);
PQRYRES
XMLColumns
(
PGLOBAL
g
,
char
*
db
,
char
*
tab
,
PTOS
topt
,
bool
info
);
int
TranslateJDBCType
(
int
stp
,
int
prec
,
int
&
len
,
char
&
v
);
int
TranslateJDBCType
(
int
stp
,
char
*
tn
,
int
prec
,
int
&
len
,
char
&
v
);
void
PushWarning
(
PGLOBAL
g
,
THD
*
thd
,
int
level
);
bool
CheckSelf
(
PGLOBAL
g
,
TABLE_SHARE
*
s
,
const
char
*
host
,
const
char
*
db
,
char
*
tab
,
const
char
*
src
,
int
port
);
...
...
@@ -220,6 +219,7 @@ USETEMP UseTemp(void);
int
GetConvSize
(
void
);
TYPCONV
GetTypeConv
(
void
);
uint
GetJsonGrpSize
(
void
);
char
*
GetJavaWrapper
(
void
);
uint
GetWorkSize
(
void
);
void
SetWorkSize
(
uint
);
extern
"C"
const
char
*
msglang
(
void
);
...
...
@@ -332,6 +332,15 @@ static MYSQL_THDVAR_UINT(json_grp_size,
"max number of rows for JSON aggregate functions."
,
NULL
,
NULL
,
JSONMAX
,
1
,
INT_MAX
,
1
);
#if defined(JDBC_SUPPORT)
// Default java wrapper to use with JDBC tables
static
MYSQL_THDVAR_STR
(
java_wrapper
,
PLUGIN_VAR_RQCMDARG
|
PLUGIN_VAR_MEMALLOC
,
"Java wrapper class name"
,
// check_class_path, update_class_path,
NULL
,
NULL
,
"wrappers/JdbcInterface"
);
#endif // JDBC_SUPPORT
#if defined(XMSG) || defined(NEWMSG)
const
char
*
language_names
[]
=
{
...
...
@@ -384,6 +393,12 @@ extern "C" const char *msglang(void)
return
language_names
[
THDVAR
(
current_thd
,
msg_lang
)];
}
// end of msglang
#else // !XMSG && !NEWMSG
#if defined(JDBC_SUPPORT)
char
*
GetJavaWrapper
(
void
)
{
return
connect_hton
?
THDVAR
(
current_thd
,
java_wrapper
)
:
(
char
*
)
"wrappers/JdbcInterface"
;}
#endif // JDBC_SUPPORT
extern
"C"
const
char
*
msglang
(
void
)
{
#if defined(FRENCH)
...
...
@@ -1123,7 +1138,7 @@ bool GetBooleanTableOption(PGLOBAL g, PTOS options, char *opname, bool bdef)
/****************************************************************************/
int
GetIntegerTableOption
(
PGLOBAL
g
,
PTOS
options
,
char
*
opname
,
int
idef
)
{
ulonglong
opval
=
NO_IVAL
;
ulonglong
opval
=
(
ulonglong
)
NO_IVAL
;
if
(
!
options
)
return
idef
;
...
...
@@ -5508,7 +5523,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
break
;
case
FNC_TABLE
:
qrp
=
ODBCTables
(
g
,
dsn
,
shm
,
tab
,
mxr
,
true
,
sop
);
qrp
=
ODBCTables
(
g
,
dsn
,
shm
,
tab
,
NULL
,
mxr
,
true
,
sop
);
break
;
case
FNC_DSN
:
qrp
=
ODBCDataSources
(
g
,
mxr
,
true
);
...
...
@@ -5633,6 +5648,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
}
else
{
char
*
schem
=
NULL
;
char
*
tn
=
NULL
;
// Not a catalog table
if
(
!
qrp
->
Nblin
)
{
...
...
@@ -5649,7 +5665,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
typ
=
len
=
prec
=
dec
=
0
;
tm
=
NOT_NULL_FLAG
;
cnm
=
(
char
*
)
"noname"
;
dft
=
xtra
=
key
=
fmt
=
NULL
;
dft
=
xtra
=
key
=
fmt
=
tn
=
NULL
;
v
=
' '
;
rem
=
NULL
;
...
...
@@ -5668,6 +5684,9 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
case
FLD_TYPE
:
typ
=
crp
->
Kdata
->
GetIntValue
(
i
);
v
=
(
crp
->
Nulls
)
?
crp
->
Nulls
[
i
]
:
0
;
break
;
case
FLD_TYPENAME
:
tn
=
crp
->
Kdata
->
GetCharValue
(
i
);
break
;
case
FLD_PREC
:
// PREC must be always before LENGTH
...
...
@@ -5713,8 +5732,8 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
break
;
case
FLD_SCHEM
:
#if defined(ODBC_SUPPORT)
if
(
ttp
==
TAB_ODBC
&&
crp
->
Kdata
)
{
#if defined(ODBC_SUPPORT)
|| defined(JDBC_SUPPORT)
if
(
(
ttp
==
TAB_ODBC
||
ttp
==
TAB_JDBC
)
&&
crp
->
Kdata
)
{
if
(
schem
&&
stricmp
(
schem
,
crp
->
Kdata
->
GetCharValue
(
i
)))
{
sprintf
(
g
->
Message
,
"Several %s tables found, specify DBNAME"
,
tab
);
...
...
@@ -5724,7 +5743,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
schem
=
crp
->
Kdata
->
GetCharValue
(
i
);
}
// endif ttp
#endif // ODBC_SUPPORT
#endif // ODBC_SUPPORT
|| JDBC_SUPPORT
default:
break
;
// Ignore
}
// endswitch Fld
...
...
@@ -5777,7 +5796,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd,
int
plgtyp
;
// typ must be PLG type, not SQL type
if
(
!
(
plgtyp
=
TranslateJDBCType
(
typ
,
dec
,
prec
,
v
)))
{
if
(
!
(
plgtyp
=
TranslateJDBCType
(
typ
,
tn
,
dec
,
prec
,
v
)))
{
if
(
GetTypeConv
()
==
TPC_SKIP
)
{
// Skip this column
sprintf
(
g
->
Message
,
"Column %s skipped (unsupported type %d)"
,
...
...
@@ -6875,12 +6894,6 @@ static MYSQL_SYSVAR_STR(class_path, ClassPath,
"Java class path"
,
// check_class_path, update_class_path,
NULL
,
NULL
,
NULL
);
static
MYSQL_SYSVAR_STR
(
java_wrapper
,
Wrapper
,
PLUGIN_VAR_RQCMDARG
|
PLUGIN_VAR_MEMALLOC
,
"Java wrapper class"
,
// check_class_path, update_class_path,
NULL
,
NULL
,
"JdbcInterface"
);
#endif // JDBC_SUPPORT
...
...
@@ -6922,7 +6935,7 @@ maria_declare_plugin(connect)
0x0104
,
/* version number (1.04) */
NULL
,
/* status variables */
connect_system_variables
,
/* system variables */
"1.04.000
6
"
,
/* string version */
"1.04.000
8
"
,
/* string version */
MariaDB_PLUGIN_MATURITY_GAMMA
/* maturity */
}
maria_declare_plugin_end
;
This diff is collapsed.
Click to expand it.
storage/connect/jdbconn.cpp
View file @
2bd94951
...
...
@@ -6,6 +6,13 @@
/* This file contains the JDBC connection classes functions. */
/***********************************************************************/
#if defined(__WIN__)
// This is needed for RegGetValue
#define _WINVER 0x0601
#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0601
#endif // __WIN__
/***********************************************************************/
/* Include relevant MariaDB header file. */
/***********************************************************************/
...
...
@@ -52,10 +59,12 @@ extern "C" HINSTANCE s_hModule; // Saved module handle
#define nullptr 0
#endif // !__WIN__
TYPCONV
GetTypeConv
();
int
GetConvSize
();
extern
char
*
JvmPath
;
// The connect_jvm_path global variable value
extern
char
*
ClassPath
;
// The connect_class_path global variable value
extern
char
*
Wrapper
;
// The connect_java_wrapper global variable value
char
*
GetJavaWrapper
(
void
);
// The connect_java_wrapper variable value
/***********************************************************************/
/* Static JDBConn objects. */
...
...
@@ -79,7 +88,7 @@ GETDEF JDBConn::GetDefaultJavaVMInitArgs = NULL;
#endif // !_DEBUG
// To avoid gcc warning
int
TranslateJDBCType
(
int
stp
,
int
prec
,
int
&
len
,
char
&
v
);
int
TranslateJDBCType
(
int
stp
,
char
*
tn
,
int
prec
,
int
&
len
,
char
&
v
);
/***********************************************************************/
/* GetJDBCType: returns the SQL_TYPE corresponding to a PLG type. */
...
...
@@ -107,12 +116,15 @@ static short GetJDBCType(int type)
/***********************************************************************/
/* TranslateJDBCType: translate a JDBC Type to a PLG type. */
/***********************************************************************/
int
TranslateJDBCType
(
int
stp
,
int
prec
,
int
&
len
,
char
&
v
)
int
TranslateJDBCType
(
int
stp
,
char
*
tn
,
int
prec
,
int
&
len
,
char
&
v
)
{
int
type
;
switch
(
stp
)
{
case
-
1
:
// LONGVARCHAR
if
(
GetTypeConv
()
!=
TPC_YES
)
return
TYPE_ERROR
;
else
len
=
MY_MIN
(
abs
(
len
),
GetConvSize
());
case
12
:
// VARCHAR
v
=
'V'
;
...
...
@@ -139,17 +151,24 @@ int TranslateJDBCType(int stp, int prec, int& len, char& v)
case
8
:
// DOUBLE
type
=
TYPE_DOUBLE
;
break
;
case
93
:
// TIMESTAMP
case
93
:
// TIMESTAMP
, DATETIME
type
=
TYPE_DATE
;
len
=
19
+
((
prec
)
?
(
prec
+
1
)
:
0
);
v
=
'S
'
;
v
=
(
tn
&&
toupper
(
tn
[
0
])
==
'T'
)
?
'S'
:
'E
'
;
break
;
case
91
:
//
TYPE_DATE
case
91
:
//
DATE, YEAR
type
=
TYPE_DATE
;
if
(
!
tn
||
toupper
(
tn
[
0
])
!=
'Y'
)
{
len
=
10
;
v
=
'D'
;
}
else
{
len
=
4
;
v
=
'Y'
;
}
// endif len
break
;
case
92
:
// T
YPE_T
IME
case
92
:
// TIME
type
=
TYPE_DATE
;
len
=
8
+
((
prec
)
?
(
prec
+
1
)
:
0
);
v
=
'T'
;
...
...
@@ -174,42 +193,20 @@ int TranslateJDBCType(int stp, int prec, int& len, char& v)
static
JCATPARM
*
AllocCatInfo
(
PGLOBAL
g
,
JCATINFO
fid
,
char
*
db
,
char
*
tab
,
PQRYRES
qrp
)
{
//size_t m, n;
JCATPARM
*
cap
;
#if defined(_DEBUG)
assert
(
qrp
);
#endif
// Save stack and allocation environment and prepare error return
if
(
g
->
jump_level
==
MAX_JUMP
)
{
strcpy
(
g
->
Message
,
MSG
(
TOO_MANY_JUMPS
));
return
NULL
;
}
// endif jump_level
if
(
setjmp
(
g
->
jumper
[
++
g
->
jump_level
])
!=
0
)
{
printf
(
"%s
\n
"
,
g
->
Message
);
cap
=
NULL
;
goto
fin
;
}
// endif rc
//m = (size_t)qrp->Maxres;
//n = (size_t)qrp->Nbcol;
cap
=
(
JCATPARM
*
)
PlugSubAlloc
(
g
,
NULL
,
sizeof
(
JCATPARM
));
if
((
cap
=
(
JCATPARM
*
)
PlgDBSubAlloc
(
g
,
NULL
,
sizeof
(
JCATPARM
))))
{
memset
(
cap
,
0
,
sizeof
(
JCATPARM
));
cap
->
Id
=
fid
;
cap
->
Qrp
=
qrp
;
cap
->
DB
=
(
PUCHAR
)
db
;
cap
->
Tab
=
(
PUCHAR
)
tab
;
//cap->Vlen = (SQLLEN* *)PlugSubAlloc(g, NULL, n * sizeof(SQLLEN *));
cap
->
DB
=
db
;
cap
->
Tab
=
tab
;
}
// endif cap
//for (i = 0; i < n; i++)
// cap->Vlen[i] = (SQLLEN *)PlugSubAlloc(g, NULL, m * sizeof(SQLLEN));
//cap->Status = (UWORD *)PlugSubAlloc(g, NULL, m * sizeof(UWORD));
fin:
g
->
jump_level
--
;
return
cap
;
}
// end of AllocCatInfo
...
...
@@ -291,7 +288,8 @@ PQRYRES JDBCColumns(PGLOBAL g, char *db, char *table, char *colpat,
if
(
!
(
cap
=
AllocCatInfo
(
g
,
CAT_COL
,
db
,
table
,
qrp
)))
return
NULL
;
cap
->
Pat
=
(
PUCHAR
)
colpat
;
// Colpat cannot be null or empty for some drivers
cap
->
Pat
=
(
colpat
&&
*
colpat
)
?
colpat
:
PlugDup
(
g
,
"%"
);
/************************************************************************/
/* Now get the results into blocks. */
...
...
@@ -399,10 +397,12 @@ PQRYRES JDBCTables(PGLOBAL g, char *db, char *tabpat, char *tabtyp,
if
(
info
||
!
qrp
)
return
qrp
;
if
(
!
(
cap
=
AllocCatInfo
(
g
,
CAT_TAB
,
db
,
tabpat
,
qrp
)))
// Tabpat cannot be null or empty for some drivers
if
(
!
(
cap
=
AllocCatInfo
(
g
,
CAT_TAB
,
db
,
(
tabpat
&&
*
tabpat
)
?
tabpat
:
PlugDup
(
g
,
"%"
),
qrp
)))
return
NULL
;
cap
->
Pat
=
(
PUCHAR
)
tabtyp
;
cap
->
Pat
=
tabtyp
;
if
(
trace
)
htrc
(
"Getting table results ncol=%d
\n
"
,
cap
->
Qrp
->
Nbcol
);
...
...
@@ -650,11 +650,20 @@ JDBConn::JDBConn(PGLOBAL g, TDBJDBC *tdbp)
job
=
nullptr
;
// The java wrapper class object
xqid
=
xuid
=
xid
=
grs
=
readid
=
fetchid
=
typid
=
errid
=
nullptr
;
prepid
=
xpid
=
pcid
=
nullptr
;
chrfldid
=
intfldid
=
dblfldid
=
fltfldid
=
datfldid
=
bigfldid
=
nullptr
;
//m_LoginTimeout = DEFAULT_LOGIN_TIMEOUT;
chrfldid
=
intfldid
=
dblfldid
=
fltfldid
=
bigfldid
=
nullptr
;
datfldid
=
timfldid
=
tspfldid
=
nullptr
;
//m_LoginTimeout = DEFAULT_LOGIN_TIMEOUT;
//m_QueryTimeout = DEFAULT_QUERY_TIMEOUT;
//m_UpdateOptions = 0;
Msg
=
NULL
;
m_Wrap
=
(
tdbp
&&
tdbp
->
WrapName
)
?
tdbp
->
WrapName
:
GetJavaWrapper
();
if
(
!
strchr
(
m_Wrap
,
'/'
))
{
// Add the wrapper package name
char
*
wn
=
(
char
*
)
PlugSubAlloc
(
g
,
NULL
,
strlen
(
m_Wrap
)
+
10
);
m_Wrap
=
strcat
(
strcpy
(
wn
,
"wrappers/"
),
m_Wrap
);
}
// endif m_Wrap
m_Driver
=
NULL
;
m_Url
=
NULL
;
m_User
=
NULL
;
...
...
@@ -830,17 +839,52 @@ void JDBConn::ResetJVM(void)
/***********************************************************************/
bool
JDBConn
::
GetJVM
(
PGLOBAL
g
)
{
int
ntry
;
if
(
!
LibJvm
)
{
char
soname
[
512
];
#if defined(__WIN__)
if
(
JvmPath
)
for
(
ntry
=
0
;
!
LibJvm
&&
ntry
<
3
;
ntry
++
)
{
if
(
!
ntry
&&
JvmPath
)
{
strcat
(
strcpy
(
soname
,
JvmPath
),
"
\\
jvm.dll"
);
else
strcpy
(
soname
,
"jvm.dll"
);
ntry
=
3
;
// No other try
}
else
if
(
ntry
<
2
&&
getenv
(
"JAVA_HOME"
))
{
strcpy
(
soname
,
getenv
(
"JAVA_HOME"
));
if
(
ntry
==
1
)
strcat
(
soname
,
"
\\
jre"
);
strcat
(
soname
,
"
\\
bin
\\
client
\\
jvm.dll"
);
}
else
{
// Try to find it through the registry
char
version
[
16
];
char
javaKey
[
64
]
=
"SOFTWARE
\\
JavaSoft
\\
Java Runtime Environment"
;
LONG
rc
;
DWORD
BufferSize
=
16
;
strcpy
(
soname
,
"jvm.dll"
);
// In case it fails
if
((
rc
=
RegGetValue
(
HKEY_LOCAL_MACHINE
,
javaKey
,
"CurrentVersion"
,
RRF_RT_ANY
,
NULL
,
(
PVOID
)
&
version
,
&
BufferSize
))
==
ERROR_SUCCESS
)
{
strcat
(
strcat
(
javaKey
,
"
\\
"
),
version
);
BufferSize
=
sizeof
(
soname
);
if
((
rc
=
RegGetValue
(
HKEY_LOCAL_MACHINE
,
javaKey
,
"RuntimeLib"
,
RRF_RT_ANY
,
NULL
,
(
PVOID
)
&
soname
,
&
BufferSize
))
!=
ERROR_SUCCESS
)
printf
(
"RegGetValue: rc=%ld
\n
"
,
rc
);
}
// endif rc
ntry
=
3
;
// Try this only once
}
// endelse
// Load the desired shared library
if
(
!
(
LibJvm
=
LoadLibrary
(
soname
)))
{
LibJvm
=
LoadLibrary
(
soname
);
}
// endfor ntry
// Get the needed entries
if
(
!
LibJvm
)
{
char
buf
[
256
];
DWORD
rc
=
GetLastError
();
...
...
@@ -871,13 +915,23 @@ bool JDBConn::GetJVM(PGLOBAL g)
#else // !__WIN__
const
char
*
error
=
NULL
;
if
(
JvmPath
)
for
(
ntry
=
0
;
!
LibJvm
&&
ntry
<
2
;
ntry
++
)
{
if
(
!
ntry
&&
JvmPath
)
{
strcat
(
strcpy
(
soname
,
JvmPath
),
"/libjvm.so"
);
else
ntry
=
2
;
}
else
if
(
!
ntry
&&
getenv
(
"JAVA_HOME"
))
{
// TODO: Replace i386 by a better guess
strcat
(
strcpy
(
soname
,
getenv
(
"JAVA_HOME"
)),
"/jre/lib/i386/client/libjvm.so"
);
}
else
{
// Will need LD_LIBRARY_PATH to be set
strcpy
(
soname
,
"libjvm.so"
);
ntry
=
2
;
}
// endelse
LibJvm
=
dlopen
(
soname
,
RTLD_LAZY
);
}
// endfor ntry
// Load the desired shared library
if
(
!
(
LibJvm
=
dlopen
(
soname
,
RTLD_LAZY
))
)
{
if
(
!
LibJvm
)
{
error
=
dlerror
();
sprintf
(
g
->
Message
,
MSG
(
SHARED_LIB_ERR
),
soname
,
SVP
(
error
));
}
else
if
(
!
(
CreateJavaVM
=
(
CRTJVM
)
dlsym
(
LibJvm
,
"JNI_CreateJavaVM"
)))
{
...
...
@@ -911,7 +965,9 @@ bool JDBConn::GetJVM(PGLOBAL g)
/***********************************************************************/
int
JDBConn
::
Open
(
PJPARM
sop
)
{
bool
err
=
false
;
jboolean
jt
=
(
trace
>
0
);
PGLOBAL
&
g
=
m_G
;
// Link or check whether jvm library was linked
...
...
@@ -951,6 +1007,11 @@ int JDBConn::Open(PJPARM sop)
#define N 1
#endif
// Java source will be compiled as ajar file installed in the plugin dir
jpop
->
Append
(
sep
);
jpop
->
Append
(
GetPluginDir
());
jpop
->
Append
(
"JdbcInterface.jar"
);
//================== prepare loading of Java VM ============================
JavaVMInitArgs
vm_args
;
// Initialization arguments
JavaVMOption
*
options
=
new
JavaVMOption
[
N
];
// JVM invocation options
...
...
@@ -1021,19 +1082,16 @@ int JDBConn::Open(PJPARM sop)
return
RC_FX
;
}
// endswitch rc
}
// endif rc
//=============== Display JVM version =======================================
#if defined(_DEBUG)
//=============== Display JVM version ===============
jint
ver
=
env
->
GetVersion
();
printf
(
"JVM Version %d.%d
\n
"
,
((
ver
>>
16
)
&
0x0f
),
(
ver
&
0x0f
));
#endif //_DEBUG
}
// endif rc
// try to find the java wrapper class
jdi
=
env
->
FindClass
(
Wrapper
);
jdi
=
env
->
FindClass
(
m_Wrap
);
if
(
jdi
==
nullptr
)
{
sprintf
(
g
->
Message
,
"ERROR: class %s not found!"
,
Wrapper
);
sprintf
(
g
->
Message
,
"ERROR: class %s not found!"
,
m_Wrap
);
return
RC_FX
;
}
// endif jdi
...
...
@@ -1076,19 +1134,19 @@ int JDBConn::Open(PJPARM sop)
#endif // 0
// if class found, continue
jmethodID
ctor
=
env
->
GetMethodID
(
jdi
,
"<init>"
,
"()V"
);
jmethodID
ctor
=
env
->
GetMethodID
(
jdi
,
"<init>"
,
"(
Z
)V"
);
if
(
ctor
==
nullptr
)
{
sprintf
(
g
->
Message
,
"ERROR: %s constructor not found!"
,
Wrapper
);
sprintf
(
g
->
Message
,
"ERROR: %s constructor not found!"
,
m_Wrap
);
return
RC_FX
;
}
else
job
=
env
->
NewObject
(
jdi
,
ctor
);
job
=
env
->
NewObject
(
jdi
,
ctor
,
jt
);
// If the object is successfully constructed,
// we can then search for the method we want to call,
// and invoke it for the object:
if
(
job
==
nullptr
)
{
sprintf
(
g
->
Message
,
"%s class object not constructed!"
,
Wrapper
);
sprintf
(
g
->
Message
,
"%s class object not constructed!"
,
m_Wrap
);
return
RC_FX
;
}
// endif job
...
...
@@ -1289,9 +1347,7 @@ void JDBConn::SetColumnValue(int rank, PSZ name, PVAL val)
{
PGLOBAL
&
g
=
m_G
;
jint
ctyp
;
jlong
dtv
;
jstring
cn
,
jn
=
nullptr
;
jobject
dob
;
if
(
rank
==
0
)
if
(
!
name
||
(
jn
=
env
->
NewStringUTF
(
name
))
==
nullptr
)
{
...
...
@@ -1354,31 +1410,22 @@ void JDBConn::SetColumnValue(int rank, PSZ name, PVAL val)
break
;
case
91
:
// DATE
case
92
:
// TIME
case
93
:
// TIMESTAMP
if
(
!
gmID
(
g
,
datfldid
,
"TimestampField"
,
"(ILjava/lang/String;)Ljava/sql/Timestamp;"
))
{
dob
=
env
->
CallObjectMethod
(
job
,
datfldid
,
(
jint
)
rank
,
jn
);
if
(
dob
)
{
jclass
jts
=
env
->
FindClass
(
"java/sql/Timestamp"
);
if
(
env
->
ExceptionCheck
())
{
val
->
Reset
();
}
else
{
jmethodID
getTime
=
env
->
GetMethodID
(
jts
,
"getTime"
,
"()J"
);
if
(
getTime
!=
nullptr
)
{
dtv
=
env
->
CallLongMethod
(
dob
,
getTime
);
val
->
SetValue
((
int
)(
dtv
/
1000
));
if
(
!
gmID
(
g
,
datfldid
,
"DateField"
,
"(ILjava/lang/String;)I"
))
{
val
->
SetValue
((
int
)
env
->
CallIntMethod
(
job
,
datfldid
,
(
jint
)
rank
,
jn
));
}
else
val
->
Reset
();
}
// endif check
break
;
case
92
:
// TIME
if
(
!
gmID
(
g
,
timfldid
,
"TimeField"
,
"(ILjava/lang/String;)I"
))
{
val
->
SetValue
((
int
)
env
->
CallIntMethod
(
job
,
timfldid
,
(
jint
)
rank
,
jn
));
}
else
val
->
Reset
();
break
;
case
93
:
// TIMESTAMP
if
(
!
gmID
(
g
,
tspfldid
,
"TimestampField"
,
"(ILjava/lang/String;)I"
))
{
val
->
SetValue
((
int
)
env
->
CallIntMethod
(
job
,
tspfldid
,
(
jint
)
rank
,
jn
));
}
else
val
->
Reset
();
...
...
@@ -1931,9 +1978,9 @@ bool JDBConn::SetParam(JDBCCOL *colp)
{
PGLOBAL
&
g
=
m_G
;
// void *buffer;
int
i
;
int
i
,
ncol
;
PSZ
fnc
=
"Unknown"
;
uint
n
,
ncol
;
uint
n
;
short
len
,
tp
;
int
crow
=
0
;
PQRYRES
qrp
=
cap
->
Qrp
;
...
...
@@ -1956,8 +2003,6 @@ bool JDBConn::SetParam(JDBCCOL *colp)
env
->
SetObjectArrayElement
(
parms
,
0
,
env
->
NewStringUTF
(
name
.
ptr
(
2
)));
env
->
SetObjectArrayElement
(
parms
,
1
,
env
->
NewStringUTF
(
name
.
ptr
(
1
)));
env
->
SetObjectArrayElement
(
parms
,
2
,
env
->
NewStringUTF
(
name
.
ptr
(
0
)));
if
(
cap
->
Pat
)
env
->
SetObjectArrayElement
(
parms
,
3
,
env
->
NewStringUTF
((
const
char
*
)
cap
->
Pat
));
// Now do call the proper JDBC API
...
...
This diff is collapsed.
Click to expand it.
storage/connect/jdbconn.h
View file @
2bd94951
...
...
@@ -24,7 +24,7 @@
//efine MAX_FNAME_LEN 256 // Max size of field names
//efine MAX_STRING_INFO 256 // Max size of string from SQLGetInfo
//efine MAX_DNAME_LEN 256 // Max size of Recordset names
#d
efine MAX_CONNECT_LEN 512 // Max size of Connect string
//
efine MAX_CONNECT_LEN 512 // Max size of Connect string
//efine MAX_CURSOR_NAME 18 // Max size of a cursor name
#define DEFAULT_FIELD_TYPE 0 // TYPE_NULL
...
...
@@ -46,9 +46,9 @@ enum JCATINFO {
typedef
struct
tagJCATPARM
{
JCATINFO
Id
;
// Id to indicate function
PQRYRES
Qrp
;
// Result set pointer
PUCHAR
DB
;
// Database (Schema)
PUCHAR
Tab
;
// Table name or pattern
PUCHAR
Pat
;
// Table type or column pattern
char
*
DB
;
// Database (Schema)
char
*
Tab
;
// Table name or pattern
char
*
Pat
;
// Table type or column pattern
}
JCATPARM
;
typedef
jint
(
JNICALL
*
CRTJVM
)
(
JavaVM
**
,
void
**
,
void
*
);
...
...
@@ -169,12 +169,15 @@ protected:
jmethodID
intfldid
;
// The IntField method ID
jmethodID
dblfldid
;
// The DoubleField method ID
jmethodID
fltfldid
;
// The FloatField method ID
jmethodID
datfldid
;
// The TimestampField method ID
jmethodID
datfldid
;
// The DateField method ID
jmethodID
timfldid
;
// The TimeField method ID
jmethodID
tspfldid
;
// The TimestampField method ID
jmethodID
bigfldid
;
// The BigintField method ID
//DWORD m_LoginTimeout;
//DWORD m_QueryTimeout;
//DWORD m_UpdateOptions;
char
*
Msg
;
char
*
m_Wrap
;
char
m_IDQuoteChar
[
2
];
PSZ
m_Driver
;
PSZ
m_Url
;
...
...
This diff is collapsed.
Click to expand it.
storage/connect/jsonudf.cpp
View file @
2bd94951
...
...
@@ -30,6 +30,10 @@
uint
GetJsonGrpSize
(
void
);
static
int
IsJson
(
UDF_ARGS
*
args
,
uint
i
);
static
PSZ
MakePSZ
(
PGLOBAL
g
,
UDF_ARGS
*
args
,
int
i
);
static
char
*
handle_item
(
UDF_INIT
*
initid
,
UDF_ARGS
*
args
,
char
*
result
,
unsigned
long
*
res_length
,
char
*
is_null
,
char
*
error
);
static
char
*
bin_handle_item
(
UDF_INIT
*
initid
,
UDF_ARGS
*
args
,
char
*
result
,
unsigned
long
*
res_length
,
char
*
is_null
,
char
*
error
);
static
uint
JsonGrpSize
=
10
;
...
...
@@ -1302,7 +1306,7 @@ static my_bool CalcLen(UDF_ARGS *args, my_bool obj,
{
char
fn
[
_MAX_PATH
];
unsigned
long
i
,
k
,
m
,
n
;
long
fl
=
0
,
j
=
-
1
;
long
fl
=
0
,
j
=
-
1
;
reslen
=
args
->
arg_count
+
2
;
...
...
@@ -2126,7 +2130,7 @@ my_bool json_object_nonull_init(UDF_INIT *initid, UDF_ARGS *args,
char
*
json_object_nonull
(
UDF_INIT
*
initid
,
UDF_ARGS
*
args
,
char
*
result
,
unsigned
long
*
res_length
,
char
*
,
char
*
)
{
char
*
str
=
0
;
char
*
str
=
NULL
;
PGLOBAL
g
=
(
PGLOBAL
)
initid
->
ptr
;
if
(
!
g
->
Xchk
)
{
...
...
@@ -2699,7 +2703,7 @@ char *json_item_merge(UDF_INIT *initid, UDF_ARGS *args, char *result,
}
// endif Xchk
if
(
!
CheckMemory
(
g
,
initid
,
args
,
2
,
false
,
false
,
true
))
{
PJSON
top
=
0
;
PJSON
top
=
NULL
;
PJVAL
jvp
;
PJSON
jsp
[
2
]
=
{
NULL
,
NULL
};
...
...
@@ -4899,7 +4903,7 @@ char *bin_handle_item(UDF_INIT *initid, UDF_ARGS *args, char *result,
my_bool
b
=
true
;
PJSON
jsp
;
PJSNX
jsx
;
PJVAL
jvp
=
0
;
PJVAL
jvp
=
NULL
;
PBSON
bsp
=
NULL
;
PGLOBAL
g
=
(
PGLOBAL
)
initid
->
ptr
;
PGLOBAL
gb
=
GetMemPtr
(
g
,
args
,
0
);
...
...
This diff is collapsed.
Click to expand it.
storage/connect/mysql-test/connect/r/jdbc.result
View file @
2bd94951
SET GLOBAL time_zone='+1:00';
CREATE DATABASE connect;
USE connect;
CREATE TABLE t2 (
...
...
@@ -99,8 +100,8 @@ George San Jose 1981-08-10 2010-06-02
Sam Chicago 1979-11-22 2007-10-10
James Dallas 1992-05-13 2009-12-14
Bill Boston 1986-09-11 2008-02-10
Donald Atlanta 1999-0
4-01 2016-03-31
Mick New York 1980-01-20 2002-09-1
1
Donald Atlanta 1999-0
3-31 2016-03-30
Mick New York 1980-01-20 2002-09-1
0
Tom Seatle 2002-03-15 1970-01-01
DROP TABLE t3;
#
...
...
@@ -110,7 +111,7 @@ CREATE TABLE t3 (
name CHAR(9) NOT NULL,
city CHAR(12) NOT NULL,
age INT(2))
engine=CONNECT table_type=FIX file_name='girls.txt'
;
ENGINE=CONNECT TABLE_TYPE=FIX FILE_NAME='girls.txt' ENDING=1
;
SELECT g.name, b.name, g.city FROM t3 g STRAIGHT_JOIN connect.boys b where g.city = b.city;
name name city
Mary John Boston
...
...
@@ -167,8 +168,11 @@ serialno name sex title manager department secretary salary
00137 BROWNY 1 ENGINEER 40567 0319 12345 10500.00
73111 WHEELFOR 1 SALESMAN 70012 0318 24888 10030.00
00023 MARTIN 1 ENGINEER 40567 0319 12345 10000.00
#
# Option Driver is required to find the Driver class inside the executable jar file
#
USE test;
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JDBC TABNAME=emp CONNECTION='jdbc:mariadb://localhost:PORT/connect?user=root';
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JDBC TABNAME=emp CONNECTION='jdbc:mariadb://localhost:PORT/connect?user=root'
OPTION_LIST='Driver=org.mariadb.jdbc.Driver'
;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
...
...
@@ -180,7 +184,7 @@ t1 CREATE TABLE `t1` (
`department` char(4) NOT NULL,
`secretary` char(5) NOT NULL,
`salary` double(12,2) NOT NULL
) ENGINE=CONNECT DEFAULT CHARSET=latin1 CONNECTION='jdbc:mariadb://localhost:PORT/connect?user=root' `TABLE_TYPE`='JDBC' `TABNAME`='emp'
) ENGINE=CONNECT DEFAULT CHARSET=latin1 CONNECTION='jdbc:mariadb://localhost:PORT/connect?user=root' `TABLE_TYPE`='JDBC' `TABNAME`='emp'
`OPTION_LIST`='Driver=org.mariadb.jdbc.Driver'
SELECT * FROM t1;
serialno name sex title manager department secretary salary
74200 BANCROFT 2 SALESMAN 70012 0318 24888 9600.00
...
...
@@ -260,10 +264,8 @@ DROP TABLE t2;
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JDBC CATFUNC=tables CONNECTION='jdbc:mariadb://localhost:PORT/connect' option_list='User=root,Maxres=50';
SELECT * FROM t1;
Table_Cat Table_Schema Table_Name Table_Type Remark
connect NULL tx1
BASE
TABLE
connect NULL tx1 TABLE
DROP TABLE t1;
DROP TABLE connect.tx1;
DROP DATABASE connect;
SET GLOBAL connect_jvm_path=NULL;
SET GLOBAL connect_class_path=NULL;
SET GLOBAL time_zone = SYSTEM;
SET GLOBAL time_zone=SYSTEM;
This diff is collapsed.
Click to expand it.
storage/connect/mysql-test/connect/r/jdbc_new.result
View file @
2bd94951
SET GLOBAL time_zone='+1:00';
CREATE TABLE t1 (a int, b char(10));
INSERT INTO t1 VALUES (NULL,NULL),(0,'test00'),(1,'test01'),(2,'test02'),(3,'test03');
SELECT * FROM t1;
...
...
@@ -10,6 +11,7 @@ NULL NULL
#
# Testing errors
#
SET GLOBAL time_zone='+1:00';
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JDBC
CONNECTION='jdbc:mysql://127.0.0.1:SLAVE_PORT/test?user=unknown';
SELECT * FROM t1;
...
...
@@ -32,15 +34,13 @@ t1 CREATE TABLE `t1` (
`y` char(10) DEFAULT NULL
) ENGINE=CONNECT DEFAULT CHARSET=latin1 CONNECTION='jdbc:mysql://127.0.0.1:SLAVE_PORT/test?user=root' `TABLE_TYPE`=JDBC
SELECT * FROM t1;
ERROR HY000: Got error 174 'ExecuteQuery: java.sql.SQLSyntaxErrorException: Unknown column 'x' in 'field list'
Query is : SELECT x, y FROM t1' from CONNECT
ERROR HY000: Got error 174 'ExecuteQuery: java.sql.SQLSyntaxErrorException: Unknown column 'x' in 'field list'' from CONNECT
DROP TABLE t1;
CREATE TABLE t1 (a int, b char(10)) ENGINE=CONNECT TABLE_TYPE=JDBC
CONNECTION='jdbc:mysql://127.0.0.1:SLAVE_PORT/test?user=root';
ALTER TABLE t1 RENAME t1backup;
SELECT * FROM t1;
ERROR HY000: Got error 174 'ExecuteQuery: java.sql.SQLSyntaxErrorException: Table 'test.t1' doesn't exist
Query is : SELECT a, b FROM t1' from CONNECT
ERROR HY000: Got error 174 'ExecuteQuery: java.sql.SQLSyntaxErrorException: Table 'test.t1' doesn't exist' from CONNECT
ALTER TABLE t1backup RENAME t1;
DROP TABLE t1;
#
...
...
@@ -201,16 +201,15 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` date DEFAULT NULL,
`b`
timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
,
`b`
datetime DEFAULT NULL
,
`c` time DEFAULT NULL,
`d` timestamp NOT NULL DEFAULT
'0000-00-00 00:00:00'
,
`e`
date
DEFAULT NULL
`d` timestamp NOT NULL DEFAULT
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
,
`e`
year(4)
DEFAULT NULL
) ENGINE=CONNECT DEFAULT CHARSET=latin1 CONNECTION='jdbc:mysql://127.0.0.1:SLAVE_PORT/test?user=root' `TABLE_TYPE`='JDBC'
SELECT * FROM t1;
a b c d e
2003-05-27 2003-05-27 1
0:45:23 10:45:23 2003-05-27 10:45:23 1970-01-01
2003-05-27 2003-05-27 1
1:45:23 10:45:23 2003-05-27 10:45:23 2003
DROP TABLE t1;
DROP TABLE t1;
SET GLOBAL connect_jvm_path=NULL;
SET GLOBAL connect_class_path=NULL;
SET GLOBAL time_zone = SYSTEM;
SET GLOBAL time_zone=SYSTEM;
SET GLOBAL time_zone=SYSTEM;
This diff is collapsed.
Click to expand it.
storage/connect/mysql-test/connect/std_data/JdbcMariaDB.jar
0 → 100644
View file @
2bd94951
File added
This diff is collapsed.
Click to expand it.
storage/connect/mysql-test/connect/t/jdbc.test
View file @
2bd94951
--
source
jdbconn
.
inc
SET
GLOBAL
time_zone
=
'+1:00'
;
let
$MYSQLD_DATADIR
=
`select @@datadir`
;
--
copy_file
$MTR_SUITE_DIR
/
std_data
/
girls
.
txt
$MYSQLD_DATADIR
/
test
/
girls
.
txt
...
...
@@ -80,7 +81,7 @@ CREATE TABLE t3 (
name
CHAR
(
9
)
NOT
NULL
,
city
CHAR
(
12
)
NOT
NULL
,
age
INT
(
2
))
engine
=
CONNECT
table_type
=
FIX
file_name
=
'girls.txt'
;
ENGINE
=
CONNECT
TABLE_TYPE
=
FIX
FILE_NAME
=
'girls.txt'
ENDING
=
1
;
SELECT
g
.
name
,
b
.
name
,
g
.
city
FROM
t3
g
STRAIGHT_JOIN
connect
.
boys
b
where
g
.
city
=
b
.
city
;
SELECT
g
.
name
,
b
.
name
,
g
.
city
FROM
t3
g
STRAIGHT_JOIN
t1
b
where
g
.
city
=
b
.
city
;
DROP
TABLE
t1
,
t3
,
connect
.
boys
;
...
...
@@ -102,9 +103,12 @@ CREATE TABLE emp (
ENGINE
=
connect
TABLE_TYPE
=
fix
FILE_NAME
=
'employee.dat'
ENDING
=
1
;
SELECT
*
FROM
emp
;
--
echo
#
--
echo
# Option Driver is required to find the Driver class inside the executable jar file
--
echo
#
USE
test
;
--
replace_result
$PORT
PORT
--
eval
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
JDBC
TABNAME
=
emp
CONNECTION
=
'jdbc:mariadb://localhost:$PORT/connect?user=root'
--
eval
CREATE
TABLE
t1
ENGINE
=
CONNECT
TABLE_TYPE
=
JDBC
TABNAME
=
emp
CONNECTION
=
'jdbc:mariadb://localhost:$PORT/connect?user=root'
OPTION_LIST
=
'Driver=org.mariadb.jdbc.Driver'
--
replace_result
$PORT
PORT
--
eval
SHOW
CREATE
TABLE
t1
SELECT
*
FROM
t1
;
...
...
@@ -113,7 +117,7 @@ SELECT name, title, salary FROM t1 WHERE sex = 1;
DROP
TABLE
t1
,
connect
.
emp
;
#
# Testing remote command execution
# Testing remote command execution
(Driver option is no more necessary)
#
--
replace_result
$PORT
PORT
--
eval
CREATE
TABLE
t2
(
command
varchar
(
128
)
not
null
,
number
int
(
5
)
not
null
flag
=
1
,
message
varchar
(
255
)
flag
=
2
)
ENGINE
=
CONNECT
TABLE_TYPE
=
JDBC
CONNECTION
=
'jdbc:mariadb://localhost:$PORT/connect'
OPTION_LIST
=
'User=root,Execsrc=1'
...
...
@@ -139,5 +143,5 @@ DROP TABLE connect.tx1;
--
remove_file
$MYSQLD_DATADIR
/
connect
/
employee
.
dat
DROP
DATABASE
connect
;
--
remove_file
$MYSQLD_DATADIR
/
test
/
girls
.
txt
SET
GLOBAL
time_zone
=
SYSTEM
;
--
source
jdbconn_cleanup
.
inc
This diff is collapsed.
Click to expand it.
storage/connect/mysql-test/connect/t/jdbc_new.test
View file @
2bd94951
...
...
@@ -8,6 +8,8 @@ connection master;
--
source
jdbconn
.
inc
connection
slave
;
SET
GLOBAL
time_zone
=
'+1:00'
;
CREATE
TABLE
t1
(
a
int
,
b
char
(
10
));
INSERT
INTO
t1
VALUES
(
NULL
,
NULL
),(
0
,
'test00'
),(
1
,
'test01'
),(
2
,
'test02'
),(
3
,
'test03'
);
SELECT
*
FROM
t1
;
...
...
@@ -16,6 +18,7 @@ SELECT * FROM t1;
--
echo
# Testing errors
--
echo
#
connection
master
;
SET
GLOBAL
time_zone
=
'+1:00'
;
# Bad user name
# Suppress "mysql_real_connect failed:" (printed in _DEBUG build)
...
...
@@ -173,7 +176,9 @@ DROP TABLE t1;
connection
slave
;
DROP
TABLE
t1
;
SET
GLOBAL
time_zone
=
SYSTEM
;
connection
master
;
SET
GLOBAL
time_zone
=
SYSTEM
;
--
source
jdbconn_cleanup
.
inc
This diff is collapsed.
Click to expand it.
storage/connect/mysql-test/connect/t/jdbconn.inc
View file @
2bd94951
...
...
@@ -12,19 +12,20 @@ if (!`SELECT count(*) FROM INFORMATION_SCHEMA.TABLES
}
DROP
TABLE
t1
;
# This is specific and explains why this test is disabled.
# You should edit this file to reflect what is the required files location on your machine.
# You cand edit this file to reflect what is the required files location on your machine.
# This is the path to the JVM library (dll or so)
SET
GLOBAL
connect_jvm_path
=
'C:\\Program Files\\Java\\jdk1.8.0_77\\jre\\bin\\client'
;
# If not set CONNECT will try to use the JAVA_HOME environment variable
# and if not found try to find it in the registers (Windows only)
#SET GLOBAL connect_jvm_path='C:\\Program Files\\Java\\jdk1.8.0_77\\jre\\bin\\client';
# The complete class path send when creating the Java Virtual Machine is, in that order:
# 1 - The current directory.
# 2 - The paths of the connect_class_path global variable.
# 3 - The paths of the CLASSPATH environment variable.
#
These are the paths to the needed classes or jar files. The Apache ones are only for the JdbcApacheInterface wrapper
.
SET
GLOBAL
connect_class_path
=
'E:\\MariaDB-10.1\\Connect\\storage\\connect;E:\\MariaDB-10.1\\Connect\\sql\\data\\postgresql-9.4.1208.jar;E:\\Oracle\\ojdbc6.jar;E:\\Apache\\commons-dbcp2-2.1.1\\commons-dbcp2-2.1.1.jar;E:\\Apache\\commons-pool2-2.4.2\\commons-pool2-2.4.2.jar;E:\\Apache\\commons-logging-1.2\\commons-logging-1.2
.jar'
;
#
In this test we use an executable jar file that contains all what is needed
.
eval
SET
GLOBAL
connect_class_path
=
'$MTR_SUITE_DIR/std_data/JdbcMariaDB
.jar'
;
#
On my machine, paths to the JDK classes and to the MySQL and MariaDB drivers ar
e defined in the CLASSPATH environment variable
#
Paths to the JDK classes and to the MySQL and MariaDB drivers can b
e defined in the CLASSPATH environment variable
#CREATE FUNCTION envar RETURNS STRING SONAME 'ha_connect.dll';
#SELECT envar('CLASSPATH');
...
...
This diff is collapsed.
Click to expand it.
storage/connect/mysql-test/connect/t/jdbconn_cleanup.inc
View file @
2bd94951
--
disable_query_log
--
disable_warnings
#DROP FUNCTION envar;
SET
GLOBAL
connect_jvm_path
=
NULL
;
SET
GLOBAL
connect_class_path
=
NULL
;
SET
GLOBAL
time_zone
=
SYSTEM
;
--
enable_warnings
--
enable_query_log
This diff is collapsed.
Click to expand it.
storage/connect/odbccat.h
View file @
2bd94951
...
...
@@ -21,5 +21,5 @@ PQRYRES ODBCColumns(PGLOBAL g, char *dsn, char *db, char *table,
char
*
colpat
,
int
maxres
,
bool
info
,
POPARM
sop
);
PQRYRES
ODBCSrcCols
(
PGLOBAL
g
,
char
*
dsn
,
char
*
src
,
POPARM
sop
);
PQRYRES
ODBCTables
(
PGLOBAL
g
,
char
*
dsn
,
char
*
db
,
char
*
tabpat
,
int
maxres
,
bool
info
,
POPARM
sop
);
char
*
tabtyp
,
int
maxres
,
bool
info
,
POPARM
sop
);
PQRYRES
ODBCDrivers
(
PGLOBAL
g
,
int
maxres
,
bool
info
);
This diff is collapsed.
Click to expand it.
storage/connect/odbconn.cpp
View file @
2bd94951
...
...
@@ -53,6 +53,7 @@
extern
"C"
HINSTANCE
s_hModule
;
// Saved module handle
#endif // __WIN__
TYPCONV
GetTypeConv
();
int
GetConvSize
();
/***********************************************************************/
...
...
@@ -135,9 +136,13 @@ int TranslateSQLType(int stp, int prec, int& len, char& v, bool& w)
case
SQL_WLONGVARCHAR
:
// (-10)
w
=
true
;
case
SQL_LONGVARCHAR
:
// (-1)
if
(
GetTypeConv
()
==
TPC_YES
)
{
v
=
'V'
;
type
=
TYPE_STRING
;
len
=
MY_MIN
(
abs
(
len
),
GetConvSize
());
}
else
type
=
TYPE_ERROR
;
break
;
case
SQL_NUMERIC
:
// 2
case
SQL_DECIMAL
:
// 3
...
...
@@ -606,7 +611,7 @@ PQRYRES ODBCDataSources(PGLOBAL g, int maxres, bool info)
/* an ODBC database that will be retrieved by GetData commands. */
/**************************************************************************/
PQRYRES
ODBCTables
(
PGLOBAL
g
,
char
*
dsn
,
char
*
db
,
char
*
tabpat
,
int
maxres
,
bool
info
,
POPARM
sop
)
char
*
tabtyp
,
int
maxres
,
bool
info
,
POPARM
sop
)
{
int
buftyp
[]
=
{
TYPE_STRING
,
TYPE_STRING
,
TYPE_STRING
,
TYPE_STRING
,
TYPE_STRING
};
...
...
@@ -668,7 +673,7 @@ PQRYRES ODBCTables(PGLOBAL g, char *dsn, char *db, char *tabpat,
if
(
!
(
cap
=
AllocCatInfo
(
g
,
CAT_TAB
,
db
,
tabpat
,
qrp
)))
return
NULL
;
//
cap->Pat = (PUCHAR)tabtyp;
cap
->
Pat
=
(
PUCHAR
)
tabtyp
;
if
(
trace
)
htrc
(
"Getting table results ncol=%d
\n
"
,
cap
->
Qrp
->
Nbcol
);
...
...
@@ -1752,7 +1757,7 @@ bool ODBConn::BindParam(ODBCCOL *colp)
void
*
buf
;
int
buftype
=
colp
->
GetResultType
();
SQLUSMALLINT
n
=
colp
->
GetRank
();
SQLSMALLINT
ct
,
sqlt
,
dec
,
nul
;
SQLSMALLINT
ct
,
sqlt
,
dec
,
nul
__attribute__
((
unused
))
;
SQLULEN
colsize
;
SQLLEN
len
;
SQLLEN
*
strlen
=
colp
->
GetStrLen
();
...
...
This diff is collapsed.
Click to expand it.
storage/connect/odbconn.h
View file @
2bd94951
...
...
@@ -25,7 +25,7 @@
//efine MAX_FNAME_LEN 256 // Max size of field names
#define MAX_STRING_INFO 256 // Max size of string from SQLGetInfo
//efine MAX_DNAME_LEN 256 // Max size of Recordset names
#define MAX_CONNECT_LEN
512
// Max size of Connect string
#define MAX_CONNECT_LEN
1024
// Max size of Connect string
//efine MAX_CURSOR_NAME 18 // Max size of a cursor name
#define DEFAULT_FIELD_TYPE SQL_TYPE_NULL // pick "C" data type to match SQL data type
...
...
This diff is collapsed.
Click to expand it.
storage/connect/tabjdbc.cpp
View file @
2bd94951
...
...
@@ -96,7 +96,7 @@ bool ExactInfo(void);
/***********************************************************************/
JDBCDEF
::
JDBCDEF
(
void
)
{
Driver
=
Url
=
Tabname
=
Tabschema
=
Username
=
NULL
;
Driver
=
Url
=
Wrapname
=
Tabname
=
Tabschema
=
Username
=
Colpat
=
NULL
;
Password
=
Tabcat
=
Tabtype
=
Srcdef
=
Qchar
=
Qrystr
=
Sep
=
NULL
;
Options
=
Quoted
=
Maxerr
=
Maxres
=
Memory
=
0
;
Scrollable
=
Xsrc
=
false
;
...
...
@@ -233,11 +233,18 @@ bool JDBCDEF::DefineAM(PGLOBAL g, LPCSTR am, int poff)
if
((
Srcdef
=
GetStringCatInfo
(
g
,
"Srcdef"
,
NULL
)))
Read_Only
=
true
;
Wrapname
=
GetStringCatInfo
(
g
,
"Wrapper"
,
NULL
);
Tabcat
=
GetStringCatInfo
(
g
,
"Qualifier"
,
NULL
);
Tabcat
=
GetStringCatInfo
(
g
,
"Catalog"
,
Tabcat
);
Tabschema
=
GetStringCatInfo
(
g
,
"Dbname"
,
NULL
);
Tabschema
=
GetStringCatInfo
(
g
,
"Schema"
,
Tabschema
);
if
(
Catfunc
==
FNC_COL
)
Colpat
=
GetStringCatInfo
(
g
,
"Colpat"
,
NULL
);
if
(
Catfunc
==
FNC_TABLE
)
Tabtype
=
GetStringCatInfo
(
g
,
"Tabtype"
,
NULL
);
Qrystr
=
GetStringCatInfo
(
g
,
"Query_String"
,
"?"
);
Sep
=
GetStringCatInfo
(
g
,
"Separator"
,
NULL
);
Xsrc
=
GetBoolCatInfo
(
"Execsrc"
,
FALSE
);
...
...
@@ -325,6 +332,7 @@ TDBJDBC::TDBJDBC(PJDBCDEF tdp) : TDBASE(tdp)
if
(
tdp
)
{
Ops
.
Driver
=
tdp
->
Driver
;
Ops
.
Url
=
tdp
->
Url
;
WrapName
=
tdp
->
Wrapname
;
TableName
=
tdp
->
Tabname
;
Schema
=
tdp
->
Tabschema
;
Ops
.
User
=
tdp
->
Username
;
...
...
@@ -341,6 +349,7 @@ TDBJDBC::TDBJDBC(PJDBCDEF tdp) : TDBASE(tdp)
Memory
=
tdp
->
Memory
;
Ops
.
Scrollable
=
tdp
->
Scrollable
;
}
else
{
WrapName
=
NULL
;
TableName
=
NULL
;
Schema
=
NULL
;
Ops
.
Driver
=
NULL
;
...
...
@@ -386,6 +395,7 @@ TDBJDBC::TDBJDBC(PTDBJDBC tdbp) : TDBASE(tdbp)
{
Jcp
=
tdbp
->
Jcp
;
// is that right ?
Cnp
=
tdbp
->
Cnp
;
WrapName
=
tdbp
->
WrapName
;
TableName
=
tdbp
->
TableName
;
Schema
=
tdbp
->
Schema
;
Ops
=
tdbp
->
Ops
;
...
...
@@ -512,9 +522,10 @@ bool TDBJDBC::MakeSQL(PGLOBAL g, bool cnt)
if
(
Catalog
&&
*
Catalog
)
catp
=
Catalog
;
if
(
tablep
->
GetSchema
())
schmp
=
(
char
*
)
tablep
->
GetSchema
();
else
if
(
Schema
&&
*
Schema
)
//if (tablep->GetSchema())
// schmp = (char*)tablep->GetSchema();
//else
if
(
Schema
&&
*
Schema
)
schmp
=
Schema
;
if
(
catp
)
{
...
...
@@ -596,9 +607,10 @@ bool TDBJDBC::MakeInsert(PGLOBAL g)
if
(
catp
)
len
+=
strlen
(
catp
)
+
1
;
if
(
tablep
->
GetSchema
())
schmp
=
(
char
*
)
tablep
->
GetSchema
();
else
if
(
Schema
&&
*
Schema
)
//if (tablep->GetSchema())
// schmp = (char*)tablep->GetSchema();
//else
if
(
Schema
&&
*
Schema
)
schmp
=
Schema
;
if
(
schmp
)
...
...
@@ -1787,12 +1799,20 @@ PQRYRES TDBJTB::GetResult(PGLOBAL g)
/* --------------------------TDBJDBCL class -------------------------- */
/***********************************************************************/
/* TDBJDBCL class constructor. */
/***********************************************************************/
TDBJDBCL
::
TDBJDBCL
(
PJDBCDEF
tdp
)
:
TDBJTB
(
tdp
)
{
Colpat
=
tdp
->
Colpat
;
}
// end of TDBJDBCL constructor
/***********************************************************************/
/* GetResult: Get the list of JDBC table columns. */
/***********************************************************************/
PQRYRES
TDBJDBCL
::
GetResult
(
PGLOBAL
g
)
{
return
JDBCColumns
(
g
,
Schema
,
Tab
,
NULL
,
Maxres
,
false
,
&
Ops
);
return
JDBCColumns
(
g
,
Schema
,
Tab
,
Colpat
,
Maxres
,
false
,
&
Ops
);
}
// end of GetResult
#if 0
...
...
This diff is collapsed.
Click to expand it.
storage/connect/tabjdbc.h
View file @
2bd94951
...
...
@@ -26,6 +26,7 @@ class DllExport JDBCDEF : public TABDEF { /* Logical table description */
friend
class
TDBXJDC
;
friend
class
TDBJDRV
;
friend
class
TDBJTB
;
friend
class
TDBJDBCL
;
public:
// Constructor
JDBCDEF
(
void
);
...
...
@@ -53,11 +54,13 @@ protected:
PSZ
Driver
;
/* JDBC driver */
PSZ
Url
;
/* JDBC driver URL */
PSZ
Tabname
;
/* External table name */
PSZ
Wrapname
;
/* Java wrapper name */
PSZ
Tabschema
;
/* External table schema */
PSZ
Username
;
/* User connect name */
PSZ
Password
;
/* Password connect info */
PSZ
Tabcat
;
/* External table catalog */
PSZ
Tabtype
;
/* External table type */
PSZ
Colpat
;
/* Catalog column pattern */
PSZ
Srcdef
;
/* The source table SQL definition */
PSZ
Qchar
;
/* Identifier quoting character */
PSZ
Qrystr
;
/* The original query */
...
...
@@ -131,6 +134,7 @@ protected:
JDBCCOL
*
Cnp
;
// Points to count(*) column
JDBCPARM
Ops
;
// Additional parameters
PSTRG
Query
;
// Constructed SQL query
char
*
WrapName
;
// Points to Java wrapper name
char
*
TableName
;
// Points to JDBC table name
char
*
Schema
;
// Points to JDBC table Schema
char
*
User
;
// User connect info
...
...
@@ -317,14 +321,15 @@ protected:
class
TDBJDBCL
:
public
TDBJTB
{
public:
// Constructor
TDBJDBCL
(
PJDBCDEF
tdp
)
:
TDBJTB
(
tdp
)
{}
TDBJDBCL
(
PJDBCDEF
tdp
)
;
protected:
// Specific routines
virtual
PQRYRES
GetResult
(
PGLOBAL
g
);
// No additional Members
};
// end of class TDBJCL
// Members
char
*
Colpat
;
// Points to catalog column pattern
};
// end of class TDBJDBCL
#if 0
/***********************************************************************/
...
...
This diff is collapsed.
Click to expand it.
storage/connect/tabodbc.cpp
View file @
2bd94951
/************* Tabodbc C++ Program Source Code File (.CPP) *************/
/* PROGRAM NAME: TABODBC */
/* ------------- */
/* Version 3.
0
*/
/* Version 3.
1
*/
/* */
/* COPYRIGHT: */
/* ---------- */
...
...
@@ -96,7 +96,7 @@ bool ExactInfo(void);
ODBCDEF
::
ODBCDEF
(
void
)
{
Connect
=
Tabname
=
Tabschema
=
Username
=
Password
=
NULL
;
Tabcat
=
Srcdef
=
Qchar
=
Qrystr
=
Sep
=
NULL
;
Tabcat
=
Colpat
=
Srcdef
=
Qchar
=
Qrystr
=
Sep
=
NULL
;
Catver
=
Options
=
Cto
=
Qto
=
Quoted
=
Maxerr
=
Maxres
=
Memory
=
0
;
Scrollable
=
Xsrc
=
UseCnc
=
false
;
}
// end of ODBCDEF constructor
...
...
@@ -141,6 +141,12 @@ bool ODBCDEF::DefineAM(PGLOBAL g, LPCSTR am, int poff)
if
((
Scrollable
=
GetBoolCatInfo
(
"Scrollable"
,
false
))
&&
!
Elemt
)
Elemt
=
1
;
// Cannot merge SQLFetch and SQLExtendedFetch
if
(
Catfunc
==
FNC_COL
)
Colpat
=
GetStringCatInfo
(
g
,
"Colpat"
,
NULL
);
if
(
Catfunc
==
FNC_TABLE
)
Tabtyp
=
GetStringCatInfo
(
g
,
"Tabtype"
,
NULL
);
UseCnc
=
GetBoolCatInfo
(
"UseDSN"
,
false
);
// Memory was Boolean, it is now integer
...
...
@@ -452,9 +458,14 @@ bool TDBODBC::MakeSQL(PGLOBAL g, bool cnt)
if
(
Catalog
&&
*
Catalog
)
catp
=
Catalog
;
if
(
tablep
->
GetSchema
())
schmp
=
(
char
*
)
tablep
->
GetSchema
();
else
if
(
Schema
&&
*
Schema
)
// Following lines are commented because of MSDEV-10520
// Indeed the schema in the tablep is the local table database and
// is normally not related to the remote table database.
// TODO: Try to remember why this was done and if it was useful in some case.
//if (tablep->GetSchema())
// schmp = (char*)tablep->GetSchema();
//else
if
(
Schema
&&
*
Schema
)
schmp
=
Schema
;
if
(
catp
)
{
...
...
@@ -535,9 +546,10 @@ bool TDBODBC::MakeInsert(PGLOBAL g)
if
(
catp
)
len
+=
strlen
(
catp
)
+
1
;
if
(
tablep
->
GetSchema
())
schmp
=
(
char
*
)
tablep
->
GetSchema
();
else
if
(
Schema
&&
*
Schema
)
//if (tablep->GetSchema())
// schmp = (char*)tablep->GetSchema();
//else
if
(
Schema
&&
*
Schema
)
schmp
=
Schema
;
if
(
schmp
)
...
...
@@ -681,7 +693,7 @@ bool TDBODBC::MakeCommand(PGLOBAL g)
}
else
{
sprintf
(
g
->
Message
,
"Cannot use this %s command"
,
(
Mode
==
MODE_UPDATE
)
?
"UPDATE"
:
"DELETE"
);
return
NULL
;
return
false
;
}
// endif p
Query
=
new
(
g
)
STRING
(
g
,
0
,
stmt
);
...
...
@@ -1768,6 +1780,7 @@ TDBOTB::TDBOTB(PODEF tdp) : TDBDRV(tdp)
Dsn
=
tdp
->
GetConnect
();
Schema
=
tdp
->
GetTabschema
();
Tab
=
tdp
->
GetTabname
();
Tabtyp
=
tdp
->
Tabtyp
;
Ops
.
User
=
tdp
->
Username
;
Ops
.
Pwd
=
tdp
->
Password
;
Ops
.
Cto
=
tdp
->
Cto
;
...
...
@@ -1780,17 +1793,25 @@ TDBOTB::TDBOTB(PODEF tdp) : TDBDRV(tdp)
/***********************************************************************/
PQRYRES
TDBOTB
::
GetResult
(
PGLOBAL
g
)
{
return
ODBCTables
(
g
,
Dsn
,
Schema
,
Tab
,
Maxres
,
false
,
&
Ops
);
return
ODBCTables
(
g
,
Dsn
,
Schema
,
Tab
,
Tabtyp
,
Maxres
,
false
,
&
Ops
);
}
// end of GetResult
/* ---------------------------TDBOCL class --------------------------- */
/***********************************************************************/
/* TDBOCL class constructor. */
/***********************************************************************/
TDBOCL
::
TDBOCL
(
PODEF
tdp
)
:
TDBOTB
(
tdp
)
{
Colpat
=
tdp
->
Colpat
;
}
// end of TDBOTB constructor
/***********************************************************************/
/* GetResult: Get the list of ODBC table columns. */
/***********************************************************************/
PQRYRES
TDBOCL
::
GetResult
(
PGLOBAL
g
)
{
return
ODBCColumns
(
g
,
Dsn
,
Schema
,
Tab
,
NULL
,
Maxres
,
false
,
&
Ops
);
return
ODBCColumns
(
g
,
Dsn
,
Schema
,
Tab
,
Colpat
,
Maxres
,
false
,
&
Ops
);
}
// end of GetResult
/* ------------------------ End of Tabodbc --------------------------- */
This diff is collapsed.
Click to expand it.
storage/connect/tabodbc.h
View file @
2bd94951
...
...
@@ -25,7 +25,8 @@ class DllExport ODBCDEF : public TABDEF { /* Logical table description */
friend
class
TDBXDBC
;
friend
class
TDBDRV
;
friend
class
TDBOTB
;
public:
friend
class
TDBOCL
;
public:
// Constructor
ODBCDEF
(
void
);
...
...
@@ -54,6 +55,8 @@ class DllExport ODBCDEF : public TABDEF { /* Logical table description */
PSZ
Username
;
/* User connect name */
PSZ
Password
;
/* Password connect info */
PSZ
Tabcat
;
/* External table catalog */
PSZ
Tabtyp
;
/* Catalog table type */
PSZ
Colpat
;
/* Catalog column pattern */
PSZ
Srcdef
;
/* The source table SQL definition */
PSZ
Qchar
;
/* Identifier quoting character */
PSZ
Qrystr
;
/* The original query */
...
...
@@ -326,6 +329,7 @@ class TDBOTB : public TDBDRV {
char
*
Dsn
;
// Points to connection string
char
*
Schema
;
// Points to schema name or NULL
char
*
Tab
;
// Points to ODBC table name or pattern
char
*
Tabtyp
;
// Points to ODBC table type
ODBCPARM
Ops
;
// Additional parameters
};
// end of class TDBOTB
...
...
@@ -335,13 +339,14 @@ class TDBOTB : public TDBDRV {
class
TDBOCL
:
public
TDBOTB
{
public:
// Constructor
TDBOCL
(
PODEF
tdp
)
:
TDBOTB
(
tdp
)
{}
TDBOCL
(
PODEF
tdp
);
protected:
// Specific routines
virtual
PQRYRES
GetResult
(
PGLOBAL
g
);
// No additional Members
// Members
char
*
Colpat
;
// Points to column pattern
};
// end of class TDBOCL
#endif // !NODBC
This diff is collapsed.
Click to expand it.
storage/connect/xindex.cpp
View file @
2bd94951
...
...
@@ -1198,7 +1198,7 @@ bool XINDEX::MapInit(PGLOBAL g)
const
char
*
ftype
;
BYTE
*
mbase
;
char
fn
[
_MAX_PATH
];
int
*
nv
,
k
,
n
,
id
=
-
1
;
int
*
nv
,
nv0
,
k
,
n
,
id
=
-
1
;
bool
estim
;
PCOL
colp
;
PXCOL
prev
=
NULL
,
kcp
=
NULL
;
...
...
@@ -1288,25 +1288,26 @@ bool XINDEX::MapInit(PGLOBAL g)
if
(
nv
[
0
]
>=
MAX_INDX
)
{
// New index format
Srtd
=
nv
[
7
]
!=
0
;
nv
[
0
]
-=
MAX_INDX
;
nv
0
=
nv
[
0
]
-
MAX_INDX
;
mbase
+=
NZ
*
sizeof
(
int
);
}
else
{
Srtd
=
false
;
mbase
+=
(
NZ
-
1
)
*
sizeof
(
int
);
nv0
=
nv
[
0
];
}
// endif nv
if
(
trace
)
htrc
(
"nv=%d %d %d %d %d %d %d %d
\n
"
,
nv
[
0
]
,
nv
[
1
],
nv
[
2
],
nv
[
3
],
nv
[
4
],
nv
[
5
],
nv
[
6
],
Srtd
);
nv
0
,
nv
[
1
],
nv
[
2
],
nv
[
3
],
nv
[
4
],
nv
[
5
],
nv
[
6
],
Srtd
);
// The test on ID was suppressed because MariaDB can change an index ID
// when other indexes are added or deleted
if
(
/*nv
[0]
!= ID ||*/
nv
[
1
]
!=
Nk
)
{
if
(
/*nv
0
!= ID ||*/
nv
[
1
]
!=
Nk
)
{
// Not this index
sprintf
(
g
->
Message
,
MSG
(
BAD_INDEX_FILE
),
fn
);
if
(
trace
)
htrc
(
"nv
[0]=%d ID=%d nv[1]=%d Nk=%d
\n
"
,
nv
[
0
]
,
ID
,
nv
[
1
],
Nk
);
htrc
(
"nv
0=%d ID=%d nv[1]=%d Nk=%d
\n
"
,
nv0
,
ID
,
nv
[
1
],
Nk
);
goto
err
;
}
// endif nv
...
...
This diff is collapsed.
Click to expand it.
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