11package com .clickhouse .client .api .metadata ;
22
3- import com .clickhouse .client .api .ClientException ;
43import com .clickhouse .data .ClickHouseColumn ;
4+ import com .google .common .collect .ImmutableList ;
5+ import com .google .common .collect .ImmutableMap ;
56
67import java .util .ArrayList ;
8+ import java .util .Collection ;
79import java .util .Collections ;
810import java .util .HashMap ;
911import java .util .List ;
1012import java .util .Map ;
1113
1214public class TableSchema {
1315
14- private String tableName = "" ;
16+ private final String tableName ;
1517
16- private String query = "" ;
18+ private final String query ;
1719
18- private String databaseName = "" ;
20+ private final String databaseName ;
1921
20- private List <ClickHouseColumn > columns ;
22+ private final List <ClickHouseColumn > columns ;
2123
22- private List <ClickHouseColumn > columnsView ;
23-
24- private Map <String , Map <String , Object >> metadata ;
25-
26- private Map <String , Integer > colIndex ;
24+ private final Map <String , Integer > colIndex ;
2725
2826 private boolean hasDefaults = false ;
2927
30- public TableSchema () {
31- this .metadata = new HashMap <>();
32- this .columns = new ArrayList <>();
33- this .columnsView = Collections .unmodifiableList (this .columns );
34- this .colIndex = new HashMap <>();
28+ public TableSchema (Collection <ClickHouseColumn > columns ) {
29+ this ("" , "" , "" , columns );
30+ }
31+ public TableSchema (String tableName , String query , String databaseName , Collection <ClickHouseColumn > columns ) {
32+ this .tableName = tableName ;
33+ this .databaseName = databaseName ;
34+ this .query = query ;
35+ this .columns = ImmutableList .copyOf (columns );
36+ ImmutableMap .Builder <String , Integer > colIndexMapBuilder = ImmutableMap .builder ();
37+ for (int i = 0 ; i < this .columns .size (); i ++) {
38+ ClickHouseColumn column = this .columns .get (i );
39+ if (column .hasDefault ()) {
40+ this .hasDefaults = true ;
41+ }
42+ colIndexMapBuilder .put (this .columns .get (i ).getColumnName (), i );
43+ }
44+ this .colIndex = colIndexMapBuilder .build ();
3545 }
3646
3747 /**
@@ -40,7 +50,7 @@ public TableSchema() {
4050 * @return - collection of columns in the table
4151 */
4252 public List <ClickHouseColumn > getColumns () {
43- return columnsView ;
53+ return columns ;
4454 }
4555
4656 public String getDatabaseName () {
@@ -51,14 +61,6 @@ public String getTableName() {
5161 return tableName ;
5262 }
5363
54- public void setTableName (String tableName ) {
55- this .tableName = tableName ;
56- }
57-
58- public void setDatabaseName (String databaseName ) {
59- this .databaseName = databaseName ;
60- }
61-
6264 public boolean hasDefaults () {
6365 return hasDefaults ;
6466 }
@@ -67,30 +69,19 @@ public String getQuery() {
6769 return query ;
6870 }
6971
70- public void setQuery (String query ) {
71- this .query = query ;
72- }
73-
74- public void addColumn (String name , String type ) {
75- addColumn (name , type , "" );
76- }
77- public void addColumn (String name , String type , String defaultType ) {
78- ClickHouseColumn column = ClickHouseColumn .of (name , type );
79- if (defaultType .toUpperCase ().contains ("DEFAULT" )) {
80- hasDefaults = true ;
81- column .setHasDefault (true );
82- }
83- columns .add (column );
84-
85- Map <String , Object > columnMetadata = metadata .computeIfAbsent (name , k -> new HashMap <>());
86- columnMetadata .put ("type" , type );
87- colIndex .put (name , columns .size () - 1 );
88- }
89-
9072 public ClickHouseColumn getColumnByName (String name ) {
9173 return columns .get (nameToIndex (name ));
9274 }
9375
76+ /**
77+ * Returns column by index. Index starts with 1.
78+ * @param colIndex - column index;
79+ * @return
80+ */
81+ public ClickHouseColumn getColumnByIndex (int colIndex ) {
82+ return columns .get (colIndex - 1 );
83+ }
84+
9485 /**
9586 * Takes absolute index (starting from 0) and returns corresponding column.
9687 *
@@ -134,7 +125,6 @@ public String toString() {
134125 "tableName='" + tableName + '\'' +
135126 ", databaseName='" + databaseName + '\'' +
136127 ", columns=" + columns +
137- ", metadata=" + metadata +
138128 ", colIndex=" + colIndex +
139129 ", hasDefaults=" + hasDefaults +
140130 '}' ;
0 commit comments