@@ -6227,27 +6227,80 @@ public void testAlreadyExistJobExceptionHandling() throws InterruptedException {
6227
6227
6228
6228
@ Test
6229
6229
public void testStatelessQueries () throws InterruptedException {
6230
+ // Create local BigQuery to not contaminate global test parameters.
6231
+ RemoteBigQueryHelper bigqueryHelper = RemoteBigQueryHelper .create ();
6232
+ BigQuery bigQuery = bigqueryHelper .getOptions ().getService ();
6233
+
6230
6234
// simulate setting the QUERY_PREVIEW_ENABLED environment variable
6231
- bigquery .getOptions ().setQueryPreviewEnabled ("TRUE" );
6232
- assertNull (executeSimpleQuery ().getJobId ());
6235
+ bigQuery .getOptions ().setQueryPreviewEnabled ("TRUE" );
6236
+ assertNull (executeSimpleQuery (bigQuery ).getJobId ());
6233
6237
6234
6238
// the flag should be case-insensitive
6235
- bigquery .getOptions ().setQueryPreviewEnabled ("tRuE" );
6236
- assertNull (executeSimpleQuery ().getJobId ());
6239
+ bigQuery .getOptions ().setQueryPreviewEnabled ("tRuE" );
6240
+ assertNull (executeSimpleQuery (bigQuery ).getJobId ());
6237
6241
6238
6242
// any other values won't enable optional job creation mode
6239
- bigquery .getOptions ().setQueryPreviewEnabled ("test_value" );
6240
- assertNotNull (executeSimpleQuery ().getJobId ());
6243
+ bigQuery .getOptions ().setQueryPreviewEnabled ("test_value" );
6244
+ assertNotNull (executeSimpleQuery (bigQuery ).getJobId ());
6241
6245
6242
6246
// reset the flag
6243
- bigquery .getOptions ().setQueryPreviewEnabled (null );
6244
- assertNotNull (executeSimpleQuery ().getJobId ());
6247
+ bigQuery .getOptions ().setQueryPreviewEnabled (null );
6248
+ assertNotNull (executeSimpleQuery (bigQuery ).getJobId ());
6245
6249
}
6246
6250
6247
- private TableResult executeSimpleQuery () throws InterruptedException {
6251
+ private TableResult executeSimpleQuery (BigQuery bigQuery ) throws InterruptedException {
6248
6252
String query = "SELECT 1 as one" ;
6249
6253
QueryJobConfiguration config = QueryJobConfiguration .newBuilder (query ).build ();
6250
- TableResult result = bigquery .query (config );
6254
+ TableResult result = bigQuery .query (config );
6251
6255
return result ;
6252
6256
}
6257
+
6258
+ @ Test
6259
+ public void testStatelessQueriesWithLocation () throws Exception {
6260
+ // This test validates BigQueryOption location is used for stateless query by verifying that the
6261
+ // stateless query fails when the BigQueryOption location does not match the dataset location.
6262
+ String location = "EU" ;
6263
+ String wrongLocation = "US" ;
6264
+
6265
+ RemoteBigQueryHelper bigqueryHelper = RemoteBigQueryHelper .create ();
6266
+ BigQuery bigQuery =
6267
+ bigqueryHelper .getOptions ().toBuilder ().setLocation (location ).build ().getService ();
6268
+
6269
+ Dataset dataset =
6270
+ bigQuery .create (
6271
+ DatasetInfo .newBuilder ("locationset_" + UUID .randomUUID ().toString ().replace ("-" , "_" ))
6272
+ .setLocation (location )
6273
+ .build ());
6274
+ try {
6275
+ TableId tableId = TableId .of (dataset .getDatasetId ().getDataset (), "sometable" );
6276
+ Schema schema = Schema .of (Field .of ("name" , LegacySQLTypeName .STRING ));
6277
+ TableDefinition tableDef = StandardTableDefinition .of (schema );
6278
+ Table table = bigQuery .create (TableInfo .newBuilder (tableId , tableDef ).build ());
6279
+
6280
+ String query =
6281
+ String .format (
6282
+ "SELECT * FROM `%s.%s.%s`" ,
6283
+ table .getTableId ().getProject (),
6284
+ table .getTableId ().getDataset (),
6285
+ table .getTableId ().getTable ());
6286
+
6287
+ // Test stateless query when BigQueryOption location matches dataset location.
6288
+ bigQuery .getOptions ().setQueryPreviewEnabled ("TRUE" );
6289
+ TableResult tb = bigQuery .query (QueryJobConfiguration .of (query ));
6290
+ assertNull (tb .getJobId ());
6291
+
6292
+ // Test stateless query when BigQueryOption location does not match dataset location.
6293
+ try {
6294
+ BigQuery bigQueryWrongLocation =
6295
+ bigqueryHelper .getOptions ().toBuilder ().setLocation (wrongLocation ).build ().getService ();
6296
+ bigQueryWrongLocation .getOptions ().setQueryPreviewEnabled ("TRUE" );
6297
+ bigQueryWrongLocation .query (QueryJobConfiguration .of (query ));
6298
+ fail ("querying a table with wrong location shouldn't work" );
6299
+ } catch (BigQueryException e ) {
6300
+ // Nothing to do
6301
+ }
6302
+ } finally {
6303
+ bigQuery .delete (dataset .getDatasetId (), DatasetDeleteOption .deleteContents ());
6304
+ }
6305
+ }
6253
6306
}
0 commit comments