ducky/devices
2016-01-02
Parent:a700ede02f91
ducky/devices/vendor/code.secondbit.org/pqarrays.hg/array.go
Update trout to fix routing bug. Update to tip on trout to fix the routing bug that was causing us such issues. See the commit message of trout at 3df515f0cec5 for more details.
| paddy@16 | 1 package pqarrays |
| paddy@16 | 2 |
| paddy@16 | 3 import ( |
| paddy@16 | 4 "database/sql/driver" |
| paddy@16 | 5 "errors" |
| paddy@16 | 6 "strconv" |
| paddy@16 | 7 "strings" |
| paddy@16 | 8 ) |
| paddy@16 | 9 |
| paddy@16 | 10 var ( |
| paddy@16 | 11 ErrUnexpectedValueType = errors.New("expected value to be a string or []byte") |
| paddy@16 | 12 ) |
| paddy@16 | 13 |
| paddy@16 | 14 type StringArray []string |
| paddy@16 | 15 |
| paddy@16 | 16 func (s StringArray) Value() (driver.Value, error) { |
| paddy@16 | 17 output := make([]string, 0, len(s)) |
| paddy@16 | 18 for _, item := range s { |
| paddy@16 | 19 item = strconv.Quote(item) |
| paddy@16 | 20 item = strings.Replace(item, "'", "\\'", -1) |
| paddy@16 | 21 output = append(output, item) |
| paddy@16 | 22 } |
| paddy@16 | 23 return []byte(`{` + strings.Join(output, ",") + `}`), nil |
| paddy@16 | 24 } |
| paddy@16 | 25 |
| paddy@16 | 26 func (s *StringArray) Scan(value interface{}) error { |
| paddy@16 | 27 *s = (*s)[:0] |
| paddy@16 | 28 var input string |
| paddy@16 | 29 if _, ok := value.(string); ok { |
| paddy@16 | 30 input = value.(string) |
| paddy@16 | 31 } else if _, ok := value.([]byte); ok { |
| paddy@16 | 32 input = string(value.([]byte)) |
| paddy@16 | 33 } else { |
| paddy@16 | 34 return ErrUnexpectedValueType |
| paddy@16 | 35 } |
| paddy@16 | 36 l := lex(input) |
| paddy@16 | 37 parsed, err := parse(l) |
| paddy@16 | 38 if err != nil { |
| paddy@16 | 39 return err |
| paddy@16 | 40 } |
| paddy@16 | 41 for _, item := range parsed { |
| paddy@16 | 42 if item == nil { |
| paddy@16 | 43 continue |
| paddy@16 | 44 } |
| paddy@16 | 45 *s = append(*s, *item) |
| paddy@16 | 46 } |
| paddy@16 | 47 return nil |
| paddy@16 | 48 } |