func (sqliteDB) RunTest(t *testing.T, fn func(params)) { tempDir, err := ioutil.TempDir("", "") if err != nil { t.Fatal(err) } defer os.RemoveAll(tempDir) gosqlproxy.RegisterDSNTranslator("sqlite3", func(url *url.URL) string { return url.Path }) // db, err := sql.Open("sqlite3", filepath.Join(tempDir, "foo.db")) db, err := sql.Open("gosqlproxy", "sqlite3://"+filepath.Join(tempDir, "foo.db")) if err != nil { t.Fatalf("foo.db open fail: %v", err) } fn(params{sqlite, t, db}) }
func (m *goMysqlDB) RunTest(t *testing.T, fn func(params)) { if !m.Running() { t.Logf("skipping test; no MySQL running on localhost:3306") return } user := os.Getenv("GOSQLTEST_MYSQL_USER") if user == "" { user = "******" } pass, ok := getenvOk("GOSQLTEST_MYSQL_PASS") if !ok { pass = "******" } dbName := "gosqltest" gosqlproxy.RegisterDSNTranslator("mysql", func(url *url.URL) string { password, _ := url.User.Password() return fmt.Sprintf("%v:%v@%v", url.User.Username(), password, url.RequestURI()) }) // db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@/%s", user, pass, dbName)) db, err := sql.Open("gosqlproxy", fmt.Sprintf("mysql://%s:%s@localhost/%s;params://localhost/ddd?batchsize=50&asyncwrite=true", user, pass, dbName)) if err != nil { t.Fatalf("error connecting: %v", err) } params := params{goMysql, t, db} // Drop all tables in the test database. rows, err := db.Query("SHOW TABLES") if err != nil { t.Fatalf("failed to enumerate tables: %v", err) } for rows.Next() { var table string if rows.Scan(&table) == nil && strings.HasPrefix(strings.ToLower(table), strings.ToLower(TablePrefix)) { params.mustExec("DROP TABLE " + table) } } fn(params) }
func (o *oracleDB) RunTest(t *testing.T, fn func(params)) { if !o.Running() { t.Logf("skipping test; no Oracle running on localhost:1521") return } gosqlproxy.RegisterDSNTranslator("gosqlproxy", func(*url.URL) string { return os.Getenv("GOSQLTEST_ORACLE") // !nashtsai! HACK pure override here }) db, err := sql.Open("gosqlproxy", "goracle:localhost/"+os.Getenv("GOSQLTEST_ORACLE")) // db, err := sql.Open("goracle", os.Getenv("GOSQLTEST_ORACLE")) if err != nil { t.Fatalf("error connecting: %v", err) } defer db.Close() params := params{oracle, t, db} // Drop all tables in the test database. rows, err := db.Query(`SELECT table_name FROM user_tables WHERE UPPER(table_name) LIKE UPPER('` + TablePrefix + `%')`) if err != nil { t.Fatalf("failed to enumerate tables: %v", err) } var table sql.NullString for rows.Next() { err = rows.Scan(&table) // t.Logf("Next => table=%+v err=%s", table, err) if err != nil { t.Fatalf("error reading table name: %s", err) } else if !table.Valid { t.Fatalf("error reading table name: null value!") } else { params.mustExec("DROP TABLE " + table.String) } } fn(params) }
func (p *pqDB) RunTest(t *testing.T, fn func(params)) { if !p.Running() { fmt.Printf("skipping test; no Postgres running on localhost:5432\n") return } user := os.Getenv("GOSQLTEST_PQ_USER") if user == "" { user = os.Getenv("USER") } gosqlproxy.RegisterDSNTranslator("postgres", func(url *url.URL) string { password, _ := url.User.Password() return fmt.Sprintf("user=%s password=%s dbname=%s %s", url.User.Username(), password, strings.TrimPrefix(url.Path, "/"), url.RawQuery) }) dbName := "gosqltest" db, err := sql.Open("gosqlproxy", fmt.Sprintf("postgres://%s@localhost/%s?sslmode=disable", user, dbName)) // db, err := sql.Open("postgres", fmt.Sprintf("user=%s password=foo dbname=%s sslmode=disable", user, dbName)) if err != nil { t.Fatalf("error connecting: %v", err) } params := params{pq, t, db} // Drop all tables in the test database. rows, err := db.Query("SELECT table_name FROM information_schema.tables WHERE table_name LIKE '" + TablePrefix + "%' AND table_schema = 'public'") if err != nil { t.Fatalf("failed to enumerate tables: %v", err) } for rows.Next() { var table string if rows.Scan(&table) == nil { params.mustExec("DROP TABLE " + table) } } fn(params) }