+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 dumpDiff($tableName, $filter)
+{
+ $schema = Schema::get();
+ $def = getCoreSchema($tableName);
+ try {
+ $old = $schema->getTableDef($tableName);
+ } catch (Exception $e) {
+ // @fixme this is a terrible check :D
+ if (preg_match('/no such table/i', $e->getMessage())) {
+ return dumpTable($tableName, false);
+ } else {
+ throw $e;
+ }
+ }
+
+ if ($filter) {
+ //$old = $schema->filterDef($old);
+ $def = $schema->filterDef($def);
+ }
+
+ // @hack
+ $old = tweakPrimaryKey($old);
+ $def = tweakPrimaryKey($def);
+
+ $sections = array_unique(array_merge(array_keys($old), array_keys($def)));
+ $final = array();
+ foreach ($sections as $section) {
+ if ($section == 'fields') {
+ // this shouldn't be needed maybe... wait what?
+ }
+ $diff = $schema->diffArrays($old, $def, $section);
+ $chunks = array('del', 'mod', 'add');
+ foreach ($chunks as $chunk) {
+ if ($diff[$chunk]) {
+ foreach ($diff[$chunk] as $key) {
+ if ($chunk == 'del') {
+ $final[$section]["DEL $key"] = $old[$section][$key];
+ } else if ($chunk == 'add') {
+ $final[$section]["ADD $key"] = $def[$section][$key];
+ } else if ($chunk == 'mod') {
+ $final[$section]["OLD $key"] = $old[$section][$key];
+ $final[$section]["NEW $key"] = $def[$section][$key];
+ }
+ }
+ }
+ }
+ }
+
+ prettyDumpArray($final, $tableName);
+ print "\n";
+}
+
+function tweakPrimaryKey($def)