remove ctx, db stuff and use callbacks instead

This commit is contained in:
2026-07-08 01:34:52 +01:00
parent 6e8fdbba1e
commit 86468a85c9
4 changed files with 57 additions and 45 deletions
+9 -10
View File
@@ -1,15 +1,13 @@
package sqimple
import (
"context"
"database/sql"
"strings"
)
// https://www.sqlite.org/lang_delete.html
type DeleteStatement struct {
Ctx context.Context
DB *sql.DB
execFunc func(Query) (sql.Result, error)
table SelectTable
@@ -22,15 +20,16 @@ func (s *DeleteStatement) Args() []any {
}
func (s *DeleteStatement) Exec() (sql.Result, error) {
if s.DB != nil {
if s.Ctx != nil {
return s.DB.ExecContext(s.Ctx, s.String(), s.Args()...)
}
return s.DB.Exec(s.String(), s.Args()...)
if s.execFunc != nil {
return s.execFunc(s)
}
return nil, ErrNoDatabase
return nil, nil
}
func (s *DeleteStatement) ExecFunc(f func(Query) (sql.Result, error)) *DeleteStatement {
s.execFunc = f
return s
}
func (s *DeleteStatement) IsValid() bool {
+9 -10
View File
@@ -1,7 +1,6 @@
package sqimple
import (
"context"
"database/sql"
"fmt"
"slices"
@@ -10,8 +9,7 @@ import (
// https://www.sqlite.org/lang_delete.html
type InsertStatement struct {
Ctx context.Context
DB *sql.DB
execFunc func(Query) (sql.Result, error)
table InsertTable
or string
@@ -38,15 +36,16 @@ func (s *InsertStatement) Args() []any {
}
func (s *InsertStatement) Exec() (sql.Result, error) {
if s.DB != nil {
if s.Ctx != nil {
return s.DB.ExecContext(s.Ctx, s.String(), s.Args()...)
}
return s.DB.Exec(s.String(), s.Args()...)
if s.execFunc != nil {
return s.execFunc(s)
}
return nil, ErrNoDatabase
return nil, nil
}
func (s *InsertStatement) ExecFunc(f func(Query) (sql.Result, error)) *InsertStatement {
s.execFunc = f
return s
}
func (s *InsertStatement) IsValid() bool {
+30 -15
View File
@@ -11,8 +11,11 @@ import (
// https://www.sqlite.org/lang_select.html
type SelectQuery struct {
Ctx context.Context
DB *sql.DB
ctx context.Context
db *sql.DB
queryFunc func(Query) (*sql.Rows, error)
queryRowFunc func(Query) *sql.Row
distinct bool
@@ -48,6 +51,16 @@ func (q *SelectQuery) Columns(defs ...string) *SelectQuery {
return q
}
func (q *SelectQuery) Ctx(ctx context.Context) *SelectQuery {
q.ctx = ctx
return q
}
func (q *SelectQuery) DB(db *sql.DB) *SelectQuery {
q.db = db
return q
}
func (q *SelectQuery) Distinct(distinct bool) *SelectQuery {
q.distinct = distinct
@@ -114,15 +127,16 @@ func (q *SelectQuery) OrderBy(defs ...string) *SelectQuery {
}
func (q *SelectQuery) Query() (*sql.Rows, error) {
if q.DB != nil {
if q.Ctx != nil {
return q.DB.QueryContext(q.Ctx, q.String(), q.Args()...)
}
return q.DB.Query(q.String(), q.Args()...)
if q.queryFunc != nil {
return q.queryFunc(q)
}
return nil, ErrNoDatabase
return nil, nil
}
func (q *SelectQuery) QueryFunc(f func(Query) (*sql.Rows, error)) *SelectQuery {
q.queryFunc = f
return q
}
func (q *SelectQuery) QueryRecord() (record.Record, error) {
@@ -144,17 +158,18 @@ func (q *SelectQuery) QueryRecords() ([]record.Record, error) {
}
func (q *SelectQuery) QueryRow() *sql.Row {
if q.DB != nil {
if q.Ctx != nil {
return q.DB.QueryRowContext(q.Ctx, q.String(), q.Args()...)
}
return q.DB.QueryRow(q.String(), q.Args()...)
if q.queryRowFunc != nil {
return q.queryRowFunc(q)
}
return nil
}
func (q *SelectQuery) QueryRowFunc(f func(Query) *sql.Row) *SelectQuery {
q.queryRowFunc = f
return q
}
func (q *SelectQuery) String() string {
strs := []string{"select"}
+9 -10
View File
@@ -1,7 +1,6 @@
package sqimple
import (
"context"
"database/sql"
"slices"
"strings"
@@ -9,8 +8,7 @@ import (
// https://www.sqlite.org/lang_update.html
type UpdateStatement struct {
Ctx context.Context
DB *sql.DB
execFunc func(Query) (sql.Result, error)
table UpdateTable
or string
@@ -37,15 +35,16 @@ func (s *UpdateStatement) Args() []any {
}
func (s *UpdateStatement) Exec() (sql.Result, error) {
if s.DB != nil {
if s.Ctx != nil {
return s.DB.ExecContext(s.Ctx, s.String(), s.Args()...)
}
return s.DB.Exec(s.String(), s.Args()...)
if s.execFunc != nil {
return s.execFunc(s)
}
return nil, ErrNoDatabase
return nil, nil
}
func (s *UpdateStatement) ExecFunc(f func(Query) (sql.Result, error)) *UpdateStatement {
s.execFunc = f
return s
}
func (s *UpdateStatement) IsValid() bool {