mirror of
https://github.com/ncruces/go-sqlite3.git
synced 2026-01-11 21:49:13 +00:00
58 lines
1.0 KiB
Go
58 lines
1.0 KiB
Go
package sqlite3_test
|
|
|
|
import (
|
|
"fmt"
|
|
"iter"
|
|
"log"
|
|
|
|
"github.com/ncruces/go-sqlite3"
|
|
_ "github.com/ncruces/go-sqlite3/embed"
|
|
)
|
|
|
|
func ExampleConn_CreateAggregateFunction() {
|
|
db, err := sqlite3.Open(":memory:")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer db.Close()
|
|
|
|
err = db.Exec(`CREATE TABLE test (col)`)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
err = db.Exec(`INSERT INTO test VALUES (1), (2), (3)`)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
err = db.CreateAggregateFunction("seq_avg", 1, sqlite3.DETERMINISTIC|sqlite3.INNOCUOUS,
|
|
func(ctx *sqlite3.Context, seq iter.Seq[[]sqlite3.Value]) {
|
|
count := 0
|
|
total := 0.0
|
|
for arg := range seq {
|
|
total += arg[0].Float()
|
|
count++
|
|
}
|
|
ctx.ResultFloat(total / float64(count))
|
|
})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
stmt, _, err := db.Prepare(`SELECT seq_avg(col) FROM test`)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer stmt.Close()
|
|
|
|
for stmt.Step() {
|
|
fmt.Println(stmt.ColumnFloat(0))
|
|
}
|
|
if err := stmt.Err(); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
// Output:
|
|
// 2
|
|
}
|