From 0c97f22069d77cf3cac92d68173e38f83b258a9a Mon Sep 17 00:00:00 2001 From: Jonas Knobloch Date: Sat, 11 Apr 2026 01:09:16 +0200 Subject: Add lesci module --- research/lesci/append.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 research/lesci/append.go (limited to 'research/lesci/append.go') 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() + }) +} -- cgit v1.3.1