Pre-release clean up.

This commit is contained in:
go-jet 2019-07-17 13:22:14 +02:00
parent 23a27033a4
commit b817f57035
27 changed files with 628 additions and 79 deletions

View file

@ -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. What are the benefits of writing SQL in Go using Jet? The biggest benefit is speed.
Speed is improved in 3 major areas: Speed is improved in 3 major areas:
##### Speed of development ##### 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 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 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. 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 ##### Speed of execution

View file

@ -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"),
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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)
}

View file

@ -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},
}
}

View file

@ -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},
}
}

View file

@ -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},
}
}

View file

@ -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},
}
}

View file

@ -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},
}
}

View file

@ -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},
}
}

View file

@ -6,8 +6,10 @@ import (
"fmt" "fmt"
_ "github.com/lib/pq" _ "github.com/lib/pq"
. "github.com/go-jet/jet" // dot import so go code would resemble as much as native SQL // 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 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/examples/quick-start/.gen/jetdb/dvds/model"
"github.com/go-jet/jet/tests/dbconfig" "github.com/go-jet/jet/tests/dbconfig"
@ -20,21 +22,21 @@ func main() {
defer db.Close() defer db.Close()
stmt := SELECT( stmt := SELECT(
Actor.ActorID, Actor.FirstName, Actor.LastName, Actor.LastUpdate, // list of all actor columns (equivalent to Actor.AllColumns) Actor.ActorID, Actor.FirstName, Actor.LastName, Actor.LastUpdate,
Film.AllColumns, // list of all film columns (equivalent to Film.FilmID, Film.Title, ...) Film.AllColumns,
Language.AllColumns, Language.AllColumns,
Category.AllColumns, Category.AllColumns,
).FROM( ).FROM(
Actor. Actor.
INNER_JOIN(FilmActor, Actor.ActorID.EQ(FilmActor.ActorID)). // INNER JOIN Actor with FilmActor on condition Actor.ActorID = FilmActor.ActorID INNER_JOIN(FilmActor, Actor.ActorID.EQ(FilmActor.ActorID)).
INNER_JOIN(Film, Film.FilmID.EQ(FilmActor.FilmID)). // then with Film, Language, FilmCategory and Category. INNER_JOIN(Film, Film.FilmID.EQ(FilmActor.FilmID)).
INNER_JOIN(Language, Language.LanguageID.EQ(Film.LanguageID)). INNER_JOIN(Language, Language.LanguageID.EQ(Film.LanguageID)).
INNER_JOIN(FilmCategory, FilmCategory.FilmID.EQ(Film.FilmID)). INNER_JOIN(FilmCategory, FilmCategory.FilmID.EQ(Film.FilmID)).
INNER_JOIN(Category, Category.CategoryID.EQ(FilmCategory.CategoryID)), INNER_JOIN(Category, Category.CategoryID.EQ(FilmCategory.CategoryID)),
).WHERE( ).WHERE(
Language.Name.EQ(String("English")). // note every column has type. Language.Name.EQ(String("English")).
AND(Category.Name.NOT_EQ(String("Action"))). // String column Language.Name and Category.Name can be compared only with string columns and expressions AND(Category.Name.NOT_EQ(String("Action"))).
AND(Film.Length.GT(Int(180))), // Film.Length is integer column and can be compared only with integer columns and expressions AND(Film.Length.GT(Int(180))),
).ORDER_BY( ).ORDER_BY(
Actor.ActorID.ASC(), Actor.ActorID.ASC(),
Film.FilmID.ASC(), Film.FilmID.ASC(),
@ -70,6 +72,8 @@ func main() {
jsonText, _ := json.MarshalIndent(dest, "", "\t") jsonText, _ := json.MarshalIndent(dest, "", "\t")
fmt.Println(string(jsonText)) fmt.Println(string(jsonText))
// New Destination
var dest2 []struct { var dest2 []struct {
model.Category model.Category

View file

@ -36,8 +36,6 @@ func Query(db DB, context context.Context, query string, args []interface{}, des
return err return err
} }
fmt.Println("TEMP SLICE SIZE: ", tempSliceValue.Len())
if tempSliceValue.Len() == 0 { if tempSliceValue.Len() == 0 {
return nil return nil
} }
@ -89,8 +87,6 @@ func queryToSlice(db DB, ctx context.Context, query string, args []interface{},
return nil return nil
} }
groupTime := time.Duration(0)
slicePtrValue := reflect.ValueOf(slicePtr) slicePtrValue := reflect.ValueOf(slicePtr)
for rows.Next() { for rows.Next() {
@ -102,19 +98,13 @@ func queryToSlice(db DB, ctx context.Context, query string, args []interface{},
scanContext.rowNum++ scanContext.rowNum++
begin := time.Now()
_, err = mapRowToSlice(scanContext, "", slicePtrValue, nil) _, err = mapRowToSlice(scanContext, "", slicePtrValue, nil)
if err != nil { if err != nil {
return err return err
} }
groupTime += time.Now().Sub(begin)
} }
fmt.Println(groupTime.String())
err = rows.Close() err = rows.Close()
if err != nil { if err != nil {
return err return err
@ -126,8 +116,6 @@ func queryToSlice(db DB, ctx context.Context, query string, args []interface{},
return err return err
} }
fmt.Println(strconv.Itoa(scanContext.rowNum) + " ROW(S) PROCESSED")
return nil return nil
} }
@ -596,7 +584,6 @@ func newScanType(columnType *sql.ColumnType) reflect.Type {
case "DATE", "TIMESTAMP", "TIMESTAMPTZ", "TIME", "TIMETZ": case "DATE", "TIMESTAMP", "TIMESTAMPTZ", "TIME", "TIMETZ":
return nullTimeType return nullTimeType
default: default:
fmt.Println("Unknown column database type " + columnType.DatabaseTypeName() + " using string as default.")
return nullStringType return nullStringType
} }
} }

View file

@ -36,7 +36,7 @@ func (c ColumnInfo) SqlBuilderColumnType() string {
case "real", "numeric", "decimal", "double precision": case "real", "numeric", "decimal", "double precision":
return "Float" return "Float"
default: 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" return "String"
} }
} }
@ -67,7 +67,7 @@ func (c ColumnInfo) GoBaseType() string {
case "uuid": case "uuid":
return "uuid.UUID" return "uuid.UUID"
default: 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" return "string"
} }
} }

