@@ -2977,6 +2977,121 @@ func TestRowAccessPolicy(t *testing.T) {
29772977 }
29782978}
29792979
2980+ func TestQueryWithoutDestinationTable (t * testing.T ) {
2981+ ctx := context .Background ()
2982+
2983+ const (
2984+ projectName = "test"
2985+ )
2986+
2987+ bqServer , err := server .New (server .TempStorage )
2988+ if err != nil {
2989+ t .Fatal (err )
2990+ }
2991+ if err := bqServer .SetProject (projectName ); err != nil {
2992+ t .Fatal (err )
2993+ }
2994+ if err := bqServer .Load (server .YAMLSource (filepath .Join ("testdata" , "data.yaml" ))); err != nil {
2995+ t .Fatal (err )
2996+ }
2997+
2998+ testServer := bqServer .TestServer ()
2999+ defer func () {
3000+ testServer .Close ()
3001+ bqServer .Stop (ctx )
3002+ }()
3003+
3004+ client , err := bigquery .NewClient (
3005+ ctx ,
3006+ projectName ,
3007+ option .WithEndpoint (testServer .URL ),
3008+ option .WithoutAuthentication (),
3009+ )
3010+ if err != nil {
3011+ t .Fatal (err )
3012+ }
3013+ defer client .Close ()
3014+
3015+ query := client .Query ("SELECT id, name FROM dataset1.table_a WHERE id = 1" )
3016+ job , err := query .Run (ctx )
3017+ if err != nil {
3018+ t .Fatal (err )
3019+ }
3020+ if _ , err := job .Wait (ctx ); err != nil {
3021+ t .Fatal (err )
3022+ }
3023+
3024+ config , err := job .Config ()
3025+ if err != nil {
3026+ t .Fatal (err )
3027+ }
3028+ qConfig , ok := config .(* bigquery.QueryConfig )
3029+ if ! ok {
3030+ t .Fatal ("expected QueryConfig" )
3031+ }
3032+ if qConfig .Dst == nil {
3033+ t .Fatal ("expected destination table to be set" )
3034+ }
3035+ if qConfig .Dst .ProjectID != projectName {
3036+ t .Fatalf ("expected project ID %s, got %s" , projectName , qConfig .Dst .ProjectID )
3037+ }
3038+
3039+ expectedDatasetID := "ds_" + job .ID ()
3040+ if qConfig .Dst .DatasetID != expectedDatasetID {
3041+ t .Fatalf ("expected dataset ID %s, got %s" , expectedDatasetID , qConfig .Dst .DatasetID )
3042+ }
3043+ if qConfig .Dst .TableID != job .ID () {
3044+ t .Fatalf ("expected table ID %s, got %s" , job .ID (), qConfig .Dst .TableID )
3045+ }
3046+
3047+ dynamicTableQuery := client .Query (fmt .Sprintf ("SELECT * FROM `%s.%s.%s`" ,
3048+ qConfig .Dst .ProjectID , qConfig .Dst .DatasetID , qConfig .Dst .TableID ))
3049+ it , err := dynamicTableQuery .Read (ctx )
3050+ if err != nil {
3051+ t .Fatal (err )
3052+ }
3053+ var rowCount int
3054+ for {
3055+ var row []bigquery.Value
3056+ if err := it .Next (& row ); err != nil {
3057+ if err == iterator .Done {
3058+ break
3059+ }
3060+ t .Fatal (err )
3061+ }
3062+ rowCount ++
3063+ }
3064+ if rowCount != 1 {
3065+ t .Fatalf ("expected 1 row in dynamic destination table, got %d" , rowCount )
3066+ }
3067+
3068+ query2 := client .Query ("SELECT id FROM dataset1.table_a WHERE id = 2" )
3069+ job2 , err := query2 .Run (ctx )
3070+ if err != nil {
3071+ t .Fatal (err )
3072+ }
3073+ if _ , err := job2 .Wait (ctx ); err != nil {
3074+ t .Fatal (err )
3075+ }
3076+
3077+ config2 , err := job2 .Config ()
3078+ if err != nil {
3079+ t .Fatal (err )
3080+ }
3081+ qConfig2 := config2 .(* bigquery.QueryConfig )
3082+ if qConfig2 .Dst == nil {
3083+ t .Fatal ("expected destination table to be set for second job" )
3084+ }
3085+ if qConfig .Dst .DatasetID == qConfig2 .Dst .DatasetID {
3086+ t .Fatalf ("expected different dataset IDs, both got %s" , qConfig .Dst .DatasetID )
3087+ }
3088+
3089+ expectedDatasetID2 := "ds_" + job2 .ID ()
3090+ if qConfig2 .Dst .DatasetID != expectedDatasetID2 {
3091+ t .Fatalf ("expected dataset ID %s, got %s" , expectedDatasetID2 , qConfig2 .Dst .DatasetID )
3092+ }
3093+ }
3094+
29803095func TestPatchTable (t * testing.T ) {
29813096 ctx := context .Background ()
29823097
0 commit comments