Skip to content

Commit 0956107

Browse files
authored
feat(cmd/vet): Prepare SQLite queries (#2389)
* feat(cmd/vet): Prepare SQLite queries * Use in-memory dbs for test
1 parent 7fd89bc commit 0956107

File tree

7 files changed

+44
-5
lines changed

7 files changed

+44
-5
lines changed

examples/authors/sqlc.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@
3333
"schema": "sqlite/schema.sql",
3434
"queries": "sqlite/query.sql",
3535
"engine": "sqlite",
36+
"database": {
37+
"url": "'file:authors?mode=memory&cache=shared'"
38+
},
3639
"gen": {
3740
"go": {
3841
"package": "authors",

examples/booktest/sqlc.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,10 @@
2626
"path": "sqlite",
2727
"schema": "sqlite/schema.sql",
2828
"queries": "sqlite/query.sql",
29-
"engine": "sqlite"
29+
"engine": "sqlite",
30+
"database": {
31+
"url": "'file:booktest?mode=memory&cache=shared'"
32+
}
3033
}
3134
]
3235
}

examples/ondeck/sqlc.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@
3333
"schema": "sqlite/schema",
3434
"queries": "sqlite/query",
3535
"engine": "sqlite",
36+
"database": {
37+
"url": "'file:ondeck?mode=memory&cache=shared'"
38+
},
3639
"emit_json_tags": true,
3740
"emit_prepared_queries": true,
3841
"emit_interface": true

internal/cmd/vet.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"github.com/google/cel-go/cel"
1717
"github.com/google/cel-go/ext"
1818
"github.com/jackc/pgx/v5"
19+
_ "github.com/mattn/go-sqlite3"
1920
"github.com/spf13/cobra"
2021

2122
"github.com/kyleconroy/sqlc/internal/config"
@@ -165,6 +166,9 @@ func prepareable(sql config.SQL, raw *ast.RawStmt) bool {
165166
if sql.Engine == config.EngineMySQL {
166167
return true
167168
}
169+
if sql.Engine == config.EngineSQLite {
170+
return true
171+
}
168172
return false
169173
}
170174

@@ -285,6 +289,16 @@ func (c *checker) checkSQL(ctx context.Context, s config.SQL) error {
285289
}
286290
defer db.Close()
287291
prep = &dbPreparer{db}
292+
case config.EngineSQLite:
293+
db, err := sql.Open("sqlite3", dburl)
294+
if err != nil {
295+
return fmt.Errorf("database: connection error: %s", err)
296+
}
297+
if err := db.PingContext(ctx); err != nil {
298+
return fmt.Errorf("database: connection error: %s", err)
299+
}
300+
defer db.Close()
301+
prep = &dbPreparer{db}
288302
default:
289303
return fmt.Errorf("unsupported database url: %s", s.Engine)
290304
}

internal/endtoend/vet_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package main
66
import (
77
"bytes"
88
"context"
9+
"fmt"
910
"os"
1011
"path/filepath"
1112
"testing"
@@ -60,6 +61,12 @@ func TestExamplesVet(t *testing.T) {
6061
defer db.Close()
6162
defer cleanup()
6263
}
64+
if s, found := findSchema(t, filepath.Join(path, "sqlite")); found {
65+
dsn := fmt.Sprintf("file:%s?mode=memory&cache=shared", tc)
66+
db, cleanup := sqltest.CreateSQLiteDatabase(t, dsn, []string{s})
67+
defer db.Close()
68+
defer cleanup()
69+
}
6370
}
6471

6572
var stderr bytes.Buffer

internal/sqltest/postgres.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ func id() string {
2929
}
3030

3131
func PostgreSQL(t *testing.T, migrations []string) (*sql.DB, func()) {
32+
t.Helper()
33+
3234
// For each test, pick a new schema name at random.
3335
schema := "sqltest_postgresql_" + id()
3436
return CreatePostgreSQLDatabase(t, schema, true, migrations)

internal/sqltest/sqlite.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,19 @@ import (
1313

1414
func SQLite(t *testing.T, migrations []string) (*sql.DB, func()) {
1515
t.Helper()
16-
1716
// For each test, pick a new database name at random.
1817
source, err := os.CreateTemp("", "sqltest_sqlite_")
1918
if err != nil {
2019
t.Fatal(err)
2120
}
22-
t.Logf("open %s\n", source.Name())
23-
sdb, err := sql.Open("sqlite3", source.Name())
21+
return CreateSQLiteDatabase(t, source.Name(), migrations)
22+
}
23+
24+
func CreateSQLiteDatabase(t *testing.T, path string, migrations []string) (*sql.DB, func()) {
25+
t.Helper()
26+
27+
t.Logf("open %s\n", path)
28+
sdb, err := sql.Open("sqlite3", path)
2429
if err != nil {
2530
t.Fatal(err)
2631
}
@@ -40,6 +45,8 @@ func SQLite(t *testing.T, migrations []string) (*sql.DB, func()) {
4045
}
4146

4247
return sdb, func() {
43-
os.Remove(source.Name())
48+
if _, err := os.Stat(path); err == nil {
49+
os.Remove(path)
50+
}
4451
}
4552
}

0 commit comments

Comments
 (0)