(t *testing.T)
| 207 | } |
| 208 | |
| 209 | func TestDeepClone(t *testing.T) { |
| 210 | tp := types.NewFieldType(mysql.TypeLonglong) |
| 211 | expr := &expression.Column{RetType: tp} |
| 212 | byItems := []*util.ByItems{{Expr: expr}} |
| 213 | sort1 := &PhysicalSort{ByItems: byItems} |
| 214 | sort2 := &PhysicalSort{ByItems: byItems} |
| 215 | checkDeepClone := func(p1, p2 base.PhysicalPlan) error { |
| 216 | whiteList := []string{"*property.StatsInfo", "*sessionctx.Context", "*mock.Context"} |
| 217 | return checkDeepClonedCore(reflect.ValueOf(p1), reflect.ValueOf(p2), typeName(reflect.TypeOf(p1)), nil, whiteList, nil) |
| 218 | } |
| 219 | err := checkDeepClone(sort1, sort2) |
| 220 | require.Error(t, err) |
| 221 | require.Equal(t, "same slice pointers, path *PhysicalSort.ByItems", err.Error()) |
| 222 | |
| 223 | byItems2 := []*util.ByItems{{Expr: expr}} |
| 224 | sort2.ByItems = byItems2 |
| 225 | err = checkDeepClone(sort1, sort2) |
| 226 | require.Error(t, err) |
| 227 | require.Equal(t, "same pointer, path *PhysicalSort.ByItems[0].Expr", err.Error()) |
| 228 | |
| 229 | expr2 := &expression.Column{RetType: tp} |
| 230 | byItems2[0].Expr = expr2 |
| 231 | err = checkDeepClone(sort1, sort2) |
| 232 | require.Error(t, err) |
| 233 | require.Equal(t, "same pointer, path *PhysicalSort.ByItems[0].Expr.RetType", err.Error()) |
| 234 | |
| 235 | expr2.RetType = types.NewFieldType(mysql.TypeString) |
| 236 | err = checkDeepClone(sort1, sort2) |
| 237 | require.Error(t, err) |
| 238 | require.Equal(t, "different values, path *PhysicalSort.ByItems[0].Expr.RetType.tp", err.Error()) |
| 239 | |
| 240 | expr2.RetType = types.NewFieldType(mysql.TypeLonglong) |
| 241 | require.NoError(t, checkDeepClone(sort1, sort2)) |
| 242 | } |
| 243 | |
| 244 | func TestTablePlansAndTablePlanInPhysicalTableReaderClone(t *testing.T) { |
| 245 | ctx := mock.NewContext() |
nothing calls this directly
no test coverage detected