// Copyright © 2023 OpenIM. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package data_conversion import ( "context" "fmt" "time" "github.com/OpenIMSDK/tools/log" "gorm.io/driver/mysql" "gorm.io/gorm" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation" ) var ( MysqlDb_v2 *gorm.DB MysqlDb_v3 *gorm.DB ) const ( username_v2 = "root" password_v2 = "123456" ip_v2 = "127.0.0.1:3306" database_v2 = "openim_v2" ) const ( username_v3 = "root" password_v3 = "123456" ip_v3 = "127.0.0.1:3306" database_v3 = "openim_v3" ) func init() { dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", username_v2, password_v2, ip_v2, database_v2, ) db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) MysqlDb_v2 = db if err != nil { log.ZDebug(context.Background(), "err", err) } dsn_v3 := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", username_v3, password_v3, ip_v3, database_v3, ) db_v3, err := gorm.Open(mysql.Open(dsn_v3), &gorm.Config{}) MysqlDb_v3 = db_v3 if err != nil { log.ZDebug(context.Background(), "err", err) } } func UserConversion() { var count int64 var user relation.UserModel MysqlDb_v2.Model(&user).Count(&count) batchSize := 100 offset := 0 for int64(offset) < count { var results []relation.UserModel MysqlDb_v2.Limit(batchSize).Offset(offset).Find(&results) // Process query results fmt.Println("============================batch data===================", offset, batchSize) fmt.Println(results) MysqlDb_v3.Create(results) fmt.Println("======================================================") offset += batchSize } } func FriendConversion() { var count int64 var friend relation.FriendModel MysqlDb_v2.Model(&friend).Count(&count) batchSize := 100 offset := 0 for int64(offset) < count { var results []relation.FriendModel MysqlDb_v2.Limit(batchSize).Offset(offset).Find(&results) // Process query results fmt.Println("============================batch data===================", offset, batchSize) fmt.Println(results) MysqlDb_v3.Create(results) fmt.Println("======================================================") offset += batchSize } } func RequestConversion() { var count int64 var friendRequest relation.FriendRequestModel MysqlDb_v2.Model(&friendRequest).Count(&count) batchSize := 100 offset := 0 for int64(offset) < count { var results []relation.FriendRequestModel MysqlDb_v2.Limit(batchSize).Offset(offset).Find(&results) // Process query results fmt.Println("============================batch data===================", offset, batchSize) fmt.Println(results) MysqlDb_v3.Create(results) fmt.Println("======================================================") offset += batchSize } var groupRequest relation.GroupRequestModel MysqlDb_v2.Model(&groupRequest).Count(&count) batchSize = 100 offset = 0 for int64(offset) < count { var results []relation.GroupRequestModel MysqlDb_v2.Limit(batchSize).Offset(offset).Find(&results) // Process query results fmt.Println("============================batch data===================", offset, batchSize) fmt.Println(results) MysqlDb_v3.Create(results) fmt.Println("======================================================") offset += batchSize } } func GroupConversion() { var count int64 var group relation.GroupModel MysqlDb_v2.Model(&group).Count(&count) batchSize := 100 offset := 0 for int64(offset) < count { var results []relation.GroupModel MysqlDb_v2.Limit(batchSize).Offset(offset).Find(&results) for i, val := range results { temp := time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC) if val.NotificationUpdateTime.Equal(temp) { results[i].NotificationUpdateTime = time.Now() // fmt.Println(val.NotificationUpdateTime) } } // Process query results fmt.Println("============================batch data===================", offset, batchSize) fmt.Println(results) MysqlDb_v3.Create(results) fmt.Println("======================================================") offset += batchSize } } func GroupMemberConversion() { var count int64 var groupMember relation.GroupMemberModel MysqlDb_v2.Model(&groupMember).Count(&count) batchSize := 100 offset := 0 for int64(offset) < count { var results []relation.GroupMemberModel MysqlDb_v2.Limit(batchSize).Offset(offset).Find(&results) // Process query results fmt.Println("============================batch data===================", offset, batchSize) fmt.Println(results) MysqlDb_v3.Create(results) fmt.Println("======================================================") offset += batchSize } } func BlacksConversion() { var count int64 var black relation.BlackModel MysqlDb_v2.Model(&black).Count(&count) batchSize := 100 offset := 0 for int64(offset) < count { var results []relation.BlackModel MysqlDb_v2.Limit(batchSize).Offset(offset).Find(&results) // Process query results fmt.Println("============================batch data===================", offset, batchSize) fmt.Println(results) MysqlDb_v3.Create(results) fmt.Println("======================================================") offset += batchSize } } func ChatLogsConversion() { var count int64 var chat relation.ChatLogModel MysqlDb_v2.Model(&chat).Count(&count) batchSize := 100 offset := 0 for int64(offset) < count { var results []relation.ChatLogModel MysqlDb_v2.Limit(batchSize).Offset(offset).Find(&results) // Process query results fmt.Println("============================batch data===================", offset, batchSize) // fmt.Println(results) MysqlDb_v3.Create(results) fmt.Println("======================================================") offset += batchSize } }