(t *testing.T)
| 168 | } |
| 169 | |
| 170 | func TestDecodeColumnValue(t *testing.T) { |
| 171 | sc := stmtctx.NewStmtCtxWithTimeZone(time.Local) |
| 172 | |
| 173 | // test timestamp |
| 174 | d := types.NewTimeDatum(types.NewTime(types.FromGoTime(time.Now()), mysql.TypeTimestamp, types.DefaultFsp)) |
| 175 | bs, err := EncodeOldRow(sc.TimeZone(), []types.Datum{d}, []int64{1}, nil, nil) |
| 176 | require.NoError(t, err) |
| 177 | require.NotNil(t, bs) |
| 178 | _, bs, err = codec.CutOne(bs) // ignore colID |
| 179 | require.NoError(t, err) |
| 180 | tp := types.NewFieldType(mysql.TypeTimestamp) |
| 181 | d1, err := DecodeColumnValue(bs, tp, sc.TimeZone()) |
| 182 | require.NoError(t, err) |
| 183 | cmp, err := d1.Compare(sc.TypeCtx(), &d, collate.GetBinaryCollator()) |
| 184 | require.NoError(t, err) |
| 185 | require.Equal(t, 0, cmp) |
| 186 | |
| 187 | // test set |
| 188 | elems := []string{"a", "b", "c", "d", "e"} |
| 189 | e, _ := types.ParseSetValue(elems, uint64(1)) |
| 190 | d = types.NewMysqlSetDatum(e, "") |
| 191 | bs, err = EncodeOldRow(sc.TimeZone(), []types.Datum{d}, []int64{1}, nil, nil) |
| 192 | require.NoError(t, err) |
| 193 | require.NotNil(t, bs) |
| 194 | _, bs, err = codec.CutOne(bs) // ignore colID |
| 195 | require.NoError(t, err) |
| 196 | tp = types.NewFieldType(mysql.TypeSet) |
| 197 | tp.SetElems(elems) |
| 198 | d1, err = DecodeColumnValue(bs, tp, sc.TimeZone()) |
| 199 | require.NoError(t, err) |
| 200 | cmp, err = d1.Compare(sc.TypeCtx(), &d, collate.GetCollator(tp.GetCollate())) |
| 201 | require.NoError(t, err) |
| 202 | require.Equal(t, 0, cmp) |
| 203 | |
| 204 | // test bit |
| 205 | d = types.NewMysqlBitDatum(types.NewBinaryLiteralFromUint(3223600, 3)) |
| 206 | bs, err = EncodeOldRow(sc.TimeZone(), []types.Datum{d}, []int64{1}, nil, nil) |
| 207 | require.NoError(t, err) |
| 208 | require.NotNil(t, bs) |
| 209 | _, bs, err = codec.CutOne(bs) // ignore colID |
| 210 | require.NoError(t, err) |
| 211 | tp = types.NewFieldType(mysql.TypeBit) |
| 212 | tp.SetFlen(24) |
| 213 | d1, err = DecodeColumnValue(bs, tp, sc.TimeZone()) |
| 214 | require.NoError(t, err) |
| 215 | cmp, err = d1.Compare(sc.TypeCtx(), &d, collate.GetBinaryCollator()) |
| 216 | require.NoError(t, err) |
| 217 | require.Equal(t, 0, cmp) |
| 218 | |
| 219 | // test empty enum |
| 220 | d = types.NewMysqlEnumDatum(types.Enum{}) |
| 221 | bs, err = EncodeOldRow(sc.TimeZone(), []types.Datum{d}, []int64{1}, nil, nil) |
| 222 | require.NoError(t, err) |
| 223 | require.NotNil(t, bs) |
| 224 | _, bs, err = codec.CutOne(bs) // ignore colID |
| 225 | require.NoError(t, err) |
| 226 | tp = types.NewFieldType(mysql.TypeEnum) |
| 227 | d1, err = DecodeColumnValue(bs, tp, sc.TimeZone()) |
nothing calls this directly
no test coverage detected