diff --git a/.gitignore b/.gitignore index 9886722..8e29238 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +*~ +*.swp /go-queryset /vendor /internal/parser/test/tmptestdir*/ diff --git a/.travis.yml b/.travis.yml index bfcc98c..eee0a4b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,6 +5,13 @@ go: before_install: - go get github.com/mattn/goveralls - curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin v1.15.0 + - env GO111MODULE=on go get ./cmd/goqueryset script: - env GO111MODULE=on make test - env GO111MODULE=on $HOME/gopath/bin/goveralls -ignore "internal/queryset/generator/test/autogenerated_models.go,examples/comparison/*/*.go,internal/queryset/generator/test/pkgimport/*.go,internal/queryset/generator/test/pkgimport/*/*/*.go" -v -service=travis-ci + - make clean_autogenerated + - env GO111MODULE=on make gen + - test -z "$(git status -s)" && exit 0 + - echo "Folowing modules should be regenerated:\n$(git status -s)\n" + - echo "Call 'make gen' to fix this issue." + - exit 1 diff --git a/Makefile b/Makefile index 1b701d9..77b874c 100644 --- a/Makefile +++ b/Makefile @@ -24,3 +24,6 @@ gen: @- $(foreach F,$(AUTOGEN_FILES), \ go generate $$(dirname $F); \ ) + +clean_autogenerated: + @rm -f $(AUTOGEN_FILES) diff --git a/go.mod b/go.mod index 9c47a12..7a0d269 100644 --- a/go.mod +++ b/go.mod @@ -12,6 +12,7 @@ require ( github.com/lib/pq v1.0.0 // indirect github.com/mattn/go-sqlite3 v1.10.0 // indirect github.com/pkg/errors v0.8.1 + github.com/satori/go.uuid v1.2.0 github.com/stretchr/testify v1.3.0 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 // indirect golang.org/x/tools v0.0.0-20190226205152-f727befe758c diff --git a/go.sum b/go.sum index 7f4f78c..35f5690 100644 --- a/go.sum +++ b/go.sum @@ -79,6 +79,8 @@ github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1: github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= diff --git a/internal/queryset/field/field.go b/internal/queryset/field/field.go index 0b7e344..aa63e61 100644 --- a/internal/queryset/field/field.go +++ b/internal/queryset/field/field.go @@ -117,6 +117,7 @@ func (g InfoGenerator) GenFieldInfo(f Field) *Info { } } + const byteType = "byte" switch t := f.Type().(type) { case *types.Basic: bi.IsString = t.Info()&types.IsString != 0 @@ -125,7 +126,14 @@ func (g InfoGenerator) GenFieldInfo(f Field) *Info { BaseInfo: bi, } case *types.Slice: - if t.Elem().String() == "byte" { + if t.Elem().String() == byteType { + return &Info{ + BaseInfo: bi, + } + } + return nil + case *types.Array: + if t.Elem().String() == byteType { return &Info{ BaseInfo: bi, } diff --git a/internal/queryset/generator/test/pkgimport/autogenerated_models.go b/internal/queryset/generator/test/pkgimport/autogenerated_models.go index 8cb1eb8..d7a6476 100644 --- a/internal/queryset/generator/test/pkgimport/autogenerated_models.go +++ b/internal/queryset/generator/test/pkgimport/autogenerated_models.go @@ -7,6 +7,7 @@ import ( "github.com/jinzhu/gorm" forex "github.com/jirfag/go-queryset/internal/queryset/generator/test/pkgimport/forex/v1" + uuid "github.com/satori/go.uuid" ) // ===== BEGIN of all query sets @@ -231,6 +232,38 @@ func (qs ExampleQuerySet) GetUpdater() ExampleUpdater { return NewExampleUpdater(qs.db) } +// IDEq is an autogenerated method +// nolint: dupl +func (qs ExampleQuerySet) IDEq(ID uuid.UUID) ExampleQuerySet { + return qs.w(qs.db.Where("id = ?", ID)) +} + +// IDIn is an autogenerated method +// nolint: dupl +func (qs ExampleQuerySet) IDIn(ID ...uuid.UUID) ExampleQuerySet { + if len(ID) == 0 { + qs.db.AddError(errors.New("must at least pass one ID in IDIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("id IN (?)", ID)) +} + +// IDNe is an autogenerated method +// nolint: dupl +func (qs ExampleQuerySet) IDNe(ID uuid.UUID) ExampleQuerySet { + return qs.w(qs.db.Where("id != ?", ID)) +} + +// IDNotIn is an autogenerated method +// nolint: dupl +func (qs ExampleQuerySet) IDNotIn(ID ...uuid.UUID) ExampleQuerySet { + if len(ID) == 0 { + qs.db.AddError(errors.New("must at least pass one ID in IDNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("id NOT IN (?)", ID)) +} + // Limit is an autogenerated method // nolint: dupl func (qs ExampleQuerySet) Limit(limit int) ExampleQuerySet { @@ -267,6 +300,12 @@ func (qs ExampleQuerySet) OrderAscByCurrency3() ExampleQuerySet { return qs.w(qs.db.Order("currency3 ASC")) } +// OrderAscByID is an autogenerated method +// nolint: dupl +func (qs ExampleQuerySet) OrderAscByID() ExampleQuerySet { + return qs.w(qs.db.Order("id ASC")) +} + // OrderAscByPriceID is an autogenerated method // nolint: dupl func (qs ExampleQuerySet) OrderAscByPriceID() ExampleQuerySet { @@ -291,6 +330,12 @@ func (qs ExampleQuerySet) OrderDescByCurrency3() ExampleQuerySet { return qs.w(qs.db.Order("currency3 DESC")) } +// OrderDescByID is an autogenerated method +// nolint: dupl +func (qs ExampleQuerySet) OrderDescByID() ExampleQuerySet { + return qs.w(qs.db.Order("id DESC")) +} + // OrderDescByPriceID is an autogenerated method // nolint: dupl func (qs ExampleQuerySet) OrderDescByPriceID() ExampleQuerySet { @@ -374,6 +419,13 @@ func (u ExampleUpdater) SetCurrency3(currency3 forex.Currency3) ExampleUpdater { return u } +// SetID is an autogenerated method +// nolint: dupl +func (u ExampleUpdater) SetID(ID uuid.UUID) ExampleUpdater { + u.fields[string(ExampleDBSchema.ID)] = ID + return u +} + // SetPriceID is an autogenerated method // nolint: dupl func (u ExampleUpdater) SetPriceID(priceID int64) ExampleUpdater { @@ -409,12 +461,14 @@ func (f ExampleDBSchemaField) String() string { // ExampleDBSchema stores db field names of Example var ExampleDBSchema = struct { + ID ExampleDBSchemaField PriceID ExampleDBSchemaField Currency1 ExampleDBSchemaField Currency2 ExampleDBSchemaField Currency3 ExampleDBSchemaField }{ + ID: ExampleDBSchemaField("id"), PriceID: ExampleDBSchemaField("price_id"), Currency1: ExampleDBSchemaField("currency1"), Currency2: ExampleDBSchemaField("currency2"), @@ -425,6 +479,7 @@ var ExampleDBSchema = struct { // nolint: dupl func (o *Example) Update(db *gorm.DB, fields ...ExampleDBSchemaField) error { dbNameToFieldName := map[string]interface{}{ + "id": o.ID, "price_id": o.PriceID, "currency1": o.Currency1, "currency2": o.Currency2, diff --git a/internal/queryset/generator/test/pkgimport/models.go b/internal/queryset/generator/test/pkgimport/models.go index 3cb8171..1ef9473 100644 --- a/internal/queryset/generator/test/pkgimport/models.go +++ b/internal/queryset/generator/test/pkgimport/models.go @@ -5,11 +5,13 @@ package models import ( forex "github.com/jirfag/go-queryset/internal/queryset/generator/test/pkgimport/forex/v1" forexAlias "github.com/jirfag/go-queryset/internal/queryset/generator/test/pkgimport/forex/v1" + uuid "github.com/satori/go.uuid" ) // Example is a test struct // gen:qs type Example struct { + ID uuid.UUID PriceID int64 Currency1 forexAlias.Currency1 Currency2 forex.Currency2