MCPcopy Index your code
hub / github.com/pingcap/tidb / TestDecodeColumnValue

Function TestDecodeColumnValue

pkg/tablecodec/tablecodec_test.go:170–232  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

168}
169
170func 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())

Callers

nothing calls this directly

Calls 15

SetElemsMethod · 0.95
GetCollateMethod · 0.95
SetFlenMethod · 0.95
NewStmtCtxWithTimeZoneFunction · 0.92
NewTimeDatumFunction · 0.92
NewTimeFunction · 0.92
FromGoTimeFunction · 0.92
CutOneFunction · 0.92
NewFieldTypeFunction · 0.92
GetBinaryCollatorFunction · 0.92
ParseSetValueFunction · 0.92
NewMysqlSetDatumFunction · 0.92

Tested by

no test coverage detected