1 Star 0 Fork 0

miyang / duckdb-my

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
simple.go 3.15 KB
一键复制 编辑 原始数据 按行查看 历史
xmy 提交于 2023-04-23 16:14 . update
// Run with:
// CGO_LDFLAGS="-L<path to libduckdb_static.a>" CGO_CFLAGS="-I<path to duckdb.h>" DYLD_LIBRARY_PATH="<path to libduckdb.dylib>" go run examples/test.go
package main
import (
"database/sql"
"log"
"time"
_ "github.com/marcboeker/go-duckdb"
)
var (
db *sql.DB
)
type user struct {
name string
age int
height float32
awesome bool
bday time.Time
}
func main() {
// Use second argument to store DB on disk
// db, err := sql.Open("duckdb", "foobar.db")
var err error
db, err = sql.Open("duckdb", "?access_mode=READ_WRITE")
if err != nil {
log.Fatal(err)
}
defer db.Close()
check(db.Ping())
setting := db.QueryRow("SELECT current_setting('access_mode')")
var am string
check(setting.Scan(&am))
log.Printf("DB opened with access mode %s", am)
check(db.Exec("CREATE TABLE users(name VARCHAR, age INTEGER, height FLOAT, awesome BOOLEAN, bday DATE)"))
check(db.Exec("INSERT INTO users VALUES('marc', 99, 1.91, true, '1970-01-01')"))
check(db.Exec("INSERT INTO users VALUES('macgyver', 70, 1.85, true, '1951-01-23')"))
rows, err := db.Query(`
SELECT name, age, height, awesome, bday
FROM users
WHERE (name = ? OR name = ?) AND age > ? AND awesome = ?`,
"macgyver", "marc", 30, true,
)
check(err)
defer rows.Close()
for rows.Next() {
u := new(user)
err := rows.Scan(&u.name, &u.age, &u.height, &u.awesome, &u.bday)
if err != nil {
log.Fatal(err)
}
log.Printf(
"%s is %d years old, %.2f tall, bday on %s and has awesomeness: %t\n",
u.name, u.age, u.height, u.bday.Format(time.RFC3339), u.awesome,
)
}
check(rows.Err())
res, err := db.Exec("DELETE FROM users")
check(err)
ra, _ := res.RowsAffected()
log.Printf("Deleted %d rows\n", ra)
runTransaction()
testPreparedStmt()
}
func check(args ...interface{}) {
err := args[len(args)-1]
if err != nil {
panic(err)
}
}
func runTransaction() {
log.Println("Starting transaction...")
tx, err := db.Begin()
check(err)
check(tx.Exec("INSERT INTO users VALUES('gru', 25, 1.35, false, '1996-04-03')"))
row := tx.QueryRow("SELECT COUNT(*) FROM users WHERE name = ?", "gru")
var count int64
check(row.Scan(&count))
if count > 0 {
log.Println("User Gru was inserted")
}
log.Println("Rolling back transaction...")
check(tx.Rollback())
row = db.QueryRow("SELECT COUNT(*) FROM users WHERE name = ?", "gru")
check(row.Scan(&count))
if count > 0 {
log.Println("Found user Gru")
} else {
log.Println("Couldn't find user Gru")
}
}
func testPreparedStmt() {
stmt, err := db.Prepare("INSERT INTO users VALUES(?, ?, ?, ?, ?)")
check(err)
defer stmt.Close()
check(stmt.Exec("Kevin", 11, 0.55, true, "2013-07-06"))
check(stmt.Exec("Bob", 12, 0.73, true, "2012-11-04"))
check(stmt.Exec("Stuart", 13, 0.66, true, "2014-02-12"))
stmt, err = db.Prepare("SELECT * FROM users WHERE age > ?")
check(err)
rows, err := stmt.Query(1)
check(err)
defer rows.Close()
for rows.Next() {
u := new(user)
err := rows.Scan(&u.name, &u.age, &u.height, &u.awesome, &u.bday)
if err != nil {
log.Fatal(err)
}
log.Printf(
"%s is %d years old, %.2f tall, bday on %s and has awesomeness: %t\n",
u.name, u.age, u.height, u.bday.Format(time.RFC3339), u.awesome,
)
}
}
1
https://gitee.com/xmiyang/duckdb-my.git
git@gitee.com:xmiyang/duckdb-my.git
xmiyang
duckdb-my
duckdb-my
367fb83bcd35

搜索帮助