Skip to content

Commit

Permalink
Merge pull request #5 from m-mizutani/feature/support-bigquery-tag
Browse files Browse the repository at this point in the history
Support bigquery tag
  • Loading branch information
m-mizutani authored Mar 1, 2024
2 parents 233ba80 + 53ffed4 commit 58d6aa5
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 1 deletion.
13 changes: 12 additions & 1 deletion infer.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,18 @@ func inferObject(data reflect.Value) (bigquery.Schema, error) {
continue
}

fieldSchema, err := inferField(data.Type().Field(i).Name, field)
var name string
tag := fieldInfo.Tag.Get("bigquery")
switch tag {
case "":
name = fieldInfo.Name
case "-":
continue
default:
name = tag
}

fieldSchema, err := inferField(name, field)
if err != nil {
return nil, err
}
Expand Down
82 changes: 82 additions & 0 deletions infer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -506,3 +506,85 @@ func TestInferMixIn(t *testing.T) {
gt.Equal(t, v.Type, bigquery.StringFieldType)
})
}

func TestTag(t *testing.T) {
testCases := map[string]struct {
input any
expect bigquery.Schema
}{
"tagged struct": {
input: struct {
Str string `bigquery:"blue"`
Int int `bigquery:"orange"`
}{
Str: "a",
Int: 1,
},
expect: bigquery.Schema{
{
Name: "blue",
Type: bigquery.StringFieldType,
},
{
Name: "orange",
Type: bigquery.IntegerFieldType,
},
},
},
"tagged nested struct": {
input: struct {
Nest struct {
Str string `bigquery:"blue"`
Int int `bigquery:"orange"`
}
}{
Nest: struct {
Str string `bigquery:"blue"`
Int int `bigquery:"orange"`
}{
Str: "a",
Int: 1,
},
},
expect: bigquery.Schema{
{
Name: "Nest",
Type: bigquery.RecordFieldType,
Schema: bigquery.Schema{
{
Name: "blue",
Type: bigquery.StringFieldType,
},
{
Name: "orange",
Type: bigquery.IntegerFieldType,
},
},
},
},
},
"skip field": {
input: struct {
Str string `bigquery:"-"`
Int int `bigquery:"orange"`
}{
Str: "a",
Int: 1,
},
expect: bigquery.Schema{
{
Name: "orange",
Type: bigquery.IntegerFieldType,
},
},
},
}

for name, tc := range testCases {
t.Run(name, func(t *testing.T) {
schemas, err := bqs.Infer(tc.input)
gt.NoError(t, err)
gt.True(t, bqs.Equal(schemas, tc.expect))
})
}
}

0 comments on commit 58d6aa5

Please sign in to comment.