github.com/ladydascalie/elvish@v0.0.0-20170703214355-2964dd3ece7f/store/shared_var.go (about) 1 package store 2 3 import ( 4 "database/sql" 5 "errors" 6 ) 7 8 // ErrNoVar is returned by (*Store).GetSharedVar when there is no such variable. 9 var ErrNoVar = errors.New("no such variable") 10 11 func init() { 12 initDB["initialize shared variable table"] = func(db *sql.DB) error { 13 _, err := db.Exec(`CREATE TABLE IF NOT EXISTS shared_var (name text UNIQUE PRIMARY KEY, value text)`) 14 return err 15 } 16 } 17 18 // GetSharedVar gets the value of a shared variable. 19 func (s *Store) GetSharedVar(n string) (string, error) { 20 row := s.db.QueryRow(`SELECT value FROM shared_var WHERE name = ?`, n) 21 var value string 22 err := row.Scan(&value) 23 if err == sql.ErrNoRows { 24 err = ErrNoVar 25 } 26 return value, err 27 } 28 29 // SetSharedVar sets the value of a shared variable. 30 func (s *Store) SetSharedVar(n, v string) error { 31 _, err := s.db.Exec(`INSERT OR REPLACE INTO shared_var (name, value) VALUES (?, ?)`, n, v) 32 return err 33 } 34 35 // DelSharedVar deletes a shared variable. 36 func (s *Store) DelSharedVar(n string) error { 37 _, err := s.db.Exec(`DELETE FROM shared_var WHERE name = ?`, n) 38 return err 39 }