1
1
package com .clickhouse .jdbc ;
2
2
3
+ import com .clickhouse .client .api .data_formats .ClickHouseBinaryFormatReader ;
4
+ import com .clickhouse .client .api .metadata .TableSchema ;
5
+ import com .clickhouse .client .api .query .QueryResponse ;
6
+ import com .clickhouse .data .ClickHouseColumn ;
7
+ import com .clickhouse .data .ClickHouseDataType ;
8
+ import com .clickhouse .jdbc .internal .ExceptionUtils ;
9
+ import com .clickhouse .jdbc .internal .JdbcUtils ;
10
+ import com .clickhouse .jdbc .metadata .ResultSetMetaDataImpl ;
11
+ import com .clickhouse .jdbc .types .Array ;
12
+ import org .slf4j .Logger ;
13
+ import org .slf4j .LoggerFactory ;
14
+
3
15
import java .io .ByteArrayInputStream ;
4
16
import java .io .InputStream ;
5
17
import java .io .Reader ;
6
18
import java .io .StringReader ;
7
19
import java .math .BigDecimal ;
8
20
import java .net .URL ;
9
21
import java .nio .charset .StandardCharsets ;
10
- import java .sql .*;
22
+ import java .sql .Blob ;
23
+ import java .sql .Clob ;
24
+ import java .sql .Date ;
25
+ import java .sql .NClob ;
26
+ import java .sql .Ref ;
27
+ import java .sql .ResultSet ;
28
+ import java .sql .ResultSetMetaData ;
29
+ import java .sql .RowId ;
30
+ import java .sql .SQLException ;
31
+ import java .sql .SQLFeatureNotSupportedException ;
32
+ import java .sql .SQLType ;
33
+ import java .sql .SQLWarning ;
34
+ import java .sql .SQLXML ;
35
+ import java .sql .Statement ;
36
+ import java .sql .Time ;
37
+ import java .sql .Timestamp ;
11
38
import java .time .ZonedDateTime ;
12
39
import java .util .Calendar ;
13
- import java .util .GregorianCalendar ;
40
+ import java .util .Collections ;
14
41
import java .util .List ;
15
42
import java .util .Map ;
16
43
17
- import com .clickhouse .client .api .data_formats .ClickHouseBinaryFormatReader ;
18
- import com .clickhouse .client .api .metadata .TableSchema ;
19
- import com .clickhouse .client .api .query .QueryResponse ;
20
- import com .clickhouse .data .ClickHouseColumn ;
21
- import com .clickhouse .data .ClickHouseDataType ;
22
- import com .clickhouse .jdbc .internal .ExceptionUtils ;
23
- import com .clickhouse .jdbc .internal .JdbcUtils ;
24
- import com .clickhouse .jdbc .types .Array ;
25
- import org .slf4j .Logger ;
26
- import org .slf4j .LoggerFactory ;
27
-
28
44
public class ResultSetImpl implements ResultSet , JdbcV2Wrapper {
29
45
private static final Logger log = LoggerFactory .getLogger (ResultSetImpl .class );
30
- private final ResultSetMetaData metaData ;
46
+ private ResultSetMetaData metaData ;
31
47
protected ClickHouseBinaryFormatReader reader ;
32
48
private QueryResponse response ;
33
49
private boolean closed ;
@@ -39,7 +55,12 @@ public ResultSetImpl(StatementImpl parentStatement, QueryResponse response, Clic
39
55
this .parentStatement = parentStatement ;
40
56
this .response = response ;
41
57
this .reader = reader ;
42
- this .metaData = new com .clickhouse .jdbc .metadata .ResultSetMetaData (this );
58
+ TableSchema tableMetadata = reader .getSchema ();
59
+
60
+ // Result set contains columns from one database (there is a special table engine 'Merge' to do cross DB queries)
61
+ this .metaData = new ResultSetMetaDataImpl (tableMetadata
62
+ .getColumns (), response .getSettings ().getDatabase (), "" , tableMetadata .getTableName (),
63
+ JdbcUtils .DATA_TYPE_CLASS_MAP );
43
64
this .closed = false ;
44
65
this .wasNull = false ;
45
66
this .defaultCalendar = parentStatement .connection .defaultCalendar ;
@@ -49,7 +70,7 @@ protected ResultSetImpl(ResultSetImpl resultSet) {
49
70
this .parentStatement = resultSet .parentStatement ;
50
71
this .response = resultSet .response ;
51
72
this .reader = resultSet .reader ;
52
- this .metaData = new com . clickhouse . jdbc . metadata . ResultSetMetaData ( this ) ;
73
+ this .metaData = resultSet . metaData ;
53
74
this .closed = false ;
54
75
this .wasNull = false ;
55
76
this .defaultCalendar = parentStatement .connection .defaultCalendar ;
@@ -431,6 +452,10 @@ public ResultSetMetaData getMetaData() throws SQLException {
431
452
return metaData ;
432
453
}
433
454
455
+ protected void setMetaData (ResultSetMetaDataImpl metaData ) {
456
+ this .metaData = metaData ;
457
+ }
458
+
434
459
@ Override
435
460
public Object getObject (int columnIndex ) throws SQLException {
436
461
return getObject (columnIndex , JdbcUtils .convertToJavaClass (getSchema ().getColumnByIndex (columnIndex ).getDataType ()));
0 commit comments