Skip to content

Commit f039b43

Browse files
committed
Support new types introduced in Tarantool 2.2
There are a few new types such as BOOLEAN(BOOL), UNSIGNED in Tarantool v2.2. Moreover, Number aliases REAL, FLOAT, DOUBLE were replaced by one NUMBER type since v2.2.1. Support tests for old number types on version before 2.2.
1 parent 45cfe17 commit f039b43

File tree

6 files changed

+210
-62
lines changed

6 files changed

+210
-62
lines changed

src/main/java/org/tarantool/jdbc/type/TarantoolSqlType.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,33 +10,45 @@ public enum TarantoolSqlType {
1010

1111
UNKNOWN(TarantoolType.UNKNOWN, JdbcType.UNKNOWN, "unknown"),
1212

13+
// float, double, real used to be number aliases before 2.2
1314
FLOAT(TarantoolType.NUMBER, JdbcType.FLOAT, "float"),
1415
DOUBLE(TarantoolType.NUMBER, JdbcType.DOUBLE, "double"),
1516
REAL(TarantoolType.NUMBER, JdbcType.REAL, "real"),
17+
// was introduced in Tarantool 2.2.1
18+
NUMBER(TarantoolType.NUMBER, JdbcType.DOUBLE, "number"),
1619

17-
INT(TarantoolType.INTEGER, JdbcType.INTEGER, "int"),
18-
INTEGER(TarantoolType.INTEGER, JdbcType.INTEGER, "integer"),
20+
INT(TarantoolType.INTEGER, JdbcType.BIGINT, "int"),
21+
INTEGER(TarantoolType.INTEGER, JdbcType.BIGINT, "integer"),
22+
// was introduced in 2.2
23+
UNSIGNED(TarantoolType.UNSIGNED, JdbcType.BIGINT, "integer"),
1924

25+
// were introduced in 2.2
2026
BOOL(TarantoolType.BOOLEAN, JdbcType.BOOLEAN, "bool"),
2127
BOOLEAN(TarantoolType.BOOLEAN, JdbcType.BOOLEAN, "boolean"),
2228

29+
STRING(TarantoolType.STRING, JdbcType.VARCHAR, "string"),
30+
TEXT(TarantoolType.STRING, JdbcType.VARCHAR, "text"),
2331
VARCHAR(TarantoolType.STRING, JdbcType.VARCHAR, "varchar") {
2432
@Override
2533
public String getDisplayType() {
2634
return getTypeName() + "(128)";
2735
}
2836
},
29-
TEXT(TarantoolType.STRING, JdbcType.VARCHAR, "text"),
37+
38+
// was introduced in 2.2
39+
VARBINARY(TarantoolType.VARBINARY, JdbcType.VARBINARY, "varbinary"),
3040

3141
SCALAR(TarantoolType.SCALAR, JdbcType.BINARY, "scalar");
3242

3343
private static final Map<TarantoolType, TarantoolSqlType> defaultSqlTypeMapping;
3444
static {
3545
defaultSqlTypeMapping = new HashMap<>();
3646
defaultSqlTypeMapping.put(TarantoolType.BOOLEAN, TarantoolSqlType.BOOLEAN);
37-
defaultSqlTypeMapping.put(TarantoolType.STRING, TarantoolSqlType.VARCHAR);
47+
defaultSqlTypeMapping.put(TarantoolType.STRING, TarantoolSqlType.STRING);
3848
defaultSqlTypeMapping.put(TarantoolType.INTEGER, TarantoolSqlType.INTEGER);
39-
defaultSqlTypeMapping.put(TarantoolType.NUMBER, TarantoolSqlType.DOUBLE);
49+
defaultSqlTypeMapping.put(TarantoolType.UNSIGNED, TarantoolSqlType.UNSIGNED);
50+
defaultSqlTypeMapping.put(TarantoolType.NUMBER, TarantoolSqlType.NUMBER);
51+
defaultSqlTypeMapping.put(TarantoolType.VARBINARY, TarantoolSqlType.VARBINARY);
4052
defaultSqlTypeMapping.put(TarantoolType.SCALAR, TarantoolSqlType.SCALAR);
4153
}
4254

src/main/java/org/tarantool/jdbc/type/TarantoolType.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,12 @@ public enum TarantoolType {
1010
STRING("string", false, true, Integer.MAX_VALUE, 0, Integer.MAX_VALUE),
1111
// precision is 20 due to Tarantool integer type has range [-2^63-1..2^64-1]
1212
INTEGER("integer", true, false, 20, 0, 20),
13+
// precision is 20 due to Tarantool unsigned integer type has range [0..2^64-1]
14+
UNSIGNED("unsigned", false, false, 20, 0, 20),
1315
// precision is 20 due to Tarantool allows both integer and floating-point values under number type
1416
NUMBER("number", true, false, 20, 16, 24),
15-
SCALAR("scalar", false, true, Integer.MAX_VALUE, 0, Integer.MAX_VALUE);
17+
SCALAR("scalar", false, true, Integer.MAX_VALUE, 0, Integer.MAX_VALUE),
18+
VARBINARY("varbinary", false, true, Integer.MAX_VALUE, 0, Integer.MAX_VALUE);
1619

1720
private final String typeName;
1821
private final boolean signed;

src/test/java/org/tarantool/ServerVersion.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ public enum ServerVersion {
77
V_1_9("1", "9", "0"),
88
V_1_10("1", "10", "0"),
99
V_2_1("2", "1", "0"),
10-
V_2_2("2", "2", "0");
10+
V_2_2("2", "2", "0"),
11+
V_2_2_1("2", "2", "1");
1112

1213
private final String majorVersion;
1314
private final String minorVersion;
@@ -40,6 +41,10 @@ public boolean haveMaximalVersion(String versionString) {
4041
return compareVersions(versionString, (server, maximal) -> server <= maximal);
4142
}
4243

44+
public boolean haveLessVersionThan(String versionString) {
45+
return compareVersions(versionString, (server, maximal) -> server < maximal);
46+
}
47+
4348
private boolean compareVersions(String versionString, BiFunction<Integer, Integer, Boolean> comparator) {
4449
int parsedVersion = toNumber(splitVersionParts(versionString));
4550
int thisVersion = toNumber(new String[] { majorVersion, minorVersion, patchVersion });

src/test/java/org/tarantool/TestAssumptions.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,8 @@ public static void assumeMaximalServerVersion(String rawVersion, ServerVersion v
1212
Assumptions.assumeTrue(version.haveMaximalVersion(rawVersion));
1313
}
1414

15+
public static void assumeServerVersionLessThan(String rawVersion, ServerVersion version) {
16+
Assumptions.assumeTrue(version.haveLessVersionThan(rawVersion));
17+
}
18+
1519
}

src/test/java/org/tarantool/jdbc/JdbcResultSetMetaDataIT.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,10 @@
66
import static org.junit.jupiter.api.Assertions.assertThrows;
77
import static org.junit.jupiter.api.Assertions.assertTrue;
88
import static org.tarantool.TestAssumptions.assumeMinimalServerVersion;
9+
import static org.tarantool.TestAssumptions.assumeServerVersionLessThan;
910

1011
import org.tarantool.ServerVersion;
1112
import org.tarantool.TarantoolTestHelper;
12-
import org.tarantool.jdbc.type.JdbcType;
13-
import org.tarantool.jdbc.type.TarantoolSqlType;
1413

1514
import org.junit.jupiter.api.AfterAll;
1615
import org.junit.jupiter.api.AfterEach;
@@ -201,6 +200,7 @@ public void testCaseSensitiveColumns() throws SQLException {
201200
@Test
202201
@DisplayName("returned case insensitive columns")
203202
public void testCaseInsensitiveColumns() throws SQLException {
203+
assumeServerVersionLessThan(testHelper.getInstanceVersion(), ServerVersion.V_2_2);
204204
testHelper.executeSql(
205205
"CREATE TABLE test(id INT PRIMARY KEY, num_val DOUBLE)"
206206
);
@@ -218,6 +218,7 @@ public void testCaseInsensitiveColumns() throws SQLException {
218218
@Test
219219
@DisplayName("returned searchable columns")
220220
public void testSearchableColumns() throws SQLException {
221+
assumeServerVersionLessThan(testHelper.getInstanceVersion(), ServerVersion.V_2_2);
221222
testHelper.executeSql(
222223
"CREATE TABLE test(id INT PRIMARY KEY, num_val DOUBLE, text_val TEXT, bin_val SCALAR)"
223224
);
@@ -237,6 +238,7 @@ public void testSearchableColumns() throws SQLException {
237238
@Test
238239
@DisplayName("returned no monetary columns")
239240
public void testCurrencyColumns() throws SQLException {
241+
assumeServerVersionLessThan(testHelper.getInstanceVersion(), ServerVersion.V_2_2);
240242
testHelper.executeSql(
241243
"CREATE TABLE test(id INT PRIMARY KEY, num_val DOUBLE, text_val TEXT, bin_val SCALAR)"
242244
);
@@ -256,6 +258,7 @@ public void testCurrencyColumns() throws SQLException {
256258
@Test
257259
@DisplayName("returned signed columns")
258260
public void testSignedColumns() throws SQLException {
261+
assumeServerVersionLessThan(testHelper.getInstanceVersion(), ServerVersion.V_2_2);
259262
testHelper.executeSql(
260263
"CREATE TABLE test(id INT PRIMARY KEY, double_val DOUBLE, real_val REAL, float_val FLOAT)"
261264
);
@@ -294,6 +297,7 @@ public void testNotSignedColumns() throws SQLException {
294297
@Test
295298
@DisplayName("returned numeric column types")
296299
public void testColumnsNumericTypes() throws SQLException {
300+
assumeServerVersionLessThan(testHelper.getInstanceVersion(), ServerVersion.V_2_2);
297301
testHelper.executeSql(
298302
"CREATE TABLE test(id INT PRIMARY KEY, f_val FLOAT, d_val DOUBLE, r_val REAL)"
299303
);
@@ -303,7 +307,7 @@ public void testColumnsNumericTypes() throws SQLException {
303307
) {
304308
ResultSetMetaData rsMeta = resultSet.getMetaData();
305309

306-
assertEquals(Types.INTEGER, rsMeta.getColumnType(1));
310+
assertEquals(Types.BIGINT, rsMeta.getColumnType(1));
307311
assertEquals("integer", rsMeta.getColumnTypeName(1));
308312
assertEquals("java.lang.Integer", rsMeta.getColumnClassName(1));
309313

@@ -335,17 +339,17 @@ public void testColumnsTextualTypes() throws SQLException {
335339
) {
336340
ResultSetMetaData rsMeta = resultSet.getMetaData();
337341

338-
assertEquals(Types.INTEGER, rsMeta.getColumnType(1));
342+
assertEquals(Types.BIGINT, rsMeta.getColumnType(1));
339343
assertEquals("integer", rsMeta.getColumnTypeName(1));
340-
assertEquals("java.lang.Integer", rsMeta.getColumnClassName(1));
344+
assertEquals("java.lang.Long", rsMeta.getColumnClassName(1));
341345

342346
assertEquals(Types.VARCHAR, rsMeta.getColumnType(2));
343-
assertEquals("varchar", rsMeta.getColumnTypeName(2));
347+
assertEquals("string", rsMeta.getColumnTypeName(2));
344348
assertEquals("java.lang.String", rsMeta.getColumnClassName(2));
345349

346350
// TEXT and VARCHAR are not distinguishable
347351
assertEquals(Types.VARCHAR, rsMeta.getColumnType(3));
348-
assertEquals("varchar", rsMeta.getColumnTypeName(3));
352+
assertEquals("string", rsMeta.getColumnTypeName(3));
349353
assertEquals("java.lang.String", rsMeta.getColumnClassName(3));
350354

351355
assertEquals(Types.BINARY, rsMeta.getColumnType(4));

0 commit comments

Comments
 (0)