diff --git a/README.md b/README.md index 062f0d0..8313dfd 100644 --- a/README.md +++ b/README.md @@ -477,12 +477,12 @@ found at project [wiki](https://github.com/go-jet/jet/wiki) page. What are the benefits of writing SQL in Go using Jet? The biggest benefit is speed. Speed is improved in 3 major areas: + ##### Speed of development Writing SQL queries is much easier directly from Go, because programmer has the help of SQL code completion and SQL type safety directly in Go. Writing code is much faster and code is more robust. Automatic scan to arbitrary structure removes a lot of headache and boilerplate code needed to structure database query result. -With Jet programmer has the power of SQL but also ease of use of NoSQL. ##### Speed of execution diff --git a/examples/quick-start/.gen/jetdb/dvds/enum/mpaa_rating.go b/examples/quick-start/.gen/jetdb/dvds/enum/mpaa_rating.go new file mode 100644 index 0000000..cb8bf00 --- /dev/null +++ b/examples/quick-start/.gen/jetdb/dvds/enum/mpaa_rating.go @@ -0,0 +1,25 @@ +// +// Code generated by go-jet DO NOT EDIT. +// Generated at Wednesday, 17-Jul-19 13:11:01 CEST +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package enum + +import "github.com/go-jet/jet" + +var MpaaRating = &struct { + G jet.StringExpression + Pg jet.StringExpression + Pg13 jet.StringExpression + R jet.StringExpression + Nc17 jet.StringExpression +}{ + G: jet.NewEnumValue("G"), + Pg: jet.NewEnumValue("PG"), + Pg13: jet.NewEnumValue("PG-13"), + R: jet.NewEnumValue("R"), + Nc17: jet.NewEnumValue("NC-17"), +} diff --git a/examples/quick-start/.gen/jetdb/dvds/model/actor.go b/examples/quick-start/.gen/jetdb/dvds/model/actor.go new file mode 100644 index 0000000..762ab6e --- /dev/null +++ b/examples/quick-start/.gen/jetdb/dvds/model/actor.go @@ -0,0 +1,20 @@ +// +// Code generated by go-jet DO NOT EDIT. +// Generated at Wednesday, 17-Jul-19 13:11:01 CEST +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package model + +import ( + "time" +) + +type Actor struct { + ActorID int32 `sql:"primary_key"` + FirstName string + LastName string + LastUpdate time.Time +} diff --git a/examples/quick-start/.gen/jetdb/dvds/model/category.go b/examples/quick-start/.gen/jetdb/dvds/model/category.go new file mode 100644 index 0000000..b5f09ed --- /dev/null +++ b/examples/quick-start/.gen/jetdb/dvds/model/category.go @@ -0,0 +1,19 @@ +// +// Code generated by go-jet DO NOT EDIT. +// Generated at Wednesday, 17-Jul-19 13:11:01 CEST +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package model + +import ( + "time" +) + +type Category struct { + CategoryID int32 `sql:"primary_key"` + Name string + LastUpdate time.Time +} diff --git a/examples/quick-start/.gen/jetdb/dvds/model/film.go b/examples/quick-start/.gen/jetdb/dvds/model/film.go new file mode 100644 index 0000000..9540b50 --- /dev/null +++ b/examples/quick-start/.gen/jetdb/dvds/model/film.go @@ -0,0 +1,29 @@ +// +// Code generated by go-jet DO NOT EDIT. +// Generated at Wednesday, 17-Jul-19 13:11:01 CEST +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package model + +import ( + "time" +) + +type Film struct { + FilmID int32 `sql:"primary_key"` + Title string + Description *string + ReleaseYear *int32 + LanguageID int16 + RentalDuration int16 + RentalRate float64 + Length *int16 + ReplacementCost float64 + Rating *MpaaRating + LastUpdate time.Time + SpecialFeatures *string + Fulltext string +} diff --git a/examples/quick-start/.gen/jetdb/dvds/model/film_actor.go b/examples/quick-start/.gen/jetdb/dvds/model/film_actor.go new file mode 100644 index 0000000..64498ba --- /dev/null +++ b/examples/quick-start/.gen/jetdb/dvds/model/film_actor.go @@ -0,0 +1,19 @@ +// +// Code generated by go-jet DO NOT EDIT. +// Generated at Wednesday, 17-Jul-19 13:11:01 CEST +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package model + +import ( + "time" +) + +type FilmActor struct { + ActorID int16 `sql:"primary_key"` + FilmID int16 `sql:"primary_key"` + LastUpdate time.Time +} diff --git a/examples/quick-start/.gen/jetdb/dvds/model/film_category.go b/examples/quick-start/.gen/jetdb/dvds/model/film_category.go new file mode 100644 index 0000000..27d05cc --- /dev/null +++ b/examples/quick-start/.gen/jetdb/dvds/model/film_category.go @@ -0,0 +1,19 @@ +// +// Code generated by go-jet DO NOT EDIT. +// Generated at Wednesday, 17-Jul-19 13:11:01 CEST +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package model + +import ( + "time" +) + +type FilmCategory struct { + FilmID int16 `sql:"primary_key"` + CategoryID int16 `sql:"primary_key"` + LastUpdate time.Time +} diff --git a/examples/quick-start/.gen/jetdb/dvds/model/language.go b/examples/quick-start/.gen/jetdb/dvds/model/language.go new file mode 100644 index 0000000..29c90a8 --- /dev/null +++ b/examples/quick-start/.gen/jetdb/dvds/model/language.go @@ -0,0 +1,19 @@ +// +// Code generated by go-jet DO NOT EDIT. +// Generated at Wednesday, 17-Jul-19 13:11:01 CEST +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package model + +import ( + "time" +) + +type Language struct { + LanguageID int32 `sql:"primary_key"` + Name string + LastUpdate time.Time +} diff --git a/examples/quick-start/.gen/jetdb/dvds/model/mpaa_rating.go b/examples/quick-start/.gen/jetdb/dvds/model/mpaa_rating.go new file mode 100644 index 0000000..1f87b6b --- /dev/null +++ b/examples/quick-start/.gen/jetdb/dvds/model/mpaa_rating.go @@ -0,0 +1,48 @@ +// +// Code generated by go-jet DO NOT EDIT. +// Generated at Wednesday, 17-Jul-19 13:11:01 CEST +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package model + +import "errors" + +type MpaaRating string + +const ( + MpaaRating_G MpaaRating = "G" + MpaaRating_Pg MpaaRating = "PG" + MpaaRating_Pg13 MpaaRating = "PG-13" + MpaaRating_R MpaaRating = "R" + MpaaRating_Nc17 MpaaRating = "NC-17" +) + +func (e *MpaaRating) Scan(value interface{}) error { + if v, ok := value.(string); !ok { + return errors.New("jet: Invalid data for MpaaRating enum") + } else { + switch string(v) { + case "G": + *e = MpaaRating_G + case "PG": + *e = MpaaRating_Pg + case "PG-13": + *e = MpaaRating_Pg13 + case "R": + *e = MpaaRating_R + case "NC-17": + *e = MpaaRating_Nc17 + default: + return errors.New("jet: Inavlid data " + string(v) + "for MpaaRating enum") + } + + return nil + } +} + +func (e MpaaRating) String() string { + return string(e) +} diff --git a/examples/quick-start/.gen/jetdb/dvds/table/actor.go b/examples/quick-start/.gen/jetdb/dvds/table/actor.go new file mode 100644 index 0000000..6889953 --- /dev/null +++ b/examples/quick-start/.gen/jetdb/dvds/table/actor.go @@ -0,0 +1,59 @@ +// +// Code generated by go-jet DO NOT EDIT. +// Generated at Wednesday, 17-Jul-19 13:11:01 CEST +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package table + +import ( + "github.com/go-jet/jet" +) + +var Actor = newActorTable() + +type ActorTable struct { + jet.Table + + //Columns + ActorID jet.ColumnInteger + FirstName jet.ColumnString + LastName jet.ColumnString + LastUpdate jet.ColumnTimestamp + + AllColumns jet.ColumnList + MutableColumns jet.ColumnList +} + +// creates new ActorTable with assigned alias +func (a *ActorTable) AS(alias string) *ActorTable { + aliasTable := newActorTable() + + aliasTable.Table.AS(alias) + + return aliasTable +} + +func newActorTable() *ActorTable { + var ( + ActorIDColumn = jet.IntegerColumn("actor_id") + FirstNameColumn = jet.StringColumn("first_name") + LastNameColumn = jet.StringColumn("last_name") + LastUpdateColumn = jet.TimestampColumn("last_update") + ) + + return &ActorTable{ + Table: jet.NewTable("dvds", "actor", ActorIDColumn, FirstNameColumn, LastNameColumn, LastUpdateColumn), + + //Columns + ActorID: ActorIDColumn, + FirstName: FirstNameColumn, + LastName: LastNameColumn, + LastUpdate: LastUpdateColumn, + + AllColumns: jet.ColumnList{ActorIDColumn, FirstNameColumn, LastNameColumn, LastUpdateColumn}, + MutableColumns: jet.ColumnList{FirstNameColumn, LastNameColumn, LastUpdateColumn}, + } +} diff --git a/examples/quick-start/.gen/jetdb/dvds/table/category.go b/examples/quick-start/.gen/jetdb/dvds/table/category.go new file mode 100644 index 0000000..d92cc3d --- /dev/null +++ b/examples/quick-start/.gen/jetdb/dvds/table/category.go @@ -0,0 +1,56 @@ +// +// Code generated by go-jet DO NOT EDIT. +// Generated at Wednesday, 17-Jul-19 13:11:01 CEST +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package table + +import ( + "github.com/go-jet/jet" +) + +var Category = newCategoryTable() + +type CategoryTable struct { + jet.Table + + //Columns + CategoryID jet.ColumnInteger + Name jet.ColumnString + LastUpdate jet.ColumnTimestamp + + AllColumns jet.ColumnList + MutableColumns jet.ColumnList +} + +// creates new CategoryTable with assigned alias +func (a *CategoryTable) AS(alias string) *CategoryTable { + aliasTable := newCategoryTable() + + aliasTable.Table.AS(alias) + + return aliasTable +} + +func newCategoryTable() *CategoryTable { + var ( + CategoryIDColumn = jet.IntegerColumn("category_id") + NameColumn = jet.StringColumn("name") + LastUpdateColumn = jet.TimestampColumn("last_update") + ) + + return &CategoryTable{ + Table: jet.NewTable("dvds", "category", CategoryIDColumn, NameColumn, LastUpdateColumn), + + //Columns + CategoryID: CategoryIDColumn, + Name: NameColumn, + LastUpdate: LastUpdateColumn, + + AllColumns: jet.ColumnList{CategoryIDColumn, NameColumn, LastUpdateColumn}, + MutableColumns: jet.ColumnList{NameColumn, LastUpdateColumn}, + } +} diff --git a/examples/quick-start/.gen/jetdb/dvds/table/film.go b/examples/quick-start/.gen/jetdb/dvds/table/film.go new file mode 100644 index 0000000..a1013dd --- /dev/null +++ b/examples/quick-start/.gen/jetdb/dvds/table/film.go @@ -0,0 +1,86 @@ +// +// Code generated by go-jet DO NOT EDIT. +// Generated at Wednesday, 17-Jul-19 13:11:01 CEST +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package table + +import ( + "github.com/go-jet/jet" +) + +var Film = newFilmTable() + +type FilmTable struct { + jet.Table + + //Columns + FilmID jet.ColumnInteger + Title jet.ColumnString + Description jet.ColumnString + ReleaseYear jet.ColumnInteger + LanguageID jet.ColumnInteger + RentalDuration jet.ColumnInteger + RentalRate jet.ColumnFloat + Length jet.ColumnInteger + ReplacementCost jet.ColumnFloat + Rating jet.ColumnString + LastUpdate jet.ColumnTimestamp + SpecialFeatures jet.ColumnString + Fulltext jet.ColumnString + + AllColumns jet.ColumnList + MutableColumns jet.ColumnList +} + +// creates new FilmTable with assigned alias +func (a *FilmTable) AS(alias string) *FilmTable { + aliasTable := newFilmTable() + + aliasTable.Table.AS(alias) + + return aliasTable +} + +func newFilmTable() *FilmTable { + var ( + FilmIDColumn = jet.IntegerColumn("film_id") + TitleColumn = jet.StringColumn("title") + DescriptionColumn = jet.StringColumn("description") + ReleaseYearColumn = jet.IntegerColumn("release_year") + LanguageIDColumn = jet.IntegerColumn("language_id") + RentalDurationColumn = jet.IntegerColumn("rental_duration") + RentalRateColumn = jet.FloatColumn("rental_rate") + LengthColumn = jet.IntegerColumn("length") + ReplacementCostColumn = jet.FloatColumn("replacement_cost") + RatingColumn = jet.StringColumn("rating") + LastUpdateColumn = jet.TimestampColumn("last_update") + SpecialFeaturesColumn = jet.StringColumn("special_features") + FulltextColumn = jet.StringColumn("fulltext") + ) + + return &FilmTable{ + Table: jet.NewTable("dvds", "film", FilmIDColumn, TitleColumn, DescriptionColumn, ReleaseYearColumn, LanguageIDColumn, RentalDurationColumn, RentalRateColumn, LengthColumn, ReplacementCostColumn, RatingColumn, LastUpdateColumn, SpecialFeaturesColumn, FulltextColumn), + + //Columns + FilmID: FilmIDColumn, + Title: TitleColumn, + Description: DescriptionColumn, + ReleaseYear: ReleaseYearColumn, + LanguageID: LanguageIDColumn, + RentalDuration: RentalDurationColumn, + RentalRate: RentalRateColumn, + Length: LengthColumn, + ReplacementCost: ReplacementCostColumn, + Rating: RatingColumn, + LastUpdate: LastUpdateColumn, + SpecialFeatures: SpecialFeaturesColumn, + Fulltext: FulltextColumn, + + AllColumns: jet.ColumnList{FilmIDColumn, TitleColumn, DescriptionColumn, ReleaseYearColumn, LanguageIDColumn, RentalDurationColumn, RentalRateColumn, LengthColumn, ReplacementCostColumn, RatingColumn, LastUpdateColumn, SpecialFeaturesColumn, FulltextColumn}, + MutableColumns: jet.ColumnList{TitleColumn, DescriptionColumn, ReleaseYearColumn, LanguageIDColumn, RentalDurationColumn, RentalRateColumn, LengthColumn, ReplacementCostColumn, RatingColumn, LastUpdateColumn, SpecialFeaturesColumn, FulltextColumn}, + } +} diff --git a/examples/quick-start/.gen/jetdb/dvds/table/film_actor.go b/examples/quick-start/.gen/jetdb/dvds/table/film_actor.go new file mode 100644 index 0000000..537d613 --- /dev/null +++ b/examples/quick-start/.gen/jetdb/dvds/table/film_actor.go @@ -0,0 +1,56 @@ +// +// Code generated by go-jet DO NOT EDIT. +// Generated at Wednesday, 17-Jul-19 13:11:01 CEST +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package table + +import ( + "github.com/go-jet/jet" +) + +var FilmActor = newFilmActorTable() + +type FilmActorTable struct { + jet.Table + + //Columns + ActorID jet.ColumnInteger + FilmID jet.ColumnInteger + LastUpdate jet.ColumnTimestamp + + AllColumns jet.ColumnList + MutableColumns jet.ColumnList +} + +// creates new FilmActorTable with assigned alias +func (a *FilmActorTable) AS(alias string) *FilmActorTable { + aliasTable := newFilmActorTable() + + aliasTable.Table.AS(alias) + + return aliasTable +} + +func newFilmActorTable() *FilmActorTable { + var ( + ActorIDColumn = jet.IntegerColumn("actor_id") + FilmIDColumn = jet.IntegerColumn("film_id") + LastUpdateColumn = jet.TimestampColumn("last_update") + ) + + return &FilmActorTable{ + Table: jet.NewTable("dvds", "film_actor", ActorIDColumn, FilmIDColumn, LastUpdateColumn), + + //Columns + ActorID: ActorIDColumn, + FilmID: FilmIDColumn, + LastUpdate: LastUpdateColumn, + + AllColumns: jet.ColumnList{ActorIDColumn, FilmIDColumn, LastUpdateColumn}, + MutableColumns: jet.ColumnList{LastUpdateColumn}, + } +} diff --git a/examples/quick-start/.gen/jetdb/dvds/table/film_category.go b/examples/quick-start/.gen/jetdb/dvds/table/film_category.go new file mode 100644 index 0000000..58d015e --- /dev/null +++ b/examples/quick-start/.gen/jetdb/dvds/table/film_category.go @@ -0,0 +1,56 @@ +// +// Code generated by go-jet DO NOT EDIT. +// Generated at Wednesday, 17-Jul-19 13:11:01 CEST +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package table + +import ( + "github.com/go-jet/jet" +) + +var FilmCategory = newFilmCategoryTable() + +type FilmCategoryTable struct { + jet.Table + + //Columns + FilmID jet.ColumnInteger + CategoryID jet.ColumnInteger + LastUpdate jet.ColumnTimestamp + + AllColumns jet.ColumnList + MutableColumns jet.ColumnList +} + +// creates new FilmCategoryTable with assigned alias +func (a *FilmCategoryTable) AS(alias string) *FilmCategoryTable { + aliasTable := newFilmCategoryTable() + + aliasTable.Table.AS(alias) + + return aliasTable +} + +func newFilmCategoryTable() *FilmCategoryTable { + var ( + FilmIDColumn = jet.IntegerColumn("film_id") + CategoryIDColumn = jet.IntegerColumn("category_id") + LastUpdateColumn = jet.TimestampColumn("last_update") + ) + + return &FilmCategoryTable{ + Table: jet.NewTable("dvds", "film_category", FilmIDColumn, CategoryIDColumn, LastUpdateColumn), + + //Columns + FilmID: FilmIDColumn, + CategoryID: CategoryIDColumn, + LastUpdate: LastUpdateColumn, + + AllColumns: jet.ColumnList{FilmIDColumn, CategoryIDColumn, LastUpdateColumn}, + MutableColumns: jet.ColumnList{LastUpdateColumn}, + } +} diff --git a/examples/quick-start/.gen/jetdb/dvds/table/language.go b/examples/quick-start/.gen/jetdb/dvds/table/language.go new file mode 100644 index 0000000..b4f36ee --- /dev/null +++ b/examples/quick-start/.gen/jetdb/dvds/table/language.go @@ -0,0 +1,56 @@ +// +// Code generated by go-jet DO NOT EDIT. +// Generated at Wednesday, 17-Jul-19 13:11:01 CEST +// +// WARNING: Changes to this file may cause incorrect behavior +// and will be lost if the code is regenerated +// + +package table + +import ( + "github.com/go-jet/jet" +) + +var Language = newLanguageTable() + +type LanguageTable struct { + jet.Table + + //Columns + LanguageID jet.ColumnInteger + Name jet.ColumnString + LastUpdate jet.ColumnTimestamp + + AllColumns jet.ColumnList + MutableColumns jet.ColumnList +} + +// creates new LanguageTable with assigned alias +func (a *LanguageTable) AS(alias string) *LanguageTable { + aliasTable := newLanguageTable() + + aliasTable.Table.AS(alias) + + return aliasTable +} + +func newLanguageTable() *LanguageTable { + var ( + LanguageIDColumn = jet.IntegerColumn("language_id") + NameColumn = jet.StringColumn("name") + LastUpdateColumn = jet.TimestampColumn("last_update") + ) + + return &LanguageTable{ + Table: jet.NewTable("dvds", "language", LanguageIDColumn, NameColumn, LastUpdateColumn), + + //Columns + LanguageID: LanguageIDColumn, + Name: NameColumn, + LastUpdate: LastUpdateColumn, + + AllColumns: jet.ColumnList{LanguageIDColumn, NameColumn, LastUpdateColumn}, + MutableColumns: jet.ColumnList{NameColumn, LastUpdateColumn}, + } +} diff --git a/examples/quick-start/quick-start.go b/examples/quick-start/quick-start.go index 090141f..ae3de48 100644 --- a/examples/quick-start/quick-start.go +++ b/examples/quick-start/quick-start.go @@ -6,8 +6,10 @@ import ( "fmt" _ "github.com/lib/pq" - . "github.com/go-jet/jet" // dot import so go code would resemble as much as native SQL - . "github.com/go-jet/jet/examples/quick-start/.gen/jetdb/dvds/table" // dot import is not mandatory + // dot import so go code would resemble as much as native SQL + // dot import is not mandatory + . "github.com/go-jet/jet" + . "github.com/go-jet/jet/examples/quick-start/.gen/jetdb/dvds/table" "github.com/go-jet/jet/examples/quick-start/.gen/jetdb/dvds/model" "github.com/go-jet/jet/tests/dbconfig" @@ -20,21 +22,21 @@ func main() { defer db.Close() stmt := SELECT( - Actor.ActorID, Actor.FirstName, Actor.LastName, Actor.LastUpdate, // list of all actor columns (equivalent to Actor.AllColumns) - Film.AllColumns, // list of all film columns (equivalent to Film.FilmID, Film.Title, ...) + Actor.ActorID, Actor.FirstName, Actor.LastName, Actor.LastUpdate, + Film.AllColumns, Language.AllColumns, Category.AllColumns, ).FROM( Actor. - INNER_JOIN(FilmActor, Actor.ActorID.EQ(FilmActor.ActorID)). // INNER JOIN Actor with FilmActor on condition Actor.ActorID = FilmActor.ActorID - INNER_JOIN(Film, Film.FilmID.EQ(FilmActor.FilmID)). // then with Film, Language, FilmCategory and Category. + INNER_JOIN(FilmActor, Actor.ActorID.EQ(FilmActor.ActorID)). + INNER_JOIN(Film, Film.FilmID.EQ(FilmActor.FilmID)). INNER_JOIN(Language, Language.LanguageID.EQ(Film.LanguageID)). INNER_JOIN(FilmCategory, FilmCategory.FilmID.EQ(Film.FilmID)). INNER_JOIN(Category, Category.CategoryID.EQ(FilmCategory.CategoryID)), ).WHERE( - Language.Name.EQ(String("English")). // note every column has type. - AND(Category.Name.NOT_EQ(String("Action"))). // String column Language.Name and Category.Name can be compared only with string columns and expressions - AND(Film.Length.GT(Int(180))), // Film.Length is integer column and can be compared only with integer columns and expressions + Language.Name.EQ(String("English")). + AND(Category.Name.NOT_EQ(String("Action"))). + AND(Film.Length.GT(Int(180))), ).ORDER_BY( Actor.ActorID.ASC(), Film.FilmID.ASC(), @@ -70,6 +72,8 @@ func main() { jsonText, _ := json.MarshalIndent(dest, "", "\t") fmt.Println(string(jsonText)) + // New Destination + var dest2 []struct { model.Category diff --git a/execution/execution.go b/execution/execution.go index 9d79444..5b41d6b 100644 --- a/execution/execution.go +++ b/execution/execution.go @@ -36,8 +36,6 @@ func Query(db DB, context context.Context, query string, args []interface{}, des return err } - fmt.Println("TEMP SLICE SIZE: ", tempSliceValue.Len()) - if tempSliceValue.Len() == 0 { return nil } @@ -89,8 +87,6 @@ func queryToSlice(db DB, ctx context.Context, query string, args []interface{}, return nil } - groupTime := time.Duration(0) - slicePtrValue := reflect.ValueOf(slicePtr) for rows.Next() { @@ -102,19 +98,13 @@ func queryToSlice(db DB, ctx context.Context, query string, args []interface{}, scanContext.rowNum++ - begin := time.Now() - _, err = mapRowToSlice(scanContext, "", slicePtrValue, nil) if err != nil { return err } - - groupTime += time.Now().Sub(begin) } - fmt.Println(groupTime.String()) - err = rows.Close() if err != nil { return err @@ -126,8 +116,6 @@ func queryToSlice(db DB, ctx context.Context, query string, args []interface{}, return err } - fmt.Println(strconv.Itoa(scanContext.rowNum) + " ROW(S) PROCESSED") - return nil } @@ -596,7 +584,6 @@ func newScanType(columnType *sql.ColumnType) reflect.Type { case "DATE", "TIMESTAMP", "TIMESTAMPTZ", "TIME", "TIMETZ": return nullTimeType default: - fmt.Println("Unknown column database type " + columnType.DatabaseTypeName() + " using string as default.") return nullStringType } } diff --git a/generator/internal/metadata/postgres-metadata/column_info.go b/generator/internal/metadata/postgres-metadata/column_info.go index aaf0949..7443790 100644 --- a/generator/internal/metadata/postgres-metadata/column_info.go +++ b/generator/internal/metadata/postgres-metadata/column_info.go @@ -36,7 +36,7 @@ func (c ColumnInfo) SqlBuilderColumnType() string { case "real", "numeric", "decimal", "double precision": return "Float" default: - fmt.Println("Unknown sql type: " + c.DataType + ", using string column instead for sql builder.") + fmt.Println("Unsupported sql type: " + c.DataType + ", using string column instead for sql builder.") return "String" } } @@ -67,7 +67,7 @@ func (c ColumnInfo) GoBaseType() string { case "uuid": return "uuid.UUID" default: - fmt.Println("Unknown sql type: " + c.DataType + ", " + c.EnumName + ", using string instead for model type.") + fmt.Println("Unsupported sql type: " + c.DataType + ", " + c.EnumName + ", using string instead for model type.") return "string" } } diff --git a/group_by_clause.go b/group_by_clause.go index 4510b63..21b007a 100644 --- a/group_by_clause.go +++ b/group_by_clause.go @@ -3,5 +3,3 @@ package jet type groupByClause interface { serializeForGroupBy(statement statementType, out *sqlBuilder) error } - -// TODO: GROUPING SETS, CUBE, and ROLLUP diff --git a/set_statement_test.go b/set_statement_test.go index 8e9d3bb..cd2ebe6 100644 --- a/set_statement_test.go +++ b/set_statement_test.go @@ -1,7 +1,6 @@ package jet import ( - "fmt" "gotest.tools/assert" "testing" ) @@ -183,7 +182,6 @@ func TestUnionInUnion(t *testing.T) { UNION_ALL(table1.SELECT(table1Col1), table2.SELECT(table2Col3)), ) - fmt.Println(query.Sql()) assertStatement(t, query, expectedSql) } diff --git a/table.go b/table.go index 2a1b9fb..6299f1d 100644 --- a/table.go +++ b/table.go @@ -1,5 +1,3 @@ -// Modeling of tables. This is where query preparation starts - package jet import ( @@ -30,7 +28,6 @@ type readableTable interface { CROSS_JOIN(table ReadableTable) ReadableTable } -// The sql tableName write interface. type writableTable interface { INSERT(columns ...column) InsertStatement UPDATE(column column, columns ...column) UpdateStatement @@ -148,12 +145,10 @@ func (t *tableImpl) AS(alias string) { } } -// Returns the tableName's name in the database func (t *tableImpl) SchemaName() string { return t.schemaName } -// Returns the tableName's name in the database func (t *tableImpl) TableName() string { return t.name } diff --git a/tests/all_types_test.go b/tests/all_types_test.go index cb8d6a8..ae5c14b 100644 --- a/tests/all_types_test.go +++ b/tests/all_types_test.go @@ -1,7 +1,6 @@ package tests import ( - "fmt" . "github.com/go-jet/jet" "github.com/go-jet/jet/tests/.gentestdata/jetdb/test_sample/model" . "github.com/go-jet/jet/tests/.gentestdata/jetdb/test_sample/table" @@ -14,8 +13,6 @@ func TestAllTypesSelect(t *testing.T) { dest := []model.AllTypes{} err := AllTypes.SELECT(AllTypes.AllColumns).Query(db, &dest) - - fmt.Println(err) assert.NilError(t, err) assert.DeepEqual(t, dest[0], allTypesRow0) diff --git a/tests/init/data/test_sample.sql b/tests/init/data/test_sample.sql index c44e276..b91a25f 100644 --- a/tests/init/data/test_sample.sql +++ b/tests/init/data/test_sample.sql @@ -188,18 +188,26 @@ VALUES -- Person table ------------------ -DROP TABLE IF EXISTS test_sample.person; - -CREATE TABLE test_sample.person( - person_id uuid, - first_name varchar(100), - last_name varchar(100) -); - DROP TYPE IF EXISTS test_sample.MOOD CASCADE; CREATE TYPE test_sample.MOOD AS ENUM ('sad', 'ok', 'happy'); +DROP TABLE IF EXISTS test_sample.person; + + +CREATE TABLE test_sample.person( + person_id uuid NOT NULL PRIMARY KEY, + first_name varchar(100), + last_name varchar(100), + "Mood" test_sample.mood +); + +INSERT INTO test_sample.person(person_id, first_name, last_name, "Mood") VALUES + ('b68dbff4-a87d-11e9-a7f2-98ded00c39c6', 'Sad', 'John', 'sad'), + ('b68dbff5-a87d-11e9-a7f2-98ded00c39c7', 'Ok', 'John', 'ok'), + ('b68dbff6-a87d-11e9-a7f2-98ded00c39c8', 'Ok', 'John', 'ok'); + + -- WEIRD TABLE NAMES -------------- diff --git a/tests/northwind_test.go b/tests/northwind_test.go index 30ee7a1..8d85caf 100644 --- a/tests/northwind_test.go +++ b/tests/northwind_test.go @@ -1,7 +1,6 @@ package tests import ( - "fmt" "github.com/go-jet/jet/tests/.gentestdata/jetdb/northwind/model" . "github.com/go-jet/jet/tests/.gentestdata/jetdb/northwind/table" "gotest.tools/assert" @@ -61,8 +60,6 @@ func TestNorthwindJoinEverything(t *testing.T) { err := stmt.Query(db, &dest) assert.NilError(t, err) - fmt.Println(len(dest)) - //jsonSave("./testdata/northwind-all.json", dest) assertJsonFile(t, "./testdata/northwind-all.json", dest) } diff --git a/tests/sample_test.go b/tests/sample_test.go index f9f251d..c4ccec8 100644 --- a/tests/sample_test.go +++ b/tests/sample_test.go @@ -1,8 +1,6 @@ package tests import ( - "fmt" - "github.com/davecgh/go-spew/spew" . "github.com/go-jet/jet" "github.com/go-jet/jet/tests/.gentestdata/jetdb/test_sample/model" . "github.com/go-jet/jet/tests/.gentestdata/jetdb/test_sample/table" @@ -35,30 +33,41 @@ func TestEnumType(t *testing.T) { query := Person. SELECT(Person.AllColumns) - queryStr, args, err := query.Sql() + assertStatementSql(t, query, ` +SELECT person.person_id AS "person.person_id", + person.first_name AS "person.first_name", + person.last_name AS "person.last_name", + person."Mood" AS "person.Mood" +FROM test_sample.person; +`) - assert.NilError(t, err) - fmt.Println(queryStr) - assert.Equal(t, len(args), 0) result := []model.Person{} - err = query.Query(db, &result) + err := query.Query(db, &result) assert.NilError(t, err) - //spew.Dump(result) - - type Person struct { - Name string - CurrentMood model.Mood + assertJson(t, result, ` +[ + { + "PersonID": "b68dbff4-a87d-11e9-a7f2-98ded00c39c6", + "FirstName": "Sad", + "LastName": "John", + "Mood": "sad" + }, + { + "PersonID": "b68dbff5-a87d-11e9-a7f2-98ded00c39c7", + "FirstName": "Ok", + "LastName": "John", + "Mood": "ok" + }, + { + "PersonID": "b68dbff6-a87d-11e9-a7f2-98ded00c39c8", + "FirstName": "Ok", + "LastName": "John", + "Mood": "ok" } - - result2 := []Person{} - - err = query.Query(db, &result2) - - assert.NilError(t, err) - - spew.Dump(result2) +] +`) } func TestSelecSelfJoin1(t *testing.T) { diff --git a/tests/scan_test.go b/tests/scan_test.go index da78fe8..196f51f 100644 --- a/tests/scan_test.go +++ b/tests/scan_test.go @@ -1,8 +1,6 @@ package tests import ( - "fmt" - "github.com/davecgh/go-spew/spew" . "github.com/go-jet/jet" "github.com/go-jet/jet/tests/.gentestdata/jetdb/dvds/model" . "github.com/go-jet/jet/tests/.gentestdata/jetdb/dvds/table" @@ -171,8 +169,6 @@ func TestScanToStruct(t *testing.T) { err := query.Query(db, &dest) assert.Error(t, err, `jet: can't set int32 to int, at struct field: InventoryID int of type tests.Inventory. `) - - fmt.Println(err) }) t.Run("type mismatch scanner type", func(t *testing.T) { @@ -455,10 +451,6 @@ func TestScanToSlice(t *testing.T) { err := query.Query(db, &dest) - fmt.Println(query.DebugSql()) - - spew.Dump(dest) - assert.NilError(t, err) assert.DeepEqual(t, dest.Film, film1) assert.DeepEqual(t, dest.IDs, []int32{1, 2, 3, 4, 5, 6, 7, 8}) diff --git a/tests/update_test.go b/tests/update_test.go index 93487e9..5e10c7a 100644 --- a/tests/update_test.go +++ b/tests/update_test.go @@ -1,7 +1,6 @@ package tests import ( - "fmt" . "github.com/go-jet/jet" "github.com/go-jet/jet/tests/.gentestdata/jetdb/test_sample/model" . "github.com/go-jet/jet/tests/.gentestdata/jetdb/test_sample/table" @@ -17,8 +16,6 @@ func TestUpdateValues(t *testing.T) { SET("Bong", "http://bong.com"). WHERE(Link.Name.EQ(String("Bing"))) - fmt.Println(query.DebugSql()) - var expectedSql = ` UPDATE test_sample.link SET (name, url) = ('Bong', 'http://bong.com')