2016-12-29 04:03:40 +03:00
package testfixtures
import (
"database/sql"
"path/filepath"
)
// SQLite is the SQLite Helper for this package
type SQLite struct {
baseHelper
}
func ( * SQLite ) paramType ( ) int {
return paramTypeQuestion
}
2018-10-02 22:20:02 +03:00
func ( * SQLite ) databaseName ( q queryable ) ( string , error ) {
2016-12-29 04:03:40 +03:00
var seq int
2018-10-02 22:20:02 +03:00
var main , dbName string
err := q . QueryRow ( "PRAGMA database_list" ) . Scan ( & seq , & main , & dbName )
if err != nil {
return "" , err
}
2016-12-29 04:03:40 +03:00
dbName = filepath . Base ( dbName )
2018-10-02 22:20:02 +03:00
return dbName , nil
2016-12-29 04:03:40 +03:00
}
2018-10-02 22:20:02 +03:00
func ( * SQLite ) tableNames ( q queryable ) ( [ ] string , error ) {
query := `
SELECT name
FROM sqlite_master
WHERE type = ' table ' ;
`
rows , err := q . Query ( query )
2016-12-29 04:03:40 +03:00
if err != nil {
2018-10-02 22:20:02 +03:00
return nil , err
}
defer rows . Close ( )
var tables [ ] string
for rows . Next ( ) {
var table string
if err = rows . Scan ( & table ) ; err != nil {
return nil , err
}
tables = append ( tables , table )
}
if err = rows . Err ( ) ; err != nil {
return nil , err
}
return tables , nil
}
func ( * SQLite ) disableReferentialIntegrity ( db * sql . DB , loadFn loadFunction ) ( err error ) {
defer func ( ) {
if _ , err2 := db . Exec ( "PRAGMA defer_foreign_keys = OFF" ) ; err2 != nil && err == nil {
err = err2
}
} ( )
if _ , err = db . Exec ( "PRAGMA defer_foreign_keys = ON" ) ; err != nil {
2016-12-29 04:03:40 +03:00
return err
}
2018-10-02 22:20:02 +03:00
tx , err := db . Begin ( )
if err != nil {
2016-12-29 04:03:40 +03:00
return err
}
2018-10-02 22:20:02 +03:00
defer tx . Rollback ( )
2016-12-29 04:03:40 +03:00
if err = loadFn ( tx ) ; err != nil {
return err
}
return tx . Commit ( )
}