summaryrefslogtreecommitdiff
path: root/research/lesci/append.go
diff options
context:
space:
mode:
authorJonas Knobloch <jonas.knobloch@t-online.de>2026-04-11 01:09:16 +0200
committerJonas Knobloch <jonas.knobloch@t-online.de>2026-04-14 19:38:34 +0200
commit0c97f22069d77cf3cac92d68173e38f83b258a9a (patch)
tree127bf00ad1f69ce1368089247471fd52b8f9d305 /research/lesci/append.go
parentaa1fdb5f3b5d6c54c3bc44269482c31f4dfafe67 (diff)
Add lesci module
Diffstat (limited to 'research/lesci/append.go')
-rw-r--r--research/lesci/append.go46
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()
+ })
+}