commit
14ae9b62f9
|
@ -52,7 +52,6 @@ public class TSDBConnection implements Connection {
|
||||||
|
|
||||||
public TSDBConnection(Properties info, TSDBDatabaseMetaData meta) throws SQLException {
|
public TSDBConnection(Properties info, TSDBDatabaseMetaData meta) throws SQLException {
|
||||||
this.dbMetaData = meta;
|
this.dbMetaData = meta;
|
||||||
|
|
||||||
connect(info.getProperty(TSDBDriver.PROPERTY_KEY_HOST),
|
connect(info.getProperty(TSDBDriver.PROPERTY_KEY_HOST),
|
||||||
Integer.parseInt(info.getProperty(TSDBDriver.PROPERTY_KEY_PORT, "0")),
|
Integer.parseInt(info.getProperty(TSDBDriver.PROPERTY_KEY_PORT, "0")),
|
||||||
info.getProperty(TSDBDriver.PROPERTY_KEY_DBNAME), info.getProperty(TSDBDriver.PROPERTY_KEY_USER),
|
info.getProperty(TSDBDriver.PROPERTY_KEY_DBNAME), info.getProperty(TSDBDriver.PROPERTY_KEY_USER),
|
||||||
|
@ -197,12 +196,13 @@ public class TSDBConnection implements Connection {
|
||||||
}
|
}
|
||||||
|
|
||||||
public SQLWarning getWarnings() throws SQLException {
|
public SQLWarning getWarnings() throws SQLException {
|
||||||
|
//todo: implement getWarnings according to the warning messages returned from TDengine
|
||||||
throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
|
throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clearWarnings() throws SQLException {
|
public void clearWarnings() throws SQLException {
|
||||||
// left blank to support HikariCP connection
|
// left blank to support HikariCP connection
|
||||||
//todo: implement getWarnings according to the warning messages returned from TDengine
|
//todo: implement clearWarnings according to the warning messages returned from TDengine
|
||||||
}
|
}
|
||||||
|
|
||||||
public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException {
|
public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException {
|
||||||
|
|
|
@ -96,7 +96,7 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDriverMajorVersion() {
|
public int getDriverMajorVersion() {
|
||||||
return 0;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDriverMinorVersion() {
|
public int getDriverMinorVersion() {
|
||||||
|
|
|
@ -14,13 +14,9 @@
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
package com.taosdata.jdbc;
|
package com.taosdata.jdbc;
|
||||||
|
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Properties;
|
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -44,76 +40,53 @@ import java.util.logging.Logger;
|
||||||
*/
|
*/
|
||||||
public class TSDBDriver implements java.sql.Driver {
|
public class TSDBDriver implements java.sql.Driver {
|
||||||
|
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
private static final String URL_PREFIX1 = "jdbc:TSDB://";
|
private static final String URL_PREFIX1 = "jdbc:TSDB://";
|
||||||
|
|
||||||
private static final String URL_PREFIX = "jdbc:TAOS://";
|
private static final String URL_PREFIX = "jdbc:TAOS://";
|
||||||
|
|
||||||
/**
|
|
||||||
* Key used to retrieve the database value from the properties instance passed
|
|
||||||
* to the driver.
|
|
||||||
*/
|
|
||||||
public static final String PROPERTY_KEY_DBNAME = "dbname";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Key used to retrieve the host value from the properties instance passed to
|
* Key used to retrieve the host value from the properties instance passed to
|
||||||
* the driver.
|
* the driver.
|
||||||
*/
|
*/
|
||||||
public static final String PROPERTY_KEY_HOST = "host";
|
public static final String PROPERTY_KEY_HOST = "host";
|
||||||
/**
|
|
||||||
* Key used to retrieve the password value from the properties instance passed
|
|
||||||
* to the driver.
|
|
||||||
*/
|
|
||||||
public static final String PROPERTY_KEY_PASSWORD = "password";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Key used to retrieve the port number value from the properties instance
|
* Key used to retrieve the port number value from the properties instance
|
||||||
* passed to the driver.
|
* passed to the driver.
|
||||||
*/
|
*/
|
||||||
public static final String PROPERTY_KEY_PORT = "port";
|
public static final String PROPERTY_KEY_PORT = "port";
|
||||||
|
/**
|
||||||
|
* Key used to retrieve the database value from the properties instance passed
|
||||||
|
* to the driver.
|
||||||
|
*/
|
||||||
|
public static final String PROPERTY_KEY_DBNAME = "dbname";
|
||||||
/**
|
/**
|
||||||
* Key used to retrieve the user value from the properties instance passed to
|
* Key used to retrieve the user value from the properties instance passed to
|
||||||
* the driver.
|
* the driver.
|
||||||
*/
|
*/
|
||||||
public static final String PROPERTY_KEY_USER = "user";
|
public static final String PROPERTY_KEY_USER = "user";
|
||||||
|
/**
|
||||||
|
* Key used to retrieve the password value from the properties instance passed
|
||||||
|
* to the driver.
|
||||||
|
*/
|
||||||
|
public static final String PROPERTY_KEY_PASSWORD = "password";
|
||||||
/**
|
/**
|
||||||
* Key for the configuration file directory of TSDB client in properties instance
|
* Key for the configuration file directory of TSDB client in properties instance
|
||||||
*/
|
*/
|
||||||
public static final String PROPERTY_KEY_CONFIG_DIR = "cfgdir";
|
public static final String PROPERTY_KEY_CONFIG_DIR = "cfgdir";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Key for the timezone used by the TSDB client in properties instance
|
* Key for the timezone used by the TSDB client in properties instance
|
||||||
*/
|
*/
|
||||||
public static final String PROPERTY_KEY_TIME_ZONE = "timezone";
|
public static final String PROPERTY_KEY_TIME_ZONE = "timezone";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Key for the locale used by the TSDB client in properties instance
|
* Key for the locale used by the TSDB client in properties instance
|
||||||
*/
|
*/
|
||||||
public static final String PROPERTY_KEY_LOCALE = "locale";
|
public static final String PROPERTY_KEY_LOCALE = "locale";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Key for the char encoding used by the TSDB client in properties instance
|
* Key for the char encoding used by the TSDB client in properties instance
|
||||||
*/
|
*/
|
||||||
public static final String PROPERTY_KEY_CHARSET = "charset";
|
public static final String PROPERTY_KEY_CHARSET = "charset";
|
||||||
|
|
||||||
public static final String PROPERTY_KEY_PROTOCOL = "protocol";
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Index for port coming out of parseHostPortPair().
|
|
||||||
*/
|
|
||||||
public final static int PORT_NUMBER_INDEX = 1;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Index for host coming out of parseHostPortPair().
|
|
||||||
*/
|
|
||||||
public final static int HOST_NAME_INDEX = 0;
|
|
||||||
|
|
||||||
private TSDBDatabaseMetaData dbMetaData = null;
|
private TSDBDatabaseMetaData dbMetaData = null;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
@ -169,9 +142,11 @@ public class TSDBDriver implements java.sql.Driver {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Connection connect(String url, Properties info) throws SQLException {
|
public Connection connect(String url, Properties info) throws SQLException {
|
||||||
if (url == null) {
|
if (url == null)
|
||||||
throw new SQLException(TSDBConstants.WrapErrMsg("url is not set!"));
|
throw new SQLException(TSDBConstants.WrapErrMsg("url is not set!"));
|
||||||
}
|
|
||||||
|
if (!acceptsURL(url))
|
||||||
|
return null;
|
||||||
|
|
||||||
Properties props = null;
|
Properties props = null;
|
||||||
if ((props = parseURL(url, info)) == null) {
|
if ((props = parseURL(url, info)) == null) {
|
||||||
|
@ -179,7 +154,10 @@ public class TSDBDriver implements java.sql.Driver {
|
||||||
}
|
}
|
||||||
|
|
||||||
//load taos.cfg start
|
//load taos.cfg start
|
||||||
if (info.getProperty(TSDBDriver.PROPERTY_KEY_HOST) == null && info.getProperty(TSDBDriver.PROPERTY_KEY_PORT) == null) {
|
if ((info.getProperty(TSDBDriver.PROPERTY_KEY_HOST) == null ||
|
||||||
|
info.getProperty(TSDBDriver.PROPERTY_KEY_HOST).isEmpty()) && (
|
||||||
|
info.getProperty(TSDBDriver.PROPERTY_KEY_PORT) == null ||
|
||||||
|
info.getProperty(TSDBDriver.PROPERTY_KEY_PORT).isEmpty())) {
|
||||||
File cfgDir = loadConfigDir(info.getProperty(TSDBDriver.PROPERTY_KEY_CONFIG_DIR));
|
File cfgDir = loadConfigDir(info.getProperty(TSDBDriver.PROPERTY_KEY_CONFIG_DIR));
|
||||||
File cfgFile = cfgDir.listFiles((dir, name) -> "taos.cfg".equalsIgnoreCase(name))[0];
|
File cfgFile = cfgDir.listFiles((dir, name) -> "taos.cfg".equalsIgnoreCase(name))[0];
|
||||||
List<String> endpoints = loadConfigEndpoints(cfgFile);
|
List<String> endpoints = loadConfigEndpoints(cfgFile);
|
||||||
|
@ -190,7 +168,9 @@ public class TSDBDriver implements java.sql.Driver {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
TSDBJNIConnector.init((String) props.get(PROPERTY_KEY_CONFIG_DIR), (String) props.get(PROPERTY_KEY_LOCALE), (String) props.get(PROPERTY_KEY_CHARSET),
|
TSDBJNIConnector.init((String) props.get(PROPERTY_KEY_CONFIG_DIR),
|
||||||
|
(String) props.get(PROPERTY_KEY_LOCALE),
|
||||||
|
(String) props.get(PROPERTY_KEY_CHARSET),
|
||||||
(String) props.get(PROPERTY_KEY_TIME_ZONE));
|
(String) props.get(PROPERTY_KEY_TIME_ZONE));
|
||||||
Connection newConn = new TSDBConnection(props, this.dbMetaData);
|
Connection newConn = new TSDBConnection(props, this.dbMetaData);
|
||||||
return newConn;
|
return newConn;
|
||||||
|
@ -208,43 +188,15 @@ public class TSDBDriver implements java.sql.Driver {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses hostPortPair in the form of [host][:port] into an array, with the
|
* @param url the URL of the database
|
||||||
* element of index HOST_NAME_INDEX being the host (or null if not specified),
|
* @return <code>true</code> if this driver understands the given URL;
|
||||||
* and the element of index PORT_NUMBER_INDEX being the port (or null if not
|
* <code>false</code> otherwise
|
||||||
* specified).
|
* @throws SQLException if a database access error occurs or the url is {@code null}
|
||||||
*
|
|
||||||
* @param hostPortPair host and port in form of of [host][:port]
|
|
||||||
* @return array containing host and port as Strings
|
|
||||||
* @throws SQLException if a parse error occurs
|
|
||||||
*/
|
*/
|
||||||
protected static String[] parseHostPortPair(String hostPortPair) throws SQLException {
|
|
||||||
String[] splitValues = new String[2];
|
|
||||||
|
|
||||||
int portIndex = hostPortPair.indexOf(":");
|
|
||||||
|
|
||||||
String hostname = null;
|
|
||||||
|
|
||||||
if (portIndex != -1) {
|
|
||||||
if ((portIndex + 1) < hostPortPair.length()) {
|
|
||||||
String portAsString = hostPortPair.substring(portIndex + 1);
|
|
||||||
hostname = hostPortPair.substring(0, portIndex);
|
|
||||||
|
|
||||||
splitValues[HOST_NAME_INDEX] = hostname;
|
|
||||||
|
|
||||||
splitValues[PORT_NUMBER_INDEX] = portAsString;
|
|
||||||
} else {
|
|
||||||
throw new SQLException(TSDBConstants.WrapErrMsg("port is not proper!"));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
splitValues[HOST_NAME_INDEX] = hostPortPair;
|
|
||||||
splitValues[PORT_NUMBER_INDEX] = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return splitValues;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean acceptsURL(String url) throws SQLException {
|
public boolean acceptsURL(String url) throws SQLException {
|
||||||
return (url != null && url.length() > 0 && url.trim().length() > 0) && url.startsWith(URL_PREFIX);
|
if (url == null)
|
||||||
|
throw new SQLException(TSDBConstants.WrapErrMsg("url is null"));
|
||||||
|
return (url != null && url.length() > 0 && url.trim().length() > 0) && (url.startsWith(URL_PREFIX) || url.startsWith(URL_PREFIX1));
|
||||||
}
|
}
|
||||||
|
|
||||||
public DriverPropertyInfo[] getPropertyInfo(String url, Properties info) throws SQLException {
|
public DriverPropertyInfo[] getPropertyInfo(String url, Properties info) throws SQLException {
|
||||||
|
@ -252,15 +204,17 @@ public class TSDBDriver implements java.sql.Driver {
|
||||||
info = new Properties();
|
info = new Properties();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((url != null) && (url.startsWith(URL_PREFIX) || url.startsWith(URL_PREFIX1))) {
|
if (acceptsURL(url)) {
|
||||||
info = parseURL(url, info);
|
info = parseURL(url, info);
|
||||||
}
|
}
|
||||||
|
|
||||||
DriverPropertyInfo hostProp = new DriverPropertyInfo(PROPERTY_KEY_HOST, info.getProperty(PROPERTY_KEY_HOST));
|
DriverPropertyInfo hostProp = new DriverPropertyInfo(PROPERTY_KEY_HOST, info.getProperty(PROPERTY_KEY_HOST));
|
||||||
hostProp.required = true;
|
hostProp.required = false;
|
||||||
|
hostProp.description = "Hostname";
|
||||||
|
|
||||||
DriverPropertyInfo portProp = new DriverPropertyInfo(PROPERTY_KEY_PORT, info.getProperty(PROPERTY_KEY_PORT, TSDBConstants.DEFAULT_PORT));
|
DriverPropertyInfo portProp = new DriverPropertyInfo(PROPERTY_KEY_PORT, info.getProperty(PROPERTY_KEY_PORT, TSDBConstants.DEFAULT_PORT));
|
||||||
portProp.required = false;
|
portProp.required = false;
|
||||||
|
portProp.description = "Port";
|
||||||
|
|
||||||
DriverPropertyInfo dbProp = new DriverPropertyInfo(PROPERTY_KEY_DBNAME, info.getProperty(PROPERTY_KEY_DBNAME));
|
DriverPropertyInfo dbProp = new DriverPropertyInfo(PROPERTY_KEY_DBNAME, info.getProperty(PROPERTY_KEY_DBNAME));
|
||||||
dbProp.required = false;
|
dbProp.required = false;
|
||||||
|
@ -268,9 +222,11 @@ public class TSDBDriver implements java.sql.Driver {
|
||||||
|
|
||||||
DriverPropertyInfo userProp = new DriverPropertyInfo(PROPERTY_KEY_USER, info.getProperty(PROPERTY_KEY_USER));
|
DriverPropertyInfo userProp = new DriverPropertyInfo(PROPERTY_KEY_USER, info.getProperty(PROPERTY_KEY_USER));
|
||||||
userProp.required = true;
|
userProp.required = true;
|
||||||
|
userProp.description = "User";
|
||||||
|
|
||||||
DriverPropertyInfo passwordProp = new DriverPropertyInfo(PROPERTY_KEY_PASSWORD, info.getProperty(PROPERTY_KEY_PASSWORD));
|
DriverPropertyInfo passwordProp = new DriverPropertyInfo(PROPERTY_KEY_PASSWORD, info.getProperty(PROPERTY_KEY_PASSWORD));
|
||||||
passwordProp.required = true;
|
passwordProp.required = true;
|
||||||
|
passwordProp.description = "Password";
|
||||||
|
|
||||||
DriverPropertyInfo[] propertyInfo = new DriverPropertyInfo[5];
|
DriverPropertyInfo[] propertyInfo = new DriverPropertyInfo[5];
|
||||||
propertyInfo[0] = hostProp;
|
propertyInfo[0] = hostProp;
|
||||||
|
@ -283,20 +239,68 @@ public class TSDBDriver implements java.sql.Driver {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* example: jdbc:TSDB://127.0.0.1:0/db?user=root&password=your_password
|
* example: jdbc:TAOS://127.0.0.1:0/db?user=root&password=your_password
|
||||||
*/
|
*/
|
||||||
public Properties parseURL(String url, Properties defaults) throws java.sql.SQLException {
|
public Properties parseURL(String url, Properties defaults) {
|
||||||
Properties urlProps = (defaults != null) ? defaults : new Properties();
|
Properties urlProps = (defaults != null) ? defaults : new Properties();
|
||||||
if (url == null) {
|
if (url == null || url.length() <= 0 || url.trim().length() <= 0)
|
||||||
return null;
|
return null;
|
||||||
}
|
if (!url.startsWith(URL_PREFIX) && !url.startsWith(URL_PREFIX1))
|
||||||
|
|
||||||
if (!url.startsWith(URL_PREFIX) && !url.startsWith(URL_PREFIX1)) {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
|
||||||
|
|
||||||
|
// parse properties
|
||||||
String urlForMeta = url;
|
String urlForMeta = url;
|
||||||
|
int beginningOfSlashes = url.indexOf("//");
|
||||||
|
int index = url.indexOf("?");
|
||||||
|
if (index != -1) {
|
||||||
|
String paramString = url.substring(index + 1, url.length());
|
||||||
|
url = url.substring(0, index);
|
||||||
|
StringTokenizer queryParams = new StringTokenizer(paramString, "&");
|
||||||
|
while (queryParams.hasMoreElements()) {
|
||||||
|
String parameterValuePair = queryParams.nextToken();
|
||||||
|
int indexOfEqual = parameterValuePair.indexOf("=");
|
||||||
|
String parameter = null;
|
||||||
|
String value = null;
|
||||||
|
if (indexOfEqual != -1) {
|
||||||
|
parameter = parameterValuePair.substring(0, indexOfEqual);
|
||||||
|
if (indexOfEqual + 1 < parameterValuePair.length()) {
|
||||||
|
value = parameterValuePair.substring(indexOfEqual + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((value != null && value.length() > 0) && (parameter != null && parameter.length() > 0)) {
|
||||||
|
urlProps.setProperty(parameter, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// parse Product Name
|
||||||
|
String dbProductName = url.substring(0, beginningOfSlashes);
|
||||||
|
dbProductName = dbProductName.substring(dbProductName.indexOf(":") + 1);
|
||||||
|
dbProductName = dbProductName.substring(0, dbProductName.indexOf(":"));
|
||||||
|
// parse dbname
|
||||||
|
url = url.substring(beginningOfSlashes + 2);
|
||||||
|
int indexOfSlash = url.indexOf("/");
|
||||||
|
if (indexOfSlash != -1) {
|
||||||
|
if (indexOfSlash + 1 < url.length()) {
|
||||||
|
urlProps.setProperty(TSDBDriver.PROPERTY_KEY_DBNAME, url.substring(indexOfSlash + 1));
|
||||||
|
}
|
||||||
|
url = url.substring(0, indexOfSlash);
|
||||||
|
}
|
||||||
|
// parse port
|
||||||
|
int indexOfColon = url.indexOf(":");
|
||||||
|
if (indexOfColon != -1) {
|
||||||
|
if (indexOfColon + 1 < url.length()) {
|
||||||
|
urlProps.setProperty(TSDBDriver.PROPERTY_KEY_PORT, url.substring(indexOfColon + 1));
|
||||||
|
}
|
||||||
|
url = url.substring(0, indexOfColon);
|
||||||
|
}
|
||||||
|
if (url != null && url.length() > 0 && url.trim().length() > 0) {
|
||||||
|
urlProps.setProperty(TSDBDriver.PROPERTY_KEY_HOST, url);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.dbMetaData = new TSDBDatabaseMetaData(dbProductName, urlForMeta, urlProps.getProperty(TSDBDriver.PROPERTY_KEY_USER));
|
||||||
|
|
||||||
|
/*
|
||||||
|
String urlForMeta = url;
|
||||||
String dbProductName = url.substring(url.indexOf(":") + 1);
|
String dbProductName = url.substring(url.indexOf(":") + 1);
|
||||||
dbProductName = dbProductName.substring(0, dbProductName.indexOf(":"));
|
dbProductName = dbProductName.substring(0, dbProductName.indexOf(":"));
|
||||||
int beginningOfSlashes = url.indexOf("//");
|
int beginningOfSlashes = url.indexOf("//");
|
||||||
|
@ -345,11 +349,11 @@ public class TSDBDriver implements java.sql.Driver {
|
||||||
|
|
||||||
user = urlProps.getProperty(PROPERTY_KEY_USER).toString();
|
user = urlProps.getProperty(PROPERTY_KEY_USER).toString();
|
||||||
this.dbMetaData = new TSDBDatabaseMetaData(dbProductName, urlForMeta, user);
|
this.dbMetaData = new TSDBDatabaseMetaData(dbProductName, urlForMeta, user);
|
||||||
|
*/
|
||||||
return urlProps;
|
return urlProps;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPropertyValue(Properties property, String[] keyValuePair) {
|
private void setPropertyValue(Properties property, String[] keyValuePair) {
|
||||||
switch (keyValuePair[0].toLowerCase()) {
|
switch (keyValuePair[0].toLowerCase()) {
|
||||||
case PROPERTY_KEY_USER:
|
case PROPERTY_KEY_USER:
|
||||||
property.setProperty(PROPERTY_KEY_USER, keyValuePair[1]);
|
property.setProperty(PROPERTY_KEY_USER, keyValuePair[1]);
|
||||||
|
@ -372,13 +376,12 @@ public class TSDBDriver implements java.sql.Driver {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public int getMajorVersion() {
|
public int getMajorVersion() {
|
||||||
return 1;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getMinorVersion() {
|
public int getMinorVersion() {
|
||||||
return 1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean jdbcCompliant() {
|
public boolean jdbcCompliant() {
|
||||||
|
@ -389,33 +392,4 @@ public class TSDBDriver implements java.sql.Driver {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the host property
|
|
||||||
*
|
|
||||||
* @param props the java.util.Properties instance to retrieve the hostname from.
|
|
||||||
* @return the host
|
|
||||||
*/
|
|
||||||
public String host(Properties props) {
|
|
||||||
return props.getProperty(PROPERTY_KEY_HOST, "localhost");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the port number property
|
|
||||||
*
|
|
||||||
* @param props the properties to get the port number from
|
|
||||||
* @return the port number
|
|
||||||
*/
|
|
||||||
public int port(Properties props) {
|
|
||||||
return Integer.parseInt(props.getProperty(PROPERTY_KEY_PORT, TSDBConstants.DEFAULT_PORT));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the database property from <code>props</code>
|
|
||||||
*
|
|
||||||
* @param props the Properties to look for the database property.
|
|
||||||
* @return the database name.
|
|
||||||
*/
|
|
||||||
public String database(Properties props) {
|
|
||||||
return props.getProperty(PROPERTY_KEY_DBNAME);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,47 +1,210 @@
|
||||||
package com.taosdata.jdbc;
|
package com.taosdata.jdbc;
|
||||||
|
|
||||||
|
import org.junit.BeforeClass;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.sql.SQLException;
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.sql.*;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
public class TSDBDriverTest {
|
public class TSDBDriverTest {
|
||||||
|
|
||||||
@Test
|
private static final String[] validURLs = {
|
||||||
public void urlParserTest() throws SQLException {
|
"jdbc:TAOS://localhost:0",
|
||||||
TSDBDriver driver = new TSDBDriver();
|
"jdbc:TAOS://localhost",
|
||||||
String url = "jdbc:TSDB://127.0.0.1:0/db";
|
"jdbc:TAOS://localhost:6030/test",
|
||||||
|
"jdbc:TAOS://localhost:6030",
|
||||||
|
"jdbc:TAOS://localhost:6030/",
|
||||||
|
"jdbc:TSDB://localhost:6030",
|
||||||
|
"jdbc:TSDB://localhost:6030/",
|
||||||
|
"jdbc:TAOS://127.0.0.1:0/db?user=root&password=taosdata",
|
||||||
|
"jdbc:TAOS://:",
|
||||||
|
"jdbc:TAOS://:/",
|
||||||
|
"jdbc:TAOS://:/test",
|
||||||
|
"jdbc:TAOS://localhost:0/?user=root&password=taosdata"
|
||||||
|
};
|
||||||
|
private static boolean islibLoaded = false;
|
||||||
|
private static boolean isTaosdActived;
|
||||||
|
|
||||||
Properties properties = new Properties();
|
private Connection conn;
|
||||||
driver.parseURL(url, properties);
|
|
||||||
assertEquals(properties.get("host"), "127.0.0.1");
|
|
||||||
assertEquals(properties.get("port"), "0");
|
|
||||||
assertEquals(properties.get("dbname"), "db");
|
|
||||||
assertEquals(properties.get("user"), "root");
|
|
||||||
assertEquals(properties.get("password"), "your_password");
|
|
||||||
|
|
||||||
url = "jdbc:TSDB://127.0.0.1:0/log?charset=UTF-8";
|
@BeforeClass
|
||||||
properties = new Properties();
|
public static void before() {
|
||||||
driver.parseURL(url, properties);
|
String osName = System.getProperty("os.name").toLowerCase();
|
||||||
assertEquals(properties.get("host"), "127.0.0.1");
|
if (!osName.equals("linux"))
|
||||||
assertEquals(properties.get("port"), "0");
|
return;
|
||||||
assertEquals(properties.get("dbname"), "log");
|
// try to load taos lib
|
||||||
assertEquals(properties.get("charset"), "UTF-8");
|
try {
|
||||||
|
System.loadLibrary("taos");
|
||||||
url = "jdbc:TSDB://127.0.0.1:0/";
|
islibLoaded = true;
|
||||||
properties = new Properties();
|
} catch (UnsatisfiedLinkError error) {
|
||||||
driver.parseURL(url, properties);
|
System.out.println("load tdengine lib failed.");
|
||||||
assertEquals(properties.get("host"), "127.0.0.1");
|
error.printStackTrace();
|
||||||
assertEquals(properties.get("port"), "0");
|
|
||||||
assertEquals(properties.get("dbname"), null);
|
|
||||||
|
|
||||||
url = "jdbc:TSDB://127.0.0.1:0/db";
|
|
||||||
properties = new Properties();
|
|
||||||
driver.parseURL(url, properties);
|
|
||||||
assertEquals(properties.get("host"), "127.0.0.1");
|
|
||||||
assertEquals(properties.get("port"), "0");
|
|
||||||
assertEquals(properties.get("dbname"), "db");
|
|
||||||
}
|
}
|
||||||
|
// check taosd is activated
|
||||||
|
try {
|
||||||
|
String[] cmd = {"/bin/bash", "-c", "ps -ef | grep taosd | grep -v \"grep\""};
|
||||||
|
Process exec = Runtime.getRuntime().exec(cmd);
|
||||||
|
BufferedReader reader = new BufferedReader(new InputStreamReader(exec.getInputStream()));
|
||||||
|
int lineCnt = 0;
|
||||||
|
while (reader.readLine() != null) {
|
||||||
|
lineCnt++;
|
||||||
|
}
|
||||||
|
if (lineCnt > 0)
|
||||||
|
isTaosdActived = true;
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Class.forName("com.taosdata.jdbc.TSDBDriver");
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testConnectWithJdbcURL() {
|
||||||
|
final String url = "jdbc:TAOS://localhost:6030/log?user=root&password=taosdata";
|
||||||
|
try {
|
||||||
|
if (islibLoaded && isTaosdActived) {
|
||||||
|
conn = DriverManager.getConnection(url);
|
||||||
|
assertNotNull("failure - connection should not be null", conn);
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
fail("failure - should not throw Exception");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testConnectWithProperties() {
|
||||||
|
final String jdbcUrl = "jdbc:TAOS://localhost:6030/log?user=root&password=taosdata";
|
||||||
|
Properties connProps = new Properties();
|
||||||
|
connProps.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
|
||||||
|
connProps.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
|
||||||
|
connProps.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
|
||||||
|
try {
|
||||||
|
if (islibLoaded && isTaosdActived) {
|
||||||
|
conn = DriverManager.getConnection(jdbcUrl, connProps);
|
||||||
|
assertNotNull("failure - connection should not be null", conn);
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
fail("failure - should not throw Exception");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testConnectWithConfigFile() {
|
||||||
|
String jdbcUrl = "jdbc:TAOS://:/log?user=root&password=taosdata";
|
||||||
|
Properties connProps = new Properties();
|
||||||
|
connProps.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
|
||||||
|
connProps.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
|
||||||
|
connProps.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
|
||||||
|
try {
|
||||||
|
if (islibLoaded && isTaosdActived) {
|
||||||
|
conn = DriverManager.getConnection(jdbcUrl, connProps);
|
||||||
|
assertNotNull("failure - connection should not be null", conn);
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
fail("failure - should not throw Exception");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = SQLException.class)
|
||||||
|
public void testAcceptsURL() throws SQLException {
|
||||||
|
Driver driver = new TSDBDriver();
|
||||||
|
for (String url : validURLs) {
|
||||||
|
assertTrue("failure - acceptsURL(\" " + url + " \") should be true", driver.acceptsURL(url));
|
||||||
|
}
|
||||||
|
driver.acceptsURL(null);
|
||||||
|
fail("acceptsURL throws exception when parameter is null");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testParseURL() {
|
||||||
|
TSDBDriver driver = new TSDBDriver();
|
||||||
|
|
||||||
|
String url = "jdbc:TAOS://127.0.0.1:0/db?user=root&password=taosdata&charset=UTF-8";
|
||||||
|
Properties config = new Properties();
|
||||||
|
Properties actual = driver.parseURL(url, config);
|
||||||
|
assertEquals("failure - host should be 127.0.0.1", "127.0.0.1", actual.get("host"));
|
||||||
|
assertEquals("failure - port should be 0", "0", actual.get("port"));
|
||||||
|
assertEquals("failure - dbname should be db", "db", actual.get("dbname"));
|
||||||
|
assertEquals("failure - user should be root", "root", actual.get("user"));
|
||||||
|
assertEquals("failure - password should be taosdata", "taosdata", actual.get("password"));
|
||||||
|
assertEquals("failure - charset should be UTF-8", "UTF-8", actual.get("charset"));
|
||||||
|
|
||||||
|
url = "jdbc:TAOS://127.0.0.1:0";
|
||||||
|
config = new Properties();
|
||||||
|
actual = driver.parseURL(url, config);
|
||||||
|
assertEquals("failure - host should be 127.0.0.1", "127.0.0.1", actual.getProperty("host"));
|
||||||
|
assertEquals("failure - port should be 0", "0", actual.get("port"));
|
||||||
|
assertNull("failure - dbname should be null", actual.get("dbname"));
|
||||||
|
|
||||||
|
url = "jdbc:TAOS://127.0.0.1:0/db";
|
||||||
|
config = new Properties();
|
||||||
|
actual = driver.parseURL(url, config);
|
||||||
|
assertEquals("failure - host should be 127.0.0.1", "127.0.0.1", actual.getProperty("host"));
|
||||||
|
assertEquals("failure - port should be 0", "0", actual.get("port"));
|
||||||
|
assertEquals("failure - dbname should be db", "db", actual.get("dbname"));
|
||||||
|
|
||||||
|
url = "jdbc:TAOS://:/?";
|
||||||
|
config = new Properties();
|
||||||
|
config.setProperty(TSDBDriver.PROPERTY_KEY_USER, "root");
|
||||||
|
config.setProperty(TSDBDriver.PROPERTY_KEY_PASSWORD, "taosdata");
|
||||||
|
actual = driver.parseURL(url, config);
|
||||||
|
assertEquals("failure - user should be root", "root", actual.getProperty("user"));
|
||||||
|
assertEquals("failure - password should be taosdata", "taosdata", actual.getProperty("password"));
|
||||||
|
assertNull("failure - host should be null", actual.getProperty("host"));
|
||||||
|
assertNull("failure - port should be null", actual.getProperty("port"));
|
||||||
|
assertNull("failure - dbname should be null", actual.getProperty("dbname"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetPropertyInfo() throws SQLException {
|
||||||
|
Driver driver = new TSDBDriver();
|
||||||
|
final String url = "jdbc:TAOS://localhost:6030/log?user=root&password=taosdata";
|
||||||
|
Properties connProps = new Properties();
|
||||||
|
DriverPropertyInfo[] propertyInfo = driver.getPropertyInfo(url, connProps);
|
||||||
|
for (DriverPropertyInfo info : propertyInfo) {
|
||||||
|
if (info.name.equals(TSDBDriver.PROPERTY_KEY_HOST))
|
||||||
|
assertEquals("failure - host should be localhost", "localhost", info.value);
|
||||||
|
if (info.name.equals(TSDBDriver.PROPERTY_KEY_PORT))
|
||||||
|
assertEquals("failure - port should be 6030", "6030", info.value);
|
||||||
|
if (info.name.equals(TSDBDriver.PROPERTY_KEY_DBNAME))
|
||||||
|
assertEquals("failure - dbname should be test", "log", info.value);
|
||||||
|
if (info.name.equals(TSDBDriver.PROPERTY_KEY_USER))
|
||||||
|
assertEquals("failure - user should be root", "root", info.value);
|
||||||
|
if (info.name.equals(TSDBDriver.PROPERTY_KEY_PASSWORD))
|
||||||
|
assertEquals("failure - password should be root", "taosdata", info.value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetMajorVersion() {
|
||||||
|
assertEquals("failure - getMajorVersion should be 2", 2, new TSDBDriver().getMajorVersion());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetMinorVersion() {
|
||||||
|
assertEquals("failure - getMinorVersion should be 0", 0, new TSDBDriver().getMinorVersion());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testJdbcCompliant() {
|
||||||
|
assertFalse("failure - jdbcCompliant should be false", new TSDBDriver().jdbcCompliant());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetParentLogger() throws SQLFeatureNotSupportedException {
|
||||||
|
assertNull("failure - getParentLogger should be be null", new TSDBDriver().getParentLogger());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue