mirror of
https://github.com/glebarez/sqlite.git
synced 2025-09-27 03:55:53 +08:00
122 lines
2.6 KiB
Go
122 lines
2.6 KiB
Go
package sqlite
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"testing"
|
|
|
|
sqlite "github.com/glebarez/go-sqlite"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func TestDialector(t *testing.T) {
|
|
// This is the DSN of the in-memory SQLite database for these tests.
|
|
const InMemoryDSN = "file:testdatabase?mode=memory&cache=shared"
|
|
// This is the custom SQLite driver name.
|
|
const CustomDriverName = "my_custom_driver"
|
|
|
|
// Register the custom SQlite3 driver.
|
|
// It will have one custom function called "my_custom_function".
|
|
|
|
sql.Register(CustomDriverName,
|
|
&sqlite.Driver{},
|
|
)
|
|
|
|
rows := []struct {
|
|
description string
|
|
dialector *Dialector
|
|
openSuccess bool
|
|
query string
|
|
querySuccess bool
|
|
}{
|
|
{
|
|
description: "Default driver",
|
|
dialector: &Dialector{
|
|
DSN: InMemoryDSN,
|
|
},
|
|
openSuccess: true,
|
|
query: "SELECT 1",
|
|
querySuccess: true,
|
|
},
|
|
{
|
|
description: "Explicit default driver",
|
|
dialector: &Dialector{
|
|
DriverName: DriverName,
|
|
DSN: InMemoryDSN,
|
|
},
|
|
openSuccess: true,
|
|
query: "SELECT 1",
|
|
querySuccess: true,
|
|
},
|
|
{
|
|
description: "Bad driver",
|
|
dialector: &Dialector{
|
|
DriverName: "not-a-real-driver",
|
|
DSN: InMemoryDSN,
|
|
},
|
|
openSuccess: false,
|
|
},
|
|
// {
|
|
// description: "Explicit default driver, custom function",
|
|
// dialector: &Dialector{
|
|
// DriverName: DriverName,
|
|
// DSN: InMemoryDSN,
|
|
// },
|
|
// openSuccess: true,
|
|
// query: "SELECT my_custom_function()",
|
|
// querySuccess: false,
|
|
// },
|
|
{
|
|
description: "Custom driver",
|
|
dialector: &Dialector{
|
|
DriverName: CustomDriverName,
|
|
DSN: InMemoryDSN,
|
|
},
|
|
openSuccess: true,
|
|
query: "SELECT 1",
|
|
querySuccess: true,
|
|
},
|
|
// {
|
|
// description: "Custom driver, custom function",
|
|
// dialector: &Dialector{
|
|
// DriverName: CustomDriverName,
|
|
// DSN: InMemoryDSN,
|
|
// },
|
|
// openSuccess: true,
|
|
// query: "SELECT my_custom_function()",
|
|
// querySuccess: true,
|
|
// },
|
|
}
|
|
for rowIndex, row := range rows {
|
|
t.Run(fmt.Sprintf("%d/%s", rowIndex, row.description), func(t *testing.T) {
|
|
db, err := gorm.Open(row.dialector, &gorm.Config{})
|
|
if !row.openSuccess {
|
|
if err == nil {
|
|
t.Errorf("Expected Open to fail.")
|
|
}
|
|
return
|
|
}
|
|
|
|
if err != nil {
|
|
t.Errorf("Expected Open to succeed; got error: %v", err)
|
|
}
|
|
if db == nil {
|
|
t.Errorf("Expected db to be non-nil.")
|
|
}
|
|
if row.query != "" {
|
|
err = db.Exec(row.query).Error
|
|
if !row.querySuccess {
|
|
if err == nil {
|
|
t.Errorf("Expected query to fail.")
|
|
}
|
|
return
|
|
}
|
|
|
|
if err != nil {
|
|
t.Errorf("Expected query to succeed; got error: %v", err)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|