aboutsummaryrefslogtreecommitdiff
path: root/db.go
diff options
context:
space:
mode:
authorStefan Majewsky <majewsky@gmx.net>2026-04-10 20:13:15 +0200
committerStefan Majewsky <majewsky@gmx.net>2026-04-10 20:13:15 +0200
commit293e2a52e0b45065db12ff27f89f1adebe4bf4d2 (patch)
tree2e7efecdf5ee359df9c6b09ece3443ea33432462 /db.go
parente0fb5aa0acc1983648ab1480f22114aead234eeb (diff)
downloadgo-oblast-293e2a52e0b45065db12ff27f89f1adebe4bf4d2.tar.gz
reorganize code
Diffstat (limited to 'db.go')
-rw-r--r--db.go22
1 files changed, 16 insertions, 6 deletions
diff --git a/db.go b/db.go
index 8f1a050..83d1863 100644
--- a/db.go
+++ b/db.go
@@ -9,13 +9,15 @@ import (
"fmt"
"reflect"
"sync"
+
+ "go.xyrillian.de/oblast/internal"
)
// DB wraps an [sql.DB] instance for use with Oblast's query interface.
type DB struct {
*sql.DB
dialect Dialect
- plans map[reflect.Type]plan
+ plans map[reflect.Type]internal.Plan
planMutex sync.Mutex
}
@@ -23,14 +25,22 @@ func NewDB(db *sql.DB, dialect Dialect) *DB {
return &DB{
DB: db,
dialect: dialect,
- plans: make(map[reflect.Type]plan),
+ plans: make(map[reflect.Type]internal.Plan),
}
}
-// TODO: remove
-func Keks[T IsTable](ctx context.Context, db *DB) error {
- _, err := db.getPlan(reflect.TypeFor[T]())
- return err
+func (d *DB) getPlan(t reflect.Type) (internal.Plan, error) {
+ d.planMutex.Lock()
+ defer d.planMutex.Unlock()
+ p, ok := d.plans[t]
+ if ok {
+ return p, nil
+ }
+ p, err := internal.BuildPlan(t, d.dialect)
+ if err == nil {
+ d.plans[t] = p
+ }
+ return p, err
}
// TODO: Begin() -> custom Tx type; add interface to allow Select() et all to take either *DB or *Tx