private bool post_check_data(workspace wspace) { if (profile.Remaped_IdTables.Count != configed_tables.Values.Count) { return(false); } bool all_exist = true; foreach (var v in profile.Remaped_IdTables) { if (!configed_tables.Keys.Contains(v.table_name.table_name)) { all_exist = false; break; } } if (!all_exist) { return(false); } foreach (var v in profile.Remaped_IdTables) { var tbl_count = new cmd_wraper.table_cmd(curr_conn, v.table_name, wspace.TargetDb).get_record_count(); if (tbl_count != v.Records.Count) { return(false); } } return(true); }
// 2. fill data from src database public void fill_from(data.dbname src_database_name) { var schema = new cmd_wraper.table_cmd(conn, table_name, src_database_name).show_createtable(); var columns_match = System.Text.RegularExpressions.Regex.Matches(schema, @"\n\s+\`[a-zA-Z_]+\`\s"); List <string> usefull_columns = new List <string>(); foreach (System.Text.RegularExpressions.Match m in columns_match) { var v = m.Value.Split('`'); var name = v[1]; if (name == "id") { continue; } usefull_columns.Add(name); } var init_sql_schema = @"insert into {0}.{1} (old_id,old_server,{2}) select id as old_id,'{3}'as old_server, {2} from {3}.{1};"; var column_strs = new StringBuilder(); foreach (var v in usefull_columns) { column_strs.Append(v); column_strs.Append(","); } column_strs.Remove(column_strs.Length - 1, 1); var init_sql = safeformat.format(init_sql_schema, database_name.database_name, table_name.table_name, column_strs.ToString(), src_database_name.database_name); var cmd = conn.prepare_write_cmd(init_sql); new cmd_wraper.connection_cmd(conn).run_sql_text(init_sql); }
public void search_table() { var cur_table = new cmd_wraper.table_cmd(curr_conn, tbl_name, db_name); var show_create = cur_table.show_createtable(); var blob_pattern = @"\`[a-zA-Z_]{3,20}\`\slongblob"; var rawint_pattern = @"\`sm_[a-zA-Z_]{1,20}\`\sbigint\(20\)"; var name_pattern = @"\`[^\`]+\`"; var blob_matches = System.Text.RegularExpressions.Regex.Matches(show_create, blob_pattern); foreach (System.Text.RegularExpressions.Match m in blob_matches) { var m2 = System.Text.RegularExpressions.Regex.Match(m.Value, name_pattern); var column_name = m2.Value; column_name = column_name.Substring(1, column_name.Length - 2); serach_column(column_name, false); } var rawint_matches = System.Text.RegularExpressions.Regex.Matches(show_create, rawint_pattern); foreach (System.Text.RegularExpressions.Match m in rawint_matches) { var m2 = System.Text.RegularExpressions.Regex.Match(m.Value, name_pattern); var column_name = m2.Value; column_name = column_name.Substring(1, column_name.Length - 2); serach_column(column_name, true); } }
public void post_check_data(workspace wspace) { var merged_count = new cmd_wraper.table_cmd(current_connection, avatar_table_name, wspace.TargetDb).get_record_count(); if (merged_count != profile.All_Avatars.Count) { throw new Exception("post_check failed,avatar table"); } }
public void post_check_data(workspace wspace) { var merged_count = new cmd_wraper.table_cmd(curr_conn, account_table_name, wspace.TargetDb).get_record_count(); if (merged_count != cached.Remaped_Accounts.Count) { throw new Exception("post_check failed,remap account table"); } }
// 1. create a mirror table public void copy_from(data.dbname src_database_name) { var schema_str = new cmd_wraper.table_cmd(conn, table_name, src_database_name).show_createtable(); // reset the auto increate id var auto_inc_pattern = @"AUTO_INCREMENT\=[\d]+\s"; var new_inc_pattern = @"AUTO_INCREMENT=" + UInt32.MaxValue.ToString() + @" "; schema_str = System.Text.RegularExpressions.Regex.Replace(schema_str, auto_inc_pattern, new_inc_pattern); // unique key to index schema_str = schema_str.Replace("UNIQUE KEY", "INDEX"); // create table var target_table = new cmd_wraper.table_cmd(conn, table_name, database_name); target_table.create_table(schema_str); // alter table add serverid/oldid target_table.alter_table(@"ADD COLUMN old_server varchar(255) COLLATE utf8_bin DEFAULT NULL,ADD COLUMN old_id bigint(20) NOT NULL"); target_table.alter_table(@"ADD INDEX (old_server),ADD INDEX (old_id)"); }
public void load_summary() { var sql_text = @"select {0} from {1}.{2}"; var where_case = adaptor.sql_where; if (!string.IsNullOrEmpty(where_case)) { sql_text = sql_text + @" where {3}"; sql_text = safeformat.format(sql_text, adaptor.sql_select, database_name.database_name, table_name.table_name, where_case); } else { sql_text = safeformat.format(sql_text, adaptor.sql_select, database_name.database_name, table_name.table_name); } var tcmd = new cmd_wraper.table_cmd(curr_conn, table_name, database_name); tcmd.load_records(adaptor); }
// 3. clone a table public void clone_from(data.dbname src_database_name, int expected_cnt) { var schema_str = new cmd_wraper.table_cmd(conn, table_name, src_database_name).show_createtable(); // reset the auto increate id var auto_inc_pattern = @"AUTO_INCREMENT\=[\d]+\s"; var new_inc_pattern = @"AUTO_INCREMENT=" + UInt32.MaxValue.ToString() + @" "; schema_str = System.Text.RegularExpressions.Regex.Replace(schema_str, auto_inc_pattern, new_inc_pattern); var cnt = new cmd_wraper.table_cmd(conn, table_name, src_database_name).get_record_count(); if (expected_cnt >= 0 && cnt != expected_cnt) { throw new Exception("not empty table," + table_name.table_name); } var target_table = new cmd_wraper.table_cmd(conn, table_name, database_name); target_table.create_table(schema_str); }
public void post_check_data(workspace wspace) { var merged_count = new cmd_wraper.table_cmd(conn, account_table_name, wspace.TargetDb).get_record_count(); if (merged_count != profile.All_Account.Count) { // may, we have deleted some accounts var accounts = new HashSet <string>(); foreach (var v in profile.All_Account) { if (accounts.Contains(v.old_name)) { continue; } accounts.Add(v.old_name); } if (accounts.Count != merged_count) { throw new Exception("post_check failed,account table"); } } }