1818
1919import static com .google .common .truth .Truth .assertThat ;
2020import static org .junit .jupiter .api .Assertions .assertThrows ;
21+ import static org .junit .jupiter .params .provider .Arguments .arguments ;
2122import static org .mockito .Mockito .mock ;
2223
2324import com .google .cloud .bigquery .Field ;
2425import com .google .cloud .bigquery .FieldList ;
2526import com .google .cloud .bigquery .LegacySQLTypeName ;
2627import com .google .cloud .bigquery .Schema ;
2728import com .google .cloud .bigquery .StandardSQLTypeName ;
28- import com .google .common .collect .ImmutableList ;
2929import java .sql .Array ;
3030import java .sql .ResultSetMetaData ;
3131import java .sql .SQLException ;
3232import java .sql .Types ;
33- import java .util .List ;
33+ import java .util .stream . Stream ;
3434import org .junit .jupiter .api .BeforeEach ;
3535import org .junit .jupiter .api .Test ;
3636import org .junit .jupiter .api .extension .ExtendWith ;
3737import org .junit .jupiter .params .ParameterizedTest ;
38+ import org .junit .jupiter .params .provider .Arguments ;
3839import org .junit .jupiter .params .provider .EnumSource ;
40+ import org .junit .jupiter .params .provider .MethodSource ;
3941import org .mockito .junit .jupiter .MockitoExtension ;
4042
4143@ ExtendWith (MockitoExtension .class )
@@ -72,37 +74,6 @@ public class BigQueryResultSetMetadataTest {
7274 Field .of ("twelfth" , LegacySQLTypeName .TIME ),
7375 Field .of ("thirteenth" , LegacySQLTypeName .DATE ));
7476
75- private static final List fieldListSqlTypes =
76- ImmutableList .of (
77- Types .BOOLEAN ,
78- Types .BIGINT ,
79- Types .DOUBLE ,
80- Types .NVARCHAR ,
81- Types .TIMESTAMP ,
82- Types .VARBINARY ,
83- Types .NVARCHAR ,
84- Types .ARRAY ,
85- Types .STRUCT ,
86- Types .NUMERIC ,
87- Types .NUMERIC ,
88- Types .TIME ,
89- Types .DATE );
90-
91- private static final List fieldListClassNames =
92- ImmutableList .of (
93- "java.lang.Boolean" ,
94- "java.lang.Long" ,
95- "java.lang.Double" ,
96- "java.lang.String" ,
97- "java.sql.Timestamp" ,
98- byte [].class .getName (),
99- "java.lang.String" ,
100- Array .class .getName (),
101- "java.sql.Struct" ,
102- "java.math.BigDecimal" ,
103- "java.math.BigDecimal" ,
104- "java.sql.Time" ,
105- "java.sql.Date" );
10677 private static final Schema QUERY_SCHEMA = Schema .of (fieldList );
10778
10879 private ResultSetMetaData resultSetMetaData ;
@@ -131,39 +102,38 @@ public void setUp() throws SQLException {
131102 resultSetMetaDataNested = bigQueryJsonResultSetNested .getMetaData ();
132103 }
133104
134- @ Test
135- public void testGetColumnType () throws SQLException {
136- // match the mapping for all the types in the test dataset
137- for (int colIndex = 1 ; colIndex <= 13 ; colIndex ++) {
138- assertThat (resultSetMetaData .getColumnType (colIndex ))
139- .isEqualTo (fieldListSqlTypes .get (colIndex - 1 ));
140- }
105+ @ ParameterizedTest
106+ @ MethodSource ("columnMetadataProvider" )
107+ public void testColumnMetadata (
108+ int columnIndex ,
109+ int expectedSqlType ,
110+ String expectedColumnTypeName ,
111+ String expectedClassName ,
112+ int expectedPrecision ,
113+ int expectedScale )
114+ throws SQLException {
115+ assertThat (resultSetMetaData .getColumnType (columnIndex )).isEqualTo (expectedSqlType );
116+ assertThat (resultSetMetaData .getColumnTypeName (columnIndex )).isEqualTo (expectedColumnTypeName );
117+ assertThat (resultSetMetaData .getColumnClassName (columnIndex )).isEqualTo (expectedClassName );
118+ assertThat (resultSetMetaData .getPrecision (columnIndex )).isEqualTo (expectedPrecision );
119+ assertThat (resultSetMetaData .getScale (columnIndex )).isEqualTo (expectedScale );
141120 }
142121
143- @ Test
144- public void testGetColumnTypeName () throws SQLException {
145- assertThat (resultSetMetaData .getColumnTypeName (1 )).isEqualTo ("BOOL" );
146- assertThat (resultSetMetaData .getColumnTypeName (2 )).isEqualTo ("INT64" );
147- assertThat (resultSetMetaData .getColumnTypeName (3 )).isEqualTo ("FLOAT64" );
148- assertThat (resultSetMetaData .getColumnTypeName (4 )).isEqualTo ("STRING" );
149- assertThat (resultSetMetaData .getColumnTypeName (5 )).isEqualTo ("TIMESTAMP" );
150- assertThat (resultSetMetaData .getColumnTypeName (6 )).isEqualTo ("BYTES" );
151- assertThat (resultSetMetaData .getColumnTypeName (7 )).isEqualTo ("STRING" );
152- assertThat (resultSetMetaData .getColumnTypeName (8 )).isEqualTo ("ARRAY" );
153- assertThat (resultSetMetaData .getColumnTypeName (9 )).isEqualTo ("STRUCT" );
154- assertThat (resultSetMetaData .getColumnTypeName (10 )).isEqualTo ("NUMERIC" );
155- assertThat (resultSetMetaData .getColumnTypeName (11 )).isEqualTo ("BIGNUMERIC" );
156- assertThat (resultSetMetaData .getColumnTypeName (12 )).isEqualTo ("TIME" );
157- assertThat (resultSetMetaData .getColumnTypeName (13 )).isEqualTo ("DATE" );
158- }
159-
160- @ Test
161- public void testColumnClassName ()
162- throws SQLException { // match the mapping for all the types in the test dataset
163- for (int colIndex = 1 ; colIndex <= 13 ; colIndex ++) {
164- assertThat (resultSetMetaData .getColumnClassName (colIndex ))
165- .isEqualTo (fieldListClassNames .get (colIndex - 1 ));
166- }
122+ private static Stream <Arguments > columnMetadataProvider () {
123+ return Stream .of (
124+ arguments (1 , Types .BOOLEAN , "BOOL" , "java.lang.Boolean" , 1 , 0 ),
125+ arguments (2 , Types .BIGINT , "INT64" , "java.lang.Long" , 19 , 0 ),
126+ arguments (3 , Types .DOUBLE , "FLOAT64" , "java.lang.Double" , 15 , 0 ),
127+ arguments (4 , Types .NVARCHAR , "STRING" , "java.lang.String" , 0 , 0 ),
128+ arguments (5 , Types .TIMESTAMP , "TIMESTAMP" , "java.sql.Timestamp" , 26 , 6 ),
129+ arguments (6 , Types .VARBINARY , "BYTES" , byte [].class .getName (), 0 , 0 ),
130+ arguments (7 , Types .NVARCHAR , "STRING" , "java.lang.String" , 0 , 0 ),
131+ arguments (8 , Types .ARRAY , "ARRAY" , Array .class .getName (), 0 , 0 ),
132+ arguments (9 , Types .STRUCT , "STRUCT" , "java.sql.Struct" , 0 , 0 ),
133+ arguments (10 , Types .NUMERIC , "NUMERIC" , "java.math.BigDecimal" , 12 , 9 ),
134+ arguments (11 , Types .NUMERIC , "BIGNUMERIC" , "java.math.BigDecimal" , 77 , 38 ),
135+ arguments (12 , Types .TIME , "TIME" , "java.sql.Time" , 15 , 6 ),
136+ arguments (13 , Types .DATE , "DATE" , "java.sql.Date" , 10 , 0 ));
167137 }
168138
169139 @ Test
@@ -179,23 +149,6 @@ public void testResultSetMetadataProperties() throws SQLException {
179149 assertThat (resultSetMetaData .isNullable (4 )).isEqualTo (ResultSetMetaData .columnNullableUnknown );
180150 }
181151
182- @ Test
183- public void testPrecision () throws SQLException {
184- assertThat (resultSetMetaData .getPrecision (1 )).isEqualTo (1 );
185- assertThat (resultSetMetaData .getPrecision (2 )).isEqualTo (19 );
186- assertThat (resultSetMetaData .getPrecision (3 )).isEqualTo (15 );
187- assertThat (resultSetMetaData .getPrecision (4 )).isEqualTo (0 );
188- assertThat (resultSetMetaData .getPrecision (5 )).isEqualTo (26 );
189- assertThat (resultSetMetaData .getPrecision (6 )).isEqualTo (0 );
190- assertThat (resultSetMetaData .getPrecision (7 )).isEqualTo (0 );
191- assertThat (resultSetMetaData .getPrecision (8 )).isEqualTo (0 );
192- assertThat (resultSetMetaData .getPrecision (9 )).isEqualTo (0 );
193- assertThat (resultSetMetaData .getPrecision (10 )).isEqualTo (12 );
194- assertThat (resultSetMetaData .getPrecision (11 )).isEqualTo (77 );
195- assertThat (resultSetMetaData .getPrecision (12 )).isEqualTo (15 );
196- assertThat (resultSetMetaData .getPrecision (13 )).isEqualTo (10 );
197- }
198-
199152 @ Test
200153 public void testSigned () throws SQLException {
201154 assertThat (resultSetMetaData .isSigned (4 )).isFalse ();
0 commit comments