#!/usr/bin/env php . */ define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); $helptext = << "; } if (is_array($arr)) { print "array({$inlf}"; $n = 0; foreach ($arr as $key => $row) { $n++; prettyDumpArray($row, $key, $subIndent); if ($n < count($arr)) { print "$insep$inlf"; } } // hack! print "{$inendspace})"; } else { print var_export($arr, true); } } function getCoreSchema($tableName) { $schema = array(); include INSTALLDIR . '/db/core.php'; return $schema[$tableName]; } function getCoreTables() { $schema = array(); include INSTALLDIR . '/db/core.php'; return array_keys($schema); } function dumpTable($tableName, $live) { if ($live) { $schema = Schema::get(); $def = $schema->getTableDef($tableName); } else { // hack $def = getCoreSchema($tableName); } prettyDumpArray($def, $tableName); } function dumpBuildTable($tableName) { echo "-- \n"; echo "-- $tableName\n"; echo "-- \n"; $schema = Schema::get(); $def = getCoreSchema($tableName); $sql = $schema->buildCreateTable($tableName, $def); $sql[] = ''; echo implode(";\n", $sql); echo "\n"; } function dumpEnsureTable($tableName) { $schema = Schema::get(); $def = getCoreSchema($tableName); $sql = $schema->buildEnsureTable($tableName, $def); if ($sql) { echo "-- \n"; echo "-- $tableName\n"; echo "-- \n"; $sql[] = ''; echo implode(";\n", $sql); echo "\n"; } } function showDiff($a, $b) { $fnameA = tempnam(sys_get_temp_dir(), 'defined-diff-a'); file_put_contents($fnameA, $a); $fnameB = tempnam(sys_get_temp_dir(), 'detected-diff-b'); file_put_contents($fnameB, $b); $cmd = sprintf('diff -U 100 %s %s', escapeshellarg($fnameA), escapeshellarg($fnameB)); passthru($cmd); unlink($fnameA); unlink($fnameB); } if (have_option('all')) { $args = getCoreTables(); } if (count($args)) { foreach ($args as $tableName) { if (have_option('diff')) { ob_start(); dumpTable($tableName, false); $defined = ob_get_clean(); ob_start(); dumpTable($tableName, true); $detected = ob_get_clean(); showDiff($defined, $detected); } else if (have_option('build')) { dumpBuildTable($tableName); } else if (have_option('update')) { dumpEnsureTable($tableName); } else { dumpTable($tableName, true); } } } else { show_help($helptext); }