From 7f9778dfe22908891887a604863bacfc871fa078 Mon Sep 17 00:00:00 2001 From: Pavel Berezhnoy Date: Tue, 1 Oct 2019 23:26:09 +0300 Subject: [PATCH] Fixed arrays support; fixes #52 --- .gitignore | 2 + go.mod | 1 + go.sum | 2 + internal/queryset/field/field.go | 7 +++ .../test/pkgimport/autogenerated_models.go | 55 +++++++++++++++++++ .../generator/test/pkgimport/models.go | 2 + 6 files changed, 69 insertions(+) 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/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..c0beb8a 100644 --- a/internal/queryset/field/field.go +++ b/internal/queryset/field/field.go @@ -131,6 +131,13 @@ func (g InfoGenerator) GenFieldInfo(f Field) *Info { } } return nil + case *types.Array: + if t.Elem().String() == "byte" { + return &Info{ + BaseInfo: bi, + } + } + return nil case *types.Named: r := g.GenFieldInfo(field{ name: f.Name(), 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