From 293e2a52e0b45065db12ff27f89f1adebe4bf4d2 Mon Sep 17 00:00:00 2001 From: Stefan Majewsky Date: Fri, 10 Apr 2026 20:13:15 +0200 Subject: reorganize code --- db.go | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'db.go') 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 -- cgit v1.2.3