protected function execute(InputInterface $input, OutputInterface $output) { global $yf_paths; require_once $yf_paths['db_setup_path']; init_yf(); $params = []; // Parse arguments like that: k1=v1 k2=v2 into array('k1' => 'v1', 'k2' => 'v2') foreach ((array) $input->getArgument('params') as $p) { list($k, $v) = explode('=', trim($p)); $k = trim($k); $v = trim($v); if (strlen($k) && strlen($v)) { $params[$k] = $v; } } $method = $input->getArgument('method'); $methods = ['compare' => 'compare', 'generate' => 'generate', 'create' => 'create', 'apply' => 'apply', 'list' => '_list', 'dump' => 'dump', 'sync' => 'sync']; if ($method && isset($methods[$method])) { $func = $methods[$method]; $text = db()->migrator()->{$func}($params); if (is_array($text)) { $text = _var_export($text); } $output->writeln($text); } else { $table = $this->getHelperSet()->get('table'); $rows = []; foreach ($methods as $name => $real_name) { $rows[] = [$name]; } $table->setHeaders(['Sub-commands'])->setRows($rows); $table->render($output); } }
protected function execute(InputInterface $input, OutputInterface $output) { global $yf_paths; require_once $yf_paths['db_setup_path']; init_yf(); $params = []; // Parse arguments like that: k1=v1 k2=v2 into array('k1' => 'v1', 'k2' => 'v2') foreach ((array) $input->getArgument('params') as $p) { list($k, $v) = explode('=', trim($p)); $k = trim($k); $v = trim($v); if (strlen($k) && strlen($v)) { $params[$k] = $v; } } $method = $input->getArgument('method'); $methods = []; $methods[] = 'conf'; foreach (get_class_methods(db()->utils()) as $v) { if (substr($v, 0, 1) !== '_') { $methods[] = $v; } } $methods = array_combine($methods, $methods); if ($method == 'conf' || $method == 'get_conf') { $vars = ['DB_TYPE' => DB_TYPE, 'DB_HOST' => DB_HOST, 'DB_NAME' => DB_NAME, 'DB_USER' => DB_USER, 'DB_PSWD' => DB_PSWD, 'DB_PREFIX' => DB_PREFIX, 'DB_CHARSET' => DB_CHARSET]; $output->writeln(_var_export($vars)); } elseif ($method && isset($methods[$method])) { $func = $methods[$method]; $text = db()->utils()->{$func}($params); if (is_array($text)) { $text = _var_export($text); } $output->writeln($text); } else { $table = $this->getHelperSet()->get('table'); $rows = []; foreach ($methods as $name => $real_name) { $rows[] = [$name]; } $table->setHeaders(['Sub-commands'])->setRows($rows); $table->render($output); } }
/** */ public function _migration_commands_into_string($cmds = [], $num_tabs = 2) { // TODO: use new syntax with create_table() closures $TAB = "\t"; $prefix = str_repeat($TAB, $num_tabs) . '$utils->'; $a = []; $a[] = str_repeat($TAB, $num_tabs) . '$utils = $this->db->utils();'; foreach ((array) $cmds as $c) { $name = $c['cmd']; unset($c['cmd']); $body = []; foreach ($c as $k => $v) { if (is_array($v)) { $body[] = str_replace(PHP_EOL, PHP_EOL . str_repeat($TAB, $num_tabs), _var_export($v)); } else { $body[] = '\'' . addslashes($v) . '\''; } } $a[] = $prefix . $name . '(' . implode(', ', $body) . ');'; } return implode(PHP_EOL, $a); }
if (!function_exists('main')) { require YF_PATH . 'classes/yf_main.class.php'; # new yf_main('admin', $no_db_connect = false, $auto_init_all = true); new yf_main('user', $no_db_connect = false, $auto_init_all = true); } ########### mkdir('./sql/', 0755, true); mkdir('./data/', 0755, true); $db_tables_like = $db_tables_like ?: '%'; foreach ((array) db()->get_2d('SHOW TABLES LIKE "' . DB_PREFIX . $db_tables_like . '"') as $table) { echo $table . PHP_EOL; $tname = substr($table, strlen(DB_PREFIX)); $db_create_sql = current(db()->get_2d('SHOW CREATE TABLE ' . $table)); $p1 = strpos($db_create_sql, '(') + 1; $p2 = strrpos($db_create_sql, ')'); $db_create_sql = trim(substr($db_create_sql, $p1, $p2 - $p1)); $db_create_sql = str_replace(' ', "\t", ' ' . $db_create_sql); $file_sql = './sql/' . $tname . '.sql.php'; echo $file_sql . PHP_EOL; file_put_contents($file_sql, '<?' . 'php' . PHP_EOL . 'return \'' . PHP_EOL . addslashes($db_create_sql) . PHP_EOL . '\';'); if (false !== strpos($table, 'sys_log_') || false !== strpos($table, '_revisions')) { continue; } $data = db()->get_all('SELECT * FROM ' . $table); if (empty($data)) { continue; } $file_data = './data/' . $tname . '.data.php'; echo $file_data . PHP_EOL; file_put_contents($file_data, '<?' . 'php' . PHP_EOL . 'return ' . _var_export($data, 1) . ';'); }
$lang = substr($fname, -strlen('.sql') - 2, -strlen('.sql')); $dir = './data_' . $lang . '/'; mkdir($dir, 0755, true); foreach (explode(';' . PHP_EOL, file_get_contents($f)) as $sql) { if (preg_match('/%%prefix%%([a-z0-9_]+)/ims', $sql, $m)) { $t = trim($m[1]); $create_sql = get_table_create_sql($t); if (!$create_sql) { continue; } db()->query($create_sql); db()->query('TRUNCATE TABLE ' . DB_PREFIX . $t); db()->query(str_replace('%%prefix%%', DB_PREFIX, $sql)); $data = db()->get_all('SELECT * FROM ' . DB_PREFIX . $t); if (!empty($data)) { file_put_contents($dir . $t . '.data.php', '<?' . 'php' . PHP_EOL . 'return ' . _var_export($data, 1) . ';'); } } } } else { db()->query(get_table_create_sql($table)); db()->query('TRUNCATE TABLE ' . DB_PREFIX . $table); db()->query(str_replace('%%prefix%%', DB_PREFIX, file_get_contents($f))); $data = db()->get_all('SELECT * FROM ' . $tname); if (!empty($data)) { file_put_contents('./data/' . $table . '.data.php', '<?' . 'php' . PHP_EOL . 'return ' . _var_export($data, 1) . ';'); } } } #db()->query('DROP DATABASE IF EXISTS '.DB_NAME); #exec('mysql -h '.escapeshellarg(DB_HOST).' -u '.escapeshellarg(DB_USER).' -p'.escapeshellarg(DB_PSWD).' -e "DROP DATABASE IF EXISTS '.DB_NAME.'"');
$d = __DIR__ . '/db_table_sql/'; if (!file_exists($d)) { mkdir($d, 0755, true); } foreach (glob(__DIR__ . '/installer*_structs.php') as $_file) { $data = []; require_once $_file; foreach ((array) $data as $k => $v) { if (false !== strpos($_file, '_sys_')) { $k = 'sys_' . $k; } $f = $d . $k . '.db_table_sql.php'; file_put_contents($f, '<' . '?php' . PHP_EOL . 'return ' . _var_export($v, 1) . ';'); } } ############### $d = __DIR__ . '/db_table_datas/'; if (!file_exists($d)) { mkdir($d, 0755, true); } foreach (glob(__DIR__ . '/installer*_datas.php') as $_file) { $data = []; require_once $_file; foreach ((array) $data as $k => $v) { if (false !== strpos($_file, '_sys_')) { $k = 'sys_' . $k; } $f = $d . $k . '.db_table_data.php'; file_put_contents($f, '<' . '?php' . PHP_EOL . 'return ' . _var_export($v, 1) . ';'); } }
#!/usr/bin/php <?php require_once dirname(__DIR__) . '/scripts_init.php'; $report = db()->migrator()->compare(); echo _var_export($report) . PHP_EOL;
/** */ function _var_export($var) { if (defined('HHVM_VERSION')) { return is_array($var) ? print_r($var, 1) : $var; } else { return _var_export($var); } }
echo '++ sql_php: ' . $sql_php_file . PHP_EOL; if (file_exists($sql_php_file)) { # echo 'exists, skipped'. PHP_EOL; # continue; } $sql_php_dir = dirname($sql_php_file); if (!file_exists($sql_php_dir)) { mkdir($sql_php_dir, 0755, true); } $data = (include $f); // $data should be loaded from file if (!$data) { echo '-- ERROR: empty data' . PHP_EOL; continue; } $a = _class('db_installer_mysql', 'classes/db/')->create_table_sql_to_php($data); if (isset($a['name'])) { unset($a['name']); } if (!$a) { echo '-- ERROR: empty sql_php' . PHP_EOL; continue; } # print_r($a); $body = '<?' . 'php' . PHP_EOL . 'return ' . _var_export($a, 1) . ';' . PHP_EOL; if (file_exists($sql_php_file) && md5($body) == md5(file_get_contents($sql_php_file))) { continue; } file_put_contents($sql_php_file, $body); } }