package operations import ( "reflect" "time" ) type TableRow struct { row map[string]any } func NewTableRow() *TableRow { return &TableRow{row: make(map[string]any)} } func NewTableRowFromMap(m map[string]any) *TableRow { tableRow := NewTableRow() for key, value := range m { v := value valueType := reflect.TypeOf(value) if valueType.Kind() == reflect.Ptr { v = reflect.ValueOf(value).Elem().Interface() } switch typedValue := v.(type) { case string: tableRow.row[key] = typedValue case int: tableRow.row[key] = uint64(typedValue) case uint: tableRow.row[key] = uint64(typedValue) case int8: tableRow.row[key] = uint64(typedValue) case uint8: tableRow.row[key] = uint64(typedValue) case int16: tableRow.row[key] = uint64(typedValue) case uint16: tableRow.row[key] = uint64(typedValue) case int32: tableRow.row[key] = uint64(typedValue) case uint32: tableRow.row[key] = uint64(typedValue) case int64: tableRow.row[key] = uint64(typedValue) case uint64: tableRow.row[key] = typedValue case float32: tableRow.row[key] = float64(typedValue) case float64: tableRow.row[key] = typedValue case bool: tableRow.row[key] = typedValue case []byte: tableRow.row[key] = typedValue case time.Time: tableRow.row[key] = typedValue default: panic("未支持的数据类型") } } return tableRow } func (tableRow *TableRow) ToMap() map[string]any { return tableRow.row } func (tableRow *TableRow) Len() int { return len(tableRow.row) } func (tableRow *TableRow) Empty() bool { return len(tableRow.row) == 0 } func (tableRow *TableRow) AddColumnValueTime(columnName string, value time.Time) *TableRow { tableRow.row[columnName] = value return tableRow } func (tableRow *TableRow) AddColumnValueBool(columnName string, value bool) *TableRow { tableRow.row[columnName] = value return tableRow } func (tableRow *TableRow) AddColumnValueString(columnName string, value string) *TableRow { tableRow.row[columnName] = value return tableRow } func (tableRow *TableRow) AddColumnValueBytes(columnName string, value []byte) *TableRow { tableRow.row[columnName] = value return tableRow } func (tableRow *TableRow) AddColumnValueInt(columnName string, value int) *TableRow { tableRow.row[columnName] = uint64(value) return tableRow } func (tableRow *TableRow) AddColumnValueInt8(columnName string, value int8) *TableRow { tableRow.row[columnName] = uint64(value) return tableRow } func (tableRow *TableRow) AddColumnValueInt16(columnName string, value int16) *TableRow { tableRow.row[columnName] = uint64(value) return tableRow } func (tableRow *TableRow) AddColumnValueInt32(columnName string, value int32) *TableRow { tableRow.row[columnName] = uint64(value) return tableRow } func (tableRow *TableRow) AddColumnValueInt64(columnName string, value int64) *TableRow { tableRow.row[columnName] = uint64(value) return tableRow } func (tableRow *TableRow) AddColumnValueUint(columnName string, value uint) *TableRow { tableRow.row[columnName] = uint64(value) return tableRow } func (tableRow *TableRow) AddColumnValueUint8(columnName string, value uint8) *TableRow { tableRow.row[columnName] = uint64(value) return tableRow } func (tableRow *TableRow) AddColumnValueUint16(columnName string, value uint16) *TableRow { tableRow.row[columnName] = uint64(value) return tableRow } func (tableRow *TableRow) AddColumnValueUint32(columnName string, value uint32) *TableRow { tableRow.row[columnName] = uint64(value) return tableRow } func (tableRow *TableRow) AddColumnValueUint64(columnName string, value uint64) *TableRow { tableRow.row[columnName] = value return tableRow } func (tableRow *TableRow) AddColumnValueFloat32(columnName string, value float32) *TableRow { tableRow.row[columnName] = float64(value) return tableRow } func (tableRow *TableRow) AddColumnValueFloat64(columnName string, value float64) *TableRow { tableRow.row[columnName] = value return tableRow } func (tableRow *TableRow) AddColumnValueTimePtr(columnName string, value *time.Time) *TableRow { if value == nil { value = &time.Time{} } tableRow.row[columnName] = *value return tableRow } func (tableRow *TableRow) AddColumnValueBoolPtr(columnName string, value *bool) *TableRow { if value == nil { v := false value = &v } tableRow.row[columnName] = *value return tableRow } func (tableRow *TableRow) AddColumnValueStringPtr(columnName string, value *string) *TableRow { if value == nil { v := "" value = &v } tableRow.row[columnName] = *value return tableRow } func (tableRow *TableRow) AddColumnValueBytesPtr(columnName string, value *[]byte) *TableRow { if value == nil { v := make([]byte, 0) value = &v } tableRow.row[columnName] = *value return tableRow } func (tableRow *TableRow) AddColumnValueIntPtr(columnName string, value *int) *TableRow { if value == nil { v := 0 value = &v } tableRow.row[columnName] = uint64(*value) return tableRow } func (tableRow *TableRow) AddColumnValueInt8Ptr(columnName string, value *int8) *TableRow { if value == nil { v := int8(0) value = &v } tableRow.row[columnName] = uint64(*value) return tableRow } func (tableRow *TableRow) AddColumnValueInt16Ptr(columnName string, value *int16) *TableRow { if value == nil { v := int16(0) value = &v } tableRow.row[columnName] = uint64(*value) return tableRow } func (tableRow *TableRow) AddColumnValueInt32Ptr(columnName string, value *int32) *TableRow { if value == nil { v := int32(0) value = &v } tableRow.row[columnName] = uint64(*value) return tableRow } func (tableRow *TableRow) AddColumnValueInt64Ptr(columnName string, value *int64) *TableRow { if value == nil { v := int64(0) value = &v } tableRow.row[columnName] = uint64(*value) return tableRow } func (tableRow *TableRow) AddColumnValueUintPtr(columnName string, value *uint) *TableRow { if value == nil { v := uint(0) value = &v } tableRow.row[columnName] = uint64(*value) return tableRow } func (tableRow *TableRow) AddColumnValueUint8Ptr(columnName string, value *uint8) *TableRow { if value == nil { v := uint8(0) value = &v } tableRow.row[columnName] = uint64(*value) return tableRow } func (tableRow *TableRow) AddColumnValueUint16Ptr(columnName string, value *uint16) *TableRow { if value == nil { v := uint16(0) value = &v } tableRow.row[columnName] = uint64(*value) return tableRow } func (tableRow *TableRow) AddColumnValueUint32Ptr(columnName string, value *uint32) *TableRow { if value == nil { v := uint32(0) value = &v } tableRow.row[columnName] = uint64(*value) return tableRow } func (tableRow *TableRow) AddColumnValueUint64Ptr(columnName string, value *uint64) *TableRow { if value == nil { v := uint64(0) value = &v } tableRow.row[columnName] = *value return tableRow } func (tableRow *TableRow) AddColumnValueFloat32Ptr(columnName string, value *float32) *TableRow { if value == nil { v := float32(0) value = &v } tableRow.row[columnName] = float64(*value) return tableRow } func (tableRow *TableRow) AddColumnValueFloat64Ptr(columnName string, value *float64) *TableRow { if value == nil { v := float64(0) value = &v } tableRow.row[columnName] = *value return tableRow } func (tableRow *TableRow) ColumnValueTime(columnName string) time.Time { value, ok := tableRow.row[columnName].(time.Time) if !ok { return time.Time{} } return value } func (tableRow *TableRow) ColumnValueBool(columnName string) bool { value, ok := tableRow.row[columnName].(bool) if !ok { return false } return value } func (tableRow *TableRow) ColumnValueString(columnName string) string { value, ok := tableRow.row[columnName].(string) if !ok { return "" } return value } func (tableRow *TableRow) ColumnValueBytes(columnName string) []byte { value, ok := tableRow.row[columnName].([]byte) if !ok { return make([]byte, 0) } return value } func (tableRow *TableRow) ColumnValueInt(columnName string) int { value, ok := tableRow.row[columnName].(uint64) if !ok { return 0 } return int(value) } func (tableRow *TableRow) ColumnValueInt8(columnName string) int8 { value, ok := tableRow.row[columnName].(uint64) if !ok { return 0 } return int8(value) } func (tableRow *TableRow) ColumnValueInt16(columnName string) int16 { value, ok := tableRow.row[columnName].(uint64) if !ok { return 0 } return int16(value) } func (tableRow *TableRow) ColumnValueInt32(columnName string) int32 { value, ok := tableRow.row[columnName].(uint64) if !ok { return 0 } return int32(value) } func (tableRow *TableRow) ColumnValueInt64(columnName string) int64 { value, ok := tableRow.row[columnName].(uint64) if !ok { return 0 } return int64(value) } func (tableRow *TableRow) ColumnValueUint(columnName string) uint { value, ok := tableRow.row[columnName].(uint64) if !ok { return 0 } return uint(value) } func (tableRow *TableRow) ColumnValueUint8(columnName string) uint8 { value, ok := tableRow.row[columnName].(uint64) if !ok { return 0 } return uint8(value) } func (tableRow *TableRow) ColumnValueUint16(columnName string) uint16 { value, ok := tableRow.row[columnName].(uint64) if !ok { return 0 } return uint16(value) } func (tableRow *TableRow) ColumnValueUint32(columnName string) uint32 { value, ok := tableRow.row[columnName].(uint64) if !ok { return 0 } return uint32(value) } func (tableRow *TableRow) ColumnValueUint64(columnName string) uint64 { value, ok := tableRow.row[columnName].(uint64) if !ok { return 0 } return value } func (tableRow *TableRow) ColumnValueFloat32(columnName string) float32 { value, ok := tableRow.row[columnName].(float64) if !ok { return 0 } return float32(value) } func (tableRow *TableRow) ColumnValueFloat64(columnName string) float64 { value, ok := tableRow.row[columnName].(float64) if !ok { return 0 } return value } func (tableRow *TableRow) ColumnValueTimePtr(columnName string) *time.Time { value, ok := tableRow.row[columnName].(time.Time) if !ok { value = time.Time{} } return &value } func (tableRow *TableRow) ColumnValueBoolPtr(columnName string) *bool { value, ok := tableRow.row[columnName].(bool) if !ok { value = false } return &value } func (tableRow *TableRow) ColumnValueStringPtr(columnName string) *string { value, ok := tableRow.row[columnName].(string) if !ok { value = "" } return &value } func (tableRow *TableRow) ColumnValueBytesPtr(columnName string) *[]byte { value, ok := tableRow.row[columnName].([]byte) if !ok { value = make([]byte, 0) } return &value } func (tableRow *TableRow) ColumnValueIntPtr(columnName string) *int { v, ok := tableRow.row[columnName].(uint64) if !ok { v = 0 } var value int value = int(v) return &value } func (tableRow *TableRow) ColumnValueInt8Ptr(columnName string) *int8 { v, ok := tableRow.row[columnName].(uint64) if !ok { v = 0 } var value int8 value = int8(v) return &value } func (tableRow *TableRow) ColumnValueInt16Ptr(columnName string) *int16 { v, ok := tableRow.row[columnName].(uint64) if !ok { v = 0 } var value int16 value = int16(v) return &value } func (tableRow *TableRow) ColumnValueInt32Ptr(columnName string) *int32 { v, ok := tableRow.row[columnName].(uint64) if !ok { v = 0 } var value int32 value = int32(v) return &value } func (tableRow *TableRow) ColumnValueInt64Ptr(columnName string) *int64 { v, ok := tableRow.row[columnName].(uint64) if !ok { v = 0 } var value int64 value = int64(v) return &value } func (tableRow *TableRow) ColumnValueUintPtr(columnName string) *uint { v, ok := tableRow.row[columnName].(uint64) if !ok { v = 0 } var value uint value = uint(v) return &value } func (tableRow *TableRow) ColumnValueUint8Ptr(columnName string) *uint8 { v, ok := tableRow.row[columnName].(uint64) if !ok { v = 0 } var value uint8 value = uint8(v) return &value } func (tableRow *TableRow) ColumnValueUint16Ptr(columnName string) *uint16 { v, ok := tableRow.row[columnName].(uint64) if !ok { v = 0 } var value uint16 value = uint16(v) return &value } func (tableRow *TableRow) ColumnValueUint32Ptr(columnName string) *uint32 { v, ok := tableRow.row[columnName].(uint64) if !ok { v = 0 } var value uint32 value = uint32(v) return &value } func (tableRow *TableRow) ColumnValueUint64Ptr(columnName string) *uint64 { v, ok := tableRow.row[columnName].(uint64) if !ok { v = 0 } var value uint64 value = uint64(v) return &value } func (tableRow *TableRow) ColumnValueFloat32Ptr(columnName string) *float32 { v, ok := tableRow.row[columnName].(float64) if !ok { v = 0 } var value float32 value = float32(v) return &value } func (tableRow *TableRow) ColumnValueFloat64Ptr(columnName string) *float64 { v, ok := tableRow.row[columnName].(float64) if !ok { v = 0 } var value float64 value = float64(v) return &value }