Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

removed driver dependencies #51

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@ godb is a project that is still young and evolving. The API is almost stable, bu
- Define model struct name to db table naming with `db.SetDefaultTableNamer(yourFn)`. Supported types are: Plural,Snake,SnakePlural. You can also define `TableName() string` method to for your struct and return whatever table name will be.
- BlackListing or WhiteListing columns for struct based inserts and updates.
- Could by used with
- SQLite
- PostgreSQL
- MySQL / MariaDB
- MS SQL Server
- [SQLite](github.com/mattn/go-sqlite3)
- [PostgreSQL](github.com/lib/pq)
- [MySQL / MariaDB](github.com/go-sql-driver/mysql)
- [MS SQL Server](github.com/denisenkom/go-mssqldb)
- other compatible database if you write an adapter.

I made tests of godb on differents architectures and operating systems : OSX, Windows, Linux, ARM (Cortex A7) and Intel x64.
Expand Down Expand Up @@ -119,6 +119,7 @@ import (

"github.com/samonzeweb/godb"
"github.com/samonzeweb/godb/adapters/sqlite"
_ "github.com/mattn/go-sqlite" // must include preferred driver
"log"
"os"
)
Expand Down
3 changes: 1 addition & 2 deletions adapters/mssql/mssql.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@ import (
"github.com/samonzeweb/godb/adapters"
"github.com/samonzeweb/godb/dberror"
"github.com/samonzeweb/godb/dbreflect"

_ "github.com/denisenkom/go-mssqldb"
)

