Files
fn-serverless/api/datastore/sql/postgres/postgres.go
Owen Cliffe 1ad27f4f0d Inverting deps on SQL, Log and MQ plugins to make them optional dependencies of extended servers, Removing some dead code that brought in unused dependencies Filtering out some non-linux transitive deps. (#1057)
* initial Db helper split - make SQL and datastore packages optional

* abstracting log store

* break out DB, MQ and log drivers as extensions

* cleanup

* fewer deps

* fixing docker test

* hmm dbness

* updating db startup

* Consolidate all your extensions into one convenient package

* cleanup

* clean up dep constraints
2018-06-11 18:23:28 +01:00

64 lines
1.1 KiB
Go

package postgres
import (
"github.com/fnproject/fn/api/datastore/sql/dbhelper"
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
"github.com/lib/pq"
"net/url"
)
type postgresHelper int
func (postgresHelper) Supports(scheme string) bool {
switch scheme {
case "postgres", "pgx":
return true
}
return false
}
func (postgresHelper) PreConnect(url *url.URL) (string, error) {
return url.String(), nil
}
func (postgresHelper) PostCreate(db *sqlx.DB) (*sqlx.DB, error) {
return db, nil
}
func (postgresHelper) CheckTableExists(tx *sqlx.Tx, table string) (bool, error) {
query := tx.Rebind(`SELECT count(*)
FROM information_schema.TABLES
WHERE TABLE_NAME = 'apps'
`)
row := tx.QueryRow(query)
var count int
err := row.Scan(&count)
if err != nil {
return false, err
}
exists := count > 0
return exists, nil
}
func (postgresHelper) String() string {
return "postgres"
}
func (postgresHelper) IsDuplicateKeyError(err error) bool {
switch dbErr := err.(type) {
case *pq.Error:
if dbErr.Code == "23505" {
return true
}
}
return false
}
func init() {
dbhelper.Add(postgresHelper(0))
}