diff --git a/.circleci/config.yml b/.circleci/config.yml index 4442aae4..b9fe0aa6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,7 @@ version: 2.1 jobs: test: docker: - - image: golang:1.23-bullseye + - image: golang:1.24-bullseye environment: SPANNER_EMULATOR_HOST: localhost:9010 SPANNER_EMULATOR_HOST_REST: localhost:9020 @@ -55,7 +55,7 @@ jobs: v2test: docker: - - image: golang:1.23-bullseye + - image: golang:1.24-bullseye environment: SPANNER_EMULATOR_HOST: localhost:9010 SPANNER_EMULATOR_HOST_REST: localhost:9020 @@ -100,7 +100,7 @@ jobs: make -C v2 check-diff check_lint: docker: - - image: golang:1.23-bullseye + - image: golang:1.24-bullseye working_directory: /go/src/github.com/cloudspannerecosystem/yo steps: - checkout @@ -110,7 +110,7 @@ jobs: make check_lint check_go_mod: docker: - - image: golang:1.23-bullseye + - image: golang:1.24-bullseye working_directory: /go/src/github.com/cloudspannerecosystem/yo steps: - checkout diff --git a/loaders/spanner.go b/loaders/spanner.go index 2b935428..a3ad0258 100644 --- a/loaders/spanner.go +++ b/loaders/spanner.go @@ -191,7 +191,8 @@ func SpanParseType(dt string, nullable bool) (int, string, string) { default: if strings.HasPrefix(dt, "ARRAY<") { eleDataType := strings.TrimSuffix(strings.TrimPrefix(dt, "ARRAY<"), ">") - _, _, eleTyp := SpanParseType(eleDataType, false) + // Array type can contain NULL elements. See https://cloud.google.com/spanner/docs/reference/standard-sql/data-types#array_nulls + _, _, eleTyp := SpanParseType(eleDataType, true) typ, nilVal = "[]"+eleTyp, "nil" if !nullable { nilVal = typ + "{}" diff --git a/test/integration_test.go b/test/integration_test.go index 82becb5e..a362bba5 100644 --- a/test/integration_test.go +++ b/test/integration_test.go @@ -338,20 +338,20 @@ func TestDefaultFullType(t *testing.T) { }, FTJSON: json, FTJSONNull: json, - FTArrayStringNull: []string{"xxx1", "yyy1"}, - FTArrayString: []string{"xxx1", "yyy1"}, - FTArrayBoolNull: []bool{true, false}, - FTArrayBool: []bool{true, false}, + FTArrayStringNull: []spanner.NullString{{StringVal: "xxx1", Valid: true}, {StringVal: "yyy1", Valid: true}}, + FTArrayString: []spanner.NullString{{StringVal: "xxx1", Valid: true}, {StringVal: "yyy1", Valid: true}}, + FTArrayBoolNull: []spanner.NullBool{{Bool: true, Valid: true}, {Bool: false, Valid: true}}, + FTArrayBool: []spanner.NullBool{{Bool: true, Valid: true}, {Bool: false, Valid: true}}, FTArrayBytesNull: [][]byte{[]byte("xxx1"), []byte("yyy1")}, FTArrayBytes: [][]byte{[]byte("xxx1"), []byte("yyy1")}, - FTArrayTimestampNull: []time.Time{now, tomorrow}, - FTArrayTimestamp: []time.Time{now, tomorrow}, - FTArrayIntNull: []int64{100, 200}, - FTArrayInt: []int64{100, 200}, - FTArrayFloatNull: []float64{0.111, 0.222}, - FTArrayFloat: []float64{0.111, 0.222}, - FTArrayDateNull: []civil.Date{date, nextdate}, - FTArrayDate: []civil.Date{date, nextdate}, + FTArrayTimestampNull: []spanner.NullTime{{Time: now, Valid: true}, {Time: tomorrow, Valid: true}}, + FTArrayTimestamp: []spanner.NullTime{{Time: now, Valid: true}, {Time: tomorrow, Valid: true}}, + FTArrayIntNull: []spanner.NullInt64{{Int64: 100, Valid: true}, {Int64: 200, Valid: true}}, + FTArrayInt: []spanner.NullInt64{{Int64: 100, Valid: true}, {Int64: 200, Valid: true}}, + FTArrayFloatNull: []spanner.NullFloat64{{Float64: 0.111, Valid: true}, {Float64: 0.222, Valid: true}}, + FTArrayFloat: []spanner.NullFloat64{{Float64: 0.111, Valid: true}, {Float64: 0.222, Valid: true}}, + FTArrayDateNull: []spanner.NullDate{{Date: date, Valid: true}, {Date: nextdate, Valid: true}}, + FTArrayDate: []spanner.NullDate{{Date: date, Valid: true}, {Date: nextdate, Valid: true}}, FTArrayJSONNull: []spanner.NullJSON{json, jsonNull}, FTArrayJSON: []spanner.NullJSON{json, jsonNull}, }, @@ -375,20 +375,20 @@ func TestDefaultFullType(t *testing.T) { FTDateNull: spanner.NullDate{}, FTJSON: json, FTJSONNull: jsonNull, - FTArrayStringNull: []string{"xxx2", "yyy2"}, - FTArrayString: []string{"xxx2", "yyy2"}, + FTArrayStringNull: []spanner.NullString{{StringVal: "xxx2", Valid: true}, {StringVal: "yyy2", Valid: true}}, + FTArrayString: []spanner.NullString{{StringVal: "xxx2", Valid: true}, {StringVal: "yyy2", Valid: true}}, FTArrayBoolNull: nil, - FTArrayBool: []bool{true, false}, + FTArrayBool: []spanner.NullBool{{Bool: true, Valid: true}, {Bool: false, Valid: true}}, FTArrayBytesNull: nil, FTArrayBytes: [][]byte{[]byte("xxx2"), []byte("yyy2")}, FTArrayTimestampNull: nil, - FTArrayTimestamp: []time.Time{now, tomorrow}, + FTArrayTimestamp: []spanner.NullTime{{Time: now, Valid: true}, {Time: tomorrow, Valid: true}}, FTArrayIntNull: nil, - FTArrayInt: []int64{100, 200}, + FTArrayInt: []spanner.NullInt64{{Int64: 100, Valid: true}, {Int64: 200, Valid: true}}, FTArrayFloatNull: nil, - FTArrayFloat: []float64{0.111, 0.222}, + FTArrayFloat: []spanner.NullFloat64{{Float64: 0.111, Valid: true}, {Float64: 0.222, Valid: true}}, FTArrayDateNull: nil, - FTArrayDate: []civil.Date{date, nextdate}, + FTArrayDate: []spanner.NullDate{{Date: date, Valid: true}, {Date: nextdate, Valid: true}}, FTArrayJSONNull: nil, FTArrayJSON: []spanner.NullJSON{json, jsonNull}, }, @@ -412,20 +412,20 @@ func TestDefaultFullType(t *testing.T) { FTDateNull: spanner.NullDate{}, FTJSON: json, FTJSONNull: jsonNull, - FTArrayStringNull: []string{}, - FTArrayString: []string{}, - FTArrayBoolNull: []bool{}, - FTArrayBool: []bool{}, + FTArrayStringNull: []spanner.NullString{}, + FTArrayString: []spanner.NullString{}, + FTArrayBoolNull: []spanner.NullBool{}, + FTArrayBool: []spanner.NullBool{}, FTArrayBytesNull: [][]byte{}, FTArrayBytes: [][]byte{}, - FTArrayTimestampNull: []time.Time{}, - FTArrayTimestamp: []time.Time{}, - FTArrayIntNull: []int64{}, - FTArrayInt: []int64{}, - FTArrayFloatNull: []float64{}, - FTArrayFloat: []float64{}, - FTArrayDateNull: []civil.Date{}, - FTArrayDate: []civil.Date{}, + FTArrayTimestampNull: []spanner.NullTime{}, + FTArrayTimestamp: []spanner.NullTime{}, + FTArrayIntNull: []spanner.NullInt64{}, + FTArrayInt: []spanner.NullInt64{}, + FTArrayFloatNull: []spanner.NullFloat64{}, + FTArrayFloat: []spanner.NullFloat64{}, + FTArrayDateNull: []spanner.NullDate{}, + FTArrayDate: []spanner.NullDate{}, FTArrayJSONNull: []spanner.NullJSON{}, FTArrayJSON: []spanner.NullJSON{}, }, diff --git a/test/testmodels/customtypes/fulltype.yo.go b/test/testmodels/customtypes/fulltype.yo.go index e46e9b73..33e830ff 100644 --- a/test/testmodels/customtypes/fulltype.yo.go +++ b/test/testmodels/customtypes/fulltype.yo.go @@ -16,39 +16,39 @@ import ( // FullType represents a row from 'FullTypes'. type FullType struct { - PKey string `spanner:"PKey" json:"PKey"` // PKey - FTString string `spanner:"FTString" json:"FTString"` // FTString - FTStringNull spanner.NullString `spanner:"FTStringNull" json:"FTStringNull"` // FTStringNull - FTBool bool `spanner:"FTBool" json:"FTBool"` // FTBool - FTBoolNull spanner.NullBool `spanner:"FTBoolNull" json:"FTBoolNull"` // FTBoolNull - FTBytes []byte `spanner:"FTBytes" json:"FTBytes"` // FTBytes - FTBytesNull []byte `spanner:"FTBytesNull" json:"FTBytesNull"` // FTBytesNull - FTTimestamp time.Time `spanner:"FTTimestamp" json:"FTTimestamp"` // FTTimestamp - FTTimestampNull spanner.NullTime `spanner:"FTTimestampNull" json:"FTTimestampNull"` // FTTimestampNull - FTInt int32 `spanner:"FTInt" json:"FTInt"` // FTInt - FTIntNull spanner.NullInt64 `spanner:"FTIntNull" json:"FTIntNull"` // FTIntNull - FTFloat float32 `spanner:"FTFloat" json:"FTFloat"` // FTFloat - FTFloatNull spanner.NullFloat64 `spanner:"FTFloatNull" json:"FTFloatNull"` // FTFloatNull - FTDate civil.Date `spanner:"FTDate" json:"FTDate"` // FTDate - FTDateNull spanner.NullDate `spanner:"FTDateNull" json:"FTDateNull"` // FTDateNull - FTJSON spanner.NullJSON `spanner:"FTJson" json:"FTJson"` // FTJson - FTJSONNull spanner.NullJSON `spanner:"FTJsonNull" json:"FTJsonNull"` // FTJsonNull - FTArrayStringNull []string `spanner:"FTArrayStringNull" json:"FTArrayStringNull"` // FTArrayStringNull - FTArrayString []string `spanner:"FTArrayString" json:"FTArrayString"` // FTArrayString - FTArrayBoolNull []bool `spanner:"FTArrayBoolNull" json:"FTArrayBoolNull"` // FTArrayBoolNull - FTArrayBool []bool `spanner:"FTArrayBool" json:"FTArrayBool"` // FTArrayBool - FTArrayBytesNull [][]byte `spanner:"FTArrayBytesNull" json:"FTArrayBytesNull"` // FTArrayBytesNull - FTArrayBytes [][]byte `spanner:"FTArrayBytes" json:"FTArrayBytes"` // FTArrayBytes - FTArrayTimestampNull []time.Time `spanner:"FTArrayTimestampNull" json:"FTArrayTimestampNull"` // FTArrayTimestampNull - FTArrayTimestamp []time.Time `spanner:"FTArrayTimestamp" json:"FTArrayTimestamp"` // FTArrayTimestamp - FTArrayIntNull []int64 `spanner:"FTArrayIntNull" json:"FTArrayIntNull"` // FTArrayIntNull - FTArrayInt []int64 `spanner:"FTArrayInt" json:"FTArrayInt"` // FTArrayInt - FTArrayFloatNull []float64 `spanner:"FTArrayFloatNull" json:"FTArrayFloatNull"` // FTArrayFloatNull - FTArrayFloat []float64 `spanner:"FTArrayFloat" json:"FTArrayFloat"` // FTArrayFloat - FTArrayDateNull []civil.Date `spanner:"FTArrayDateNull" json:"FTArrayDateNull"` // FTArrayDateNull - FTArrayDate []civil.Date `spanner:"FTArrayDate" json:"FTArrayDate"` // FTArrayDate - FTArrayJSONNull []spanner.NullJSON `spanner:"FTArrayJsonNull" json:"FTArrayJsonNull"` // FTArrayJsonNull - FTArrayJSON []spanner.NullJSON `spanner:"FTArrayJson" json:"FTArrayJson"` // FTArrayJson + PKey string `spanner:"PKey" json:"PKey"` // PKey + FTString string `spanner:"FTString" json:"FTString"` // FTString + FTStringNull spanner.NullString `spanner:"FTStringNull" json:"FTStringNull"` // FTStringNull + FTBool bool `spanner:"FTBool" json:"FTBool"` // FTBool + FTBoolNull spanner.NullBool `spanner:"FTBoolNull" json:"FTBoolNull"` // FTBoolNull + FTBytes []byte `spanner:"FTBytes" json:"FTBytes"` // FTBytes + FTBytesNull []byte `spanner:"FTBytesNull" json:"FTBytesNull"` // FTBytesNull + FTTimestamp time.Time `spanner:"FTTimestamp" json:"FTTimestamp"` // FTTimestamp + FTTimestampNull spanner.NullTime `spanner:"FTTimestampNull" json:"FTTimestampNull"` // FTTimestampNull + FTInt int32 `spanner:"FTInt" json:"FTInt"` // FTInt + FTIntNull spanner.NullInt64 `spanner:"FTIntNull" json:"FTIntNull"` // FTIntNull + FTFloat float32 `spanner:"FTFloat" json:"FTFloat"` // FTFloat + FTFloatNull spanner.NullFloat64 `spanner:"FTFloatNull" json:"FTFloatNull"` // FTFloatNull + FTDate civil.Date `spanner:"FTDate" json:"FTDate"` // FTDate + FTDateNull spanner.NullDate `spanner:"FTDateNull" json:"FTDateNull"` // FTDateNull + FTJSON spanner.NullJSON `spanner:"FTJson" json:"FTJson"` // FTJson + FTJSONNull spanner.NullJSON `spanner:"FTJsonNull" json:"FTJsonNull"` // FTJsonNull + FTArrayStringNull []spanner.NullString `spanner:"FTArrayStringNull" json:"FTArrayStringNull"` // FTArrayStringNull + FTArrayString []spanner.NullString `spanner:"FTArrayString" json:"FTArrayString"` // FTArrayString + FTArrayBoolNull []spanner.NullBool `spanner:"FTArrayBoolNull" json:"FTArrayBoolNull"` // FTArrayBoolNull + FTArrayBool []spanner.NullBool `spanner:"FTArrayBool" json:"FTArrayBool"` // FTArrayBool + FTArrayBytesNull [][]byte `spanner:"FTArrayBytesNull" json:"FTArrayBytesNull"` // FTArrayBytesNull + FTArrayBytes [][]byte `spanner:"FTArrayBytes" json:"FTArrayBytes"` // FTArrayBytes + FTArrayTimestampNull []spanner.NullTime `spanner:"FTArrayTimestampNull" json:"FTArrayTimestampNull"` // FTArrayTimestampNull + FTArrayTimestamp []spanner.NullTime `spanner:"FTArrayTimestamp" json:"FTArrayTimestamp"` // FTArrayTimestamp + FTArrayIntNull []spanner.NullInt64 `spanner:"FTArrayIntNull" json:"FTArrayIntNull"` // FTArrayIntNull + FTArrayInt []spanner.NullInt64 `spanner:"FTArrayInt" json:"FTArrayInt"` // FTArrayInt + FTArrayFloatNull []spanner.NullFloat64 `spanner:"FTArrayFloatNull" json:"FTArrayFloatNull"` // FTArrayFloatNull + FTArrayFloat []spanner.NullFloat64 `spanner:"FTArrayFloat" json:"FTArrayFloat"` // FTArrayFloat + FTArrayDateNull []spanner.NullDate `spanner:"FTArrayDateNull" json:"FTArrayDateNull"` // FTArrayDateNull + FTArrayDate []spanner.NullDate `spanner:"FTArrayDate" json:"FTArrayDate"` // FTArrayDate + FTArrayJSONNull []spanner.NullJSON `spanner:"FTArrayJsonNull" json:"FTArrayJsonNull"` // FTArrayJsonNull + FTArrayJSON []spanner.NullJSON `spanner:"FTArrayJson" json:"FTArrayJson"` // FTArrayJson } func FullTypePrimaryKeys() []string { diff --git a/test/testmodels/default/fulltype.yo.go b/test/testmodels/default/fulltype.yo.go index 1e3246be..3bef8069 100644 --- a/test/testmodels/default/fulltype.yo.go +++ b/test/testmodels/default/fulltype.yo.go @@ -16,39 +16,39 @@ import ( // FullType represents a row from 'FullTypes'. type FullType struct { - PKey string `spanner:"PKey" json:"PKey"` // PKey - FTString string `spanner:"FTString" json:"FTString"` // FTString - FTStringNull spanner.NullString `spanner:"FTStringNull" json:"FTStringNull"` // FTStringNull - FTBool bool `spanner:"FTBool" json:"FTBool"` // FTBool - FTBoolNull spanner.NullBool `spanner:"FTBoolNull" json:"FTBoolNull"` // FTBoolNull - FTBytes []byte `spanner:"FTBytes" json:"FTBytes"` // FTBytes - FTBytesNull []byte `spanner:"FTBytesNull" json:"FTBytesNull"` // FTBytesNull - FTTimestamp time.Time `spanner:"FTTimestamp" json:"FTTimestamp"` // FTTimestamp - FTTimestampNull spanner.NullTime `spanner:"FTTimestampNull" json:"FTTimestampNull"` // FTTimestampNull - FTInt int64 `spanner:"FTInt" json:"FTInt"` // FTInt - FTIntNull spanner.NullInt64 `spanner:"FTIntNull" json:"FTIntNull"` // FTIntNull - FTFloat float64 `spanner:"FTFloat" json:"FTFloat"` // FTFloat - FTFloatNull spanner.NullFloat64 `spanner:"FTFloatNull" json:"FTFloatNull"` // FTFloatNull - FTDate civil.Date `spanner:"FTDate" json:"FTDate"` // FTDate - FTDateNull spanner.NullDate `spanner:"FTDateNull" json:"FTDateNull"` // FTDateNull - FTJSON spanner.NullJSON `spanner:"FTJson" json:"FTJson"` // FTJson - FTJSONNull spanner.NullJSON `spanner:"FTJsonNull" json:"FTJsonNull"` // FTJsonNull - FTArrayStringNull []string `spanner:"FTArrayStringNull" json:"FTArrayStringNull"` // FTArrayStringNull - FTArrayString []string `spanner:"FTArrayString" json:"FTArrayString"` // FTArrayString - FTArrayBoolNull []bool `spanner:"FTArrayBoolNull" json:"FTArrayBoolNull"` // FTArrayBoolNull - FTArrayBool []bool `spanner:"FTArrayBool" json:"FTArrayBool"` // FTArrayBool - FTArrayBytesNull [][]byte `spanner:"FTArrayBytesNull" json:"FTArrayBytesNull"` // FTArrayBytesNull - FTArrayBytes [][]byte `spanner:"FTArrayBytes" json:"FTArrayBytes"` // FTArrayBytes - FTArrayTimestampNull []time.Time `spanner:"FTArrayTimestampNull" json:"FTArrayTimestampNull"` // FTArrayTimestampNull - FTArrayTimestamp []time.Time `spanner:"FTArrayTimestamp" json:"FTArrayTimestamp"` // FTArrayTimestamp - FTArrayIntNull []int64 `spanner:"FTArrayIntNull" json:"FTArrayIntNull"` // FTArrayIntNull - FTArrayInt []int64 `spanner:"FTArrayInt" json:"FTArrayInt"` // FTArrayInt - FTArrayFloatNull []float64 `spanner:"FTArrayFloatNull" json:"FTArrayFloatNull"` // FTArrayFloatNull - FTArrayFloat []float64 `spanner:"FTArrayFloat" json:"FTArrayFloat"` // FTArrayFloat - FTArrayDateNull []civil.Date `spanner:"FTArrayDateNull" json:"FTArrayDateNull"` // FTArrayDateNull - FTArrayDate []civil.Date `spanner:"FTArrayDate" json:"FTArrayDate"` // FTArrayDate - FTArrayJSONNull []spanner.NullJSON `spanner:"FTArrayJsonNull" json:"FTArrayJsonNull"` // FTArrayJsonNull - FTArrayJSON []spanner.NullJSON `spanner:"FTArrayJson" json:"FTArrayJson"` // FTArrayJson + PKey string `spanner:"PKey" json:"PKey"` // PKey + FTString string `spanner:"FTString" json:"FTString"` // FTString + FTStringNull spanner.NullString `spanner:"FTStringNull" json:"FTStringNull"` // FTStringNull + FTBool bool `spanner:"FTBool" json:"FTBool"` // FTBool + FTBoolNull spanner.NullBool `spanner:"FTBoolNull" json:"FTBoolNull"` // FTBoolNull + FTBytes []byte `spanner:"FTBytes" json:"FTBytes"` // FTBytes + FTBytesNull []byte `spanner:"FTBytesNull" json:"FTBytesNull"` // FTBytesNull + FTTimestamp time.Time `spanner:"FTTimestamp" json:"FTTimestamp"` // FTTimestamp + FTTimestampNull spanner.NullTime `spanner:"FTTimestampNull" json:"FTTimestampNull"` // FTTimestampNull + FTInt int64 `spanner:"FTInt" json:"FTInt"` // FTInt + FTIntNull spanner.NullInt64 `spanner:"FTIntNull" json:"FTIntNull"` // FTIntNull + FTFloat float64 `spanner:"FTFloat" json:"FTFloat"` // FTFloat + FTFloatNull spanner.NullFloat64 `spanner:"FTFloatNull" json:"FTFloatNull"` // FTFloatNull + FTDate civil.Date `spanner:"FTDate" json:"FTDate"` // FTDate + FTDateNull spanner.NullDate `spanner:"FTDateNull" json:"FTDateNull"` // FTDateNull + FTJSON spanner.NullJSON `spanner:"FTJson" json:"FTJson"` // FTJson + FTJSONNull spanner.NullJSON `spanner:"FTJsonNull" json:"FTJsonNull"` // FTJsonNull + FTArrayStringNull []spanner.NullString `spanner:"FTArrayStringNull" json:"FTArrayStringNull"` // FTArrayStringNull + FTArrayString []spanner.NullString `spanner:"FTArrayString" json:"FTArrayString"` // FTArrayString + FTArrayBoolNull []spanner.NullBool `spanner:"FTArrayBoolNull" json:"FTArrayBoolNull"` // FTArrayBoolNull + FTArrayBool []spanner.NullBool `spanner:"FTArrayBool" json:"FTArrayBool"` // FTArrayBool + FTArrayBytesNull [][]byte `spanner:"FTArrayBytesNull" json:"FTArrayBytesNull"` // FTArrayBytesNull + FTArrayBytes [][]byte `spanner:"FTArrayBytes" json:"FTArrayBytes"` // FTArrayBytes + FTArrayTimestampNull []spanner.NullTime `spanner:"FTArrayTimestampNull" json:"FTArrayTimestampNull"` // FTArrayTimestampNull + FTArrayTimestamp []spanner.NullTime `spanner:"FTArrayTimestamp" json:"FTArrayTimestamp"` // FTArrayTimestamp + FTArrayIntNull []spanner.NullInt64 `spanner:"FTArrayIntNull" json:"FTArrayIntNull"` // FTArrayIntNull + FTArrayInt []spanner.NullInt64 `spanner:"FTArrayInt" json:"FTArrayInt"` // FTArrayInt + FTArrayFloatNull []spanner.NullFloat64 `spanner:"FTArrayFloatNull" json:"FTArrayFloatNull"` // FTArrayFloatNull + FTArrayFloat []spanner.NullFloat64 `spanner:"FTArrayFloat" json:"FTArrayFloat"` // FTArrayFloat + FTArrayDateNull []spanner.NullDate `spanner:"FTArrayDateNull" json:"FTArrayDateNull"` // FTArrayDateNull + FTArrayDate []spanner.NullDate `spanner:"FTArrayDate" json:"FTArrayDate"` // FTArrayDate + FTArrayJSONNull []spanner.NullJSON `spanner:"FTArrayJsonNull" json:"FTArrayJsonNull"` // FTArrayJsonNull + FTArrayJSON []spanner.NullJSON `spanner:"FTArrayJson" json:"FTArrayJson"` // FTArrayJson } func FullTypePrimaryKeys() []string { diff --git a/test/testmodels/single/single_file.go b/test/testmodels/single/single_file.go index 129229bf..27ffc907 100644 --- a/test/testmodels/single/single_file.go +++ b/test/testmodels/single/single_file.go @@ -714,39 +714,39 @@ func (fts *FullTextSearch) Delete(ctx context.Context) *spanner.Mutation { // FullType represents a row from 'FullTypes'. type FullType struct { - PKey string `spanner:"PKey" json:"PKey"` // PKey - FTString string `spanner:"FTString" json:"FTString"` // FTString - FTStringNull spanner.NullString `spanner:"FTStringNull" json:"FTStringNull"` // FTStringNull - FTBool bool `spanner:"FTBool" json:"FTBool"` // FTBool - FTBoolNull spanner.NullBool `spanner:"FTBoolNull" json:"FTBoolNull"` // FTBoolNull - FTBytes []byte `spanner:"FTBytes" json:"FTBytes"` // FTBytes - FTBytesNull []byte `spanner:"FTBytesNull" json:"FTBytesNull"` // FTBytesNull - FTTimestamp time.Time `spanner:"FTTimestamp" json:"FTTimestamp"` // FTTimestamp - FTTimestampNull spanner.NullTime `spanner:"FTTimestampNull" json:"FTTimestampNull"` // FTTimestampNull - FTInt int64 `spanner:"FTInt" json:"FTInt"` // FTInt - FTIntNull spanner.NullInt64 `spanner:"FTIntNull" json:"FTIntNull"` // FTIntNull - FTFloat float64 `spanner:"FTFloat" json:"FTFloat"` // FTFloat - FTFloatNull spanner.NullFloat64 `spanner:"FTFloatNull" json:"FTFloatNull"` // FTFloatNull - FTDate civil.Date `spanner:"FTDate" json:"FTDate"` // FTDate - FTDateNull spanner.NullDate `spanner:"FTDateNull" json:"FTDateNull"` // FTDateNull - FTJSON spanner.NullJSON `spanner:"FTJson" json:"FTJson"` // FTJson - FTJSONNull spanner.NullJSON `spanner:"FTJsonNull" json:"FTJsonNull"` // FTJsonNull - FTArrayStringNull []string `spanner:"FTArrayStringNull" json:"FTArrayStringNull"` // FTArrayStringNull - FTArrayString []string `spanner:"FTArrayString" json:"FTArrayString"` // FTArrayString - FTArrayBoolNull []bool `spanner:"FTArrayBoolNull" json:"FTArrayBoolNull"` // FTArrayBoolNull - FTArrayBool []bool `spanner:"FTArrayBool" json:"FTArrayBool"` // FTArrayBool - FTArrayBytesNull [][]byte `spanner:"FTArrayBytesNull" json:"FTArrayBytesNull"` // FTArrayBytesNull - FTArrayBytes [][]byte `spanner:"FTArrayBytes" json:"FTArrayBytes"` // FTArrayBytes - FTArrayTimestampNull []time.Time `spanner:"FTArrayTimestampNull" json:"FTArrayTimestampNull"` // FTArrayTimestampNull - FTArrayTimestamp []time.Time `spanner:"FTArrayTimestamp" json:"FTArrayTimestamp"` // FTArrayTimestamp - FTArrayIntNull []int64 `spanner:"FTArrayIntNull" json:"FTArrayIntNull"` // FTArrayIntNull - FTArrayInt []int64 `spanner:"FTArrayInt" json:"FTArrayInt"` // FTArrayInt - FTArrayFloatNull []float64 `spanner:"FTArrayFloatNull" json:"FTArrayFloatNull"` // FTArrayFloatNull - FTArrayFloat []float64 `spanner:"FTArrayFloat" json:"FTArrayFloat"` // FTArrayFloat - FTArrayDateNull []civil.Date `spanner:"FTArrayDateNull" json:"FTArrayDateNull"` // FTArrayDateNull - FTArrayDate []civil.Date `spanner:"FTArrayDate" json:"FTArrayDate"` // FTArrayDate - FTArrayJSONNull []spanner.NullJSON `spanner:"FTArrayJsonNull" json:"FTArrayJsonNull"` // FTArrayJsonNull - FTArrayJSON []spanner.NullJSON `spanner:"FTArrayJson" json:"FTArrayJson"` // FTArrayJson + PKey string `spanner:"PKey" json:"PKey"` // PKey + FTString string `spanner:"FTString" json:"FTString"` // FTString + FTStringNull spanner.NullString `spanner:"FTStringNull" json:"FTStringNull"` // FTStringNull + FTBool bool `spanner:"FTBool" json:"FTBool"` // FTBool + FTBoolNull spanner.NullBool `spanner:"FTBoolNull" json:"FTBoolNull"` // FTBoolNull + FTBytes []byte `spanner:"FTBytes" json:"FTBytes"` // FTBytes + FTBytesNull []byte `spanner:"FTBytesNull" json:"FTBytesNull"` // FTBytesNull + FTTimestamp time.Time `spanner:"FTTimestamp" json:"FTTimestamp"` // FTTimestamp + FTTimestampNull spanner.NullTime `spanner:"FTTimestampNull" json:"FTTimestampNull"` // FTTimestampNull + FTInt int64 `spanner:"FTInt" json:"FTInt"` // FTInt + FTIntNull spanner.NullInt64 `spanner:"FTIntNull" json:"FTIntNull"` // FTIntNull + FTFloat float64 `spanner:"FTFloat" json:"FTFloat"` // FTFloat + FTFloatNull spanner.NullFloat64 `spanner:"FTFloatNull" json:"FTFloatNull"` // FTFloatNull + FTDate civil.Date `spanner:"FTDate" json:"FTDate"` // FTDate + FTDateNull spanner.NullDate `spanner:"FTDateNull" json:"FTDateNull"` // FTDateNull + FTJSON spanner.NullJSON `spanner:"FTJson" json:"FTJson"` // FTJson + FTJSONNull spanner.NullJSON `spanner:"FTJsonNull" json:"FTJsonNull"` // FTJsonNull + FTArrayStringNull []spanner.NullString `spanner:"FTArrayStringNull" json:"FTArrayStringNull"` // FTArrayStringNull + FTArrayString []spanner.NullString `spanner:"FTArrayString" json:"FTArrayString"` // FTArrayString + FTArrayBoolNull []spanner.NullBool `spanner:"FTArrayBoolNull" json:"FTArrayBoolNull"` // FTArrayBoolNull + FTArrayBool []spanner.NullBool `spanner:"FTArrayBool" json:"FTArrayBool"` // FTArrayBool + FTArrayBytesNull [][]byte `spanner:"FTArrayBytesNull" json:"FTArrayBytesNull"` // FTArrayBytesNull + FTArrayBytes [][]byte `spanner:"FTArrayBytes" json:"FTArrayBytes"` // FTArrayBytes + FTArrayTimestampNull []spanner.NullTime `spanner:"FTArrayTimestampNull" json:"FTArrayTimestampNull"` // FTArrayTimestampNull + FTArrayTimestamp []spanner.NullTime `spanner:"FTArrayTimestamp" json:"FTArrayTimestamp"` // FTArrayTimestamp + FTArrayIntNull []spanner.NullInt64 `spanner:"FTArrayIntNull" json:"FTArrayIntNull"` // FTArrayIntNull + FTArrayInt []spanner.NullInt64 `spanner:"FTArrayInt" json:"FTArrayInt"` // FTArrayInt + FTArrayFloatNull []spanner.NullFloat64 `spanner:"FTArrayFloatNull" json:"FTArrayFloatNull"` // FTArrayFloatNull + FTArrayFloat []spanner.NullFloat64 `spanner:"FTArrayFloat" json:"FTArrayFloat"` // FTArrayFloat + FTArrayDateNull []spanner.NullDate `spanner:"FTArrayDateNull" json:"FTArrayDateNull"` // FTArrayDateNull + FTArrayDate []spanner.NullDate `spanner:"FTArrayDate" json:"FTArrayDate"` // FTArrayDate + FTArrayJSONNull []spanner.NullJSON `spanner:"FTArrayJsonNull" json:"FTArrayJsonNull"` // FTArrayJsonNull + FTArrayJSON []spanner.NullJSON `spanner:"FTArrayJson" json:"FTArrayJson"` // FTArrayJson } func FullTypePrimaryKeys() []string { diff --git a/test/testmodels/underscore/full_type.yo.go b/test/testmodels/underscore/full_type.yo.go index 1e3246be..3bef8069 100644 --- a/test/testmodels/underscore/full_type.yo.go +++ b/test/testmodels/underscore/full_type.yo.go @@ -16,39 +16,39 @@ import ( // FullType represents a row from 'FullTypes'. type FullType struct { - PKey string `spanner:"PKey" json:"PKey"` // PKey - FTString string `spanner:"FTString" json:"FTString"` // FTString - FTStringNull spanner.NullString `spanner:"FTStringNull" json:"FTStringNull"` // FTStringNull - FTBool bool `spanner:"FTBool" json:"FTBool"` // FTBool - FTBoolNull spanner.NullBool `spanner:"FTBoolNull" json:"FTBoolNull"` // FTBoolNull - FTBytes []byte `spanner:"FTBytes" json:"FTBytes"` // FTBytes - FTBytesNull []byte `spanner:"FTBytesNull" json:"FTBytesNull"` // FTBytesNull - FTTimestamp time.Time `spanner:"FTTimestamp" json:"FTTimestamp"` // FTTimestamp - FTTimestampNull spanner.NullTime `spanner:"FTTimestampNull" json:"FTTimestampNull"` // FTTimestampNull - FTInt int64 `spanner:"FTInt" json:"FTInt"` // FTInt - FTIntNull spanner.NullInt64 `spanner:"FTIntNull" json:"FTIntNull"` // FTIntNull - FTFloat float64 `spanner:"FTFloat" json:"FTFloat"` // FTFloat - FTFloatNull spanner.NullFloat64 `spanner:"FTFloatNull" json:"FTFloatNull"` // FTFloatNull - FTDate civil.Date `spanner:"FTDate" json:"FTDate"` // FTDate - FTDateNull spanner.NullDate `spanner:"FTDateNull" json:"FTDateNull"` // FTDateNull - FTJSON spanner.NullJSON `spanner:"FTJson" json:"FTJson"` // FTJson - FTJSONNull spanner.NullJSON `spanner:"FTJsonNull" json:"FTJsonNull"` // FTJsonNull - FTArrayStringNull []string `spanner:"FTArrayStringNull" json:"FTArrayStringNull"` // FTArrayStringNull - FTArrayString []string `spanner:"FTArrayString" json:"FTArrayString"` // FTArrayString - FTArrayBoolNull []bool `spanner:"FTArrayBoolNull" json:"FTArrayBoolNull"` // FTArrayBoolNull - FTArrayBool []bool `spanner:"FTArrayBool" json:"FTArrayBool"` // FTArrayBool - FTArrayBytesNull [][]byte `spanner:"FTArrayBytesNull" json:"FTArrayBytesNull"` // FTArrayBytesNull - FTArrayBytes [][]byte `spanner:"FTArrayBytes" json:"FTArrayBytes"` // FTArrayBytes - FTArrayTimestampNull []time.Time `spanner:"FTArrayTimestampNull" json:"FTArrayTimestampNull"` // FTArrayTimestampNull - FTArrayTimestamp []time.Time `spanner:"FTArrayTimestamp" json:"FTArrayTimestamp"` // FTArrayTimestamp - FTArrayIntNull []int64 `spanner:"FTArrayIntNull" json:"FTArrayIntNull"` // FTArrayIntNull - FTArrayInt []int64 `spanner:"FTArrayInt" json:"FTArrayInt"` // FTArrayInt - FTArrayFloatNull []float64 `spanner:"FTArrayFloatNull" json:"FTArrayFloatNull"` // FTArrayFloatNull - FTArrayFloat []float64 `spanner:"FTArrayFloat" json:"FTArrayFloat"` // FTArrayFloat - FTArrayDateNull []civil.Date `spanner:"FTArrayDateNull" json:"FTArrayDateNull"` // FTArrayDateNull - FTArrayDate []civil.Date `spanner:"FTArrayDate" json:"FTArrayDate"` // FTArrayDate - FTArrayJSONNull []spanner.NullJSON `spanner:"FTArrayJsonNull" json:"FTArrayJsonNull"` // FTArrayJsonNull - FTArrayJSON []spanner.NullJSON `spanner:"FTArrayJson" json:"FTArrayJson"` // FTArrayJson + PKey string `spanner:"PKey" json:"PKey"` // PKey + FTString string `spanner:"FTString" json:"FTString"` // FTString + FTStringNull spanner.NullString `spanner:"FTStringNull" json:"FTStringNull"` // FTStringNull + FTBool bool `spanner:"FTBool" json:"FTBool"` // FTBool + FTBoolNull spanner.NullBool `spanner:"FTBoolNull" json:"FTBoolNull"` // FTBoolNull + FTBytes []byte `spanner:"FTBytes" json:"FTBytes"` // FTBytes + FTBytesNull []byte `spanner:"FTBytesNull" json:"FTBytesNull"` // FTBytesNull + FTTimestamp time.Time `spanner:"FTTimestamp" json:"FTTimestamp"` // FTTimestamp + FTTimestampNull spanner.NullTime `spanner:"FTTimestampNull" json:"FTTimestampNull"` // FTTimestampNull + FTInt int64 `spanner:"FTInt" json:"FTInt"` // FTInt + FTIntNull spanner.NullInt64 `spanner:"FTIntNull" json:"FTIntNull"` // FTIntNull + FTFloat float64 `spanner:"FTFloat" json:"FTFloat"` // FTFloat + FTFloatNull spanner.NullFloat64 `spanner:"FTFloatNull" json:"FTFloatNull"` // FTFloatNull + FTDate civil.Date `spanner:"FTDate" json:"FTDate"` // FTDate + FTDateNull spanner.NullDate `spanner:"FTDateNull" json:"FTDateNull"` // FTDateNull + FTJSON spanner.NullJSON `spanner:"FTJson" json:"FTJson"` // FTJson + FTJSONNull spanner.NullJSON `spanner:"FTJsonNull" json:"FTJsonNull"` // FTJsonNull + FTArrayStringNull []spanner.NullString `spanner:"FTArrayStringNull" json:"FTArrayStringNull"` // FTArrayStringNull + FTArrayString []spanner.NullString `spanner:"FTArrayString" json:"FTArrayString"` // FTArrayString + FTArrayBoolNull []spanner.NullBool `spanner:"FTArrayBoolNull" json:"FTArrayBoolNull"` // FTArrayBoolNull + FTArrayBool []spanner.NullBool `spanner:"FTArrayBool" json:"FTArrayBool"` // FTArrayBool + FTArrayBytesNull [][]byte `spanner:"FTArrayBytesNull" json:"FTArrayBytesNull"` // FTArrayBytesNull + FTArrayBytes [][]byte `spanner:"FTArrayBytes" json:"FTArrayBytes"` // FTArrayBytes + FTArrayTimestampNull []spanner.NullTime `spanner:"FTArrayTimestampNull" json:"FTArrayTimestampNull"` // FTArrayTimestampNull + FTArrayTimestamp []spanner.NullTime `spanner:"FTArrayTimestamp" json:"FTArrayTimestamp"` // FTArrayTimestamp + FTArrayIntNull []spanner.NullInt64 `spanner:"FTArrayIntNull" json:"FTArrayIntNull"` // FTArrayIntNull + FTArrayInt []spanner.NullInt64 `spanner:"FTArrayInt" json:"FTArrayInt"` // FTArrayInt + FTArrayFloatNull []spanner.NullFloat64 `spanner:"FTArrayFloatNull" json:"FTArrayFloatNull"` // FTArrayFloatNull + FTArrayFloat []spanner.NullFloat64 `spanner:"FTArrayFloat" json:"FTArrayFloat"` // FTArrayFloat + FTArrayDateNull []spanner.NullDate `spanner:"FTArrayDateNull" json:"FTArrayDateNull"` // FTArrayDateNull + FTArrayDate []spanner.NullDate `spanner:"FTArrayDate" json:"FTArrayDate"` // FTArrayDate + FTArrayJSONNull []spanner.NullJSON `spanner:"FTArrayJsonNull" json:"FTArrayJsonNull"` // FTArrayJsonNull + FTArrayJSON []spanner.NullJSON `spanner:"FTArrayJson" json:"FTArrayJson"` // FTArrayJson } func FullTypePrimaryKeys() []string { diff --git a/v2/loader/loader_test.go b/v2/loader/loader_test.go index dc824765..e0cb122b 100644 --- a/v2/loader/loader_test.go +++ b/v2/loader/loader_test.go @@ -36,6 +36,8 @@ var ( CREATE TABLE Simple ( Id INT64 NOT NULL, Value STRING(32) NOT NULL, + IntArray ARRAY NOT NULL, + StringArray ARRAY, ) PRIMARY KEY(Id); CREATE INDEX SimpleIndex ON Simple(Value); CREATE UNIQUE INDEX SimpleIndex2 ON Simple(Id, Value)` @@ -119,6 +121,28 @@ func TestLoader(t *testing.T) { IsNotNull: true, IsPrimaryKey: false, }, + { + Name: "IntArray", + Type: "[]spanner.NullInt64", + OriginalType: "[]spanner.NullInt64", + NullValue: `[]spanner.NullInt64{}`, + Len: -1, + ColumnName: "IntArray", + SpannerDataType: "ARRAY", + IsNotNull: true, + IsPrimaryKey: false, + }, + { + Name: "StringArray", + Type: "[]spanner.NullString", + OriginalType: "[]spanner.NullString", + NullValue: `nil`, + Len: -1, + ColumnName: "StringArray", + SpannerDataType: "ARRAY", + IsNotNull: false, + IsPrimaryKey: false, + }, }, TableName: "Simple", Indexes: []*models.Index{ @@ -446,6 +470,28 @@ func TestLoader_CustomTypes(t *testing.T) { IsNotNull: true, IsPrimaryKey: false, }, + { + Name: "IntArray", + Type: "[]spanner.NullInt64", + OriginalType: "[]spanner.NullInt64", + NullValue: `[]spanner.NullInt64{}`, + Len: -1, + ColumnName: "IntArray", + SpannerDataType: "ARRAY", + IsNotNull: true, + IsPrimaryKey: false, + }, + { + Name: "StringArray", + Type: "[]spanner.NullString", + OriginalType: "[]spanner.NullString", + NullValue: `nil`, + Len: -1, + ColumnName: "StringArray", + SpannerDataType: "ARRAY", + IsNotNull: false, + IsPrimaryKey: false, + }, }, TableName: "Simple", Indexes: []*models.Index{ diff --git a/v2/loader/util.go b/v2/loader/util.go index 0c44d9b4..d5123181 100644 --- a/v2/loader/util.go +++ b/v2/loader/util.go @@ -124,7 +124,8 @@ func parseSpannerType(dt string, nullable bool) (int, string, string) { default: if strings.HasPrefix(dt, "ARRAY<") { eleDataType := strings.TrimSuffix(strings.TrimPrefix(dt, "ARRAY<"), ">") - _, _, eleTyp := parseSpannerType(eleDataType, false) + // Array type can contain NULL elements. See https://cloud.google.com/spanner/docs/reference/standard-sql/data-types#array_nulls + _, _, eleTyp := parseSpannerType(eleDataType, true) typ, nilVal = "[]"+eleTyp, "nil" if !nullable { nilVal = typ + "{}" diff --git a/v2/test/integration_test.go b/v2/test/integration_test.go index e942d28d..ead457f4 100644 --- a/v2/test/integration_test.go +++ b/v2/test/integration_test.go @@ -345,20 +345,20 @@ func TestDefaultFullType(t *testing.T) { }, FTJSON: json, FTJSONNull: json, - FTArrayStringNull: []string{"xxx1", "yyy1"}, - FTArrayString: []string{"xxx1", "yyy1"}, - FTArrayBoolNull: []bool{true, false}, - FTArrayBool: []bool{true, false}, + FTArrayStringNull: []spanner.NullString{{StringVal: "xxx1", Valid: true}, {StringVal: "yyy1", Valid: true}}, + FTArrayString: []spanner.NullString{{StringVal: "xxx1", Valid: true}, {StringVal: "yyy1", Valid: true}}, + FTArrayBoolNull: []spanner.NullBool{{Bool: true, Valid: true}, {Bool: false, Valid: true}}, + FTArrayBool: []spanner.NullBool{{Bool: true, Valid: true}, {Bool: false, Valid: true}}, FTArrayBytesNull: [][]byte{[]byte("xxx1"), []byte("yyy1")}, FTArrayBytes: [][]byte{[]byte("xxx1"), []byte("yyy1")}, - FTArrayTimestampNull: []time.Time{now, tomorrow}, - FTArrayTimestamp: []time.Time{now, tomorrow}, - FTArrayIntNull: []int64{100, 200}, - FTArrayInt: []int64{100, 200}, - FTArrayFloatNull: []float64{0.111, 0.222}, - FTArrayFloat: []float64{0.111, 0.222}, - FTArrayDateNull: []civil.Date{date, nextdate}, - FTArrayDate: []civil.Date{date, nextdate}, + FTArrayTimestampNull: []spanner.NullTime{{Time: now, Valid: true}, {Time: tomorrow, Valid: true}}, + FTArrayTimestamp: []spanner.NullTime{{Time: now, Valid: true}, {Time: tomorrow, Valid: true}}, + FTArrayIntNull: []spanner.NullInt64{{Int64: 100, Valid: true}, {Int64: 200, Valid: true}}, + FTArrayInt: []spanner.NullInt64{{Int64: 100, Valid: true}, {Int64: 200, Valid: true}}, + FTArrayFloatNull: []spanner.NullFloat64{{Float64: 0.111, Valid: true}, {Float64: 0.222, Valid: true}}, + FTArrayFloat: []spanner.NullFloat64{{Float64: 0.111, Valid: true}, {Float64: 0.222, Valid: true}}, + FTArrayDateNull: []spanner.NullDate{{Date: date, Valid: true}, {Date: nextdate, Valid: true}}, + FTArrayDate: []spanner.NullDate{{Date: date, Valid: true}, {Date: nextdate, Valid: true}}, FTArrayJSONNull: []spanner.NullJSON{json, jsonNull}, FTArrayJSON: []spanner.NullJSON{json, jsonNull}, }, @@ -380,22 +380,22 @@ func TestDefaultFullType(t *testing.T) { FTFloatNull: spanner.NullFloat64{}, FTDate: date, FTDateNull: spanner.NullDate{}, - FTArrayStringNull: []string{"xxx2", "yyy2"}, - FTArrayString: []string{"xxx2", "yyy2"}, + FTArrayStringNull: []spanner.NullString{{StringVal: "xxx2", Valid: true}, {StringVal: "yyy2", Valid: true}}, + FTArrayString: []spanner.NullString{{StringVal: "xxx2", Valid: true}, {StringVal: "yyy2", Valid: true}}, FTJSON: json, FTJSONNull: jsonNull, FTArrayBoolNull: nil, - FTArrayBool: []bool{true, false}, + FTArrayBool: []spanner.NullBool{{Bool: true, Valid: true}, {Bool: false, Valid: true}}, FTArrayBytesNull: nil, FTArrayBytes: [][]byte{[]byte("xxx2"), []byte("yyy2")}, FTArrayTimestampNull: nil, - FTArrayTimestamp: []time.Time{now, tomorrow}, + FTArrayTimestamp: []spanner.NullTime{{Time: now, Valid: true}, {Time: tomorrow, Valid: true}}, FTArrayIntNull: nil, - FTArrayInt: []int64{100, 200}, + FTArrayInt: []spanner.NullInt64{{Int64: 100, Valid: true}, {Int64: 200, Valid: true}}, FTArrayFloatNull: nil, - FTArrayFloat: []float64{0.111, 0.222}, + FTArrayFloat: []spanner.NullFloat64{{Float64: 0.111, Valid: true}, {Float64: 0.222, Valid: true}}, FTArrayDateNull: nil, - FTArrayDate: []civil.Date{date, nextdate}, + FTArrayDate: []spanner.NullDate{{Date: date, Valid: true}, {Date: nextdate, Valid: true}}, FTArrayJSONNull: nil, FTArrayJSON: []spanner.NullJSON{json, jsonNull}, }, @@ -419,20 +419,20 @@ func TestDefaultFullType(t *testing.T) { FTDateNull: spanner.NullDate{}, FTJSON: json, FTJSONNull: jsonNull, - FTArrayStringNull: []string{}, - FTArrayString: []string{}, - FTArrayBoolNull: []bool{}, - FTArrayBool: []bool{}, + FTArrayStringNull: []spanner.NullString{}, + FTArrayString: []spanner.NullString{}, + FTArrayBoolNull: []spanner.NullBool{}, + FTArrayBool: []spanner.NullBool{}, FTArrayBytesNull: [][]byte{}, FTArrayBytes: [][]byte{}, - FTArrayTimestampNull: []time.Time{}, - FTArrayTimestamp: []time.Time{}, - FTArrayIntNull: []int64{}, - FTArrayInt: []int64{}, - FTArrayFloatNull: []float64{}, - FTArrayFloat: []float64{}, - FTArrayDateNull: []civil.Date{}, - FTArrayDate: []civil.Date{}, + FTArrayTimestampNull: []spanner.NullTime{}, + FTArrayTimestamp: []spanner.NullTime{}, + FTArrayIntNull: []spanner.NullInt64{}, + FTArrayInt: []spanner.NullInt64{}, + FTArrayFloatNull: []spanner.NullFloat64{}, + FTArrayFloat: []spanner.NullFloat64{}, + FTArrayDateNull: []spanner.NullDate{}, + FTArrayDate: []spanner.NullDate{}, FTArrayJSONNull: []spanner.NullJSON{}, FTArrayJSON: []spanner.NullJSON{}, }, @@ -692,20 +692,20 @@ func TestLegacyDefaultFullType(t *testing.T) { }, FTJSON: json, FTJSONNull: json, - FTArrayStringNull: []string{"xxx1", "yyy1"}, - FTArrayString: []string{"xxx1", "yyy1"}, - FTArrayBoolNull: []bool{true, false}, - FTArrayBool: []bool{true, false}, + FTArrayStringNull: []spanner.NullString{{StringVal: "xxx1", Valid: true}, {StringVal: "yyy1", Valid: true}}, + FTArrayString: []spanner.NullString{{StringVal: "xxx1", Valid: true}, {StringVal: "yyy1", Valid: true}}, + FTArrayBoolNull: []spanner.NullBool{{Bool: true, Valid: true}, {Bool: false, Valid: true}}, + FTArrayBool: []spanner.NullBool{{Bool: true, Valid: true}, {Bool: false, Valid: true}}, FTArrayBytesNull: [][]byte{[]byte("xxx1"), []byte("yyy1")}, FTArrayBytes: [][]byte{[]byte("xxx1"), []byte("yyy1")}, - FTArrayTimestampNull: []time.Time{now, tomorrow}, - FTArrayTimestamp: []time.Time{now, tomorrow}, - FTArrayIntNull: []int64{100, 200}, - FTArrayInt: []int64{100, 200}, - FTArrayFloatNull: []float64{0.111, 0.222}, - FTArrayFloat: []float64{0.111, 0.222}, - FTArrayDateNull: []civil.Date{date, nextdate}, - FTArrayDate: []civil.Date{date, nextdate}, + FTArrayTimestampNull: []spanner.NullTime{{Time: now, Valid: true}, {Time: tomorrow, Valid: true}}, + FTArrayTimestamp: []spanner.NullTime{{Time: now, Valid: true}, {Time: tomorrow, Valid: true}}, + FTArrayIntNull: []spanner.NullInt64{{Int64: 100, Valid: true}, {Int64: 200, Valid: true}}, + FTArrayInt: []spanner.NullInt64{{Int64: 100, Valid: true}, {Int64: 200, Valid: true}}, + FTArrayFloatNull: []spanner.NullFloat64{{Float64: 0.111, Valid: true}, {Float64: 0.222, Valid: true}}, + FTArrayFloat: []spanner.NullFloat64{{Float64: 0.111, Valid: true}, {Float64: 0.222, Valid: true}}, + FTArrayDateNull: []spanner.NullDate{{Date: date, Valid: true}, {Date: nextdate, Valid: true}}, + FTArrayDate: []spanner.NullDate{{Date: date, Valid: true}, {Date: nextdate, Valid: true}}, FTArrayJSONNull: []spanner.NullJSON{json, jsonNull}, FTArrayJSON: []spanner.NullJSON{json, jsonNull}, }, @@ -729,20 +729,20 @@ func TestLegacyDefaultFullType(t *testing.T) { FTDateNull: spanner.NullDate{}, FTJSON: json, FTJSONNull: jsonNull, - FTArrayStringNull: []string{"xxx2", "yyy2"}, - FTArrayString: []string{"xxx2", "yyy2"}, + FTArrayStringNull: []spanner.NullString{{StringVal: "xxx2", Valid: true}, {StringVal: "yyy2", Valid: true}}, + FTArrayString: []spanner.NullString{{StringVal: "xxx2", Valid: true}, {StringVal: "yyy2", Valid: true}}, FTArrayBoolNull: nil, - FTArrayBool: []bool{true, false}, + FTArrayBool: []spanner.NullBool{{Bool: true, Valid: true}, {Bool: false, Valid: true}}, FTArrayBytesNull: nil, FTArrayBytes: [][]byte{[]byte("xxx2"), []byte("yyy2")}, FTArrayTimestampNull: nil, - FTArrayTimestamp: []time.Time{now, tomorrow}, + FTArrayTimestamp: []spanner.NullTime{{Time: now, Valid: true}, {Time: tomorrow, Valid: true}}, FTArrayIntNull: nil, - FTArrayInt: []int64{100, 200}, + FTArrayInt: []spanner.NullInt64{{Int64: 100, Valid: true}, {Int64: 200, Valid: true}}, FTArrayFloatNull: nil, - FTArrayFloat: []float64{0.111, 0.222}, + FTArrayFloat: []spanner.NullFloat64{{Float64: 0.111, Valid: true}, {Float64: 0.222, Valid: true}}, FTArrayDateNull: nil, - FTArrayDate: []civil.Date{date, nextdate}, + FTArrayDate: []spanner.NullDate{{Date: date, Valid: true}, {Date: nextdate, Valid: true}}, FTArrayJSONNull: nil, FTArrayJSON: []spanner.NullJSON{json, jsonNull}, }, @@ -766,20 +766,20 @@ func TestLegacyDefaultFullType(t *testing.T) { FTDateNull: spanner.NullDate{}, FTJSON: json, FTJSONNull: jsonNull, - FTArrayStringNull: []string{}, - FTArrayString: []string{}, - FTArrayBoolNull: []bool{}, - FTArrayBool: []bool{}, + FTArrayStringNull: []spanner.NullString{}, + FTArrayString: []spanner.NullString{}, + FTArrayBoolNull: []spanner.NullBool{}, + FTArrayBool: []spanner.NullBool{}, FTArrayBytesNull: [][]byte{}, FTArrayBytes: [][]byte{}, - FTArrayTimestampNull: []time.Time{}, - FTArrayTimestamp: []time.Time{}, - FTArrayIntNull: []int64{}, - FTArrayInt: []int64{}, - FTArrayFloatNull: []float64{}, - FTArrayFloat: []float64{}, - FTArrayDateNull: []civil.Date{}, - FTArrayDate: []civil.Date{}, + FTArrayTimestampNull: []spanner.NullTime{}, + FTArrayTimestamp: []spanner.NullTime{}, + FTArrayIntNull: []spanner.NullInt64{}, + FTArrayInt: []spanner.NullInt64{}, + FTArrayFloatNull: []spanner.NullFloat64{}, + FTArrayFloat: []spanner.NullFloat64{}, + FTArrayDateNull: []spanner.NullDate{}, + FTArrayDate: []spanner.NullDate{}, FTArrayJSONNull: []spanner.NullJSON{}, FTArrayJSON: []spanner.NullJSON{}, }, @@ -964,22 +964,22 @@ func TestCustomPrimitiveTypes(t *testing.T) { FTUInt16null: 1, FTUInt8: 1, FTUInt8null: 1, - FTArrayInt64: []int64{1, 2}, - FTArrayInt64null: []int64{1, 2}, - FTArrayInt32: []int64{1, 2}, - FTArrayInt32null: []int64{1, 2}, - FTArrayInt16: []int64{1, 2}, - FTArrayInt16null: []int64{1, 2}, - FTArrayInt8: []int64{1, 2}, - FTArrayInt8null: []int64{1, 2}, - FTArrayUINt64: []int64{1, 2}, - FTArrayUINt64null: []int64{1, 2}, - FTArrayUINt32: []int64{1, 2}, - FTArrayUINt32null: []int64{1, 2}, - FTArrayUINt16: []int64{1, 2}, - FTArrayUINt16null: []int64{1, 2}, - FTArrayUINt8: []int64{1, 2}, - FTArrayUINt8null: []int64{1, 2}, + FTArrayInt64: []spanner.NullInt64{{Int64: 1, Valid: true}, {Int64: 2, Valid: true}}, + FTArrayInt64null: []spanner.NullInt64{{Int64: 1, Valid: true}, {Int64: 2, Valid: true}}, + FTArrayInt32: []spanner.NullInt64{{Int64: 1, Valid: true}, {Int64: 2, Valid: true}}, + FTArrayInt32null: []spanner.NullInt64{{Int64: 1, Valid: true}, {Int64: 2, Valid: true}}, + FTArrayInt16: []spanner.NullInt64{{Int64: 1, Valid: true}, {Int64: 2, Valid: true}}, + FTArrayInt16null: []spanner.NullInt64{{Int64: 1, Valid: true}, {Int64: 2, Valid: true}}, + FTArrayInt8: []spanner.NullInt64{{Int64: 1, Valid: true}, {Int64: 2, Valid: true}}, + FTArrayInt8null: []spanner.NullInt64{{Int64: 1, Valid: true}, {Int64: 2, Valid: true}}, + FTArrayUINt64: []spanner.NullInt64{{Int64: 1, Valid: true}, {Int64: 2, Valid: true}}, + FTArrayUINt64null: []spanner.NullInt64{{Int64: 1, Valid: true}, {Int64: 2, Valid: true}}, + FTArrayUINt32: []spanner.NullInt64{{Int64: 1, Valid: true}, {Int64: 2, Valid: true}}, + FTArrayUINt32null: []spanner.NullInt64{{Int64: 1, Valid: true}, {Int64: 2, Valid: true}}, + FTArrayUINt16: []spanner.NullInt64{{Int64: 1, Valid: true}, {Int64: 2, Valid: true}}, + FTArrayUINt16null: []spanner.NullInt64{{Int64: 1, Valid: true}, {Int64: 2, Valid: true}}, + FTArrayUINt8: []spanner.NullInt64{{Int64: 1, Valid: true}, {Int64: 2, Valid: true}}, + FTArrayUINt8null: []spanner.NullInt64{{Int64: 1, Valid: true}, {Int64: 2, Valid: true}}, } if _, err := client.Apply(ctx, []*spanner.Mutation{cpk.Insert(ctx)}); err != nil { diff --git a/v2/test/testmodels/default/custom_primitive_type.yo.go b/v2/test/testmodels/default/custom_primitive_type.yo.go index c11975b6..5a1390f9 100644 --- a/v2/test/testmodels/default/custom_primitive_type.yo.go +++ b/v2/test/testmodels/default/custom_primitive_type.yo.go @@ -13,39 +13,39 @@ import ( // CustomPrimitiveType represents a row from 'CustomPrimitiveTypes'. type CustomPrimitiveType struct { - PKey string `spanner:"PKey" json:"PKey"` // PKey - FTInt64 int64 `spanner:"FTInt64" json:"FTInt64"` // FTInt64 - FTInt64null int64 `spanner:"FTInt64Null" json:"FTInt64Null"` // FTInt64Null - FTInt32 int32 `spanner:"FTInt32" json:"FTInt32"` // FTInt32 - FTInt32null int32 `spanner:"FTInt32Null" json:"FTInt32Null"` // FTInt32Null - FTInt16 int16 `spanner:"FTInt16" json:"FTInt16"` // FTInt16 - FTInt16null int16 `spanner:"FTInt16Null" json:"FTInt16Null"` // FTInt16Null - FTInt8 int8 `spanner:"FTInt8" json:"FTInt8"` // FTInt8 - FTInt8null int8 `spanner:"FTInt8Null" json:"FTInt8Null"` // FTInt8Null - FTUInt64 uint64 `spanner:"FTUInt64" json:"FTUInt64"` // FTUInt64 - FTUInt64null uint64 `spanner:"FTUInt64Null" json:"FTUInt64Null"` // FTUInt64Null - FTUInt32 uint32 `spanner:"FTUInt32" json:"FTUInt32"` // FTUInt32 - FTUInt32null uint32 `spanner:"FTUInt32Null" json:"FTUInt32Null"` // FTUInt32Null - FTUInt16 uint16 `spanner:"FTUInt16" json:"FTUInt16"` // FTUInt16 - FTUInt16null uint16 `spanner:"FTUInt16Null" json:"FTUInt16Null"` // FTUInt16Null - FTUInt8 uint8 `spanner:"FTUInt8" json:"FTUInt8"` // FTUInt8 - FTUInt8null uint8 `spanner:"FTUInt8Null" json:"FTUInt8Null"` // FTUInt8Null - FTArrayInt64 []int64 `spanner:"FTArrayInt64" json:"FTArrayInt64"` // FTArrayInt64 - FTArrayInt64null []int64 `spanner:"FTArrayInt64Null" json:"FTArrayInt64Null"` // FTArrayInt64Null - FTArrayInt32 []int64 `spanner:"FTArrayInt32" json:"FTArrayInt32"` // FTArrayInt32 - FTArrayInt32null []int64 `spanner:"FTArrayInt32Null" json:"FTArrayInt32Null"` // FTArrayInt32Null - FTArrayInt16 []int64 `spanner:"FTArrayInt16" json:"FTArrayInt16"` // FTArrayInt16 - FTArrayInt16null []int64 `spanner:"FTArrayInt16Null" json:"FTArrayInt16Null"` // FTArrayInt16Null - FTArrayInt8 []int64 `spanner:"FTArrayInt8" json:"FTArrayInt8"` // FTArrayInt8 - FTArrayInt8null []int64 `spanner:"FTArrayInt8Null" json:"FTArrayInt8Null"` // FTArrayInt8Null - FTArrayUINt64 []int64 `spanner:"FTArrayUInt64" json:"FTArrayUInt64"` // FTArrayUInt64 - FTArrayUINt64null []int64 `spanner:"FTArrayUInt64Null" json:"FTArrayUInt64Null"` // FTArrayUInt64Null - FTArrayUINt32 []int64 `spanner:"FTArrayUInt32" json:"FTArrayUInt32"` // FTArrayUInt32 - FTArrayUINt32null []int64 `spanner:"FTArrayUInt32Null" json:"FTArrayUInt32Null"` // FTArrayUInt32Null - FTArrayUINt16 []int64 `spanner:"FTArrayUInt16" json:"FTArrayUInt16"` // FTArrayUInt16 - FTArrayUINt16null []int64 `spanner:"FTArrayUInt16Null" json:"FTArrayUInt16Null"` // FTArrayUInt16Null - FTArrayUINt8 []int64 `spanner:"FTArrayUInt8" json:"FTArrayUInt8"` // FTArrayUInt8 - FTArrayUINt8null []int64 `spanner:"FTArrayUInt8Null" json:"FTArrayUInt8Null"` // FTArrayUInt8Null + PKey string `spanner:"PKey" json:"PKey"` // PKey + FTInt64 int64 `spanner:"FTInt64" json:"FTInt64"` // FTInt64 + FTInt64null int64 `spanner:"FTInt64Null" json:"FTInt64Null"` // FTInt64Null + FTInt32 int32 `spanner:"FTInt32" json:"FTInt32"` // FTInt32 + FTInt32null int32 `spanner:"FTInt32Null" json:"FTInt32Null"` // FTInt32Null + FTInt16 int16 `spanner:"FTInt16" json:"FTInt16"` // FTInt16 + FTInt16null int16 `spanner:"FTInt16Null" json:"FTInt16Null"` // FTInt16Null + FTInt8 int8 `spanner:"FTInt8" json:"FTInt8"` // FTInt8 + FTInt8null int8 `spanner:"FTInt8Null" json:"FTInt8Null"` // FTInt8Null + FTUInt64 uint64 `spanner:"FTUInt64" json:"FTUInt64"` // FTUInt64 + FTUInt64null uint64 `spanner:"FTUInt64Null" json:"FTUInt64Null"` // FTUInt64Null + FTUInt32 uint32 `spanner:"FTUInt32" json:"FTUInt32"` // FTUInt32 + FTUInt32null uint32 `spanner:"FTUInt32Null" json:"FTUInt32Null"` // FTUInt32Null + FTUInt16 uint16 `spanner:"FTUInt16" json:"FTUInt16"` // FTUInt16 + FTUInt16null uint16 `spanner:"FTUInt16Null" json:"FTUInt16Null"` // FTUInt16Null + FTUInt8 uint8 `spanner:"FTUInt8" json:"FTUInt8"` // FTUInt8 + FTUInt8null uint8 `spanner:"FTUInt8Null" json:"FTUInt8Null"` // FTUInt8Null + FTArrayInt64 []spanner.NullInt64 `spanner:"FTArrayInt64" json:"FTArrayInt64"` // FTArrayInt64 + FTArrayInt64null []spanner.NullInt64 `spanner:"FTArrayInt64Null" json:"FTArrayInt64Null"` // FTArrayInt64Null + FTArrayInt32 []spanner.NullInt64 `spanner:"FTArrayInt32" json:"FTArrayInt32"` // FTArrayInt32 + FTArrayInt32null []spanner.NullInt64 `spanner:"FTArrayInt32Null" json:"FTArrayInt32Null"` // FTArrayInt32Null + FTArrayInt16 []spanner.NullInt64 `spanner:"FTArrayInt16" json:"FTArrayInt16"` // FTArrayInt16 + FTArrayInt16null []spanner.NullInt64 `spanner:"FTArrayInt16Null" json:"FTArrayInt16Null"` // FTArrayInt16Null + FTArrayInt8 []spanner.NullInt64 `spanner:"FTArrayInt8" json:"FTArrayInt8"` // FTArrayInt8 + FTArrayInt8null []spanner.NullInt64 `spanner:"FTArrayInt8Null" json:"FTArrayInt8Null"` // FTArrayInt8Null + FTArrayUINt64 []spanner.NullInt64 `spanner:"FTArrayUInt64" json:"FTArrayUInt64"` // FTArrayUInt64 + FTArrayUINt64null []spanner.NullInt64 `spanner:"FTArrayUInt64Null" json:"FTArrayUInt64Null"` // FTArrayUInt64Null + FTArrayUINt32 []spanner.NullInt64 `spanner:"FTArrayUInt32" json:"FTArrayUInt32"` // FTArrayUInt32 + FTArrayUINt32null []spanner.NullInt64 `spanner:"FTArrayUInt32Null" json:"FTArrayUInt32Null"` // FTArrayUInt32Null + FTArrayUINt16 []spanner.NullInt64 `spanner:"FTArrayUInt16" json:"FTArrayUInt16"` // FTArrayUInt16 + FTArrayUINt16null []spanner.NullInt64 `spanner:"FTArrayUInt16Null" json:"FTArrayUInt16Null"` // FTArrayUInt16Null + FTArrayUINt8 []spanner.NullInt64 `spanner:"FTArrayUInt8" json:"FTArrayUInt8"` // FTArrayUInt8 + FTArrayUINt8null []spanner.NullInt64 `spanner:"FTArrayUInt8Null" json:"FTArrayUInt8Null"` // FTArrayUInt8Null } func CustomPrimitiveTypePrimaryKeys() []string { diff --git a/v2/test/testmodels/default/full_type.yo.go b/v2/test/testmodels/default/full_type.yo.go index 2d377923..888854ce 100644 --- a/v2/test/testmodels/default/full_type.yo.go +++ b/v2/test/testmodels/default/full_type.yo.go @@ -17,39 +17,39 @@ import ( // FullType represents a row from 'FullTypes'. type FullType struct { - PKey string `spanner:"PKey" json:"PKey"` // PKey - FTString string `spanner:"FTString" json:"FTString"` // FTString - FTStringNull spanner.NullString `spanner:"FTStringNull" json:"FTStringNull"` // FTStringNull - FTBool bool `spanner:"FTBool" json:"FTBool"` // FTBool - FTBoolNull spanner.NullBool `spanner:"FTBoolNull" json:"FTBoolNull"` // FTBoolNull - FTBytes []byte `spanner:"FTBytes" json:"FTBytes"` // FTBytes - FTBytesNull []byte `spanner:"FTBytesNull" json:"FTBytesNull"` // FTBytesNull - FTTimestamp time.Time `spanner:"FTTimestamp" json:"FTTimestamp"` // FTTimestamp - FTTimestampNull spanner.NullTime `spanner:"FTTimestampNull" json:"FTTimestampNull"` // FTTimestampNull - FTInt int64 `spanner:"FTInt" json:"FTInt"` // FTInt - FTIntNull spanner.NullInt64 `spanner:"FTIntNull" json:"FTIntNull"` // FTIntNull - FTFloat float64 `spanner:"FTFloat" json:"FTFloat"` // FTFloat - FTFloatNull spanner.NullFloat64 `spanner:"FTFloatNull" json:"FTFloatNull"` // FTFloatNull - FTDate civil.Date `spanner:"FTDate" json:"FTDate"` // FTDate - FTDateNull spanner.NullDate `spanner:"FTDateNull" json:"FTDateNull"` // FTDateNull - FTJSON spanner.NullJSON `spanner:"FTJson" json:"FTJson"` // FTJson - FTJSONNull spanner.NullJSON `spanner:"FTJsonNull" json:"FTJsonNull"` // FTJsonNull - FTArrayStringNull []string `spanner:"FTArrayStringNull" json:"FTArrayStringNull"` // FTArrayStringNull - FTArrayString []string `spanner:"FTArrayString" json:"FTArrayString"` // FTArrayString - FTArrayBoolNull []bool `spanner:"FTArrayBoolNull" json:"FTArrayBoolNull"` // FTArrayBoolNull - FTArrayBool []bool `spanner:"FTArrayBool" json:"FTArrayBool"` // FTArrayBool - FTArrayBytesNull [][]byte `spanner:"FTArrayBytesNull" json:"FTArrayBytesNull"` // FTArrayBytesNull - FTArrayBytes [][]byte `spanner:"FTArrayBytes" json:"FTArrayBytes"` // FTArrayBytes - FTArrayTimestampNull []time.Time `spanner:"FTArrayTimestampNull" json:"FTArrayTimestampNull"` // FTArrayTimestampNull - FTArrayTimestamp []time.Time `spanner:"FTArrayTimestamp" json:"FTArrayTimestamp"` // FTArrayTimestamp - FTArrayIntNull []int64 `spanner:"FTArrayIntNull" json:"FTArrayIntNull"` // FTArrayIntNull - FTArrayInt []int64 `spanner:"FTArrayInt" json:"FTArrayInt"` // FTArrayInt - FTArrayFloatNull []float64 `spanner:"FTArrayFloatNull" json:"FTArrayFloatNull"` // FTArrayFloatNull - FTArrayFloat []float64 `spanner:"FTArrayFloat" json:"FTArrayFloat"` // FTArrayFloat - FTArrayDateNull []civil.Date `spanner:"FTArrayDateNull" json:"FTArrayDateNull"` // FTArrayDateNull - FTArrayDate []civil.Date `spanner:"FTArrayDate" json:"FTArrayDate"` // FTArrayDate - FTArrayJSONNull []spanner.NullJSON `spanner:"FTArrayJsonNull" json:"FTArrayJsonNull"` // FTArrayJsonNull - FTArrayJSON []spanner.NullJSON `spanner:"FTArrayJson" json:"FTArrayJson"` // FTArrayJson + PKey string `spanner:"PKey" json:"PKey"` // PKey + FTString string `spanner:"FTString" json:"FTString"` // FTString + FTStringNull spanner.NullString `spanner:"FTStringNull" json:"FTStringNull"` // FTStringNull + FTBool bool `spanner:"FTBool" json:"FTBool"` // FTBool + FTBoolNull spanner.NullBool `spanner:"FTBoolNull" json:"FTBoolNull"` // FTBoolNull + FTBytes []byte `spanner:"FTBytes" json:"FTBytes"` // FTBytes + FTBytesNull []byte `spanner:"FTBytesNull" json:"FTBytesNull"` // FTBytesNull + FTTimestamp time.Time `spanner:"FTTimestamp" json:"FTTimestamp"` // FTTimestamp + FTTimestampNull spanner.NullTime `spanner:"FTTimestampNull" json:"FTTimestampNull"` // FTTimestampNull + FTInt int64 `spanner:"FTInt" json:"FTInt"` // FTInt + FTIntNull spanner.NullInt64 `spanner:"FTIntNull" json:"FTIntNull"` // FTIntNull + FTFloat float64 `spanner:"FTFloat" json:"FTFloat"` // FTFloat + FTFloatNull spanner.NullFloat64 `spanner:"FTFloatNull" json:"FTFloatNull"` // FTFloatNull + FTDate civil.Date `spanner:"FTDate" json:"FTDate"` // FTDate + FTDateNull spanner.NullDate `spanner:"FTDateNull" json:"FTDateNull"` // FTDateNull + FTJSON spanner.NullJSON `spanner:"FTJson" json:"FTJson"` // FTJson + FTJSONNull spanner.NullJSON `spanner:"FTJsonNull" json:"FTJsonNull"` // FTJsonNull + FTArrayStringNull []spanner.NullString `spanner:"FTArrayStringNull" json:"FTArrayStringNull"` // FTArrayStringNull + FTArrayString []spanner.NullString `spanner:"FTArrayString" json:"FTArrayString"` // FTArrayString + FTArrayBoolNull []spanner.NullBool `spanner:"FTArrayBoolNull" json:"FTArrayBoolNull"` // FTArrayBoolNull + FTArrayBool []spanner.NullBool `spanner:"FTArrayBool" json:"FTArrayBool"` // FTArrayBool + FTArrayBytesNull [][]byte `spanner:"FTArrayBytesNull" json:"FTArrayBytesNull"` // FTArrayBytesNull + FTArrayBytes [][]byte `spanner:"FTArrayBytes" json:"FTArrayBytes"` // FTArrayBytes + FTArrayTimestampNull []spanner.NullTime `spanner:"FTArrayTimestampNull" json:"FTArrayTimestampNull"` // FTArrayTimestampNull + FTArrayTimestamp []spanner.NullTime `spanner:"FTArrayTimestamp" json:"FTArrayTimestamp"` // FTArrayTimestamp + FTArrayIntNull []spanner.NullInt64 `spanner:"FTArrayIntNull" json:"FTArrayIntNull"` // FTArrayIntNull + FTArrayInt []spanner.NullInt64 `spanner:"FTArrayInt" json:"FTArrayInt"` // FTArrayInt + FTArrayFloatNull []spanner.NullFloat64 `spanner:"FTArrayFloatNull" json:"FTArrayFloatNull"` // FTArrayFloatNull + FTArrayFloat []spanner.NullFloat64 `spanner:"FTArrayFloat" json:"FTArrayFloat"` // FTArrayFloat + FTArrayDateNull []spanner.NullDate `spanner:"FTArrayDateNull" json:"FTArrayDateNull"` // FTArrayDateNull + FTArrayDate []spanner.NullDate `spanner:"FTArrayDate" json:"FTArrayDate"` // FTArrayDate + FTArrayJSONNull []spanner.NullJSON `spanner:"FTArrayJsonNull" json:"FTArrayJsonNull"` // FTArrayJsonNull + FTArrayJSON []spanner.NullJSON `spanner:"FTArrayJson" json:"FTArrayJson"` // FTArrayJson } func FullTypePrimaryKeys() []string { diff --git a/v2/test/testmodels/dump_types/custom_primitive_type.txt b/v2/test/testmodels/dump_types/custom_primitive_type.txt index 362c5d4b..343bf4b9 100644 --- a/v2/test/testmodels/dump_types/custom_primitive_type.txt +++ b/v2/test/testmodels/dump_types/custom_primitive_type.txt @@ -17,22 +17,22 @@ * FTUInt16null INT64 spanner.NullInt64 * FTUInt8 INT64 int64 * FTUInt8null INT64 spanner.NullInt64 -* FTArrayInt64 ARRAY []int64 -* FTArrayInt64null ARRAY []int64 -* FTArrayInt32 ARRAY []int64 -* FTArrayInt32null ARRAY []int64 -* FTArrayInt16 ARRAY []int64 -* FTArrayInt16null ARRAY []int64 -* FTArrayInt8 ARRAY []int64 -* FTArrayInt8null ARRAY []int64 -* FTArrayUINt64 ARRAY []int64 -* FTArrayUINt64null ARRAY []int64 -* FTArrayUINt32 ARRAY []int64 -* FTArrayUINt32null ARRAY []int64 -* FTArrayUINt16 ARRAY []int64 -* FTArrayUINt16null ARRAY []int64 -* FTArrayUINt8 ARRAY []int64 -* FTArrayUINt8null ARRAY []int64 +* FTArrayInt64 ARRAY []spanner.NullInt64 +* FTArrayInt64null ARRAY []spanner.NullInt64 +* FTArrayInt32 ARRAY []spanner.NullInt64 +* FTArrayInt32null ARRAY []spanner.NullInt64 +* FTArrayInt16 ARRAY []spanner.NullInt64 +* FTArrayInt16null ARRAY []spanner.NullInt64 +* FTArrayInt8 ARRAY []spanner.NullInt64 +* FTArrayInt8null ARRAY []spanner.NullInt64 +* FTArrayUINt64 ARRAY []spanner.NullInt64 +* FTArrayUINt64null ARRAY []spanner.NullInt64 +* FTArrayUINt32 ARRAY []spanner.NullInt64 +* FTArrayUINt32null ARRAY []spanner.NullInt64 +* FTArrayUINt16 ARRAY []spanner.NullInt64 +* FTArrayUINt16null ARRAY []spanner.NullInt64 +* FTArrayUINt8 ARRAY []spanner.NullInt64 +* FTArrayUINt8null ARRAY []spanner.NullInt64 # Primary Key diff --git a/v2/test/testmodels/dump_types/full_type.txt b/v2/test/testmodels/dump_types/full_type.txt index 1000a1fb..1bef6dbe 100644 --- a/v2/test/testmodels/dump_types/full_type.txt +++ b/v2/test/testmodels/dump_types/full_type.txt @@ -17,20 +17,20 @@ * FTDateNull DATE spanner.NullDate * FTJSON JSON spanner.NullJSON * FTJSONNull JSON spanner.NullJSON -* FTArrayStringNull ARRAY []string -* FTArrayString ARRAY []string -* FTArrayBoolNull ARRAY []bool -* FTArrayBool ARRAY []bool +* FTArrayStringNull ARRAY []spanner.NullString +* FTArrayString ARRAY []spanner.NullString +* FTArrayBoolNull ARRAY []spanner.NullBool +* FTArrayBool ARRAY []spanner.NullBool * FTArrayBytesNull ARRAY [][]byte * FTArrayBytes ARRAY [][]byte -* FTArrayTimestampNull ARRAY []time.Time -* FTArrayTimestamp ARRAY []time.Time -* FTArrayIntNull ARRAY []int64 -* FTArrayInt ARRAY []int64 -* FTArrayFloatNull ARRAY []float64 -* FTArrayFloat ARRAY []float64 -* FTArrayDateNull ARRAY []civil.Date -* FTArrayDate ARRAY []civil.Date +* FTArrayTimestampNull ARRAY []spanner.NullTime +* FTArrayTimestamp ARRAY []spanner.NullTime +* FTArrayIntNull ARRAY []spanner.NullInt64 +* FTArrayInt ARRAY []spanner.NullInt64 +* FTArrayFloatNull ARRAY []spanner.NullFloat64 +* FTArrayFloat ARRAY []spanner.NullFloat64 +* FTArrayDateNull ARRAY []spanner.NullDate +* FTArrayDate ARRAY []spanner.NullDate * FTArrayJSONNull ARRAY []spanner.NullJSON * FTArrayJSON ARRAY []spanner.NullJSON diff --git a/v2/test/testmodels/legacy_default/custom_primitive_type.yo.go b/v2/test/testmodels/legacy_default/custom_primitive_type.yo.go index c11975b6..5a1390f9 100644 --- a/v2/test/testmodels/legacy_default/custom_primitive_type.yo.go +++ b/v2/test/testmodels/legacy_default/custom_primitive_type.yo.go @@ -13,39 +13,39 @@ import ( // CustomPrimitiveType represents a row from 'CustomPrimitiveTypes'. type CustomPrimitiveType struct { - PKey string `spanner:"PKey" json:"PKey"` // PKey - FTInt64 int64 `spanner:"FTInt64" json:"FTInt64"` // FTInt64 - FTInt64null int64 `spanner:"FTInt64Null" json:"FTInt64Null"` // FTInt64Null - FTInt32 int32 `spanner:"FTInt32" json:"FTInt32"` // FTInt32 - FTInt32null int32 `spanner:"FTInt32Null" json:"FTInt32Null"` // FTInt32Null - FTInt16 int16 `spanner:"FTInt16" json:"FTInt16"` // FTInt16 - FTInt16null int16 `spanner:"FTInt16Null" json:"FTInt16Null"` // FTInt16Null - FTInt8 int8 `spanner:"FTInt8" json:"FTInt8"` // FTInt8 - FTInt8null int8 `spanner:"FTInt8Null" json:"FTInt8Null"` // FTInt8Null - FTUInt64 uint64 `spanner:"FTUInt64" json:"FTUInt64"` // FTUInt64 - FTUInt64null uint64 `spanner:"FTUInt64Null" json:"FTUInt64Null"` // FTUInt64Null - FTUInt32 uint32 `spanner:"FTUInt32" json:"FTUInt32"` // FTUInt32 - FTUInt32null uint32 `spanner:"FTUInt32Null" json:"FTUInt32Null"` // FTUInt32Null - FTUInt16 uint16 `spanner:"FTUInt16" json:"FTUInt16"` // FTUInt16 - FTUInt16null uint16 `spanner:"FTUInt16Null" json:"FTUInt16Null"` // FTUInt16Null - FTUInt8 uint8 `spanner:"FTUInt8" json:"FTUInt8"` // FTUInt8 - FTUInt8null uint8 `spanner:"FTUInt8Null" json:"FTUInt8Null"` // FTUInt8Null - FTArrayInt64 []int64 `spanner:"FTArrayInt64" json:"FTArrayInt64"` // FTArrayInt64 - FTArrayInt64null []int64 `spanner:"FTArrayInt64Null" json:"FTArrayInt64Null"` // FTArrayInt64Null - FTArrayInt32 []int64 `spanner:"FTArrayInt32" json:"FTArrayInt32"` // FTArrayInt32 - FTArrayInt32null []int64 `spanner:"FTArrayInt32Null" json:"FTArrayInt32Null"` // FTArrayInt32Null - FTArrayInt16 []int64 `spanner:"FTArrayInt16" json:"FTArrayInt16"` // FTArrayInt16 - FTArrayInt16null []int64 `spanner:"FTArrayInt16Null" json:"FTArrayInt16Null"` // FTArrayInt16Null - FTArrayInt8 []int64 `spanner:"FTArrayInt8" json:"FTArrayInt8"` // FTArrayInt8 - FTArrayInt8null []int64 `spanner:"FTArrayInt8Null" json:"FTArrayInt8Null"` // FTArrayInt8Null - FTArrayUINt64 []int64 `spanner:"FTArrayUInt64" json:"FTArrayUInt64"` // FTArrayUInt64 - FTArrayUINt64null []int64 `spanner:"FTArrayUInt64Null" json:"FTArrayUInt64Null"` // FTArrayUInt64Null - FTArrayUINt32 []int64 `spanner:"FTArrayUInt32" json:"FTArrayUInt32"` // FTArrayUInt32 - FTArrayUINt32null []int64 `spanner:"FTArrayUInt32Null" json:"FTArrayUInt32Null"` // FTArrayUInt32Null - FTArrayUINt16 []int64 `spanner:"FTArrayUInt16" json:"FTArrayUInt16"` // FTArrayUInt16 - FTArrayUINt16null []int64 `spanner:"FTArrayUInt16Null" json:"FTArrayUInt16Null"` // FTArrayUInt16Null - FTArrayUINt8 []int64 `spanner:"FTArrayUInt8" json:"FTArrayUInt8"` // FTArrayUInt8 - FTArrayUINt8null []int64 `spanner:"FTArrayUInt8Null" json:"FTArrayUInt8Null"` // FTArrayUInt8Null + PKey string `spanner:"PKey" json:"PKey"` // PKey + FTInt64 int64 `spanner:"FTInt64" json:"FTInt64"` // FTInt64 + FTInt64null int64 `spanner:"FTInt64Null" json:"FTInt64Null"` // FTInt64Null + FTInt32 int32 `spanner:"FTInt32" json:"FTInt32"` // FTInt32 + FTInt32null int32 `spanner:"FTInt32Null" json:"FTInt32Null"` // FTInt32Null + FTInt16 int16 `spanner:"FTInt16" json:"FTInt16"` // FTInt16 + FTInt16null int16 `spanner:"FTInt16Null" json:"FTInt16Null"` // FTInt16Null + FTInt8 int8 `spanner:"FTInt8" json:"FTInt8"` // FTInt8 + FTInt8null int8 `spanner:"FTInt8Null" json:"FTInt8Null"` // FTInt8Null + FTUInt64 uint64 `spanner:"FTUInt64" json:"FTUInt64"` // FTUInt64 + FTUInt64null uint64 `spanner:"FTUInt64Null" json:"FTUInt64Null"` // FTUInt64Null + FTUInt32 uint32 `spanner:"FTUInt32" json:"FTUInt32"` // FTUInt32 + FTUInt32null uint32 `spanner:"FTUInt32Null" json:"FTUInt32Null"` // FTUInt32Null + FTUInt16 uint16 `spanner:"FTUInt16" json:"FTUInt16"` // FTUInt16 + FTUInt16null uint16 `spanner:"FTUInt16Null" json:"FTUInt16Null"` // FTUInt16Null + FTUInt8 uint8 `spanner:"FTUInt8" json:"FTUInt8"` // FTUInt8 + FTUInt8null uint8 `spanner:"FTUInt8Null" json:"FTUInt8Null"` // FTUInt8Null + FTArrayInt64 []spanner.NullInt64 `spanner:"FTArrayInt64" json:"FTArrayInt64"` // FTArrayInt64 + FTArrayInt64null []spanner.NullInt64 `spanner:"FTArrayInt64Null" json:"FTArrayInt64Null"` // FTArrayInt64Null + FTArrayInt32 []spanner.NullInt64 `spanner:"FTArrayInt32" json:"FTArrayInt32"` // FTArrayInt32 + FTArrayInt32null []spanner.NullInt64 `spanner:"FTArrayInt32Null" json:"FTArrayInt32Null"` // FTArrayInt32Null + FTArrayInt16 []spanner.NullInt64 `spanner:"FTArrayInt16" json:"FTArrayInt16"` // FTArrayInt16 + FTArrayInt16null []spanner.NullInt64 `spanner:"FTArrayInt16Null" json:"FTArrayInt16Null"` // FTArrayInt16Null + FTArrayInt8 []spanner.NullInt64 `spanner:"FTArrayInt8" json:"FTArrayInt8"` // FTArrayInt8 + FTArrayInt8null []spanner.NullInt64 `spanner:"FTArrayInt8Null" json:"FTArrayInt8Null"` // FTArrayInt8Null + FTArrayUINt64 []spanner.NullInt64 `spanner:"FTArrayUInt64" json:"FTArrayUInt64"` // FTArrayUInt64 + FTArrayUINt64null []spanner.NullInt64 `spanner:"FTArrayUInt64Null" json:"FTArrayUInt64Null"` // FTArrayUInt64Null + FTArrayUINt32 []spanner.NullInt64 `spanner:"FTArrayUInt32" json:"FTArrayUInt32"` // FTArrayUInt32 + FTArrayUINt32null []spanner.NullInt64 `spanner:"FTArrayUInt32Null" json:"FTArrayUInt32Null"` // FTArrayUInt32Null + FTArrayUINt16 []spanner.NullInt64 `spanner:"FTArrayUInt16" json:"FTArrayUInt16"` // FTArrayUInt16 + FTArrayUINt16null []spanner.NullInt64 `spanner:"FTArrayUInt16Null" json:"FTArrayUInt16Null"` // FTArrayUInt16Null + FTArrayUINt8 []spanner.NullInt64 `spanner:"FTArrayUInt8" json:"FTArrayUInt8"` // FTArrayUInt8 + FTArrayUINt8null []spanner.NullInt64 `spanner:"FTArrayUInt8Null" json:"FTArrayUInt8Null"` // FTArrayUInt8Null } func CustomPrimitiveTypePrimaryKeys() []string { diff --git a/v2/test/testmodels/legacy_default/full_type.yo.go b/v2/test/testmodels/legacy_default/full_type.yo.go index 3e9a9ed5..7664fb78 100644 --- a/v2/test/testmodels/legacy_default/full_type.yo.go +++ b/v2/test/testmodels/legacy_default/full_type.yo.go @@ -17,39 +17,39 @@ import ( // FullType represents a row from 'FullTypes'. type FullType struct { - PKey string `spanner:"PKey" json:"PKey"` // PKey - FTString string `spanner:"FTString" json:"FTString"` // FTString - FTStringNull spanner.NullString `spanner:"FTStringNull" json:"FTStringNull"` // FTStringNull - FTBool bool `spanner:"FTBool" json:"FTBool"` // FTBool - FTBoolNull spanner.NullBool `spanner:"FTBoolNull" json:"FTBoolNull"` // FTBoolNull - FTBytes []byte `spanner:"FTBytes" json:"FTBytes"` // FTBytes - FTBytesNull []byte `spanner:"FTBytesNull" json:"FTBytesNull"` // FTBytesNull - FTTimestamp time.Time `spanner:"FTTimestamp" json:"FTTimestamp"` // FTTimestamp - FTTimestampNull spanner.NullTime `spanner:"FTTimestampNull" json:"FTTimestampNull"` // FTTimestampNull - FTInt int64 `spanner:"FTInt" json:"FTInt"` // FTInt - FTIntNull spanner.NullInt64 `spanner:"FTIntNull" json:"FTIntNull"` // FTIntNull - FTFloat float64 `spanner:"FTFloat" json:"FTFloat"` // FTFloat - FTFloatNull spanner.NullFloat64 `spanner:"FTFloatNull" json:"FTFloatNull"` // FTFloatNull - FTDate civil.Date `spanner:"FTDate" json:"FTDate"` // FTDate - FTDateNull spanner.NullDate `spanner:"FTDateNull" json:"FTDateNull"` // FTDateNull - FTJSON spanner.NullJSON `spanner:"FTJson" json:"FTJson"` // FTJson - FTJSONNull spanner.NullJSON `spanner:"FTJsonNull" json:"FTJsonNull"` // FTJsonNull - FTArrayStringNull []string `spanner:"FTArrayStringNull" json:"FTArrayStringNull"` // FTArrayStringNull - FTArrayString []string `spanner:"FTArrayString" json:"FTArrayString"` // FTArrayString - FTArrayBoolNull []bool `spanner:"FTArrayBoolNull" json:"FTArrayBoolNull"` // FTArrayBoolNull - FTArrayBool []bool `spanner:"FTArrayBool" json:"FTArrayBool"` // FTArrayBool - FTArrayBytesNull [][]byte `spanner:"FTArrayBytesNull" json:"FTArrayBytesNull"` // FTArrayBytesNull - FTArrayBytes [][]byte `spanner:"FTArrayBytes" json:"FTArrayBytes"` // FTArrayBytes - FTArrayTimestampNull []time.Time `spanner:"FTArrayTimestampNull" json:"FTArrayTimestampNull"` // FTArrayTimestampNull - FTArrayTimestamp []time.Time `spanner:"FTArrayTimestamp" json:"FTArrayTimestamp"` // FTArrayTimestamp - FTArrayIntNull []int64 `spanner:"FTArrayIntNull" json:"FTArrayIntNull"` // FTArrayIntNull - FTArrayInt []int64 `spanner:"FTArrayInt" json:"FTArrayInt"` // FTArrayInt - FTArrayFloatNull []float64 `spanner:"FTArrayFloatNull" json:"FTArrayFloatNull"` // FTArrayFloatNull - FTArrayFloat []float64 `spanner:"FTArrayFloat" json:"FTArrayFloat"` // FTArrayFloat - FTArrayDateNull []civil.Date `spanner:"FTArrayDateNull" json:"FTArrayDateNull"` // FTArrayDateNull - FTArrayDate []civil.Date `spanner:"FTArrayDate" json:"FTArrayDate"` // FTArrayDate - FTArrayJSONNull []spanner.NullJSON `spanner:"FTArrayJsonNull" json:"FTArrayJsonNull"` // FTArrayJsonNull - FTArrayJSON []spanner.NullJSON `spanner:"FTArrayJson" json:"FTArrayJson"` // FTArrayJson + PKey string `spanner:"PKey" json:"PKey"` // PKey + FTString string `spanner:"FTString" json:"FTString"` // FTString + FTStringNull spanner.NullString `spanner:"FTStringNull" json:"FTStringNull"` // FTStringNull + FTBool bool `spanner:"FTBool" json:"FTBool"` // FTBool + FTBoolNull spanner.NullBool `spanner:"FTBoolNull" json:"FTBoolNull"` // FTBoolNull + FTBytes []byte `spanner:"FTBytes" json:"FTBytes"` // FTBytes + FTBytesNull []byte `spanner:"FTBytesNull" json:"FTBytesNull"` // FTBytesNull + FTTimestamp time.Time `spanner:"FTTimestamp" json:"FTTimestamp"` // FTTimestamp + FTTimestampNull spanner.NullTime `spanner:"FTTimestampNull" json:"FTTimestampNull"` // FTTimestampNull + FTInt int64 `spanner:"FTInt" json:"FTInt"` // FTInt + FTIntNull spanner.NullInt64 `spanner:"FTIntNull" json:"FTIntNull"` // FTIntNull + FTFloat float64 `spanner:"FTFloat" json:"FTFloat"` // FTFloat + FTFloatNull spanner.NullFloat64 `spanner:"FTFloatNull" json:"FTFloatNull"` // FTFloatNull + FTDate civil.Date `spanner:"FTDate" json:"FTDate"` // FTDate + FTDateNull spanner.NullDate `spanner:"FTDateNull" json:"FTDateNull"` // FTDateNull + FTJSON spanner.NullJSON `spanner:"FTJson" json:"FTJson"` // FTJson + FTJSONNull spanner.NullJSON `spanner:"FTJsonNull" json:"FTJsonNull"` // FTJsonNull + FTArrayStringNull []spanner.NullString `spanner:"FTArrayStringNull" json:"FTArrayStringNull"` // FTArrayStringNull + FTArrayString []spanner.NullString `spanner:"FTArrayString" json:"FTArrayString"` // FTArrayString + FTArrayBoolNull []spanner.NullBool `spanner:"FTArrayBoolNull" json:"FTArrayBoolNull"` // FTArrayBoolNull + FTArrayBool []spanner.NullBool `spanner:"FTArrayBool" json:"FTArrayBool"` // FTArrayBool + FTArrayBytesNull [][]byte `spanner:"FTArrayBytesNull" json:"FTArrayBytesNull"` // FTArrayBytesNull + FTArrayBytes [][]byte `spanner:"FTArrayBytes" json:"FTArrayBytes"` // FTArrayBytes + FTArrayTimestampNull []spanner.NullTime `spanner:"FTArrayTimestampNull" json:"FTArrayTimestampNull"` // FTArrayTimestampNull + FTArrayTimestamp []spanner.NullTime `spanner:"FTArrayTimestamp" json:"FTArrayTimestamp"` // FTArrayTimestamp + FTArrayIntNull []spanner.NullInt64 `spanner:"FTArrayIntNull" json:"FTArrayIntNull"` // FTArrayIntNull + FTArrayInt []spanner.NullInt64 `spanner:"FTArrayInt" json:"FTArrayInt"` // FTArrayInt + FTArrayFloatNull []spanner.NullFloat64 `spanner:"FTArrayFloatNull" json:"FTArrayFloatNull"` // FTArrayFloatNull + FTArrayFloat []spanner.NullFloat64 `spanner:"FTArrayFloat" json:"FTArrayFloat"` // FTArrayFloat + FTArrayDateNull []spanner.NullDate `spanner:"FTArrayDateNull" json:"FTArrayDateNull"` // FTArrayDateNull + FTArrayDate []spanner.NullDate `spanner:"FTArrayDate" json:"FTArrayDate"` // FTArrayDate + FTArrayJSONNull []spanner.NullJSON `spanner:"FTArrayJsonNull" json:"FTArrayJsonNull"` // FTArrayJsonNull + FTArrayJSON []spanner.NullJSON `spanner:"FTArrayJson" json:"FTArrayJson"` // FTArrayJson } func FullTypePrimaryKeys() []string {