// init registers types of mssql package corresponding to fields values
Expand Down Expand Up @@ -99,6 +97,7 @@ func (MSSQL) ParseError(err error) error {
if err == nil {
return nil
}

if e, ok := err.(ErrorWithNumber); ok {
switch e.SQLErrorNumber() {
case 2601:
Expand Down
16 changes: 8 additions & 8 deletions adapters/mysql/mysql.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package mysql

import (
"github.com/go-sql-driver/mysql"
"github.com/samonzeweb/godb/dberror"
"strings"
)

type MySQL struct{}
Expand All @@ -21,13 +21,13 @@ func (MySQL) ParseError(err error) error {
if err == nil {
return nil
}
if e, ok := err.(*mysql.MySQLError); ok {
switch e.Number {
case 1062:
return dberror.UniqueConstraint{Message: e.Error(), Field: dberror.ExtractStr(e.Message, "key '", "'"), Err: e}
case 1452:
return dberror.CheckConstraint{Message: e.Error(), Field: dberror.ExtractStr(e.Message, "CONSTRAINT `", "`"), Err: e}
}
errMsg := err.Error()

switch {
case strings.Contains(errMsg, "Error 1062:"):
return dberror.UniqueConstraint{Message: errMsg, Field: dberror.ExtractStr(errMsg, "key '", "'"), Err: err}
case strings.Contains(errMsg, "Error 1452:"):
return dberror.CheckConstraint{Message: errMsg, Field: dberror.ExtractStr(errMsg, "CONSTRAINT `", "`"), Err: err}
}

return err
Expand Down
25 changes: 12 additions & 13 deletions adapters/postgresql/postgresql.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import (
"strconv"
"strings"

pq "github.com/lib/pq"
"github.com/samonzeweb/godb/adapters"
"github.com/samonzeweb/godb/dberror"
)
Expand Down Expand Up @@ -53,11 +52,11 @@ func (p PostgreSQL) ReturningBuild(columns []string) string {
}

func (p PostgreSQL) FormatForNewValues(columns []string) []string {
formatedColumns := make([]string, 0, len(columns))
formattedColumns := make([]string, 0, len(columns))
for _, column := range columns {
formatedColumns = append(formatedColumns, p.Quote(column))
formattedColumns = append(formattedColumns, p.Quote(column))
}
return formatedColumns
return formattedColumns
}

func (p PostgreSQL) GetReturningPosition() adapters.ReturningPosition {
Expand All @@ -69,15 +68,15 @@ func (p PostgreSQL) ParseError(err error) error {
return nil
}

if e, ok := err.(*pq.Error); ok {
switch e.Code {
case "23505":
return dberror.UniqueConstraint{Message: e.Error(), Field: dberror.ExtractStr(e.Message, "constraint \"", "\""), Err: e}
case "23503":
return dberror.ForeignKeyConstraint{Message: e.Error(), Field: dberror.ExtractStr(e.Message, "constraint \"", "\""), Err: e}
case "23514":
return dberror.CheckConstraint{Message: e.Error(), Field: dberror.ExtractStr(e.Message, "constraint \"", "\""), Err: e}
}
errMsg := err.Error()

switch {
case strings.Contains(errMsg, "duplicate key value violates unique constraint") || strings.Contains(errMsg, "(SQLSTATE 23505)"):
return dberror.UniqueConstraint{Message: errMsg, Field: dberror.ExtractStr(errMsg, "constraint \"", "\""), Err: err}
case strings.Contains(errMsg, "violates foreign key constraint") || strings.Contains(errMsg, "(SQLSTATE 23503)"):
return dberror.ForeignKeyConstraint{Message: errMsg, Field: dberror.ExtractStr(errMsg, "constraint \"", "\""), Err: err}
case strings.Contains(errMsg, "violates check constraint") || strings.Contains(errMsg, "(SQLSTATE 23514)"):
return dberror.CheckConstraint{Message: errMsg, Field: dberror.ExtractStr(errMsg, "constraint \"", "\""), Err: err}
}

return err
Expand Down
19 changes: 9 additions & 10 deletions adapters/sqlite/sqlite.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ import (
"strings"

"github.com/samonzeweb/godb/dberror"

sqlite3 "github.com/mattn/go-sqlite3"
)

type SQLite struct{}
Expand All @@ -25,13 +23,14 @@ func (SQLite) ParseError(err error) error {
return nil
}

e, _ := err.(sqlite3.Error)
switch e.ExtendedCode {
case sqlite3.ErrConstraintUnique:
return dberror.UniqueConstraint{Message: e.Error(), Field: strings.Split(strings.Split(e.Error(), "failed: ")[1], ".")[1], Err: e}
case sqlite3.ErrConstraintCheck:
return dberror.CheckConstraint{Message: e.Error(), Field: strings.Split(strings.Split(e.Error(), "failed: ")[1], ".")[1], Err: e}
default:
return err
errMsg := err.Error()

switch {
case strings.Contains(errMsg, "constraint failed") && strings.Contains(errMsg, "foreign key "):
return dberror.UniqueConstraint{Message: errMsg, Field: strings.Split(strings.Split(errMsg, "failed: ")[1], ".")[1], Err: err}
case strings.Contains(errMsg, "constraint failed"):
return dberror.CheckConstraint{Message: errMsg, Field: strings.Split(strings.Split(errMsg, "failed: ")[1], ".")[1], Err: err}
}

return err
}
9 changes: 4 additions & 5 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,11 @@ module github.com/samonzeweb/godb
go 1.12

require (
github.com/denisenkom/go-mssqldb v0.0.0-20200910202707-1e08a3fab204
github.com/go-sql-driver/mysql v1.5.0
github.com/denisenkom/go-mssqldb v0.10.0
github.com/go-sql-driver/mysql v1.6.0
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 // indirect
github.com/lib/pq v1.8.0
github.com/mattn/go-sqlite3 v2.0.3+incompatible
github.com/lib/pq v1.10.2
github.com/mattn/go-sqlite3 v1.14.7
github.com/smartystreets/assertions v1.2.0 // indirect
github.com/smartystreets/goconvey v1.6.4
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 // indirect
)
25 changes: 9 additions & 16 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,34 +1,27 @@
github.com/denisenkom/go-mssqldb v0.0.0-20200910202707-1e08a3fab204 h1:tI48fqaIkxxYuIylVv1tdDfBp6836GKSfmmzgSyP1CY=
github.com/denisenkom/go-mssqldb v0.0.0-20200910202707-1e08a3fab204/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/denisenkom/go-mssqldb v0.10.0 h1:QykgLZBorFE95+gO3u9esLd0BmbvpWp0/waNNZfHBM8=
github.com/denisenkom/go-mssqldb v0.10.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY=
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0=
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/lib/pq v1.8.0 h1:9xohqzkUwzR4Ga4ivdTcawVS89YSDVxXMa3xJX3cGzg=
github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U=
github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/lib/pq v1.10.2 h1:AqzbZs4ZoCBp+GtejcpCpcxM3zlSMx29dXbUSeVtJb8=
github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/mattn/go-sqlite3 v1.14.7 h1:fxWBnXkxfM6sRiuH3bqJ4CfzZojMOLVc0UTsTglEghA=
github.com/mattn/go-sqlite3 v1.14.7/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/assertions v1.2.0 h1:42S6lae5dvLc7BrLu/0ugRtcFVjoJNMC/N3yZFZkDFs=
github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c h1:Vj5n4GlwjmQteupaxJ9+0FNOmBrHfq7vN4btdGoDZgI=
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 h1:hb9wdF1z5waM+dSIICn1l0DkLVDT3hqhhQsDNUmHPRE=
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384 h1:TFlARGu6Czu1z7q93HTxcP1P+/ZFC/IKythI5RzrnRg=
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
1 change: 1 addition & 0 deletions mssql_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"testing"
"time"

_ "github.com/denisenkom/go-mssqldb"
"github.com/samonzeweb/godb"
"github.com/samonzeweb/godb/adapters/mssql"
"github.com/samonzeweb/godb/dbtests/common"
Expand Down
6 changes: 3 additions & 3 deletions mysql_test.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package godb_test

import (
"os"
"testing"

_ "github.com/go-sql-driver/mysql"
"github.com/samonzeweb/godb"
"github.com/samonzeweb/godb/adapters/mysql"
"github.com/samonzeweb/godb/dbtests/common"
"os"
"testing"

. "github.com/smartystreets/goconvey/convey"
)
Expand Down
8 changes: 4 additions & 4 deletions postgresql_test.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package godb_test

import (
"os"
"testing"
"time"

_ "github.com/lib/pq"
"github.com/samonzeweb/godb"
"github.com/samonzeweb/godb/adapters/postgresql"
"github.com/samonzeweb/godb/dbtests/common"
"os"
"testing"
"time"

. "github.com/smartystreets/goconvey/convey"
)
Expand Down
2 changes: 1 addition & 1 deletion sqlite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ import (
"os"
"testing"

_ "github.com/mattn/go-sqlite3"
"github.com/samonzeweb/godb"
"github.com/samonzeweb/godb/adapters/sqlite"
"github.com/samonzeweb/godb/dbtests/common"

. "github.com/smartystreets/goconvey/convey"
)

Expand Down