package db import ( "fmt" "log" "git.asperti.com/paspo/mail-autoconfig/internal/config" "github.com/jmoiron/sqlx" _ "github.com/mattn/go-sqlite3" ) var ( dbStructure []string ) var DB *sqlx.DB func init() { dbStructure = []string{ `CREATE TABLE IF NOT EXISTS domains ( domain VARCHAR PRIMARY KEY, display_name VARCHAR, display_shortname VARCHAR, imap_enabled BOOL, imap_server VARCHAR, imap_port INT, imap_ssl BOOL, imap_spa BOOL, pop3_enabled BOOL, pop3_server VARCHAR, pop3_port INT, pop3_ssl BOOL, pop3_spa BOOL, smtp_enabled BOOL, smtp_server VARCHAR, smtp_port INT, smtp_ssl BOOL, smtp_tls BOOL, smtp_spa BOOL, pop_before_smtp BOOL, domain_required BOOL);`, } } func InitDB() error { var err error DB, err = sqlx.Open("sqlite3", config.AppConfig.DBPath) if err != nil { return err } for _, stmt := range dbStructure { _, err = DB.Exec(stmt) if err != nil { return err } } return nil } func DoiooooDELME() { var err error sqlStmt := ` create table foo (id integer not null primary key, name text); delete from foo; ` _, err = DB.Exec(sqlStmt) if err != nil { log.Printf("%q: %s\n", err, sqlStmt) return } tx, err := DB.Begin() if err != nil { log.Fatal(err) } stmt, err := tx.Prepare("insert into foo(id, name) values(?, ?)") if err != nil { log.Fatal(err) } defer stmt.Close() for i := 0; i < 100; i++ { _, err = stmt.Exec(i, fmt.Sprintf("こんにちは世界%03d", i)) if err != nil { log.Fatal(err) } } err = tx.Commit() if err != nil { log.Fatal(err) } rows, err := DB.Query("select id, name from foo") if err != nil { log.Fatal(err) } defer rows.Close() for rows.Next() { var id int var name string err = rows.Scan(&id, &name) if err != nil { log.Fatal(err) } fmt.Println(id, name) } err = rows.Err() if err != nil { log.Fatal(err) } stmt, err = DB.Prepare("select name from foo where id = ?") if err != nil { log.Fatal(err) } defer stmt.Close() var name string err = stmt.QueryRow("3").Scan(&name) if err != nil { log.Fatal(err) } fmt.Println(name) _, err = DB.Exec("delete from foo") if err != nil { log.Fatal(err) } _, err = DB.Exec("insert into foo(id, name) values(1, 'foo'), (2, 'bar'), (3, 'baz')") if err != nil { log.Fatal(err) } rows, err = DB.Query("select id, name from foo") if err != nil { log.Fatal(err) } defer rows.Close() for rows.Next() { var id int var name string err = rows.Scan(&id, &name) if err != nil { log.Fatal(err) } fmt.Println(id, name) } err = rows.Err() if err != nil { log.Fatal(err) } }