Skip to content
This repository was archived by the owner on Mar 23, 2026. It is now read-only.

Commit 62ec3e9

Browse files
committed
chore: Add IT for positional parameter on higher precision timestamp field
1 parent bd5835f commit 62ec3e9

1 file changed

Lines changed: 46 additions & 22 deletions

File tree

google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/it/ITHighPrecisionTimestamp.java

Lines changed: 46 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,14 @@
5151
import org.junit.jupiter.api.BeforeAll;
5252
import org.junit.jupiter.api.Test;
5353

54-
public class ITHighPrecisionTimestamp {
54+
class ITHighPrecisionTimestamp {
5555

56-
public static final String TEST_HIGH_PRECISION_TIMESTAMP_TABLE_NAME =
57-
"test_high_precision_timestamp";
56+
private static final String TEST_HIGH_PRECISION_TIMESTAMP_TABLE_NAME =
57+
generateTempTableName("test_high_precision_timestamp");
5858
private static BigQuery bigquery;
5959
private static final String DATASET = RemoteBigQueryHelper.generateDatasetName();
6060
private static TableId defaultTableId;
61-
public static final long TIMESTAMP_PICOSECOND_PRECISION = 12L;
61+
private static final long TIMESTAMP_PICOSECOND_PRECISION = 12L;
6262
private static final Field TIMESTAMP_HIGH_PRECISION_FIELD_SCHEMA =
6363
Field.newBuilder("timestampHighPrecisionField", StandardSQLTypeName.TIMESTAMP)
6464
.setTimestampPrecision(TIMESTAMP_PICOSECOND_PRECISION)
@@ -69,8 +69,12 @@ public class ITHighPrecisionTimestamp {
6969
private static final String TIMESTAMP2 = "1970-01-01T12:34:56.123456789123Z";
7070
private static final String TIMESTAMP3 = "2000-01-01T12:34:56.123456789123Z";
7171

72+
private static String generateTempTableName(String prefix) {
73+
return String.format("%s_%s", prefix, UUID.randomUUID().toString().substring(0, 8));
74+
}
75+
7276
@BeforeAll
73-
public static void beforeClass() {
77+
static void beforeClass() {
7478
BigQueryOptions.Builder builder =
7579
BigQueryOptions.newBuilder()
7680
.setDataFormatOptions(
@@ -111,21 +115,15 @@ public static void beforeClass() {
111115
}
112116

113117
@AfterAll
114-
public static void afterClass() {
118+
static void afterClass() {
115119
if (bigquery != null) {
116120
bigquery.delete(defaultTableId);
117121
RemoteBigQueryHelper.forceDelete(bigquery, DATASET);
118122
}
119123
}
120124

121-
private static String generateTempTableName() {
122-
return String.format(
123-
"insert_temp_%s%s",
124-
UUID.randomUUID().toString().substring(0, 6), TEST_HIGH_PRECISION_TIMESTAMP_TABLE_NAME);
125-
}
126-
127125
@Test
128-
public void query_highPrecisionTimestamp() throws InterruptedException {
126+
void query_highPrecisionTimestamp() throws InterruptedException {
129127
String sql =
130128
String.format("SELECT timestampHighPrecisionField FROM %s;", defaultTableId.getTable());
131129
QueryJobConfiguration queryJobConfiguration =
@@ -147,10 +145,10 @@ public void query_highPrecisionTimestamp() throws InterruptedException {
147145
}
148146

149147
@Test
150-
public void insert_highPrecisionTimestamp_ISOValidFormat() {
148+
void insert_highPrecisionTimestamp_ISOValidFormat() {
151149
StandardTableDefinition tableDefinition =
152150
StandardTableDefinition.newBuilder().setSchema(TABLE_SCHEMA).build();
153-
String tempTableName = generateTempTableName();
151+
String tempTableName = generateTempTableName("insert_temp");
154152
TableId tableId = TableId.of(DATASET, tempTableName);
155153
Table createdTable = bigquery.create(TableInfo.of(tableId, tableDefinition));
156154
assertNotNull(createdTable);
@@ -166,10 +164,10 @@ public void insert_highPrecisionTimestamp_ISOValidFormat() {
166164
}
167165

168166
@Test
169-
public void insert_highPrecisionTimestamp_invalidFormats() {
167+
void insert_highPrecisionTimestamp_invalidFormats() {
170168
StandardTableDefinition tableDefinition =
171169
StandardTableDefinition.newBuilder().setSchema(TABLE_SCHEMA).build();
172-
String tempTable = generateTempTableName();
170+
String tempTable = generateTempTableName("insert_temp");
173171
TableId tableId = TableId.of(DATASET, tempTable);
174172
Table createdTable = bigquery.create(TableInfo.of(tableId, tableDefinition));
175173
assertNotNull(createdTable);
@@ -207,7 +205,7 @@ public void insert_highPrecisionTimestamp_invalidFormats() {
207205
}
208206

209207
@Test
210-
public void queryNamedParameter_highPrecisionTimestamp() throws InterruptedException {
208+
void queryNamedParameter_highPrecisionTimestamp() throws InterruptedException {
211209
String query =
212210
String.format(
213211
"SELECT * FROM %s.%s WHERE timestampHighPrecisionField >= CAST(@timestampParam AS TIMESTAMP(12))",
@@ -236,7 +234,34 @@ public void queryNamedParameter_highPrecisionTimestamp() throws InterruptedExcep
236234
}
237235

238236
@Test
239-
public void queryNamedParameter_highPrecisionTimestamp_microsLong() throws InterruptedException {
237+
void queryPositionalParameter_highPrecisionTimestamp() throws InterruptedException {
238+
String query =
239+
String.format(
240+
"SELECT * FROM %s.%s WHERE timestampHighPrecisionField >= CAST(? AS TIMESTAMP(12))",
241+
DATASET, defaultTableId.getTable());
242+
243+
QueryJobConfiguration queryConfig =
244+
QueryJobConfiguration.newBuilder(query)
245+
.setDefaultDataset(DATASET)
246+
.setUseLegacySql(false)
247+
.addPositionalParameter(QueryParameterValue.timestamp("2000-01-01 12:34:56.123456789123Z"))
248+
.build();
249+
250+
TableResult result = bigquery.query(queryConfig);
251+
assertNotNull(result);
252+
String[] expected = new String[] {TIMESTAMP1, TIMESTAMP3};
253+
List<String> timestamps =
254+
StreamSupport.stream(result.getValues().spliterator(), false)
255+
.map(x -> (String) x.get(0).getValue())
256+
.collect(Collectors.toList());
257+
assertEquals(expected.length, timestamps.size());
258+
for (int i = 0; i < timestamps.size(); i++) {
259+
assertEquals(expected[i], timestamps.get(i));
260+
}
261+
}
262+
263+
@Test
264+
void queryNamedParameter_highPrecisionTimestamp_microsLong() throws InterruptedException {
240265
String query =
241266
String.format(
242267
"SELECT * FROM %s.%s WHERE timestampHighPrecisionField >= CAST(@timestampParam AS TIMESTAMP(12))",
@@ -269,8 +294,7 @@ public void queryNamedParameter_highPrecisionTimestamp_microsLong() throws Inter
269294
}
270295

271296
@Test
272-
public void queryNamedParameter_highPrecisionTimestamp_microsISOString()
273-
throws InterruptedException {
297+
void queryNamedParameter_highPrecisionTimestamp_microsISOString() throws InterruptedException {
274298
String query =
275299
String.format(
276300
"SELECT * FROM %s.%s WHERE timestampHighPrecisionField >= CAST(@timestampParam AS TIMESTAMP(12))",
@@ -298,7 +322,7 @@ public void queryNamedParameter_highPrecisionTimestamp_microsISOString()
298322
}
299323

300324
@Test
301-
public void queryNamedParameter_highPrecisionTimestamp_noExplicitCastInQuery_fails() {
325+
void queryNamedParameter_highPrecisionTimestamp_noExplicitCastInQuery_fails() {
302326
String query =
303327
String.format(
304328
"SELECT * FROM %s.%s WHERE timestampHighPrecisionField >= @timestampParam",

0 commit comments

Comments
 (0)