github.com/fragmenta/query@v1.5.3/adapters/database_sqlite.go (about) 1 package adapters 2 3 // FIXME: Sqlite drivers are broken compiling with cgo at present 4 // therefore we don't use this adapter 5 6 import ( 7 "database/sql" 8 "fmt" 9 // Unfortunately can't cross compile with sqlite support enabled - 10 // see https://github.com/mattn/go-sqlite3/issues/106 11 // For now for we just turn off sqlite as we don't use it in production... 12 // pure go version of sqlite, or ditch sqlite and find some other pure go simple db 13 // would be nice not to require a db at all for very simple usage 14 //_ "github.com/mattn/go-sqlite3" 15 ) 16 17 // SqliteAdapter conforms to the query.Database interface 18 type SqliteAdapter struct { 19 *Adapter 20 options map[string]string 21 sqlDB *sql.DB 22 debug bool 23 } 24 25 // Open this database 26 func (db *SqliteAdapter) Open(opts map[string]string) error { 27 28 db.debug = false 29 db.options = map[string]string{ 30 "adapter": "sqlite3", 31 "db": "./tests/query_test.sqlite", 32 } 33 34 if opts["debug"] == "true" { 35 db.debug = true 36 } 37 38 for k, v := range opts { 39 db.options[k] = v 40 } 41 42 var err error 43 db.sqlDB, err = sql.Open(db.options["adapter"], db.options["db"]) 44 if err != nil { 45 return err 46 } 47 48 if db.sqlDB != nil && db.debug { 49 fmt.Printf("Database %s opened using %s\n", db.options["db"], db.options["adapter"]) 50 } 51 52 // Call ping on the db to check it does actually exist! 53 err = db.sqlDB.Ping() 54 if err != nil { 55 return err 56 } 57 58 return err 59 60 } 61 62 // Close the database 63 func (db *SqliteAdapter) Close() error { 64 if db.sqlDB != nil { 65 return db.sqlDB.Close() 66 } 67 return nil 68 } 69 70 // SQLDB returns the internal db.sqlDB pointer 71 func (db *SqliteAdapter) SQLDB() *sql.DB { 72 return db.sqlDB 73 } 74 75 // Query execute Query SQL - NB caller must call use defer rows.Close() with rows returned 76 func (db *SqliteAdapter) Query(query string, args ...interface{}) (*sql.Rows, error) { 77 return db.performQuery(db.sqlDB, db.debug, query, args...) 78 } 79 80 // Exec - use this for non-select statements 81 func (db *SqliteAdapter) Exec(query string, args ...interface{}) (sql.Result, error) { 82 return db.performExec(db.sqlDB, db.debug, query, args...) 83 } 84 85 // Insert a record with params and return the id - psql behaves differently 86 func (db *SqliteAdapter) Insert(query string, args ...interface{}) (id int64, err error) { 87 88 // Execute the sql using db 89 result, err := db.Exec(query, args...) 90 if err != nil { 91 return 0, err 92 } 93 94 id, err = result.LastInsertId() 95 if err != nil { 96 return 0, err 97 } 98 99 return id, nil 100 101 }