diff options
| author | Jonas Knobloch <jonas.knobloch@t-online.de> | 2026-04-11 01:09:16 +0200 |
|---|---|---|
| committer | Jonas Knobloch <jonas.knobloch@t-online.de> | 2026-04-14 19:38:34 +0200 |
| commit | 0c97f22069d77cf3cac92d68173e38f83b258a9a (patch) | |
| tree | 127bf00ad1f69ce1368089247471fd52b8f9d305 /research/lesci/append.go | |
| parent | aa1fdb5f3b5d6c54c3bc44269482c31f4dfafe67 (diff) | |
Add lesci module
Diffstat (limited to 'research/lesci/append.go')
| -rw-r--r-- | research/lesci/append.go | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/research/lesci/append.go b/research/lesci/append.go new file mode 100644 index 0000000..a3459ff --- /dev/null +++ b/research/lesci/append.go @@ -0,0 +1,46 @@ +package lesci + +import ( + "context" + "database/sql" + "database/sql/driver" + + "github.com/duckdb/duckdb-go/v2" +) + +type AppendFunc func([]driver.Value) error +type AppendRowsFunc func(appendFunc AppendFunc) error + +func AppendRows(db *sql.DB, table string, appendRowsFunc AppendRowsFunc) error { + var conn *sql.Conn + + if c, err := db.Conn(context.Background()); err != nil { + return err + } else { + conn = c + } + + defer conn.Close() + + return conn.Raw(func(driverConn any) error { + duckConn := driverConn.(*duckdb.Conn) + + var appender *duckdb.Appender + + if a, err := duckdb.NewAppenderFromConn(duckConn, "", table); err != nil { + return err + } else { + appender = a + } + + defer appender.Close() + + if err := appendRowsFunc(func(row []driver.Value) error { + return appender.AppendRow(row...) + }); err != nil { + return err + } + + return appender.Flush() + }) +} |