View file

@ -3,5 +3,3 @@ package jet
type groupByClause interface { type groupByClause interface {
serializeForGroupBy(statement statementType, out *sqlBuilder) error serializeForGroupBy(statement statementType, out *sqlBuilder) error
} }
// TODO: GROUPING SETS, CUBE, and ROLLUP

View file

@ -1,7 +1,6 @@
package jet package jet
import ( import (
"fmt"
"gotest.tools/assert" "gotest.tools/assert"
"testing" "testing"
) )
@ -183,7 +182,6 @@ func TestUnionInUnion(t *testing.T) {
UNION_ALL(table1.SELECT(table1Col1), table2.SELECT(table2Col3)), UNION_ALL(table1.SELECT(table1Col1), table2.SELECT(table2Col3)),
) )
fmt.Println(query.Sql())
assertStatement(t, query, expectedSql) assertStatement(t, query, expectedSql)
} }

View file

@ -1,5 +1,3 @@
// Modeling of tables. This is where query preparation starts
package jet package jet
import ( import (
@ -30,7 +28,6 @@ type readableTable interface {
CROSS_JOIN(table ReadableTable) ReadableTable CROSS_JOIN(table ReadableTable) ReadableTable
} }
// The sql tableName write interface.
type writableTable interface { type writableTable interface {
INSERT(columns ...column) InsertStatement INSERT(columns ...column) InsertStatement
UPDATE(column column, columns ...column) UpdateStatement 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 { func (t *tableImpl) SchemaName() string {
return t.schemaName return t.schemaName
} }
// Returns the tableName's name in the database
func (t *tableImpl) TableName() string { func (t *tableImpl) TableName() string {
return t.name return t.name
} }

View file

@ -1,7 +1,6 @@
package tests package tests
import ( import (
"fmt"
. "github.com/go-jet/jet" . "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/model"
. "github.com/go-jet/jet/tests/.gentestdata/jetdb/test_sample/table" . "github.com/go-jet/jet/tests/.gentestdata/jetdb/test_sample/table"
@ -14,8 +13,6 @@ func TestAllTypesSelect(t *testing.T) {
dest := []model.AllTypes{} dest := []model.AllTypes{}
err := AllTypes.SELECT(AllTypes.AllColumns).Query(db, &dest) err := AllTypes.SELECT(AllTypes.AllColumns).Query(db, &dest)
fmt.Println(err)
assert.NilError(t, err) assert.NilError(t, err)
assert.DeepEqual(t, dest[0], allTypesRow0) assert.DeepEqual(t, dest[0], allTypesRow0)

View file

@ -188,18 +188,26 @@ VALUES
-- Person table ------------------ -- 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; DROP TYPE IF EXISTS test_sample.MOOD CASCADE;
CREATE TYPE test_sample.MOOD AS ENUM ('sad', 'ok', 'happy'); 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 -------------- -- WEIRD TABLE NAMES --------------

View file

@ -1,7 +1,6 @@
package tests package tests
import ( import (
"fmt"
"github.com/go-jet/jet/tests/.gentestdata/jetdb/northwind/model" "github.com/go-jet/jet/tests/.gentestdata/jetdb/northwind/model"
. "github.com/go-jet/jet/tests/.gentestdata/jetdb/northwind/table" . "github.com/go-jet/jet/tests/.gentestdata/jetdb/northwind/table"
"gotest.tools/assert" "gotest.tools/assert"
@ -61,8 +60,6 @@ func TestNorthwindJoinEverything(t *testing.T) {
err := stmt.Query(db, &dest) err := stmt.Query(db, &dest)
assert.NilError(t, err) assert.NilError(t, err)
fmt.Println(len(dest))
//jsonSave("./testdata/northwind-all.json", dest) //jsonSave("./testdata/northwind-all.json", dest)
assertJsonFile(t, "./testdata/northwind-all.json", dest) assertJsonFile(t, "./testdata/northwind-all.json", dest)
} }

View file

@ -1,8 +1,6 @@
package tests package tests
import ( import (
"fmt"
"github.com/davecgh/go-spew/spew"
. "github.com/go-jet/jet" . "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/model"
. "github.com/go-jet/jet/tests/.gentestdata/jetdb/test_sample/table" . "github.com/go-jet/jet/tests/.gentestdata/jetdb/test_sample/table"
@ -35,30 +33,41 @@ func TestEnumType(t *testing.T) {
query := Person. query := Person.
SELECT(Person.AllColumns) 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{} result := []model.Person{}
err = query.Query(db, &result) err := query.Query(db, &result)
assert.NilError(t, err) assert.NilError(t, err)
//spew.Dump(result) assertJson(t, result, `
[
type Person struct { {
Name string "PersonID": "b68dbff4-a87d-11e9-a7f2-98ded00c39c6",
CurrentMood model.Mood "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) { func TestSelecSelfJoin1(t *testing.T) {

View file

@ -1,8 +1,6 @@
package tests package tests
import ( import (
"fmt"
"github.com/davecgh/go-spew/spew"
. "github.com/go-jet/jet" . "github.com/go-jet/jet"
"github.com/go-jet/jet/tests/.gentestdata/jetdb/dvds/model" "github.com/go-jet/jet/tests/.gentestdata/jetdb/dvds/model"
. "github.com/go-jet/jet/tests/.gentestdata/jetdb/dvds/table" . "github.com/go-jet/jet/tests/.gentestdata/jetdb/dvds/table"
@ -171,8 +169,6 @@ func TestScanToStruct(t *testing.T) {
err := query.Query(db, &dest) 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. `) 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) { t.Run("type mismatch scanner type", func(t *testing.T) {
@ -455,10 +451,6 @@ func TestScanToSlice(t *testing.T) {
err := query.Query(db, &dest) err := query.Query(db, &dest)
fmt.Println(query.DebugSql())
spew.Dump(dest)
assert.NilError(t, err) assert.NilError(t, err)
assert.DeepEqual(t, dest.Film, film1) assert.DeepEqual(t, dest.Film, film1)
assert.DeepEqual(t, dest.IDs, []int32{1, 2, 3, 4, 5, 6, 7, 8}) assert.DeepEqual(t, dest.IDs, []int32{1, 2, 3, 4, 5, 6, 7, 8})

View file

@ -1,7 +1,6 @@
package tests package tests
import ( import (
"fmt"
. "github.com/go-jet/jet" . "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/model"
. "github.com/go-jet/jet/tests/.gentestdata/jetdb/test_sample/table" . "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"). SET("Bong", "http://bong.com").
WHERE(Link.Name.EQ(String("Bing"))) WHERE(Link.Name.EQ(String("Bing")))
fmt.Println(query.DebugSql())
var expectedSql = ` var expectedSql = `
UPDATE test_sample.link UPDATE test_sample.link
SET (name, url) = ('Bong', 'http://bong.com') SET (name, url) = ('Bong', 'http://bong.com')