GNU/skin/board/daemon_day_upbit/db_update.php
<?php
if (!defined('_GNUBOARD_')) exit;

global $write_table;

if ($write_table) {
    // 1. [해결책] 테이블의 Row Format을 DYNAMIC으로 변경 (공간 확보의 첫 단계)
    sql_query(" ALTER TABLE `{$write_table}` ROW_FORMAT=DYNAMIC ", false);

    // 2. [해결책] 기존 여분 필드 중 일부를 VARCHAR에서 TEXT로 변경하여 행 사이즈 감소
    // wr_1 ~ wr_10 중 사용하지 않거나 데이터가 긴 필드를 TEXT로 바꾸면 행 제한 계산에서 제외됩니다.
    // 여기서는 안전하게 wr_9, wr_10을 TEXT로 변경하여 공간을 대폭 확보합니다.
    sql_query(" ALTER TABLE `{$write_table}` MODIFY `wr_9` TEXT NOT NULL, MODIFY `wr_10` TEXT NOT NULL ", false);

    // 3. 컬럼 추가 함수
    if (!function_exists('add_column_if_not_exists')) {
        function add_column_if_not_exists($table, $column, $query) {
            $res = sql_query(" SHOW COLUMNS FROM `{$table}` LIKE '{$column}' ", false);
            if ($res && sql_num_rows($res) == 0) {
                return sql_query($query, true); 
            }
            return false;
        }
    }

    // 4. 필드 추가 실행 (사이즈가 큰 필드는 varchar(255) 대신 TEXT 권장)
    add_column_if_not_exists($write_table, 'x2_ver', " ALTER TABLE `{$write_table}` ADD `x2_ver` varchar(10) NOT NULL DEFAULT '' AFTER `wr_10` ");
    add_column_if_not_exists($write_table, 'x2_month', " ALTER TABLE `{$write_table}` ADD `x2_month` varchar(10) NOT NULL DEFAULT '' AFTER `x2_ver` ");
    add_column_if_not_exists($write_table, 'x2_week', " ALTER TABLE `{$write_table}` ADD `x2_week` varchar(10) NOT NULL DEFAULT '' AFTER `x2_month` ");
    add_column_if_not_exists($write_table, 'x2_day', " ALTER TABLE `{$write_table}` ADD `x2_day` varchar(10) NOT NULL DEFAULT '' AFTER `x2_week` ");
    add_column_if_not_exists($write_table, 'x2_hour', " ALTER TABLE `{$write_table}` ADD `x2_hour` varchar(10) NOT NULL DEFAULT '' AFTER `x2_day` ");
    add_column_if_not_exists($write_table, 'x2_min', " ALTER TABLE `{$write_table}` ADD `x2_min` varchar(10) NOT NULL DEFAULT '' AFTER `x2_hour` ");
    add_column_if_not_exists($write_table, 'wr_subject_basic', " ALTER TABLE `{$write_table}` ADD `wr_subject_basic` varchar(10) NOT NULL DEFAULT '' AFTER `x2_min` ");
    add_column_if_not_exists($write_table, 'wr_subject_basic_2', " ALTER TABLE `{$write_table}` ADD `wr_subject_basic_2` varchar(10) NOT NULL DEFAULT '' AFTER `wr_subject_basic` ");
    add_column_if_not_exists($write_table, 'x2_help_text', " ALTER TABLE `{$write_table}` ADD `x2_help_text` varchar(50) NOT NULL DEFAULT '' AFTER `wr_subject_basic_2` ");

    // x2_ca2, x2_ca3, x2_coin 처럼 긴 문자열이 들어갈 가능성이 있는 곳은 TEXT로 생성하여 에러 방지
    add_column_if_not_exists($write_table, 'x2_ca2', " ALTER TABLE `{$write_table}` ADD `x2_ca2` TEXT NOT NULL AFTER `x2_min` ");
    add_column_if_not_exists($write_table, 'x2_ca3', " ALTER TABLE `{$write_table}` ADD `x2_ca3` TEXT NOT NULL AFTER `x2_ca2` ");
    add_column_if_not_exists($write_table, 'x2_run', " ALTER TABLE `{$write_table}` ADD `x2_run` tinyint(4) NOT NULL DEFAULT '0' AFTER `x2_ca3` ");
    add_column_if_not_exists($write_table, 'x2_coin', " ALTER TABLE `{$write_table}` ADD `x2_coin` varchar(100) NOT NULL DEFAULT '' AFTER `x2_run` ");
    add_column_if_not_exists($write_table, 'x2_tag', " ALTER TABLE `{$write_table}` ADD `x2_tag` TEXT NOT NULL AFTER `x2_coin` ");
    add_column_if_not_exists($write_table, 'x2_sell', " ALTER TABLE `{$write_table}` ADD `x2_sell` tinyint(4) NOT NULL DEFAULT '0' AFTER `x2_tag` ");
    add_column_if_not_exists($write_table, 'x2_all_day_1', " ALTER TABLE `{$write_table}` ADD `x2_all_day_1` tinyint(4) NOT NULL DEFAULT '0' AFTER `x2_sell` ");
    add_column_if_not_exists($write_table, 'x2_interval', " ALTER TABLE `{$write_table}` ADD `x2_interval` int(11) NOT NULL DEFAULT '0' AFTER `x2_all_day_1` ");
    add_column_if_not_exists($write_table, 'x2_all_day_2', " ALTER TABLE `{$write_table}` ADD `x2_all_day_2` tinyint(4) NOT NULL DEFAULT '0' AFTER `x2_interval` ");
    add_column_if_not_exists($write_table, 'x2_interval_2', " ALTER TABLE `{$write_table}` ADD `x2_interval_2` int(11) NOT NULL DEFAULT '0' AFTER `x2_all_day_2` ");
    add_column_if_not_exists($write_table, 'x2_all_day_3', " ALTER TABLE `{$write_table}` ADD `x2_all_day_3` tinyint(4) NOT NULL DEFAULT '0' AFTER `x2_interval_2` ");
    add_column_if_not_exists($write_table, 'x2_interval_3', " ALTER TABLE `{$write_table}` ADD `x2_interval_3` int(11) NOT NULL DEFAULT '0' AFTER `x2_all_day_3` ");
    add_column_if_not_exists($write_table, 'x2_down_price', " ALTER TABLE `{$write_table}` ADD `x2_down_price` varchar(20) NOT NULL DEFAULT '0' AFTER `x2_interval_3` ");
    add_column_if_not_exists($write_table, 'x2_all_day_4', " ALTER TABLE `{$write_table}` ADD `x2_all_day_4` tinyint(4) NOT NULL DEFAULT '0' AFTER `x2_down_price` ");
    add_column_if_not_exists($write_table, 'x2_interval_4', " ALTER TABLE `{$write_table}` ADD `x2_interval_4` int(11) NOT NULL DEFAULT '0' AFTER `x2_all_day_4` ");
    add_column_if_not_exists($write_table, 'x2_all_day_5', " ALTER TABLE `{$write_table}` ADD `x2_all_day_5` tinyint(4) NOT NULL DEFAULT '0' AFTER `x2_interval_4` ");
    add_column_if_not_exists($write_table, 'x2_interval_5', " ALTER TABLE `{$write_table}` ADD `x2_interval_5` int(11) NOT NULL DEFAULT '0' AFTER `x2_all_day_5` ");
    add_column_if_not_exists($write_table, 'x2_all_day_6', " ALTER TABLE `{$write_table}` ADD `x2_all_day_6` tinyint(4) NOT NULL DEFAULT '0' AFTER `x2_interval_5` ");
    add_column_if_not_exists($write_table, 'x2_interval_6', " ALTER TABLE `{$write_table}` ADD `x2_interval_6` int(11) NOT NULL DEFAULT '0' AFTER `x2_all_day_6` ");
    add_column_if_not_exists($write_table, 'x2_profit_ratio', " ALTER TABLE `{$write_table}` ADD `x2_profit_ratio` varchar(20) NOT NULL DEFAULT '0' AFTER `x2_interval_6` ");
    add_column_if_not_exists($write_table, 'x2_all_day_7', " ALTER TABLE `{$write_table}` ADD `x2_all_day_7` tinyint(4) NOT NULL DEFAULT '0' AFTER `x2_profit_ratio` ");
    add_column_if_not_exists($write_table, 'x2_interval_7', " ALTER TABLE `{$write_table}` ADD `x2_interval_7` int(11) NOT NULL DEFAULT '0' AFTER `x2_all_day_7` ");
    add_column_if_not_exists($write_table, 'x2_loss_ratio', " ALTER TABLE `{$write_table}` ADD `x2_loss_ratio` varchar(20) NOT NULL DEFAULT '0' AFTER `x2_interval_7` ");
}
?>