diff options
| author | Jonas Knobloch <jonas.knobloch@t-online.de> | 2026-04-17 16:07:14 +0200 |
|---|---|---|
| committer | Jonas Knobloch <jonas.knobloch@t-online.de> | 2026-04-17 16:07:14 +0200 |
| commit | 3fe37224ccc2500e7e767e5fc00163ef61182828 (patch) | |
| tree | 7bd14e080c080b24026660beda42817a3c9dc77f /research/sander/experiment.go | |
| parent | 4d8f647bfb54899e3052931790e288da7af97050 (diff) | |
Add sander module
Diffstat (limited to 'research/sander/experiment.go')
| -rw-r--r-- | research/sander/experiment.go | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/research/sander/experiment.go b/research/sander/experiment.go new file mode 100644 index 0000000..1521cf8 --- /dev/null +++ b/research/sander/experiment.go @@ -0,0 +1,85 @@ +package sander + +import ( + "database/sql" + "fmt" + "log" + "os" + "path/filepath" + + _ "github.com/duckdb/duckdb-go/v2" +) + +type Experiment struct { + name string + model string + reference map[int64]struct{} +} + +func NewExperiment(name, model string, reference map[int64]struct{}) (*Experiment, error) { + e := &Experiment{ + name: name, + model: model, + reference: reference, + } + + return e, nil +} + +func (e *Experiment) Run() error { + if err := os.MkdirAll(e.name, 0775); err != nil { + log.Fatal(err) + } + + dsn := filepath.Join(e.name, "wte.db") + + var db *sql.DB + + if database, err := initDatabase(dsn); err != nil { + return err + } else { + db = database + } + + defer db.Close() + + db.SetMaxOpenConns(1) + + fmt.Println(e.name) + + if _, err := db.Exec(`INSTALL vss; LOAD vss;`); err != nil { + return err + } + + if err := e.Extract(db); err != nil { + return err + } + + if err := e.Analyze(db); err != nil { + return err + } + + if err := e.Plot(db); err != nil { + return err + } + + return nil +} + +func initDatabase(dsn string) (*sql.DB, error) { + var db *sql.DB + + if database, err := sql.Open("duckdb", dsn); err != nil { + return nil, err + } else { + db = database + } + + if err := db.Ping(); err != nil { + _ = db.Close() + + return nil, err + } + + return db, nil +} |
