11package com .databricks .jdbc .core ;
22
3- import com .databricks .jdbc .client .impl .thrift .generated .TColumnDesc ;
4- import com .databricks .jdbc .client .impl .thrift .generated .TGetResultSetMetadataResp ;
5- import com .databricks .jdbc .client .impl .thrift .generated .TTableSchema ;
3+ import static com .databricks .jdbc .client .impl .thrift .commons .DatabricksThriftHelper .getTypeFromTypeDesc ;
4+ import static org .junit .jupiter .api .Assertions .assertEquals ;
5+
6+ import com .databricks .jdbc .client .impl .thrift .generated .*;
67import com .databricks .jdbc .client .sqlexec .ResultManifest ;
78import com .databricks .jdbc .driver .DatabricksJdbcConstants ;
89import com .databricks .sdk .service .sql .ColumnInfo ;
910import com .databricks .sdk .service .sql .ColumnInfoTypeName ;
1011import com .databricks .sdk .service .sql .ResultSchema ;
1112import java .sql .SQLException ;
1213import java .util .Collections ;
14+ import java .util .HashMap ;
1315import java .util .List ;
16+ import java .util .Map ;
1417import org .junit .jupiter .api .Assertions ;
1518import org .junit .jupiter .api .Test ;
1619
@@ -25,6 +28,21 @@ public ColumnInfo getColumn(String name, ColumnInfoTypeName typeName, String typ
2528 return columnInfo ;
2629 }
2730
31+ public TColumnDesc getThriftColumn (String name , TTypeDesc typeDesc ) {
32+ TColumnDesc columnDesc = new TColumnDesc ();
33+ columnDesc .setColumnName (name );
34+ columnDesc .setTypeDesc (typeDesc );
35+ return columnDesc ;
36+ // TTypeDesc typeDesc = new TTypeDesc();
37+ // TTypeEntry typeEntry = new TTypeEntry();
38+ // TPrimitiveTypeEntry primitiveEntry = new TPrimitiveTypeEntry();
39+ // primitiveEntry.setTypeName(typeName);
40+ // typeEntry.setPrimitiveEntry(primitiveEntry);
41+ // typeDesc.setTypes(Collections.singletonList(typeEntry));
42+ // columnDesc.setTypeDesc(typeDesc);
43+ // return columnDesc;
44+ }
45+
2846 public ResultManifest getResultManifest () {
2947 ResultManifest manifest = new ResultManifest ();
3048 manifest .setTotalRowCount (10L );
@@ -109,4 +127,66 @@ public void testEmptyAndNullThriftColumns() throws SQLException {
109127 resultSetMetadataResp .setSchema (new TTableSchema ());
110128 Assertions .assertEquals (0 , metaData .getColumnCount ());
111129 }
130+
131+ @ Test
132+ public void testGetScaleAndPrecisionWithColumnInfo () throws SQLException {
133+ DatabricksResultSetMetaData metaData =
134+ new DatabricksResultSetMetaData (STATEMENT_ID , getResultManifest ());
135+ ColumnInfo decimalColumnInfo = getColumn ("col1" , ColumnInfoTypeName .DECIMAL , "decimal" );
136+ decimalColumnInfo .setTypePrecision (10L );
137+ decimalColumnInfo .setTypeScale (2L );
138+
139+ int [] scaleAndPrecision =
140+ metaData .getScaleAndPrecision (decimalColumnInfo , decimalColumnInfo .getTypeName ());
141+ assertEquals (10 , scaleAndPrecision [0 ]);
142+ assertEquals (2 , scaleAndPrecision [1 ]);
143+
144+ ColumnInfo stringColumnInfo = getColumn ("col2" , ColumnInfoTypeName .STRING , "string" );
145+ scaleAndPrecision =
146+ metaData .getScaleAndPrecision (stringColumnInfo , stringColumnInfo .getTypeName ());
147+ assertEquals (255 , scaleAndPrecision [0 ]);
148+ assertEquals (0 , scaleAndPrecision [1 ]);
149+ }
150+
151+ @ Test
152+ public void testGetScaleAndPrecisionWithTColumnDesc () {
153+ DatabricksResultSetMetaData metaData =
154+ new DatabricksResultSetMetaData (STATEMENT_ID , getResultManifest ());
155+
156+ TColumnDesc columnInfo = new TColumnDesc ();
157+ TTypeDesc typeDesc = new TTypeDesc ();
158+ TTypeEntry typeEntry = new TTypeEntry ();
159+ TPrimitiveTypeEntry primitiveEntry = new TPrimitiveTypeEntry (TTypeId .DECIMAL_TYPE );
160+ Map <String , TTypeQualifierValue > qualifiers = new HashMap <>();
161+ TTypeQualifierValue scaleValue = new TTypeQualifierValue ();
162+ scaleValue .setI32Value (2 );
163+ TTypeQualifierValue precisionValue = new TTypeQualifierValue ();
164+ precisionValue .setI32Value (10 );
165+ qualifiers .put ("scale" , scaleValue );
166+ qualifiers .put ("precision" , precisionValue );
167+ TTypeQualifiers typeQualifiers = new TTypeQualifiers ().setQualifiers (qualifiers );
168+ primitiveEntry .setTypeQualifiers (typeQualifiers );
169+ typeEntry .setPrimitiveEntry (primitiveEntry );
170+ typeDesc .setTypes (Collections .singletonList (typeEntry ));
171+ columnInfo .setTypeDesc (typeDesc );
172+
173+ int [] scaleAndPrecision =
174+ metaData .getScaleAndPrecision (columnInfo , getTypeFromTypeDesc (columnInfo .getTypeDesc ()));
175+ assertEquals (10 , scaleAndPrecision [0 ]);
176+ assertEquals (2 , scaleAndPrecision [1 ]);
177+
178+ // Test with string type
179+ columnInfo = new TColumnDesc ();
180+ typeDesc = new TTypeDesc ();
181+ typeEntry = new TTypeEntry ();
182+ primitiveEntry = new TPrimitiveTypeEntry (TTypeId .STRING_TYPE );
183+ typeEntry .setPrimitiveEntry (primitiveEntry );
184+ typeDesc .setTypes (Collections .singletonList (typeEntry ));
185+ columnInfo .setTypeDesc (typeDesc );
186+
187+ scaleAndPrecision =
188+ metaData .getScaleAndPrecision (columnInfo , getTypeFromTypeDesc (columnInfo .getTypeDesc ()));
189+ assertEquals (255 , scaleAndPrecision [0 ]);
190+ assertEquals (0 , scaleAndPrecision [1 ]);
191+ }
112192}
0 commit comments