@@ -273,14 +273,19 @@ func onCreateView(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error)
273
273
schemaID := job .SchemaID
274
274
tbInfo := & model.TableInfo {}
275
275
var orReplace bool
276
- var oldTbInfoID int64
277
- if err := job .DecodeArgs (tbInfo , & orReplace , & oldTbInfoID ); err != nil {
276
+ var _placeholder int64 // oldTblInfoID
277
+ if err := job .DecodeArgs (tbInfo , & orReplace , & _placeholder ); err != nil {
278
278
// Invalid arguments, cancel this job.
279
279
job .State = model .JobStateCancelled
280
280
return ver , errors .Trace (err )
281
281
}
282
282
tbInfo .State = model .StateNone
283
- err := checkTableNotExists (d , t , schemaID , tbInfo .Name .L )
283
+
284
+ oldTableID , err := findTableIDByName (d , t , schemaID , tbInfo .Name .L )
285
+ if infoschema .ErrTableNotExists .Equal (err ) {
286
+ err = nil
287
+ }
288
+ failpoint .InjectCall ("onDDLCreateView" , job )
284
289
if err != nil {
285
290
if infoschema .ErrDatabaseNotExists .Equal (err ) {
286
291
job .State = model .JobStateCancelled
@@ -303,13 +308,18 @@ func onCreateView(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error)
303
308
// none -> public
304
309
tbInfo .State = model .StatePublic
305
310
tbInfo .UpdateTS = t .StartTS
311
+ << << << < HEAD:ddl / table .go
306
312
if oldTbInfoID > 0 && orReplace {
307
313
err = t .DropTableOrView (schemaID , oldTbInfoID )
314
+ == == == =
315
+ if oldTableID > 0 && orReplace {
316
+ err = t .DropTableOrView (schemaID , job .SchemaName , oldTableID , tbInfo .Name .L )
317
+ >> >> >> > 44 c9096efbc (ddl : get latest old table ID before replace view (#53720 )):pkg / ddl / table .go
308
318
if err != nil {
309
319
job .State = model .JobStateCancelled
310
320
return ver , errors .Trace (err )
311
321
}
312
- err = t .GetAutoIDAccessors (schemaID , oldTbInfoID ).Del ()
322
+ err = t .GetAutoIDAccessors (schemaID , oldTableID ).Del ()
313
323
if err != nil {
314
324
job .State = model .JobStateCancelled
315
325
return ver , errors .Trace (err )
@@ -1454,13 +1464,51 @@ func checkTableNotExists(d *ddlCtx, t *meta.Meta, schemaID int64, tableName stri
1454
1464
return err
1455
1465
}
1456
1466
is := d .infoCache .GetLatest ()
1457
- if is .SchemaMetaVersion () == currVer {
1467
+ if is != nil && is .SchemaMetaVersion () == currVer {
1458
1468
return checkTableNotExistsFromInfoSchema (is , schemaID , tableName )
1459
1469
}
1460
1470
1461
1471
return checkTableNotExistsFromStore (t , schemaID , tableName )
1462
1472
}
1463
1473
1474
+ << << << < HEAD:ddl / table .go
1475
+ == == == =
1476
+ func checkTableNotExistsByName (d * ddlCtx , t * meta.Meta , schemaID int64 , schemaName , tableName string ) error {
1477
+ // Try to use memory schema info to check first.
1478
+ currVer , err := t .GetSchemaVersion ()
1479
+ if err != nil {
1480
+ return err
1481
+ }
1482
+ is := d .infoCache .GetLatest ()
1483
+ if is != nil && is .SchemaMetaVersion () == currVer {
1484
+ return checkTableNotExistsFromInfoSchema (is , schemaID , tableName )
1485
+ }
1486
+ return t .CheckTableNameNotExists (t .TableNameKey (schemaName , tableName ))
1487
+ }
1488
+
1489
+ func checkConstraintNamesNotExists (t * meta.Meta , schemaID int64 , constraints []* model.ConstraintInfo ) error {
1490
+ if len (constraints ) == 0 {
1491
+ return nil
1492
+ }
1493
+ tbInfos , err := t .ListTables (schemaID )
1494
+ if err != nil {
1495
+ return err
1496
+ }
1497
+
1498
+ for _ , tb := range tbInfos {
1499
+ for _ , constraint := range constraints {
1500
+ if constraint .State != model .StateWriteOnly {
1501
+ if constraintInfo := tb .FindConstraintInfoByName (constraint .Name .L ); constraintInfo != nil {
1502
+ return infoschema .ErrCheckConstraintDupName .GenWithStackByArgs (constraint .Name .L )
1503
+ }
1504
+ }
1505
+ }
1506
+ }
1507
+
1508
+ return nil
1509
+ }
1510
+
1511
+ >> >> >> > 44 c9096efbc (ddl : get latest old table ID before replace view (#53720 )):pkg / ddl / table .go
1464
1512
func checkTableIDNotExists (t * meta.Meta , schemaID , tableID int64 ) error {
1465
1513
tbl , err := t .GetTable (schemaID , tableID )
1466
1514
if err != nil {
@@ -1507,6 +1555,48 @@ func checkTableNotExistsFromStore(t *meta.Meta, schemaID int64, tableName string
1507
1555
return nil
1508
1556
}
1509
1557
1558
+ func findTableIDByName (d * ddlCtx , t * meta.Meta , schemaID int64 , tableName string ) (int64 , error ) {
1559
+ // Try to use memory schema info to check first.
1560
+ currVer , err := t .GetSchemaVersion ()
1561
+ if err != nil {
1562
+ return 0 , err
1563
+ }
1564
+ is := d .infoCache .GetLatest ()
1565
+ if is != nil && is .SchemaMetaVersion () == currVer {
1566
+ return findTableIDFromInfoSchema (is , schemaID , tableName )
1567
+ }
1568
+
1569
+ return findTableIDFromStore (t , schemaID , tableName )
1570
+ }
1571
+
1572
+ func findTableIDFromInfoSchema (is infoschema.InfoSchema , schemaID int64 , tableName string ) (int64 , error ) {
1573
+ schema , ok := is .SchemaByID (schemaID )
1574
+ if ! ok {
1575
+ return 0 , infoschema .ErrDatabaseNotExists .GenWithStackByArgs ("" )
1576
+ }
1577
+ tbl , err := is .TableByName (schema .Name , model .NewCIStr (tableName ))
1578
+ if err != nil {
1579
+ return 0 , err
1580
+ }
1581
+ return tbl .Meta ().ID , nil
1582
+ }
1583
+
1584
+ func findTableIDFromStore (t * meta.Meta , schemaID int64 , tableName string ) (int64 , error ) {
1585
+ tbls , err := t .ListSimpleTables (schemaID )
1586
+ if err != nil {
1587
+ if meta .ErrDBNotExists .Equal (err ) {
1588
+ return 0 , infoschema .ErrDatabaseNotExists .GenWithStackByArgs ("" )
1589
+ }
1590
+ return 0 , errors .Trace (err )
1591
+ }
1592
+ for _ , tbl := range tbls {
1593
+ if tbl .Name .L == tableName {
1594
+ return tbl .ID , nil
1595
+ }
1596
+ }
1597
+ return 0 , infoschema .ErrTableNotExists .FastGenByArgs (tableName )
1598
+ }
1599
+
1510
1600
// updateVersionAndTableInfoWithCheck checks table info validate and updates the schema version and the table information
1511
1601
func updateVersionAndTableInfoWithCheck (d * ddlCtx , t * meta.Meta , job * model.Job , tblInfo * model.TableInfo , shouldUpdateVer bool , multiInfos ... schemaIDAndTableInfo ) (
1512
1602
ver int64 , err error ) {
0 commit comments