blob: 8753e70334e1c244ff605905ce63d8eaa42c9c5d [file] [log] [blame]
// Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package bigquery
import (
"context"
"strings"
"testing"
bq "cloud.google.com/go/bigquery"
test "golang.org/x/pkgsite-metrics/internal/testing"
)
func TestIsNotFoundError(t *testing.T) {
test.NeedsIntegrationEnv(t)
client, err := bq.NewClient(context.Background(), "go-ecosystem")
if err != nil {
t.Fatal(err)
}
dataset := client.Dataset("nope")
_, err = dataset.Metadata(context.Background())
if !isNotFoundError(err) {
t.Errorf("got false, want true for %v", err)
}
}
func TestPartitionQuery(t *testing.T) {
// Remove newlines and extra white
clean := func(s string) string {
return strings.Join(strings.Fields(s), " ")
}
for i, test := range []struct {
q PartitionQuery
want string
}{
{
PartitionQuery{
From: "full.table",
Columns: "*",
PartitionOn: "p",
OrderBy: "o",
},
`SELECT * EXCEPT (rownum)
FROM ( SELECT *, ROW_NUMBER() OVER ( PARTITION BY p ORDER BY o ) AS rownum
FROM full.table ) WHERE rownum = 1`,
},
{
PartitionQuery{
From: "full.table",
Columns: "a, b, c",
PartitionOn: "p",
OrderBy: "o",
Where: "name = 'foo' AND args = 'bar baz'",
},
`SELECT * EXCEPT (rownum)
FROM ( SELECT a, b, c, ROW_NUMBER() OVER ( PARTITION BY p ORDER BY o ) AS rownum
FROM full.table
WHERE name = 'foo' AND args = 'bar baz'
) WHERE rownum = 1`,
},
} {
got := clean(test.q.String())
want := clean(test.want)
if got != want {
t.Errorf("#%d:\ngot %s\nwant %s", i, got, want)
}
}
}
func TestSchemaString(t *testing.T) {
type nest struct {
N []byte
M float64
}
type s struct {
A string
B int
C []bool
D nest
}
const want = "A,req:STRING;B,req:INTEGER;C,rep:BOOLEAN;D,req:(M,req:FLOAT;N,req:BYTES)"
schema, err := InferSchema(s{})
if err != nil {
t.Fatal(err)
}
got := SchemaString(schema)
if got != want {
t.Errorf("\ngot %q\nwant %q", got, want)
}
// The order of fields should not matter
type p struct {
A string
D nest
C []bool
B int
}
schema, err = InferSchema(p{})
if err != nil {
t.Fatal(err)
}
got = SchemaString(schema)
if got != want {
t.Errorf("\ngot %q\nwant %q", got, want)
}
}