Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        // 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);
        }
Esempio n. 3
0
        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);
            }
        }
Esempio n. 4
0
        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");
            }
        }
Esempio n. 5
0
        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");
            }
        }
Esempio n. 6
0
        // 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)");
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        // 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);
        }
Esempio n. 9
0
        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");
                }
            }
        }