fix(sql): Allow sqlite on Windows (amd64 and arm64) (#13865)

This commit is contained in:
Joshua Powers 2023-09-08 12:14:24 -06:00 committed by GitHub
parent 47c5665f50
commit c238ebb271
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 25 additions and 24 deletions

View File

@ -1,4 +1,4 @@
//go:build linux && freebsd && darwin && (!mips || !mips64) //go:build !mips && !mipsle && !mips64 && !mips64le && !(windows && 386)
package sql package sql

View File

@ -175,9 +175,7 @@ docs](https://github.com/jackc/pgx) for more details.
### modernc.org/sqlite ### modernc.org/sqlite
This driver is not available on all operating systems and architectures. It is It is not supported on windows/386, mips, and mips64 platforms.
only included in Linux builds on amd64, 386, arm64, arm, and Darwin on amd64. It
is not available for Windows, FreeBSD, and other Linux and Darwin platforms.
The DSN is a filename or url with scheme "file:". See the [driver The DSN is a filename or url with scheme "file:". See the [driver
docs](https://modernc.org/sqlite) for details. docs](https://modernc.org/sqlite) for details.

View File

@ -1,4 +1,4 @@
//go:build linux && freebsd && darwin && (!mips || !mips64) //go:build !mips && !mipsle && !mips64 && !mips64le && !(windows && 386)
package sql package sql

View File

@ -1,9 +1,10 @@
//go:build linux && freebsd && (!mips || !mips64) //go:build !mips && !mipsle && !mips64 && !mips64le && !(windows && 386)
package sql package sql
import ( import (
gosql "database/sql" gosql "database/sql"
"os"
"path/filepath" "path/filepath"
"testing" "testing"
"time" "time"
@ -14,7 +15,8 @@ import (
) )
func TestSqlite(t *testing.T) { func TestSqlite(t *testing.T) {
outDir := t.TempDir() outDir := os.TempDir()
defer os.Remove(outDir)
dbfile := filepath.Join(outDir, "db") dbfile := filepath.Join(outDir, "db")
@ -49,11 +51,13 @@ func TestSqlite(t *testing.T) {
// Check that tables were created as expected // Check that tables were created as expected
rows, err = db.Query("select sql from sqlite_master") rows, err = db.Query("select sql from sqlite_master")
require.NoError(t, err) require.NoError(t, err)
defer rows.Close()
var sql string var sql string
require.True(t, rows.Next()) require.True(t, rows.Next())
require.NoError(t, rows.Scan(&sql)) require.NoError(t, rows.Scan(&sql))
require.Equal(t, require.Equal(t,
`CREATE TABLE "metric_one"("timestamp" TIMESTAMP,"tag_one" TEXT,"tag_two" TEXT,"int64_one" INT,"int64_two" INT)`, `CREATE TABLE "metric_one"("timestamp" TIMESTAMP,"tag_one" TEXT,"tag_two" TEXT,"int64_one" INT,`+
`"int64_two" INT,"bool_one" BOOL,"bool_two" BOOL,"uint64_one" INT UNSIGNED,"float64_one" DOUBLE)`,
sql, sql,
) )
require.True(t, rows.Next()) require.True(t, rows.Next())
@ -69,7 +73,6 @@ func TestSqlite(t *testing.T) {
sql, sql,
) )
require.False(t, rows.Next()) require.False(t, rows.Next())
require.NoError(t, rows.Close())
// sqlite stores dates as strings. They may be in the local // sqlite stores dates as strings. They may be in the local
// timezone. The test needs to parse them back into a time.Time to // timezone. The test needs to parse them back into a time.Time to
@ -79,15 +82,16 @@ func TestSqlite(t *testing.T) {
var actualTime time.Time var actualTime time.Time
// Check contents of tables // Check contents of tables
rows, err = db.Query("select timestamp, tag_one, tag_two, int64_one, int64_two from metric_one") rows2, err := db.Query("select timestamp, tag_one, tag_two, int64_one, int64_two from metric_one")
require.NoError(t, err) require.NoError(t, err)
require.True(t, rows.Next()) defer rows2.Close()
require.True(t, rows2.Next())
var ( var (
a string a string
b, c string b, c string
d, e int64 d, e int64
) )
require.NoError(t, rows.Scan(&a, &b, &c, &d, &e)) require.NoError(t, rows2.Scan(&a, &b, &c, &d, &e))
actualTime, err = time.Parse(timeLayout, a) actualTime, err = time.Parse(timeLayout, a)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, ts, actualTime.UTC()) require.Equal(t, ts, actualTime.UTC())
@ -95,36 +99,35 @@ func TestSqlite(t *testing.T) {
require.Equal(t, "tag2", c) require.Equal(t, "tag2", c)
require.Equal(t, int64(1234), d) require.Equal(t, int64(1234), d)
require.Equal(t, int64(2345), e) require.Equal(t, int64(2345), e)
require.False(t, rows.Next()) require.False(t, rows2.Next())
require.NoError(t, rows.Close())
rows, err = db.Query("select timestamp, tag_three, string_one from metric_two") rows3, err := db.Query("select timestamp, tag_three, string_one from metric_two")
require.NoError(t, err) require.NoError(t, err)
require.True(t, rows.Next()) defer rows3.Close()
require.True(t, rows3.Next())
var ( var (
f, g, h string f, g, h string
) )
require.NoError(t, rows.Scan(&f, &g, &h)) require.NoError(t, rows3.Scan(&f, &g, &h))
actualTime, err = time.Parse(timeLayout, f) actualTime, err = time.Parse(timeLayout, f)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, ts, actualTime.UTC()) require.Equal(t, ts, actualTime.UTC())
require.Equal(t, "tag3", g) require.Equal(t, "tag3", g)
require.Equal(t, "string1", h) require.Equal(t, "string1", h)
require.False(t, rows.Next()) require.False(t, rows3.Next())
require.NoError(t, rows.Close())
rows, err = db.Query(`select timestamp, "tag four", "string two" from "metric three"`) rows4, err := db.Query(`select timestamp, "tag four", "string two" from "metric three"`)
require.NoError(t, err) require.NoError(t, err)
require.True(t, rows.Next()) defer rows4.Close()
require.True(t, rows4.Next())
var ( var (
i, j, k string i, j, k string
) )
require.NoError(t, rows.Scan(&i, &j, &k)) require.NoError(t, rows4.Scan(&i, &j, &k))
actualTime, err = time.Parse(timeLayout, i) actualTime, err = time.Parse(timeLayout, i)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, ts, actualTime.UTC()) require.Equal(t, ts, actualTime.UTC())
require.Equal(t, "tag4", j) require.Equal(t, "tag4", j)
require.Equal(t, "string2", k) require.Equal(t, "string2", k)
require.False(t, rows.Next()) require.False(t, rows4.Next())
require.NoError(t, rows.Close())
} }