diff --git a/postgresql/collection.go b/postgresql/collection.go index 33fc113edcb99ef599fc67a1ffa745c92f5465d2..445bf6730bb8fefb54fd6b039023001acf0c0a14 100644 --- a/postgresql/collection.go +++ b/postgresql/collection.go @@ -251,7 +251,7 @@ func (self *Table) Append(item interface{}) (interface{}, error) { return nil, err } - var id uint64 + var id int64 if err = row.Scan(&id); err != nil { if err == sql.ErrNoRows { diff --git a/postgresql/database.go b/postgresql/database.go index fc048e18655c2d77343bc500fda54f5600a1fa0a..c1a616d553e3ada55e0aaf40166a99da1e439b41 100644 --- a/postgresql/database.go +++ b/postgresql/database.go @@ -34,7 +34,7 @@ import ( "upper.io/db/util/sqlutil" ) -const Driver = `postgresql` +const Adapter = `postgresql` var ( // Format for saving dates. @@ -102,7 +102,7 @@ func init() { pgsqlSelectCountLayout, } - db.Register(Driver, &Source{}) + db.Register(Adapter, &Source{}) } func (self *Source) doExec(stmt sqlgen.Statement, args ...interface{}) (sql.Result, error) { diff --git a/postgresql/database_test.go b/postgresql/database_test.go index 69b606279e62fbc114aee03f9a08c5e9d2a0a1b3..de21b197ef9ebeeacb07b9a0ebbddb21f84645f7 100644 --- a/postgresql/database_test.go +++ b/postgresql/database_test.go @@ -105,7 +105,7 @@ func TestOpenFailed(t *testing.T) { var err error // Attempt to open an empty database. - if _, err = db.Open(Driver, db.Settings{}); err == nil { + if _, err = db.Open(Adapter, db.Settings{}); err == nil { // Must fail. t.Fatalf("Expecting an error.") } @@ -119,7 +119,7 @@ func TestTruncate(t *testing.T) { var col db.Collection // Opening database. - if sess, err = db.Open(Driver, settings); err != nil { + if sess, err = db.Open(Adapter, settings); err != nil { t.Fatalf(err.Error()) } @@ -161,7 +161,7 @@ func TestAppend(t *testing.T) { var artist db.Collection var total uint64 - if sess, err = db.Open(Driver, settings); err != nil { + if sess, err = db.Open(Adapter, settings); err != nil { t.Fatalf(err.Error()) } @@ -233,7 +233,7 @@ func TestResultCount(t *testing.T) { var artist db.Collection var total uint64 - if sess, err = db.Open(Driver, settings); err != nil { + if sess, err = db.Open(Adapter, settings); err != nil { t.Fatalf(err.Error()) } @@ -264,7 +264,7 @@ func TestResultFetch(t *testing.T) { var sess db.Database var artist db.Collection - if sess, err = db.Open(Driver, settings); err != nil { + if sess, err = db.Open(Adapter, settings); err != nil { t.Fatalf(err.Error()) } @@ -427,7 +427,7 @@ func TestUpdate(t *testing.T) { var sess db.Database var artist db.Collection - if sess, err = db.Open(Driver, settings); err != nil { + if sess, err = db.Open(Adapter, settings); err != nil { t.Fatalf(err.Error()) } @@ -516,7 +516,7 @@ func TestFunction(t *testing.T) { var artist db.Collection var total uint64 - if sess, err = db.Open(Driver, settings); err != nil { + if sess, err = db.Open(Adapter, settings); err != nil { t.Fatalf(err.Error()) } @@ -569,7 +569,7 @@ func TestRemove(t *testing.T) { var sess db.Database var artist db.Collection - if sess, err = db.Open(Driver, settings); err != nil { + if sess, err = db.Open(Adapter, settings); err != nil { t.Fatalf(err.Error()) } @@ -598,25 +598,25 @@ func TestRawRelations(t *testing.T) { var review db.Collection type artist_t struct { - Id uint64 `db:"id,omitempty"` + Id int64 `db:"id,omitempty"` Name string `db:"name"` } type publication_t struct { - Id uint64 `db:"id,omitempty"` + Id int64 `db:"id,omitempty"` Title string `db:"title"` - AuthorId uint64 `db:"author_id"` + AuthorId int64 `db:"author_id"` } type review_t struct { - Id uint64 `db:"id,omitempty"` - PublicationId uint64 `db:"publication_id"` + Id int64 `db:"id,omitempty"` + PublicationId int64 `db:"publication_id"` Name string `db:"name"` Comments string `db:"comments"` Created time.Time `db:"created"` } - if sess, err = db.Open(Driver, settings); err != nil { + if sess, err = db.Open(Adapter, settings); err != nil { t.Fatalf(err.Error()) } @@ -655,7 +655,7 @@ func TestRawRelations(t *testing.T) { if miyazakiId, err = artist.Append(miyazaki); err != nil { t.Fatalf(err.Error()) } - miyazaki.Id = miyazakiId.(uint64) + miyazaki.Id = miyazakiId.(int64) var asimovId interface{} asimov := artist_t{Name: `Isaac Asimov`} @@ -672,43 +672,43 @@ func TestRawRelations(t *testing.T) { // Adding some publications. publication.Append(publication_t{ Title: `Tonari no Totoro`, - AuthorId: miyazakiId.(uint64), + AuthorId: miyazakiId.(int64), }) publication.Append(publication_t{ Title: `Howl's Moving Castle`, - AuthorId: miyazakiId.(uint64), + AuthorId: miyazakiId.(int64), }) publication.Append(publication_t{ Title: `Ponyo`, - AuthorId: miyazakiId.(uint64), + AuthorId: miyazakiId.(int64), }) publication.Append(publication_t{ Title: `Memoria de mis Putas Tristes`, - AuthorId: marquezId.(uint64), + AuthorId: marquezId.(int64), }) publication.Append(publication_t{ Title: `El Coronel no tiene quien le escriba`, - AuthorId: marquezId.(uint64), + AuthorId: marquezId.(int64), }) publication.Append(publication_t{ Title: `El Amor en los tiempos del Cólera`, - AuthorId: marquezId.(uint64), + AuthorId: marquezId.(int64), }) publication.Append(publication_t{ Title: `I, Robot`, - AuthorId: asimovId.(uint64), + AuthorId: asimovId.(int64), }) var foundationId interface{} foundationId, err = publication.Append(publication_t{ Title: `Foundation`, - AuthorId: asimovId.(uint64), + AuthorId: asimovId.(int64), }) if err != nil { t.Fatalf(err.Error()) @@ -716,19 +716,19 @@ func TestRawRelations(t *testing.T) { publication.Append(publication_t{ Title: `The Robots of Dawn`, - AuthorId: asimovId.(uint64), + AuthorId: asimovId.(int64), }) // Adding reviews for foundation. review.Append(review_t{ - PublicationId: foundationId.(uint64), + PublicationId: foundationId.(int64), Name: "John Doe", Comments: "I love The Foundation series.", Created: time.Now(), }) review.Append(review_t{ - PublicationId: foundationId.(uint64), + PublicationId: foundationId.(int64), Name: "Edr Pls", Comments: "The Foundation series made me fall in love with Isaac Asimov.", Created: time.Now(), @@ -749,7 +749,7 @@ func TestRawRelations(t *testing.T) { ) type artistPublication_t struct { - Id uint64 `db:"id"` + Id int64 `db:"id"` PublicationTitle string `db:"publication_title"` ArtistName string `db:"artist_name"` } @@ -777,7 +777,7 @@ func TestDataTypes(t *testing.T) { var id interface{} var exists uint64 - if sess, err = db.Open(Driver, settings); err != nil { + if sess, err = db.Open(Adapter, settings); err != nil { t.Fatalf(err.Error()) } @@ -830,7 +830,7 @@ func BenchmarkAppendRawSQL(b *testing.B) { var err error var sess db.Database - if sess, err = db.Open(Driver, settings); err != nil { + if sess, err = db.Open(Adapter, settings); err != nil { b.Fatalf(err.Error()) } @@ -855,7 +855,7 @@ func BenchmarkAppendRawSQL(b *testing.B) { // Contributed by wei2912 // See: https://github.com/gosexy/db/issues/20#issuecomment-20097801 func BenchmarkAppendUpper(b *testing.B) { - sess, err := db.Open(Driver, settings) + sess, err := db.Open(Adapter, settings) if err != nil { b.Fatalf(err.Error()) @@ -884,7 +884,7 @@ func BenchmarkAppendTxRawSQL(b *testing.B) { var sess db.Database var tx *sql.Tx - if sess, err = db.Open(Driver, settings); err != nil { + if sess, err = db.Open(Adapter, settings); err != nil { b.Fatalf(err.Error()) } @@ -917,7 +917,7 @@ func BenchmarkAppendTxUpper(b *testing.B) { var sess db.Database var err error - if sess, err = db.Open(Driver, settings); err != nil { + if sess, err = db.Open(Adapter, settings); err != nil { b.Fatalf(err.Error()) } @@ -958,7 +958,7 @@ func BenchmarkAppendTxUpperMap(b *testing.B) { var sess db.Database var err error - if sess, err = db.Open(Driver, settings); err != nil { + if sess, err = db.Open(Adapter, settings); err != nil { b.Fatalf(err.Error()) } diff --git a/postgresql/layout.go b/postgresql/layout.go index 5d3d517c1e8f7524fe93538377cdfa4d9e4f708a..ffca4557834f7206ccb371a93a8f39c76bf1091c 100644 --- a/postgresql/layout.go +++ b/postgresql/layout.go @@ -111,7 +111,7 @@ const ( ` pgsqlTruncateLayout = ` - TRUNCATE TABLE {{.Table}} + TRUNCATE TABLE {{.Table}} RESTART IDENTITY ` pgsqlDropDatabaseLayout = ` diff --git a/postgresql/result.go b/postgresql/result.go index b35f173555e5d19fe086cee6b617715a4356b66e..418855ef474049a5eaf7ef46a53eb4c215910358 100644 --- a/postgresql/result.go +++ b/postgresql/result.go @@ -60,6 +60,11 @@ func (self *Result) setCursor() error { return err } +func (self *Result) Where(terms ...interface{}) db.Result { + self.where, self.arguments = whereValues(terms) + return self +} + // Determines the maximum limit of results to be returned. func (self *Result) Limit(n uint) db.Result { self.limit = sqlgen.Limit(n) @@ -203,10 +208,13 @@ func (self *Result) Update(values interface{}) error { cvs = append(cvs, sqlgen.ColumnValue{sqlgen.Column{ff[i]}, "=", sqlPlaceholder}) } + vv = append(vv, self.arguments...) + _, err = self.table.source.doExec(sqlgen.Statement{ Type: sqlgen.SqlUpdate, Table: sqlgen.Table{self.table.Name()}, ColumnValues: cvs, + Where: self.where, }, vv...) return err