Skip to content

Commit

Permalink
Tweaks.
Browse files Browse the repository at this point in the history
  • Loading branch information
ncruces committed Dec 15, 2023
1 parent 0171743 commit ebbb969
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 18 deletions.
5 changes: 2 additions & 3 deletions conn.go
Original file line number Diff line number Diff line change
Expand Up @@ -240,8 +240,8 @@ func (c *Conn) SetInterrupt(ctx context.Context) (old context.Context) {
return ctx
}

// An uncompleted SQL statement prevents SQLite from ignoring
// an interrupt that comes before any other statements are started.
// A busy SQL statement prevents SQLite from ignoring an interrupt
// that comes before any other statements are started.
if c.pending == nil {
c.pending, _, _ = c.Prepare(`SELECT 1 UNION ALL SELECT 2`)
} else {
Expand All @@ -250,7 +250,6 @@ func (c *Conn) SetInterrupt(ctx context.Context) (old context.Context) {

old = c.interrupt
c.interrupt = ctx
// Remove the handler if the context can't be canceled.
if ctx == nil || ctx.Done() == nil {
return old
}
Expand Down
2 changes: 1 addition & 1 deletion driver/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -547,7 +547,7 @@ func (r *rows) Next(dest []driver.Value) error {
case sqlite3.BLOB:
dest[i] = r.Stmt.ColumnRawBlob(i)
case sqlite3.TEXT:
dest[i] = stringOrTime(r.Stmt.ColumnRawText(i))
dest[i] = stringOrTime(r.Stmt.ColumnText(i))
case sqlite3.NULL:
dest[i] = nil
default:
Expand Down
14 changes: 7 additions & 7 deletions driver/time.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,23 @@ import (
// if it roundtrips back to the same string.
// This way times can be persisted to, and recovered from, the database,
// but if a string is needed, [database/sql] will recover the same string.
func stringOrTime(text []byte) driver.Value {
func stringOrTime(text string) driver.Value {
// Weed out (some) values that can't possibly be
// [time.RFC3339Nano] timestamps.
if len(text) < len("2006-01-02T15:04:05Z") {
return string(text)
return text
}
if len(text) > len(time.RFC3339Nano) {
return string(text)
return text
}
if text[4] != '-' || text[10] != 'T' || text[16] != ':' {
return string(text)
return text
}

// Slow path.
date, err := time.Parse(time.RFC3339Nano, string(text))
if err == nil && date.Format(time.RFC3339Nano) == string(text) {
date, err := time.Parse(time.RFC3339Nano, text)
if err == nil && date.Format(time.RFC3339Nano) == text {
return date
}
return string(text)
return text
}
4 changes: 2 additions & 2 deletions driver/time_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ func Fuzz_stringOrTime_1(f *testing.F) {
f.Add("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.")

f.Fuzz(func(t *testing.T, str string) {
value := stringOrTime([]byte(str))
value := stringOrTime(str)

switch v := value.(type) {
case time.Time:
Expand Down Expand Up @@ -59,7 +59,7 @@ func Fuzz_stringOrTime_2(f *testing.F) {
f.Add(int64(-763421161058), int64(222_222_222)) // twosday, year 22222BC

checkTime := func(t testing.TB, date time.Time) {
value := stringOrTime([]byte(date.Format(time.RFC3339Nano)))
value := stringOrTime(date.Format(time.RFC3339Nano))

switch v := value.(type) {
case time.Time:
Expand Down
8 changes: 3 additions & 5 deletions sqlite.go
Original file line number Diff line number Diff line change
Expand Up @@ -146,13 +146,11 @@ func (sqlt *sqlite) error(rc uint64, handle uint32, sql ...string) error {
func (sqlt *sqlite) getfn(name string) api.Function {
c := &sqlt.funcs
p := unsafe.StringData(name)
for i, id := range c.id {
if id == p {
f := c.fn[i]
for i := range c.id {
if c.id[i] == p {
c.id[i] = nil
c.fn[i] = nil
c.mask &^= uint32(1) << i
return f
return c.fn[i]
}
}
return sqlt.mod.ExportedFunction(name)
Expand Down

0 comments on commit ebbb969

Please sign in to comment.