func (h Hstore) Value() (driver.Value, error) { hstore := hstore.Hstore{Map: map[string]sql.NullString{}} if len(h) == 0 { return nil, nil } for key, value := range h { hstore.Map[key] = sql.NullString{String: *value, Valid: true} } return hstore.Value() }
func saveBallotToDB(ballot *Ballot) error { // Frist transform the tagset into an hstore var tags hstore.Hstore tags.Map = make(map[string]sql.NullString, len(ballot.TagSet)) for key, value := range ballot.TagSet.Map() { tags.Map[key] = sql.NullString{value, true} } _, err := db.Exec("INSERT INTO ballots_"+ballot.ElectionID+" (ballot_id, ballot, tags) VALUES ($1, $2, $3)", ballot.BallotID, ballot.String(), tags) return err }
func (h Hstore) Value() (driver.Value, error) { hstore := hstore.Hstore{Map: map[string]sql.NullString{}} if len(h) == 0 { return nil, nil } for key, value := range h { var s sql.NullString if value != nil { s.String = *value s.Valid = true } hstore.Map[key] = s } return hstore.Value() }
// Value implements the driver.Value interface. func (cm CommandMap) Value() (driver.Value, error) { m := make(map[string]sql.NullString) for k, v := range cm { m[string(k)] = sql.NullString{ Valid: true, String: string(v), } } h := hstore.Hstore{ Map: m, } return h.Value() }
// Scan implements the sql.Scanner interface. func (cm *CommandMap) Scan(src interface{}) error { h := hstore.Hstore{} if err := h.Scan(src); err != nil { return err } m := make(CommandMap) for k, v := range h.Map { m[ProcessType(k)] = Command(v.String) } *cm = m return nil }
// Value implements the driver.Value interface. func (v Vars) Value() (driver.Value, error) { m := make(map[string]sql.NullString) for k, v := range v { m[string(k)] = sql.NullString{ Valid: true, String: *v, } } h := hstore.Hstore{ Map: m, } return h.Value() }
// Scan implements the sql.Scanner interface. func (v *Vars) Scan(src interface{}) error { h := hstore.Hstore{} if err := h.Scan(src); err != nil { return err } vars := make(Vars) for k, v := range h.Map { // Go reuses the same address space for v, so &v.String would always // return the same address tmp := v.String vars[Variable(k)] = &tmp } *v = vars return nil }
func (h *Hstore) Scan(value interface{}) error { hstore := hstore.Hstore{} if err := hstore.Scan(value); err != nil { return err } if len(hstore.Map) == 0 { return nil } *h = Hstore{} for k := range hstore.Map { if hstore.Map[k].Valid { s := hstore.Map[k].String (*h)[k] = &s } else { (*h)[k] = nil } } return nil }
func saveElectionToDB(election *Election) error { // Frist transform the tagset into an hstore var tags hstore.Hstore tags.Map = make(map[string]sql.NullString, len(election.TagSet)) for key, value := range election.TagSet.Map() { tags.Map[key] = sql.NullString{String: value, Valid: true} } _, err := db.Exec("INSERT INTO elections (election_id, election, startdate, enddate, tags) VALUES ($1, $2, $3, $4, $5)", election.ElectionID, election.String(), election.Start, election.End, tags) if err != nil { return err } // Create the sigreqa table for storing signature requests _, err = db.Exec(strings.Replace(sigreqsQuery, "<election-id>", election.ElectionID, -1)) if err != nil { return err } //@@TODO - tell ballotbox database about election return nil }