@@ -29,6 +29,7 @@ import (
29
29
_ "github.com/pingcap/tidb/pkg/autoid_service"
30
30
"github.com/pingcap/tidb/pkg/config"
31
31
"github.com/pingcap/tidb/pkg/ddl/schematracker"
32
+ ddlutil "github.com/pingcap/tidb/pkg/ddl/util"
32
33
"github.com/pingcap/tidb/pkg/ddl/util/callback"
33
34
"github.com/pingcap/tidb/pkg/domain"
34
35
"github.com/pingcap/tidb/pkg/errno"
@@ -3014,3 +3015,64 @@ func TestOptimizeTable(t *testing.T) {
3014
3015
tk := testkit .NewTestKit (t , store )
3015
3016
tk .MustGetErrMsg ("optimize table t" , "[ddl:8200]OPTIMIZE TABLE is not supported" )
3016
3017
}
3018
+
3019
+ func TestIssue52680 (t * testing.T ) {
3020
+ store , dom := testkit .CreateMockStoreAndDomain (t )
3021
+ tk := testkit .NewTestKit (t , store )
3022
+ tk .MustExec ("use test;" )
3023
+ tk .MustExec ("create table issue52680 (id bigint primary key auto_increment) auto_id_cache=1;" )
3024
+ tk .MustExec ("insert into issue52680 values(default),(default);" )
3025
+ tk .MustQuery ("select * from issue52680" ).Check (testkit .Rows ("1" , "2" ))
3026
+
3027
+ is := dom .InfoSchema ()
3028
+ ti , err := is .TableInfoByName (model .NewCIStr ("test" ), model .NewCIStr ("issue52680" ))
3029
+ require .NoError (t , err )
3030
+
3031
+ ddlutil .EmulatorGCDisable ()
3032
+ defer ddlutil .EmulatorGCEnable ()
3033
+
3034
+ // For mocktikv, safe point is not initialized, we manually insert it for snapshot to use.
3035
+ safePointName := "tikv_gc_safe_point"
3036
+ safePointValue := "20060102-15:04:05 -0700"
3037
+ safePointComment := "All versions after safe point can be accessed. (DO NOT EDIT)"
3038
+ updateSafePoint := fmt .Sprintf (`INSERT INTO mysql.tidb VALUES ('%[1]s', '%[2]s', '%[3]s')
3039
+ ON DUPLICATE KEY
3040
+ UPDATE variable_value = '%[2]s', comment = '%[3]s'` , safePointName , safePointValue , safePointComment )
3041
+ tk .MustExec (updateSafePoint )
3042
+
3043
+ testSteps := []struct {
3044
+ sql string
3045
+ expect meta.AutoIDGroup
3046
+ }{
3047
+ {sql : "" , expect : meta.AutoIDGroup {RowID : 0 , IncrementID : 4000 , RandomID : 0 }},
3048
+ {sql : "drop table issue52680" , expect : meta.AutoIDGroup {RowID : 0 , IncrementID : 0 , RandomID : 0 }},
3049
+ {sql : "recover table issue52680" , expect : meta.AutoIDGroup {RowID : 0 , IncrementID : 4000 , RandomID : 0 }},
3050
+ }
3051
+ for _ , step := range testSteps {
3052
+ if step .sql != "" {
3053
+ tk .MustExec (step .sql )
3054
+ }
3055
+
3056
+ txn , err := store .Begin ()
3057
+ require .NoError (t , err )
3058
+ m := meta .NewMeta (txn )
3059
+ idAcc := m .GetAutoIDAccessors (ti .DBID , ti .ID )
3060
+ ids , err := idAcc .Get ()
3061
+ require .NoError (t , err )
3062
+ require .Equal (t , ids , step .expect )
3063
+ txn .Rollback ()
3064
+ }
3065
+
3066
+ tk .MustQuery ("show table issue52680 next_row_id" ).Check (testkit .Rows (
3067
+ "test issue52680 id 1 _TIDB_ROWID" ,
3068
+ "test issue52680 id 3 AUTO_INCREMENT" ,
3069
+ ))
3070
+
3071
+ is = dom .InfoSchema ()
3072
+ ti1 , err := is .TableInfoByName (model .NewCIStr ("test" ), model .NewCIStr ("issue52680" ))
3073
+ require .NoError (t , err )
3074
+ require .Equal (t , ti1 .ID , ti .ID )
3075
+
3076
+ tk .MustExec ("insert into issue52680 values(default);" )
3077
+ tk .MustQuery ("select * from issue52680" ).Check (testkit .Rows ("1" , "2" , "3" ))
3078
+ }
0 commit comments