Fix/td 4148 (#6122)
* [TD-4148]<feature>: JDBC-Restful Compatible version before 2.0.18.0 * [TD-4174]<test>: add test case for TD-4174 * change * change * change * change * change
This commit is contained in:
parent
3858dcb6d0
commit
5d4b05ecd1
|
@ -30,6 +30,7 @@ public abstract class TSDBConstants {
|
|||
public static final int JNI_FETCH_END = -6;
|
||||
public static final int JNI_OUT_OF_MEMORY = -7;
|
||||
// TSDB Data Types
|
||||
public static final int TSDB_DATA_TYPE_NULL = 0;
|
||||
public static final int TSDB_DATA_TYPE_BOOL = 1;
|
||||
public static final int TSDB_DATA_TYPE_TINYINT = 2;
|
||||
public static final int TSDB_DATA_TYPE_SMALLINT = 3;
|
||||
|
|
|
@ -6,11 +6,13 @@ import com.google.common.primitives.Ints;
|
|||
import com.google.common.primitives.Longs;
|
||||
import com.google.common.primitives.Shorts;
|
||||
import com.taosdata.jdbc.*;
|
||||
import com.taosdata.jdbc.utils.Utils;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.sql.*;
|
||||
import java.time.Instant;
|
||||
import java.time.ZoneOffset;
|
||||
import java.time.format.DateTimeParseException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
|
||||
|
@ -18,14 +20,13 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
|||
private volatile boolean isClosed;
|
||||
private int pos = -1;
|
||||
|
||||
|
||||
private final String database;
|
||||
private final Statement statement;
|
||||
// data
|
||||
private final ArrayList<ArrayList<Object>> resultSet;
|
||||
private final ArrayList<ArrayList<Object>> resultSet = new ArrayList<>();
|
||||
// meta
|
||||
private ArrayList<String> columnNames;
|
||||
private ArrayList<Field> columns;
|
||||
private ArrayList<String> columnNames = new ArrayList<>();
|
||||
private ArrayList<Field> columns = new ArrayList<>();
|
||||
private RestfulResultSetMetaData metaData;
|
||||
|
||||
/**
|
||||
|
@ -37,10 +38,46 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
|||
this.database = database;
|
||||
this.statement = statement;
|
||||
|
||||
// column metadata
|
||||
// get column metadata
|
||||
JSONArray columnMeta = resultJson.getJSONArray("column_meta");
|
||||
columnNames = new ArrayList<>();
|
||||
columns = new ArrayList<>();
|
||||
// get row data
|
||||
JSONArray data = resultJson.getJSONArray("data");
|
||||
if (data == null || data.isEmpty()) {
|
||||
columnNames.clear();
|
||||
columns.clear();
|
||||
this.resultSet.clear();
|
||||
return;
|
||||
}
|
||||
// get head
|
||||
JSONArray head = resultJson.getJSONArray("head");
|
||||
// get rows
|
||||
Integer rows = resultJson.getInteger("rows");
|
||||
// parse column_meta
|
||||
if (columnMeta != null) {
|
||||
parseColumnMeta_new(columnMeta);
|
||||
} else {
|
||||
parseColumnMeta_old(head, data, rows);
|
||||
}
|
||||
this.metaData = new RestfulResultSetMetaData(this.database, columns, this);
|
||||
// parse row data
|
||||
resultSet.clear();
|
||||
for (int rowIndex = 0; rowIndex < data.size(); rowIndex++) {
|
||||
ArrayList row = new ArrayList();
|
||||
JSONArray jsonRow = data.getJSONArray(rowIndex);
|
||||
for (int colIndex = 0; colIndex < this.metaData.getColumnCount(); colIndex++) {
|
||||
row.add(parseColumnData(jsonRow, colIndex, columns.get(colIndex).taos_type));
|
||||
}
|
||||
resultSet.add(row);
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
* use this method after TDengine-2.0.18.0 to parse column meta, restful add column_meta in resultSet
|
||||
* @Param columnMeta
|
||||
*/
|
||||
private void parseColumnMeta_new(JSONArray columnMeta) throws SQLException {
|
||||
columnNames.clear();
|
||||
columns.clear();
|
||||
for (int colIndex = 0; colIndex < columnMeta.size(); colIndex++) {
|
||||
JSONArray col = columnMeta.getJSONArray(colIndex);
|
||||
String col_name = col.getString(0);
|
||||
|
@ -50,23 +87,55 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
|||
columnNames.add(col_name);
|
||||
columns.add(new Field(col_name, col_type, col_length, "", taos_type));
|
||||
}
|
||||
this.metaData = new RestfulResultSetMetaData(this.database, columns, this);
|
||||
}
|
||||
|
||||
// row data
|
||||
JSONArray data = resultJson.getJSONArray("data");
|
||||
resultSet = new ArrayList<>();
|
||||
for (int rowIndex = 0; rowIndex < data.size(); rowIndex++) {
|
||||
ArrayList row = new ArrayList();
|
||||
JSONArray jsonRow = data.getJSONArray(rowIndex);
|
||||
for (int colIndex = 0; colIndex < jsonRow.size(); colIndex++) {
|
||||
row.add(parseColumnData(jsonRow, colIndex, columns.get(colIndex).taos_type));
|
||||
/**
|
||||
* use this method before TDengine-2.0.18.0 to parse column meta
|
||||
*/
|
||||
private void parseColumnMeta_old(JSONArray head, JSONArray data, int rows) {
|
||||
columnNames.clear();
|
||||
columns.clear();
|
||||
for (int colIndex = 0; colIndex < head.size(); colIndex++) {
|
||||
String col_name = head.getString(colIndex);
|
||||
columnNames.add(col_name);
|
||||
|
||||
int col_type = Types.NULL;
|
||||
int col_length = 0;
|
||||
int taos_type = TSDBConstants.TSDB_DATA_TYPE_NULL;
|
||||
|
||||
JSONArray row0Json = data.getJSONArray(0);
|
||||
if (colIndex < row0Json.size()) {
|
||||
Object value = row0Json.get(colIndex);
|
||||
if (value instanceof Boolean) {
|
||||
col_type = Types.BOOLEAN;
|
||||
col_length = 1;
|
||||
taos_type = TSDBConstants.TSDB_DATA_TYPE_BOOL;
|
||||
}
|
||||
if (value instanceof Byte || value instanceof Short || value instanceof Integer || value instanceof Long) {
|
||||
col_type = Types.BIGINT;
|
||||
col_length = 8;
|
||||
taos_type = TSDBConstants.TSDB_DATA_TYPE_BIGINT;
|
||||
}
|
||||
if (value instanceof Float || value instanceof Double || value instanceof BigDecimal) {
|
||||
col_type = Types.DOUBLE;
|
||||
col_length = 8;
|
||||
taos_type = TSDBConstants.TSDB_DATA_TYPE_DOUBLE;
|
||||
}
|
||||
if (value instanceof String) {
|
||||
col_type = Types.NCHAR;
|
||||
col_length = ((String) value).length();
|
||||
taos_type = TSDBConstants.TSDB_DATA_TYPE_NCHAR;
|
||||
}
|
||||
}
|
||||
resultSet.add(row);
|
||||
columns.add(new Field(col_name, col_type, col_length, "", taos_type));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private Object parseColumnData(JSONArray row, int colIndex, int taosType) throws SQLException {
|
||||
switch (taosType) {
|
||||
case TSDBConstants.TSDB_DATA_TYPE_NULL:
|
||||
return null;
|
||||
case TSDBConstants.TSDB_DATA_TYPE_BOOL:
|
||||
return row.getBoolean(colIndex);
|
||||
case TSDBConstants.TSDB_DATA_TYPE_TINYINT:
|
||||
|
@ -290,8 +359,10 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
|||
return 0;
|
||||
}
|
||||
wasNull = false;
|
||||
if (value instanceof Float || value instanceof Double)
|
||||
if (value instanceof Float)
|
||||
return (float) value;
|
||||
if (value instanceof Double)
|
||||
return new Float((Double) value);
|
||||
return Float.parseFloat(value.toString());
|
||||
}
|
||||
|
||||
|
@ -329,6 +400,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
|||
return Shorts.toByteArray((short) value);
|
||||
if (value instanceof Byte)
|
||||
return new byte[]{(byte) value};
|
||||
if (value instanceof Timestamp) {
|
||||
return Utils.formatTimestamp((Timestamp) value).getBytes();
|
||||
}
|
||||
|
||||
return value.toString().getBytes();
|
||||
}
|
||||
|
@ -342,7 +416,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
|||
return null;
|
||||
if (value instanceof Timestamp)
|
||||
return new Date(((Timestamp) value).getTime());
|
||||
return Date.valueOf(value.toString());
|
||||
Date date = null;
|
||||
date = Utils.parseDate(value.toString());
|
||||
return date;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -354,7 +430,13 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
|||
return null;
|
||||
if (value instanceof Timestamp)
|
||||
return new Time(((Timestamp) value).getTime());
|
||||
return Time.valueOf(value.toString());
|
||||
Time time = null;
|
||||
try {
|
||||
time = Utils.parseTime(value.toString());
|
||||
} catch (DateTimeParseException e) {
|
||||
time = null;
|
||||
}
|
||||
return time;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -366,14 +448,20 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
|||
return null;
|
||||
if (value instanceof Timestamp)
|
||||
return (Timestamp) value;
|
||||
// if (value instanceof Long) {
|
||||
// if (1_0000_0000_0000_0L > (long) value)
|
||||
// return Timestamp.from(Instant.ofEpochMilli((long) value));
|
||||
// long epochSec = (long) value / 1000_000L;
|
||||
// long nanoAdjustment = (long) ((long) value % 1000_000L * 1000);
|
||||
// return Timestamp.from(Instant.ofEpochSecond(epochSec, nanoAdjustment));
|
||||
// }
|
||||
return Timestamp.valueOf(value.toString());
|
||||
if (value instanceof Long) {
|
||||
if (1_0000_0000_0000_0L > (long) value)
|
||||
return Timestamp.from(Instant.ofEpochMilli((long) value));
|
||||
long epochSec = (long) value / 1000_000L;
|
||||
long nanoAdjustment = (long) value % 1000_000L * 1000;
|
||||
return Timestamp.from(Instant.ofEpochSecond(epochSec, nanoAdjustment));
|
||||
}
|
||||
Timestamp ret;
|
||||
try {
|
||||
ret = Utils.parseTimestamp(value.toString());
|
||||
} catch (Exception e) {
|
||||
ret = null;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -415,7 +503,13 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
|||
return new BigDecimal(Double.valueOf(value.toString()));
|
||||
if (value instanceof Timestamp)
|
||||
return new BigDecimal(((Timestamp) value).getTime());
|
||||
return new BigDecimal(value.toString());
|
||||
BigDecimal ret;
|
||||
try {
|
||||
ret = new BigDecimal(value.toString());
|
||||
} catch (Exception e) {
|
||||
ret = null;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
package com.taosdata.jdbc.utils;
|
||||
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.format.DateTimeFormatterBuilder;
|
||||
|
||||
public class UtcTimestampUtil {
|
||||
public static final DateTimeFormatter formatter = new DateTimeFormatterBuilder()
|
||||
.appendPattern("yyyy-MM-ddTHH:mm:ss.SSS+")
|
||||
// .appendFraction(ChronoField.NANO_OF_SECOND, 0, 9, true)
|
||||
.toFormatter();
|
||||
|
||||
}
|
|
@ -5,7 +5,15 @@ import com.google.common.collect.RangeSet;
|
|||
import com.google.common.collect.TreeRangeSet;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
import java.sql.Date;
|
||||
import java.sql.Time;
|
||||
import java.sql.Timestamp;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.format.DateTimeFormatterBuilder;
|
||||
import java.time.format.DateTimeParseException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
|
@ -17,6 +25,41 @@ public class Utils {
|
|||
|
||||
private static Pattern ptn = Pattern.compile(".*?'");
|
||||
|
||||
private static final DateTimeFormatter formatter = new DateTimeFormatterBuilder()
|
||||
.appendPattern("yyyy-MM-dd HH:mm:ss.SSS").toFormatter();
|
||||
private static final DateTimeFormatter formatter2 = new DateTimeFormatterBuilder()
|
||||
.appendPattern("yyyy-MM-dd HH:mm:ss.SSSSSS").toFormatter();
|
||||
|
||||
public static Time parseTime(String timestampStr) throws DateTimeParseException {
|
||||
LocalTime time;
|
||||
try {
|
||||
time = LocalTime.parse(timestampStr, formatter);
|
||||
} catch (DateTimeParseException e) {
|
||||
time = LocalTime.parse(timestampStr, formatter2);
|
||||
}
|
||||
return Time.valueOf(time);
|
||||
}
|
||||
|
||||
public static Date parseDate(String timestampStr) throws DateTimeParseException {
|
||||
LocalDate date;
|
||||
try {
|
||||
date = LocalDate.parse(timestampStr, formatter);
|
||||
} catch (DateTimeParseException e) {
|
||||
date = LocalDate.parse(timestampStr, formatter2);
|
||||
}
|
||||
return Date.valueOf(date);
|
||||
}
|
||||
|
||||
public static Timestamp parseTimestamp(String timeStampStr) {
|
||||
LocalDateTime dateTime;
|
||||
try {
|
||||
dateTime = LocalDateTime.parse(timeStampStr, formatter);
|
||||
} catch (DateTimeParseException e) {
|
||||
dateTime = LocalDateTime.parse(timeStampStr, formatter2);
|
||||
}
|
||||
return Timestamp.valueOf(dateTime);
|
||||
}
|
||||
|
||||
public static String escapeSingleQuota(String origin) {
|
||||
Matcher m = ptn.matcher(origin);
|
||||
StringBuffer sb = new StringBuffer();
|
||||
|
@ -132,4 +175,13 @@ public class Utils {
|
|||
}).collect(Collectors.joining());
|
||||
}
|
||||
|
||||
|
||||
public static String formatTimestamp(Timestamp timestamp) {
|
||||
int nanos = timestamp.getNanos();
|
||||
if (nanos % 1000000l != 0)
|
||||
return timestamp.toLocalDateTime().format(formatter2);
|
||||
return timestamp.toLocalDateTime().format(formatter);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -7,7 +7,6 @@ import java.sql.*;
|
|||
public class InsertSpecialCharacterRestfulTest {
|
||||
|
||||
private static final String host = "127.0.0.1";
|
||||
// private static final String host = "master";
|
||||
private static Connection conn;
|
||||
private static String dbName = "spec_char_test";
|
||||
private static String tbname1 = "test";
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
package com.taosdata.jdbc.cases;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.taosdata.jdbc.TSDBDriver;
|
||||
import org.junit.*;
|
||||
|
||||
import java.sql.*;
|
||||
import java.util.Properties;
|
||||
|
||||
public class TD4174Test {
|
||||
private Connection conn;
|
||||
private static final String host = "127.0.0.1";
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
long ts = System.currentTimeMillis();
|
||||
try (PreparedStatement pstmt = conn.prepareStatement("insert into weather values(" + ts + ", ?)")) {
|
||||
JSONObject value = new JSONObject();
|
||||
value.put("name", "John Smith");
|
||||
value.put("age", 20);
|
||||
Assert.assertEquals("{\"name\":\"John Smith\",\"age\":20}",value.toJSONString());
|
||||
pstmt.setString(1, value.toJSONString());
|
||||
|
||||
int ret = pstmt.executeUpdate();
|
||||
Assert.assertEquals(1, ret);
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
JSONObject value = new JSONObject();
|
||||
value.put("name", "John Smith");
|
||||
value.put("age", 20);
|
||||
System.out.println(value.toJSONString());
|
||||
}
|
||||
|
||||
@Before
|
||||
public void before() throws SQLException {
|
||||
String url = "jdbc:TAOS://" + host + ":6030/?user=root&password=taosdata";
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
|
||||
|
||||
conn = DriverManager.getConnection(url, properties);
|
||||
try (Statement stmt = conn.createStatement()) {
|
||||
stmt.execute("drop database if exists td4174");
|
||||
stmt.execute("create database if not exists td4174");
|
||||
stmt.execute("use td4174");
|
||||
stmt.execute("create table weather(ts timestamp, text binary(64))");
|
||||
}
|
||||
}
|
||||
|
||||
@After
|
||||
public void after() throws SQLException {
|
||||
if (conn != null)
|
||||
conn.close();
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -13,6 +13,7 @@ import java.util.Properties;
|
|||
public class TwoTypeTimestampPercisionInRestfulTest {
|
||||
|
||||
private static final String host = "127.0.0.1";
|
||||
|
||||
private static final String ms_timestamp_db = "ms_precision_test";
|
||||
private static final String us_timestamp_db = "us_precision_test";
|
||||
private static final long timestamp1 = System.currentTimeMillis();
|
||||
|
@ -94,7 +95,8 @@ public class TwoTypeTimestampPercisionInRestfulTest {
|
|||
try (Statement stmt = conn3.createStatement()) {
|
||||
ResultSet rs = stmt.executeQuery("select last_row(ts) from " + ms_timestamp_db + ".weather");
|
||||
rs.next();
|
||||
long ts = rs.getTimestamp(1).getTime();
|
||||
Timestamp actual = rs.getTimestamp(1);
|
||||
long ts = actual == null ? 0 : actual.getTime();
|
||||
Assert.assertEquals(timestamp1, ts);
|
||||
ts = rs.getLong(1);
|
||||
Assert.assertEquals(timestamp1, ts);
|
||||
|
@ -110,7 +112,7 @@ public class TwoTypeTimestampPercisionInRestfulTest {
|
|||
rs.next();
|
||||
|
||||
Timestamp timestamp = rs.getTimestamp(1);
|
||||
long ts = timestamp.getTime();
|
||||
long ts = timestamp == null ? 0 : timestamp.getTime();
|
||||
Assert.assertEquals(timestamp1, ts);
|
||||
int nanos = timestamp.getNanos();
|
||||
Assert.assertEquals(timestamp2 % 1000_000l * 1000, nanos);
|
||||
|
|
|
@ -9,19 +9,19 @@ import java.util.Properties;
|
|||
|
||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||
public class UnsignedNumberJniTest {
|
||||
|
||||
private static final String host = "127.0.0.1";
|
||||
private static Connection conn;
|
||||
private static long ts;
|
||||
|
||||
@Test
|
||||
public void testCase001() {
|
||||
try (Statement stmt = conn.createStatement()) {
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table");
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
assertResultSetMetaData(meta);
|
||||
while (rs.next()) {
|
||||
for (int i = 1; i <= meta.getColumnCount(); i++) {
|
||||
System.out.print(meta.getColumnLabel(i) + ": " + rs.getString(i) + "\t");
|
||||
}
|
||||
System.out.println();
|
||||
Assert.assertEquals(ts, rs.getTimestamp(1).getTime());
|
||||
Assert.assertEquals("127", rs.getString(2));
|
||||
Assert.assertEquals("32767", rs.getString(3));
|
||||
Assert.assertEquals("2147483647", rs.getString(4));
|
||||
|
@ -37,13 +37,10 @@ public class UnsignedNumberJniTest {
|
|||
try (Statement stmt = conn.createStatement()) {
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table");
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
assertResultSetMetaData(meta);
|
||||
|
||||
while (rs.next()) {
|
||||
System.out.print(meta.getColumnLabel(1) + ": " + rs.getTimestamp(1) + "\t");
|
||||
System.out.print(meta.getColumnLabel(2) + ": " + rs.getByte(2) + "\t");
|
||||
System.out.print(meta.getColumnLabel(3) + ": " + rs.getShort(3) + "\t");
|
||||
System.out.print(meta.getColumnLabel(4) + ": " + rs.getInt(4) + "\t");
|
||||
System.out.print(meta.getColumnLabel(5) + ": " + rs.getLong(5) + "\t");
|
||||
System.out.println();
|
||||
Assert.assertEquals(ts, rs.getTimestamp(1).getTime());
|
||||
Assert.assertEquals(127, rs.getByte(2));
|
||||
Assert.assertEquals(32767, rs.getShort(3));
|
||||
Assert.assertEquals(2147483647, rs.getInt(4));
|
||||
|
@ -61,16 +58,14 @@ public class UnsignedNumberJniTest {
|
|||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(" + now + ", 127, 32767,2147483647, 18446744073709551614)");
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table where ts = " + now);
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
assertResultSetMetaData(meta);
|
||||
while (rs.next()) {
|
||||
System.out.print(meta.getColumnLabel(1) + ": " + rs.getTimestamp(1) + "\t");
|
||||
System.out.print(meta.getColumnLabel(2) + ": " + rs.getByte(2) + "\t");
|
||||
System.out.print(meta.getColumnLabel(3) + ": " + rs.getShort(3) + "\t");
|
||||
System.out.print(meta.getColumnLabel(4) + ": " + rs.getInt(4) + "\t");
|
||||
System.out.print(meta.getColumnLabel(5) + ": " + rs.getLong(5) + "\t");
|
||||
System.out.println();
|
||||
Assert.assertEquals(now, rs.getTimestamp(1).getTime());
|
||||
Assert.assertEquals(127, rs.getByte(2));
|
||||
Assert.assertEquals(32767, rs.getShort(3));
|
||||
Assert.assertEquals(2147483647, rs.getInt(4));
|
||||
Assert.assertEquals("18446744073709551614", rs.getString(5));
|
||||
rs.getLong(5);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -82,15 +77,15 @@ public class UnsignedNumberJniTest {
|
|||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(" + now + ", 127, 32767,4294967294, 18446744073709551614)");
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table where ts = " + now);
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
assertResultSetMetaData(meta);
|
||||
|
||||
while (rs.next()) {
|
||||
System.out.print(meta.getColumnLabel(1) + ": " + rs.getTimestamp(1) + "\t");
|
||||
System.out.print(meta.getColumnLabel(2) + ": " + rs.getByte(2) + "\t");
|
||||
System.out.print(meta.getColumnLabel(3) + ": " + rs.getShort(3) + "\t");
|
||||
System.out.print(meta.getColumnLabel(4) + ": " + rs.getInt(4) + "\t");
|
||||
System.out.print(meta.getColumnLabel(5) + ": " + rs.getLong(5) + "\t");
|
||||
System.out.println();
|
||||
Assert.assertEquals(now, rs.getTimestamp(1).getTime());
|
||||
Assert.assertEquals(127, rs.getByte(2));
|
||||
Assert.assertEquals(32767, rs.getShort(3));
|
||||
Assert.assertEquals("4294967294", rs.getString(4));
|
||||
Assert.assertEquals("18446744073709551614", rs.getString(5));
|
||||
rs.getInt(4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -102,15 +97,15 @@ public class UnsignedNumberJniTest {
|
|||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(" + now + ", 127, 65534,4294967294, 18446744073709551614)");
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table where ts = " + now);
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
while (rs.next()) {
|
||||
System.out.print(meta.getColumnLabel(1) + ": " + rs.getTimestamp(1) + "\t");
|
||||
System.out.print(meta.getColumnLabel(2) + ": " + rs.getByte(2) + "\t");
|
||||
System.out.print(meta.getColumnLabel(3) + ": " + rs.getShort(3) + "\t");
|
||||
System.out.print(meta.getColumnLabel(4) + ": " + rs.getInt(4) + "\t");
|
||||
System.out.print(meta.getColumnLabel(5) + ": " + rs.getLong(5) + "\t");
|
||||
System.out.println();
|
||||
assertResultSetMetaData(meta);
|
||||
|
||||
while (rs.next()) {
|
||||
Assert.assertEquals(now, rs.getTimestamp(1).getTime());
|
||||
Assert.assertEquals(127, rs.getByte(2));
|
||||
Assert.assertEquals("65534", rs.getString(3));
|
||||
Assert.assertEquals("4294967294", rs.getString(4));
|
||||
Assert.assertEquals("18446744073709551614", rs.getString(5));
|
||||
rs.getShort(3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -122,37 +117,27 @@ public class UnsignedNumberJniTest {
|
|||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(" + now + ", 254, 65534,4294967294, 18446744073709551614)");
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table where ts = " + now);
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
while (rs.next()) {
|
||||
System.out.print(meta.getColumnLabel(1) + ": " + rs.getTimestamp(1) + "\t");
|
||||
System.out.print(meta.getColumnLabel(2) + ": " + rs.getByte(2) + "\t");
|
||||
System.out.print(meta.getColumnLabel(3) + ": " + rs.getShort(3) + "\t");
|
||||
System.out.print(meta.getColumnLabel(4) + ": " + rs.getInt(4) + "\t");
|
||||
System.out.print(meta.getColumnLabel(5) + ": " + rs.getLong(5) + "\t");
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
}
|
||||
assertResultSetMetaData(meta);
|
||||
|
||||
@Test
|
||||
public void testCase007() throws SQLException {
|
||||
try (Statement stmt = conn.createStatement()) {
|
||||
long now = System.currentTimeMillis();
|
||||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(" + now + ", 254, 65534,4294967294, 18446744073709551614)");
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table where ts = " + now);
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
while (rs.next()) {
|
||||
for (int i = 1; i <= meta.getColumnCount(); i++) {
|
||||
System.out.print(meta.getColumnLabel(i) + ": " + rs.getString(i) + "\t");
|
||||
}
|
||||
System.out.println();
|
||||
Assert.assertEquals(now, rs.getTimestamp(1).getTime());
|
||||
Assert.assertEquals("254", rs.getString(2));
|
||||
Assert.assertEquals("65534", rs.getString(3));
|
||||
Assert.assertEquals("4294967294", rs.getString(4));
|
||||
Assert.assertEquals("18446744073709551614", rs.getString(5));
|
||||
rs.getByte(2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void assertResultSetMetaData(ResultSetMetaData meta) throws SQLException {
|
||||
Assert.assertEquals(5, meta.getColumnCount());
|
||||
Assert.assertEquals("ts", meta.getColumnLabel(1));
|
||||
Assert.assertEquals("f1", meta.getColumnLabel(2));
|
||||
Assert.assertEquals("f2", meta.getColumnLabel(3));
|
||||
Assert.assertEquals("f3", meta.getColumnLabel(4));
|
||||
Assert.assertEquals("f4", meta.getColumnLabel(5));
|
||||
}
|
||||
|
||||
@BeforeClass
|
||||
public static void beforeClass() {
|
||||
|
@ -160,20 +145,19 @@ public class UnsignedNumberJniTest {
|
|||
properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
|
||||
ts = System.currentTimeMillis();
|
||||
|
||||
try {
|
||||
Class.forName("com.taosdata.jdbc.TSDBDriver");
|
||||
final String url = "jdbc:TAOS://" + host + ":6030/?user=root&password=taosdata";
|
||||
conn = DriverManager.getConnection(url, properties);
|
||||
|
||||
Statement stmt = conn.createStatement();
|
||||
stmt.execute("drop database if exists unsign_jni");
|
||||
stmt.execute("create database if not exists unsign_jni");
|
||||
stmt.execute("use unsign_jni");
|
||||
stmt.execute("create table us_table(ts timestamp, f1 tinyint unsigned, f2 smallint unsigned, f3 int unsigned, f4 bigint unsigned)");
|
||||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(now, 127, 32767,2147483647, 9223372036854775807)");
|
||||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(" + ts + ", 127, 32767,2147483647, 9223372036854775807)");
|
||||
stmt.close();
|
||||
} catch (ClassNotFoundException | SQLException e) {
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,17 +13,20 @@ public class UnsignedNumberRestfulTest {
|
|||
|
||||
private static final String host = "127.0.0.1";
|
||||
private static Connection conn;
|
||||
private static long ts;
|
||||
|
||||
@Test
|
||||
public void testCase001() {
|
||||
try (Statement stmt = conn.createStatement()) {
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table");
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
assertResultSetMetaData(meta);
|
||||
while (rs.next()) {
|
||||
for (int i = 1; i <= meta.getColumnCount(); i++) {
|
||||
System.out.print(meta.getColumnLabel(i) + ": " + rs.getString(i) + "\t");
|
||||
}
|
||||
System.out.println();
|
||||
Assert.assertEquals(ts, rs.getTimestamp(1).getTime());
|
||||
Assert.assertEquals("127", rs.getString(2));
|
||||
Assert.assertEquals("32767", rs.getString(3));
|
||||
Assert.assertEquals("2147483647", rs.getString(4));
|
||||
Assert.assertEquals("9223372036854775807", rs.getString(5));
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
|
@ -35,13 +38,14 @@ public class UnsignedNumberRestfulTest {
|
|||
try (Statement stmt = conn.createStatement()) {
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table");
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
assertResultSetMetaData(meta);
|
||||
|
||||
while (rs.next()) {
|
||||
System.out.print(meta.getColumnLabel(1) + ": " + rs.getTimestamp(1) + "\t");
|
||||
System.out.print(meta.getColumnLabel(2) + ": " + rs.getByte(2) + "\t");
|
||||
System.out.print(meta.getColumnLabel(3) + ": " + rs.getShort(3) + "\t");
|
||||
System.out.print(meta.getColumnLabel(4) + ": " + rs.getInt(4) + "\t");
|
||||
System.out.print(meta.getColumnLabel(5) + ": " + rs.getLong(5) + "\t");
|
||||
System.out.println();
|
||||
Assert.assertEquals(ts, rs.getTimestamp(1).getTime());
|
||||
Assert.assertEquals(127, rs.getByte(2));
|
||||
Assert.assertEquals(32767, rs.getShort(3));
|
||||
Assert.assertEquals(2147483647, rs.getInt(4));
|
||||
Assert.assertEquals(9223372036854775807l, rs.getLong(5));
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
|
@ -55,13 +59,14 @@ public class UnsignedNumberRestfulTest {
|
|||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(" + now + ", 127, 32767,2147483647, 18446744073709551614)");
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table where ts = " + now);
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
assertResultSetMetaData(meta);
|
||||
while (rs.next()) {
|
||||
System.out.print(meta.getColumnLabel(1) + ": " + rs.getTimestamp(1) + "\t");
|
||||
System.out.print(meta.getColumnLabel(2) + ": " + rs.getByte(2) + "\t");
|
||||
System.out.print(meta.getColumnLabel(3) + ": " + rs.getShort(3) + "\t");
|
||||
System.out.print(meta.getColumnLabel(4) + ": " + rs.getInt(4) + "\t");
|
||||
System.out.print(meta.getColumnLabel(5) + ": " + rs.getLong(5) + "\t");
|
||||
System.out.println();
|
||||
Assert.assertEquals(now, rs.getTimestamp(1).getTime());
|
||||
Assert.assertEquals(127, rs.getByte(2));
|
||||
Assert.assertEquals(32767, rs.getShort(3));
|
||||
Assert.assertEquals(2147483647, rs.getInt(4));
|
||||
Assert.assertEquals("18446744073709551614", rs.getString(5));
|
||||
rs.getLong(5);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -73,13 +78,15 @@ public class UnsignedNumberRestfulTest {
|
|||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(" + now + ", 127, 32767,4294967294, 18446744073709551614)");
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table where ts = " + now);
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
assertResultSetMetaData(meta);
|
||||
|
||||
while (rs.next()) {
|
||||
System.out.print(meta.getColumnLabel(1) + ": " + rs.getTimestamp(1) + "\t");
|
||||
System.out.print(meta.getColumnLabel(2) + ": " + rs.getByte(2) + "\t");
|
||||
System.out.print(meta.getColumnLabel(3) + ": " + rs.getShort(3) + "\t");
|
||||
System.out.print(meta.getColumnLabel(4) + ": " + rs.getInt(4) + "\t");
|
||||
System.out.print(meta.getColumnLabel(5) + ": " + rs.getLong(5) + "\t");
|
||||
System.out.println();
|
||||
Assert.assertEquals(now, rs.getTimestamp(1).getTime());
|
||||
Assert.assertEquals(127, rs.getByte(2));
|
||||
Assert.assertEquals(32767, rs.getShort(3));
|
||||
Assert.assertEquals("4294967294", rs.getString(4));
|
||||
Assert.assertEquals("18446744073709551614", rs.getString(5));
|
||||
rs.getInt(4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -91,13 +98,15 @@ public class UnsignedNumberRestfulTest {
|
|||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(" + now + ", 127, 65534,4294967294, 18446744073709551614)");
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table where ts = " + now);
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
assertResultSetMetaData(meta);
|
||||
|
||||
while (rs.next()) {
|
||||
System.out.print(meta.getColumnLabel(1) + ": " + rs.getTimestamp(1) + "\t");
|
||||
System.out.print(meta.getColumnLabel(2) + ": " + rs.getByte(2) + "\t");
|
||||
System.out.print(meta.getColumnLabel(3) + ": " + rs.getShort(3) + "\t");
|
||||
System.out.print(meta.getColumnLabel(4) + ": " + rs.getInt(4) + "\t");
|
||||
System.out.print(meta.getColumnLabel(5) + ": " + rs.getLong(5) + "\t");
|
||||
System.out.println();
|
||||
Assert.assertEquals(now, rs.getTimestamp(1).getTime());
|
||||
Assert.assertEquals(127, rs.getByte(2));
|
||||
Assert.assertEquals("65534", rs.getString(3));
|
||||
Assert.assertEquals("4294967294", rs.getString(4));
|
||||
Assert.assertEquals("18446744073709551614", rs.getString(5));
|
||||
rs.getShort(3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -109,57 +118,47 @@ public class UnsignedNumberRestfulTest {
|
|||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(" + now + ", 254, 65534,4294967294, 18446744073709551614)");
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table where ts = " + now);
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
while (rs.next()) {
|
||||
System.out.print(meta.getColumnLabel(1) + ": " + rs.getTimestamp(1) + "\t");
|
||||
System.out.print(meta.getColumnLabel(2) + ": " + rs.getByte(2) + "\t");
|
||||
System.out.print(meta.getColumnLabel(3) + ": " + rs.getShort(3) + "\t");
|
||||
System.out.print(meta.getColumnLabel(4) + ": " + rs.getInt(4) + "\t");
|
||||
System.out.print(meta.getColumnLabel(5) + ": " + rs.getLong(5) + "\t");
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
}
|
||||
assertResultSetMetaData(meta);
|
||||
|
||||
@Test
|
||||
public void testCase007() throws SQLException {
|
||||
try (Statement stmt = conn.createStatement()) {
|
||||
long now = System.currentTimeMillis();
|
||||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(" + now + ", 254, 65534,4294967294, 18446744073709551614)");
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table where ts = " + now);
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
while (rs.next()) {
|
||||
for (int i = 1; i <= meta.getColumnCount(); i++) {
|
||||
System.out.print(meta.getColumnLabel(i) + ": " + rs.getString(i) + "\t");
|
||||
}
|
||||
System.out.println();
|
||||
Assert.assertEquals(now, rs.getTimestamp(1).getTime());
|
||||
Assert.assertEquals("254", rs.getString(2));
|
||||
Assert.assertEquals("65534", rs.getString(3));
|
||||
Assert.assertEquals("4294967294", rs.getString(4));
|
||||
Assert.assertEquals("18446744073709551614", rs.getString(5));
|
||||
rs.getByte(2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void assertResultSetMetaData(ResultSetMetaData meta) throws SQLException {
|
||||
Assert.assertEquals(5, meta.getColumnCount());
|
||||
Assert.assertEquals("ts", meta.getColumnLabel(1));
|
||||
Assert.assertEquals("f1", meta.getColumnLabel(2));
|
||||
Assert.assertEquals("f2", meta.getColumnLabel(3));
|
||||
Assert.assertEquals("f3", meta.getColumnLabel(4));
|
||||
Assert.assertEquals("f4", meta.getColumnLabel(5));
|
||||
}
|
||||
|
||||
@BeforeClass
|
||||
public static void beforeClass() {
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
|
||||
ts = System.currentTimeMillis();
|
||||
|
||||
try {
|
||||
Class.forName("com.taosdata.jdbc.rs.RestfulDriver");
|
||||
final String url = "jdbc:TAOS-RS://" + host + ":6041/?user=root&password=taosdata";
|
||||
conn = DriverManager.getConnection(url, properties);
|
||||
|
||||
Statement stmt = conn.createStatement();
|
||||
stmt.execute("drop database if exists unsign_restful");
|
||||
stmt.execute("create database if not exists unsign_restful");
|
||||
stmt.execute("use unsign_restful");
|
||||
stmt.execute("create table us_table(ts timestamp, f1 tinyint unsigned, f2 smallint unsigned, f3 int unsigned, f4 bigint unsigned)");
|
||||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(now, 127, 32767,2147483647, 9223372036854775807)");
|
||||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(" + ts + ", 127, 32767,2147483647, 9223372036854775807)");
|
||||
stmt.close();
|
||||
} catch (ClassNotFoundException | SQLException e) {
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,6 @@ import java.sql.*;
|
|||
|
||||
public class RestfulPreparedStatementTest {
|
||||
private static final String host = "127.0.0.1";
|
||||
// private static final String host = "master";
|
||||
private static Connection conn;
|
||||
private static final String sql_insert = "insert into t1 values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||
private static PreparedStatement pstmt_insert;
|
||||
|
@ -371,7 +370,6 @@ public class RestfulPreparedStatementTest {
|
|||
pstmt_insert.setSQLXML(1, null);
|
||||
}
|
||||
|
||||
|
||||
@BeforeClass
|
||||
public static void beforeClass() {
|
||||
try {
|
||||
|
|
|
@ -18,7 +18,6 @@ import java.text.SimpleDateFormat;
|
|||
public class RestfulResultSetTest {
|
||||
|
||||
private static final String host = "127.0.0.1";
|
||||
|
||||
private static Connection conn;
|
||||
private static Statement stmt;
|
||||
private static ResultSet rs;
|
||||
|
@ -95,7 +94,8 @@ public class RestfulResultSetTest {
|
|||
@Test
|
||||
public void getBigDecimal() throws SQLException {
|
||||
BigDecimal f1 = rs.getBigDecimal("f1");
|
||||
Assert.assertEquals(1609430400000l, f1.longValue());
|
||||
long actual = (f1 == null) ? 0 : f1.longValue();
|
||||
Assert.assertEquals(1609430400000l, actual);
|
||||
|
||||
BigDecimal f2 = rs.getBigDecimal("f2");
|
||||
Assert.assertEquals(1, f2.intValue());
|
||||
|
@ -119,7 +119,7 @@ public class RestfulResultSetTest {
|
|||
@Test
|
||||
public void getBytes() throws SQLException {
|
||||
byte[] f1 = rs.getBytes("f1");
|
||||
Assert.assertEquals("2021-01-01 00:00:00.0", new String(f1));
|
||||
Assert.assertEquals("2021-01-01 00:00:00.000", new String(f1));
|
||||
|
||||
byte[] f2 = rs.getBytes("f2");
|
||||
Assert.assertEquals(1, Ints.fromByteArray(f2));
|
||||
|
|
Loading…
Reference in New Issue