mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
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
This commit is contained in:
43
api/datastore/sql/dbhelper/dbhelper.go
Normal file
43
api/datastore/sql/dbhelper/dbhelper.go
Normal file
@@ -0,0 +1,43 @@
|
||||
// dbhelpers wrap SQL and specific capabilities of an SQL db
|
||||
package dbhelper
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/jmoiron/sqlx"
|
||||
"github.com/sirupsen/logrus"
|
||||
"net/url"
|
||||
)
|
||||
|
||||
var sqlHelpers []Helper
|
||||
|
||||
//Add registers a new SQL helper
|
||||
func Add(helper Helper) {
|
||||
logrus.Infof("Registering DB helper %s", helper)
|
||||
sqlHelpers = append(sqlHelpers, helper)
|
||||
}
|
||||
|
||||
//Helper provides DB-specific SQL capabilities
|
||||
type Helper interface {
|
||||
fmt.Stringer
|
||||
//Supports indicates if this helper supports this driver name
|
||||
Supports(driverName string) bool
|
||||
//PreConnect calculates the connect URL for the db from a canonical URL used in Fn config
|
||||
PreConnect(url *url.URL) (string, error)
|
||||
//PostCreate Apply any configuration to the DB prior to use
|
||||
PostCreate(db *sqlx.DB) (*sqlx.DB, error)
|
||||
//CheckTableExists checks if a table exists in the DB
|
||||
CheckTableExists(tx *sqlx.Tx, table string) (bool, error)
|
||||
//IsDuplicateKeyError determines if an error indicates if the prior error was caused by a duplicate key insert
|
||||
IsDuplicateKeyError(err error) bool
|
||||
}
|
||||
|
||||
//GetHelper returns a helper for a specific driver
|
||||
func GetHelper(driverName string) (Helper, bool) {
|
||||
for _, helper := range sqlHelpers {
|
||||
if helper.Supports(driverName) {
|
||||
return helper, true
|
||||
}
|
||||
logrus.Printf("%s does not support %s", helper, driverName)
|
||||
}
|
||||
return nil, false
|
||||
}
|
||||
Reference in New Issue
Block a user