| 221 | } |
| 222 | |
| 223 | func (t *Tablet) GetValueAt(columnIndex, rowIndex int) (interface{}, error) { |
| 224 | if columnIndex < 0 || columnIndex > len(t.measurementSchemas) { |
| 225 | return nil, fmt.Errorf("illegal argument columnIndex %d", columnIndex) |
| 226 | } |
| 227 | |
| 228 | if rowIndex < 0 || rowIndex > t.maxRowNumber { |
| 229 | return nil, fmt.Errorf("illegal argument rowIndex %d", rowIndex) |
| 230 | } |
| 231 | |
| 232 | schema := t.measurementSchemas[columnIndex] |
| 233 | |
| 234 | if t.bitMaps != nil && t.bitMaps[columnIndex] != nil && t.bitMaps[columnIndex].IsMarked(rowIndex) { |
| 235 | return nil, nil |
| 236 | } |
| 237 | switch schema.DataType { |
| 238 | case BOOLEAN: |
| 239 | return t.values[columnIndex].([]bool)[rowIndex], nil |
| 240 | case INT32: |
| 241 | return t.values[columnIndex].([]int32)[rowIndex], nil |
| 242 | case INT64, TIMESTAMP: |
| 243 | return t.values[columnIndex].([]int64)[rowIndex], nil |
| 244 | case FLOAT: |
| 245 | return t.values[columnIndex].([]float32)[rowIndex], nil |
| 246 | case DOUBLE: |
| 247 | return t.values[columnIndex].([]float64)[rowIndex], nil |
| 248 | case TEXT, STRING: |
| 249 | return string(t.values[columnIndex].([][]byte)[rowIndex]), nil |
| 250 | case BLOB: |
| 251 | return t.values[columnIndex].([][]byte)[rowIndex], nil |
| 252 | case DATE: |
| 253 | return Int32ToDate(t.values[columnIndex].([]int32)[rowIndex]) |
| 254 | default: |
| 255 | return nil, fmt.Errorf("illegal datatype %v", schema.DataType) |
| 256 | } |
| 257 | } |
| 258 | |
| 259 | func (t *Tablet) GetTimestampBytes() []byte { |
| 260 | buff := &bytes.Buffer{} |