Skip to content

Instantly share code, notes, and snippets.

@a-agmon
Last active September 12, 2023 06:41
Show Gist options
  • Save a-agmon/792484c7698f18cace6fa965dd6f24ed to your computer and use it in GitHub Desktop.
Save a-agmon/792484c7698f18cace6fa965dd6f24ed to your computer and use it in GitHub Desktop.
import (
...
"database/sql"
"database/sql/driver"
"github.com/marcboeker/go-duckdb"
...
)
// the driver struct wrapping the duckdb connection
type DuckDBDriver struct {
db *sql.DB
}
// init function that creates the connection
func NewDuckDBDriver(cred aws.AWSCred) *DuckDBDriver {
db, err := initializeDB(cred)
if err != nil {
panic(err)
}
err = db.Ping()
if err != nil {
panic(err)
}
log.Print("connected to duckdb in memory db")
return &DuckDBDriver{
db: db,
}
}
// opening a duckdb connection and executing init statements
func initializeDB(awsCred aws.AWSCred) (*sql.DB, error) {
bootQueries := getBootQueries(awsCred)
connector, err := duckdb.NewConnector("", func(execer driver.ExecerContext) error {
for _, qry := range bootQueries {
_, err := execer.ExecContext(context.Background(),
qry, make([]driver.NamedValue, 0))
if err != nil {
return err
}
}
return nil
})
if err != nil {
return nil, err
}
db := sql.OpenDB(connector)
return db, nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment