1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- package gonx
- import (
- "fmt"
- "strconv"
- "strings"
- )
- type Fields map[string]string
- type Entry struct {
- fields Fields
- }
- func NewEmptyEntry() *Entry {
- return &Entry{make(Fields)}
- }
- func NewEntry(fields Fields) *Entry {
- return &Entry{fields}
- }
- func (entry *Entry) Field(name string) (value string, err error) {
- value, ok := entry.fields[name]
- if !ok {
- err = fmt.Errorf("field '%v' does not found in record %+v", name, *entry)
- }
- return
- }
- func (entry *Entry) FloatField(name string) (value float64, err error) {
- tmp, err := entry.Field(name)
- if err == nil {
- value, err = strconv.ParseFloat(tmp, 64)
- }
- return
- }
- func (entry *Entry) SetField(name string, value string) {
- entry.fields[name] = value
- }
- func (entry *Entry) SetFloatField(name string, value float64) {
- entry.SetField(name, strconv.FormatFloat(value, 'f', 2, 64))
- }
- func (entry *Entry) SetUintField(name string, value uint64) {
- entry.SetField(name, strconv.FormatUint(uint64(value), 10))
- }
- func (master *Entry) Merge(entry *Entry) {
- for name, value := range entry.fields {
- master.SetField(name, value)
- }
- }
- func (entry *Entry) FieldsHash(fields []string) string {
- var key []string
- for _, name := range fields {
- value, err := entry.Field(name)
- if err != nil {
- value = "NULL"
- }
- key = append(key, fmt.Sprintf("'%v'=%v", name, value))
- }
- return strings.Join(key, ";")
- }
- func (entry *Entry) Partial(fields []string) *Entry {
- partial := NewEmptyEntry()
- for _, name := range fields {
- value, _ := entry.Field(name)
- partial.SetField(name, value)
- }
- return partial
- }
|