forked from duckdb/duckdb-java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTestParameterMetadata.java
More file actions
139 lines (128 loc) · 6.82 KB
/
TestParameterMetadata.java
File metadata and controls
139 lines (128 loc) · 6.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package org.duckdb;
import static org.duckdb.TestDuckDBJDBC.JDBC_URL;
import static org.duckdb.test.Assertions.*;
import static org.duckdb.test.Assertions.assertTrue;
import java.math.BigDecimal;
import java.sql.*;
import java.util.LinkedHashMap;
public class TestParameterMetadata {
public static void test_parameter_metadata() throws Exception {
try (Connection conn = DriverManager.getConnection(JDBC_URL); Statement stmt = conn.createStatement()) {
for (DuckDBColumnType colType : DuckDBColumnType.values()) {
final String colTypeName;
switch (colType) {
case ENUM:
case MAP:
case STRUCT:
case UNION:
case UNKNOWN:
continue;
case DECIMAL:
colTypeName = "DECIMAL(18,3)";
break;
case TIMESTAMP_WITH_TIME_ZONE:
colTypeName = "TIMESTAMP WITH TIME ZONE";
break;
case TIME_WITH_TIME_ZONE:
colTypeName = "TIME WITH TIME ZONE";
break;
case LIST:
case ARRAY:
colTypeName = "VARCHAR[]";
break;
default:
colTypeName = colType.name();
}
String tblName = "metadata_test_" + colType.name();
stmt.execute("CREATE TABLE " + tblName + " (col1 " + colTypeName + ")");
try (PreparedStatement ps = conn.prepareStatement("INSERT INTO " + tblName + " VALUES(?)")) {
ParameterMetaData meta = ps.getParameterMetaData();
assertEquals(meta.getParameterTypeName(1), colTypeName);
}
}
}
}
public static void test_parameter_metadata_decimal() throws Exception {
try (Connection conn = DriverManager.getConnection(JDBC_URL)) {
try (Statement stmt = conn.createStatement()) {
stmt.execute("CREATE TABLE test_meta_decimal (id DECIMAL(3,0), dec16 DECIMAL(4,1), "
+ "dec32 DECIMAL(9,4), dec64 DECIMAL(18,7), "
+ "dec128 DECIMAL(38,10), int INTEGER, uint UINTEGER)");
}
try (
PreparedStatement ps = conn.prepareStatement(
"INSERT INTO test_meta_decimal (id, dec16, dec32, dec64, dec128, int, uint) VALUES (?, ?, ?, ?, ?, ?, ?)")) {
ParameterMetaData meta = ps.getParameterMetaData();
assertEquals(3, meta.getPrecision(1));
assertEquals(0, meta.getScale(1));
assertEquals(4, meta.getPrecision(2));
assertEquals(1, meta.getScale(2));
assertEquals(9, meta.getPrecision(3));
assertEquals(4, meta.getScale(3));
assertEquals(18, meta.getPrecision(4));
assertEquals(7, meta.getScale(4));
assertEquals(38, meta.getPrecision(5));
assertEquals(10, meta.getScale(5));
assertEquals(0, meta.getPrecision(6));
assertEquals(0, meta.getScale(6));
assertEquals(0, meta.getPrecision(7));
assertEquals(0, meta.getScale(7));
assertTrue(meta.isSigned(5));
assertTrue(meta.isSigned(6));
assertFalse(meta.isSigned(7));
assertTrue(BigDecimal.class.getName().equals(meta.getParameterClassName(1)));
assertTrue(Integer.class.getName().equals(meta.getParameterClassName(6)));
assertTrue(Long.class.getName().equals(meta.getParameterClassName(7)));
}
}
}
public static void test_parameter_metadata_struct() throws Exception {
try (Connection conn = DriverManager.getConnection(JDBC_URL); Statement stmt = conn.createStatement()) {
stmt.execute("CREATE TABLE metadata_test_struct_1 (col1 STRUCT(v VARCHAR, i INTEGER))");
try (PreparedStatement ps = conn.prepareStatement("INSERT INTO metadata_test_struct_1 VALUES(?)")) {
ParameterMetaData meta = ps.getParameterMetaData();
assertEquals(meta.getParameterTypeName(1), "STRUCT(v VARCHAR, i INTEGER)");
assertEquals(meta.getParameterClassName(1), DuckDBStruct.class.getName());
assertEquals(meta.getPrecision(1), 0);
assertEquals(meta.getScale(1), 0);
}
}
}
public static void test_parameter_metadata_enum() throws Exception {
try (Connection conn = DriverManager.getConnection(JDBC_URL); Statement stmt = conn.createStatement()) {
stmt.execute("CREATE TYPE metadata_test_enum_type_1 as ENUM('foo', 'bar')");
stmt.execute("CREATE TABLE metadata_test_enum_1 (col1 metadata_test_enum_type_1)");
try (PreparedStatement ps = conn.prepareStatement("INSERT INTO metadata_test_enum_1 VALUES(?)")) {
ParameterMetaData meta = ps.getParameterMetaData();
assertEquals(meta.getParameterTypeName(1), "ENUM");
assertEquals(meta.getParameterClassName(1), String.class.getName());
assertEquals(meta.getPrecision(1), 0);
assertEquals(meta.getScale(1), 0);
}
}
}
public static void test_parameter_metadata_map() throws Exception {
try (Connection conn = DriverManager.getConnection(JDBC_URL); Statement stmt = conn.createStatement()) {
stmt.execute("CREATE TABLE metadata_test_map_1 (col1 MAP(INTEGER, DOUBLE))");
try (PreparedStatement ps = conn.prepareStatement("INSERT INTO metadata_test_map_1 VALUES(?)")) {
ParameterMetaData meta = ps.getParameterMetaData();
assertEquals(meta.getParameterTypeName(1), "MAP(INTEGER, DOUBLE)");
assertEquals(meta.getParameterClassName(1), LinkedHashMap.class.getName());
assertEquals(meta.getPrecision(1), 0);
assertEquals(meta.getScale(1), 0);
}
}
}
public static void test_parameter_metadata_union() throws Exception {
try (Connection conn = DriverManager.getConnection(JDBC_URL); Statement stmt = conn.createStatement()) {
stmt.execute("CREATE TABLE metadata_test_union_1 (col1 UNION(num INTEGER, str VARCHAR))");
try (PreparedStatement ps = conn.prepareStatement("INSERT INTO metadata_test_union_1 VALUES(?)")) {
ParameterMetaData meta = ps.getParameterMetaData();
assertEquals(meta.getParameterTypeName(1), "UNION(num INTEGER, str VARCHAR)");
assertEquals(meta.getParameterClassName(1), String.class.getName());
assertEquals(meta.getPrecision(1), 0);
assertEquals(meta.getScale(1), 0);
}
}
}
}