package driver
import "modernc.org/ql/driver"
Package driver registers QL sql/drivers named "ql", "ql2" and a memory driver named "ql-mem".
See also [0], [1] and [3].
Usage
A skeleton program using ql/driver.
package main import ( "database/sql" _ "modernc.org/ql/driver" ) func main() { ... // Disk file DB db, err := sql.Open("ql", "ql.db") // [2] // alternatively db, err := sql.Open("ql", "file://ql.db") // and/or // Disk file DB using V2 format db, err := sql.Open("ql2", "ql.db") // alternatively db, err := sql.Open("ql2", "file://ql.db") // and/or // RAM DB mdb, err := sql.Open("ql-mem", "mem.db") // alternatively mdb, err := sql.Open("ql", "memory://mem.db") if err != nil { log.Fatal(err) } // Use db/mdb here ... }
This package exports nothing.
Links
Referenced from above:
[0]: http://godoc.org/modernc.org/ql [1]: http://golang.org/pkg/database/sql/ [2]: http://golang.org/pkg/database/sql/#Open [3]: http://golang.org/pkg/database/sql/driver
Example (TestFile)¶
Code:
{
dir, err := ioutil.TempDir("", "ql-driver-test")
if err != nil {
return
}
defer func() {
os.RemoveAll(dir)
}()
db, err := sql.Open("ql", filepath.Join(dir, "ql.db"))
if err != nil {
return
}
defer func() {
if err := db.Close(); err != nil {
return
}
fmt.Println("OK")
}()
tx, err := db.Begin()
if err != nil {
return
}
if _, err := tx.Exec("CREATE TABLE t (Qty int, Name string);"); err != nil {
return
}
result, err := tx.Exec(`
INSERT INTO t VALUES
($1, $2),
($3, $4),
;
`,
42, "foo",
314, "bar",
)
if err != nil {
return
}
if err = tx.Commit(); err != nil {
return
}
id, err := result.LastInsertId()
if err != nil {
return
}
aff, err := result.RowsAffected()
if err != nil {
return
}
fmt.Printf("LastInsertId %d, RowsAffected %d\n", id, aff)
rows, err := db.Query("SELECT * FROM t;")
if err != nil {
return
}
cols, err := rows.Columns()
if err != nil {
return
}
fmt.Printf("Columns: %v\n", cols)
var data struct {
Qty int
Name string
}
for rows.Next() {
if err = rows.Scan(&data.Qty, &data.Name); err != nil {
rows.Close()
break
}
fmt.Printf("%+v\n", data)
}
if err = rows.Err(); err != nil {
return
}
// Output:
// LastInsertId 2, RowsAffected 2
// Columns: [Qty Name]
// {Qty:314 Name:bar}
// {Qty:42 Name:foo}
// OK
}
Output:
LastInsertId 2, RowsAffected 2 Columns: [Qty Name] {Qty:314 Name:bar} {Qty:42 Name:foo} OK
Example (TestFile2)¶
Code:
{
dir, err := ioutil.TempDir("", "ql-driver-test")
if err != nil {
return
}
defer func() {
os.RemoveAll(dir)
}()
db, err := sql.Open("ql2", filepath.Join(dir, "ql2.db"))
if err != nil {
return
}
defer func() {
if err := db.Close(); err != nil {
return
}
fmt.Println("OK")
}()
tx, err := db.Begin()
if err != nil {
return
}
if _, err := tx.Exec("CREATE TABLE t (Qty int, Name string);"); err != nil {
return
}
result, err := tx.Exec(`
INSERT INTO t VALUES
($1, $2),
($3, $4),
;
`,
42, "foo",
314, "bar",
)
if err != nil {
return
}
if err = tx.Commit(); err != nil {
return
}
id, err := result.LastInsertId()
if err != nil {
return
}
aff, err := result.RowsAffected()
if err != nil {
return
}
fmt.Printf("LastInsertId %d, RowsAffected %d\n", id, aff)
rows, err := db.Query("SELECT * FROM t;")
if err != nil {
return
}
cols, err := rows.Columns()
if err != nil {
return
}
fmt.Printf("Columns: %v\n", cols)
var data struct {
Qty int
Name string
}
for rows.Next() {
if err = rows.Scan(&data.Qty, &data.Name); err != nil {
rows.Close()
break
}
fmt.Printf("%+v\n", data)
}
if err = rows.Err(); err != nil {
return
}
// Output:
// LastInsertId 2, RowsAffected 2
// Columns: [Qty Name]
// {Qty:314 Name:bar}
// {Qty:42 Name:foo}
// OK
}
Output:
LastInsertId 2, RowsAffected 2 Columns: [Qty Name] {Qty:314 Name:bar} {Qty:42 Name:foo} OK
Example (TestMem)¶
Code:
{
db, err := sql.Open("ql-mem", "mem.db")
if err != nil {
return
}
defer func() {
if err := db.Close(); err != nil {
return
}
fmt.Println("OK")
}()
tx, err := db.Begin()
if err != nil {
return
}
if _, err := tx.Exec("CREATE TABLE t (Qty int, Name string);"); err != nil {
return
}
result, err := tx.Exec(`
INSERT INTO t VALUES
($1, $2),
($3, $4),
;
`,
1042, "foo-mem",
1314, "bar-mem",
)
if err != nil {
return
}
if err = tx.Commit(); err != nil {
return
}
id, err := result.LastInsertId()
if err != nil {
return
}
aff, err := result.RowsAffected()
if err != nil {
return
}
fmt.Printf("LastInsertId %d, RowsAffected %d\n", id, aff)
rows, err := db.Query("SELECT * FROM t;")
if err != nil {
return
}
cols, err := rows.Columns()
if err != nil {
return
}
fmt.Printf("Columns: %v\n", cols)
var data struct {
Qty int
Name string
}
for rows.Next() {
if err = rows.Scan(&data.Qty, &data.Name); err != nil {
rows.Close()
break
}
fmt.Printf("%+v\n", data)
}
if err = rows.Err(); err != nil {
return
}
// Output:
// LastInsertId 2, RowsAffected 2
// Columns: [Qty Name]
// {Qty:1314 Name:bar-mem}
// {Qty:1042 Name:foo-mem}
// OK
}
Output:
LastInsertId 2, RowsAffected 2 Columns: [Qty Name] {Qty:1314 Name:bar-mem} {Qty:1042 Name:foo-mem} OK
Index ¶
Examples ¶
Source Files ¶
driver.go
- Version
- v1.4.12 (latest)
- Published
- Apr 18, 2025
- Platform
- js/wasm
- Imports
- 1 packages
- Last checked
- now –
Tools for package owners.