package scopes import ( tbase "testing" "git.sr.ht/~cco/go-scopes/common/testing" "git.sr.ht/~cco/go-scopes/storage/sql" _ "git.sr.ht/~cco/go-scopes/storage/sql/pgsql" _ "git.sr.ht/~cco/go-scopes/storage/sql/sqlite" "git.sr.ht/~cco/go-scopes/tests/etc" ) func TestSqlite(tb *tbase.T) { t := testing.SetUp(tb) cfg := etc.ConfigSqlite() db := sql.Open(cfg) resetSqlite(db) DoTests(t, cfg, db) } func TestPgsql(tb *tbase.T) { t := testing.SetUp(tb) cfg := etc.ConfigPgsql() db := sql.Open(cfg) resetPgsql(db) DoTests(t, cfg, db) } func DoTests(t *testing.T, cfg *sql.Cfg, db *sql.Storage) { t.Run("base", func(t *testing.T) { BaseTest(t, cfg, db) }) } type greet struct { id int64 label string } func (g *greet) Scan(rows *sql.Rows) error { return rows.Scan(&g.id, &g.label) } func BaseTest(t *testing.T, cfg *sql.Cfg, db *sql.Storage) { db.Exec(insert) //data := sql.QueryCol[string](db, query, 2) data := sql.QueryData[*greet](db, query) t.AssertEqual(len(data), 2) t.AssertEqual(data[0].label, "Hello World") t.AssertEqual(data[1].label, "Good Afternoon") } func resetSqlite(db *sql.Storage) { db.Exec(drop_table) db.Exec(sqlite_create_table) } func resetPgsql(db *sql.Storage) { db.Exec(drop_table) db.Exec(pgsql_create_table) } // SQL statements var drop_table = `drop table test` var insert = `insert into test (label) values ('Hello World'), ('Good Afternoon')` var query = `select id, label from test ` //where id = $1` // database-specific SQL statements // note: ... integer ... primary key ... automatically fills row sequentially var sqlite_create_table = `create table test ( id integer not null primary key, label text)` var pgsql_create_table = `create table test ( id serial not null primary key, label text)`