go-sqlite3 gomod version (#12490)
This commit is contained in:
parent
b37c7dd384
commit
8a0049bb03
32 changed files with 13260 additions and 7349 deletions
96
vendor/github.com/go-testfixtures/testfixtures/v3/postgresql.go
generated
vendored
96
vendor/github.com/go-testfixtures/testfixtures/v3/postgresql.go
generated
vendored
|
@ -10,18 +10,21 @@ type postgreSQL struct {
|
|||
baseHelper
|
||||
|
||||
useAlterConstraint bool
|
||||
useDropConstraint bool
|
||||
skipResetSequences bool
|
||||
resetSequencesTo int64
|
||||
|
||||
tables []string
|
||||
sequences []string
|
||||
nonDeferrableConstraints []pgConstraint
|
||||
constraints []pgConstraint
|
||||
tablesChecksum map[string]string
|
||||
}
|
||||
|
||||
type pgConstraint struct {
|
||||
tableName string
|
||||
constraintName string
|
||||
definition string
|
||||
}
|
||||
|
||||
func (h *postgreSQL) init(db *sql.DB) error {
|
||||
|
@ -42,6 +45,11 @@ func (h *postgreSQL) init(db *sql.DB) error {
|
|||
return err
|
||||
}
|
||||
|
||||
h.constraints, err = h.getConstraints(db)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -63,7 +71,7 @@ func (h *postgreSQL) tableNames(q queryable) ([]string, error) {
|
|||
FROM pg_class
|
||||
INNER JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace
|
||||
WHERE pg_class.relkind = 'r'
|
||||
AND pg_namespace.nspname NOT IN ('pg_catalog', 'information_schema')
|
||||
AND pg_namespace.nspname NOT IN ('pg_catalog', 'information_schema', 'crdb_internal')
|
||||
AND pg_namespace.nspname NOT LIKE 'pg_toast%'
|
||||
AND pg_namespace.nspname NOT LIKE '\_timescaledb%';
|
||||
`
|
||||
|
@ -123,14 +131,15 @@ func (*postgreSQL) getNonDeferrableConstraints(q queryable) ([]pgConstraint, err
|
|||
FROM information_schema.table_constraints
|
||||
WHERE constraint_type = 'FOREIGN KEY'
|
||||
AND is_deferrable = 'NO'
|
||||
AND table_schema <> 'crdb_internal'
|
||||
AND table_schema NOT LIKE '\_timescaledb%'
|
||||
`
|
||||
rows, err := q.Query(sql)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
defer rows.Close()
|
||||
|
||||
for rows.Next() {
|
||||
var constraint pgConstraint
|
||||
if err = rows.Scan(&constraint.tableName, &constraint.constraintName); err != nil {
|
||||
|
@ -144,6 +153,84 @@ func (*postgreSQL) getNonDeferrableConstraints(q queryable) ([]pgConstraint, err
|
|||
return constraints, nil
|
||||
}
|
||||
|
||||
func (h *postgreSQL) getConstraints(q queryable) ([]pgConstraint, error) {
|
||||
var constraints []pgConstraint
|
||||
|
||||
sql := `
|
||||
SELECT conrelid::regclass AS table_from, conname, pg_get_constraintdef(pg_constraint.oid)
|
||||
FROM pg_constraint
|
||||
INNER JOIN pg_namespace ON pg_namespace.oid = pg_constraint.connamespace
|
||||
WHERE contype = 'f'
|
||||
AND pg_namespace.nspname NOT IN ('pg_catalog', 'information_schema', 'crdb_internal')
|
||||
AND pg_namespace.nspname NOT LIKE 'pg_toast%'
|
||||
AND pg_namespace.nspname NOT LIKE '\_timescaledb%';
|
||||
`
|
||||
rows, err := q.Query(sql)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
for rows.Next() {
|
||||
var constraint pgConstraint
|
||||
if err = rows.Scan(
|
||||
&constraint.tableName,
|
||||
&constraint.constraintName,
|
||||
&constraint.definition,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
constraints = append(constraints, constraint)
|
||||
}
|
||||
if err = rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return constraints, nil
|
||||
}
|
||||
|
||||
func (h *postgreSQL) dropAndRecreateConstraints(db *sql.DB, loadFn loadFunction) (err error) {
|
||||
defer func() {
|
||||
// Re-create constraints again after load
|
||||
var sql string
|
||||
for _, constraint := range h.constraints {
|
||||
sql += fmt.Sprintf(
|
||||
"ALTER TABLE %s ADD CONSTRAINT %s %s;",
|
||||
h.quoteKeyword(constraint.tableName),
|
||||
h.quoteKeyword(constraint.constraintName),
|
||||
constraint.definition,
|
||||
)
|
||||
}
|
||||
if _, err2 := db.Exec(sql); err2 != nil && err == nil {
|
||||
err = err2
|
||||
}
|
||||
}()
|
||||
|
||||
var sql string
|
||||
for _, constraint := range h.constraints {
|
||||
sql += fmt.Sprintf(
|
||||
"ALTER TABLE %s DROP CONSTRAINT %s;",
|
||||
h.quoteKeyword(constraint.tableName),
|
||||
h.quoteKeyword(constraint.constraintName),
|
||||
)
|
||||
}
|
||||
if _, err := db.Exec(sql); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
tx, err := db.Begin()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer tx.Rollback()
|
||||
|
||||
if err = loadFn(tx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return tx.Commit()
|
||||
}
|
||||
|
||||
func (h *postgreSQL) disableTriggers(db *sql.DB, loadFn loadFunction) (err error) {
|
||||
defer func() {
|
||||
// re-enable triggers after load
|
||||
|
@ -224,6 +311,9 @@ func (h *postgreSQL) disableReferentialIntegrity(db *sql.DB, loadFn loadFunction
|
|||
}()
|
||||
}
|
||||
|
||||
if h.useDropConstraint {
|
||||
return h.dropAndRecreateConstraints(db, loadFn)
|
||||
}
|
||||
if h.useAlterConstraint {
|
||||
return h.makeConstraintsDeferrable(db, loadFn)
|
||||
}
|
||||
|
@ -274,7 +364,7 @@ func (h *postgreSQL) afterLoad(q queryable) error {
|
|||
|
||||
func (h *postgreSQL) getChecksum(q queryable, tableName string) (string, error) {
|
||||
sqlStr := fmt.Sprintf(`
|
||||
SELECT md5(CAST((array_agg(t.*)) AS TEXT))
|
||||
SELECT md5(CAST((json_agg(t.*)) AS TEXT))
|
||||
FROM %s AS t
|
||||
`,
|
||||
h.quoteKeyword(tableName),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue