]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Filter table definitions to scrub out unsupported features before trying to alter...
authorBrion Vibber <brion@pobox.com>
Wed, 13 Oct 2010 23:04:28 +0000 (16:04 -0700)
committerBrion Vibber <brion@pobox.com>
Wed, 13 Oct 2010 23:04:28 +0000 (16:04 -0700)
lib/mysqlschema.php
lib/pgsqlschema.php
lib/schema.php
scripts/dumpschema.php

index 688bea3e2b2d39e1f01a5e173b2d74fab7b1f562..eeabae8cd37c59d1f2ebba8b31756b16ebb3ceca 100644 (file)
@@ -523,4 +523,20 @@ class MysqlSchema extends Schema
             return parent::typeAndSize($column);
         }
     }
+
+    /**
+     * Filter the given table definition array to match features available
+     * in this database.
+     *
+     * This lets us strip out unsupported things like comments, foreign keys,
+     * or type variants that we wouldn't get back from getTableDef().
+     *
+     * @param array $tableDef
+     */
+    function filterDef(array $tableDef)
+    {
+        // @fixme add foreign-key support for MySQL
+        unset($tableDef['foreign keys']);
+        return $tableDef;
+    }
 }
index a8ce21b3845346ba5c2b6c4dc30b064c79cbefe1..e8711a6f856ea536ebaa98c7d320a9a0113918b2 100644 (file)
@@ -406,4 +406,29 @@ class PgsqlSchema extends Schema
         }
     }
 
+    /**
+     * Filter the given table definition array to match features available
+     * in this database.
+     *
+     * This lets us strip out unsupported things like comments, foreign keys,
+     * or type variants that we wouldn't get back from getTableDef().
+     *
+     * @param array $tableDef
+     */
+    function filterDef(array $tableDef)
+    {
+        foreach (array_keys($tableDef['fields']) as $name => &$col) {
+            // No convenient support for field descriptions
+            unset($col['description']);
+
+            if (isset($col['size'])) {
+                // Don't distinguish between tinyint and int.
+                if ($col['size'] == 'tiny' && $col['type'] == 'int') {
+                    unset($col['size']);
+                }
+            }
+        }
+        return $tableDef;
+    }
+
 }
index 04bd2d1d9461690edc700f5d3310982122e27882..da43c0559ab8255cfcd549e264b5caca3975a6f1 100644 (file)
@@ -143,6 +143,7 @@ class Schema
      */
     public function buildCreateTable($name, $def)
     {
+        $def = $this->filterDef($def);
         $sql = array();
 
         foreach ($def['fields'] as $col => $colDef) {
@@ -487,17 +488,19 @@ class Schema
             }
         }
 
+        $old = $this->filterDef($old);
+        $def = $this->filterDef($def);
+
         // @fixme check if not present
         $fields = $this->diffArrays($old['fields'], $def['fields'], array($this, 'columnsEqual'));
         $uniques = $this->diffArrays($old['unique keys'], $def['unique keys']);
         $indexes = $this->diffArrays($old['indexes'], $def['indexes']);
 
-        /*
-        if (count($toadd) + count($todrop) + count($tomod) == 0) {
+        $total = $fields['count'] + $uniques['count'] + $indexes['count'];
+        if ($total == 0) {
             // nothing to do
-            return true;
+            return array();
         }
-         */
 
         // For efficiency, we want this all in one
         // query, instead of using our methods.
@@ -561,7 +564,8 @@ class Schema
         return array('add' => $toadd,
                      'del' => $todrop,
                      'mod' => $tomod,
-                     'keep' => $tokeep);
+                     'keep' => $tokeep,
+                     'count' => count($toadd) + count($todrop) + count($tomod));
     }
 
     /**
@@ -847,6 +851,20 @@ class Schema
         return $table;
     }
 
+    /**
+     * Filter the given table definition array to match features available
+     * in this database.
+     *
+     * This lets us strip out unsupported things like comments, foreign keys,
+     * or type variants that we wouldn't get back from getTableDef().
+     *
+     * @param array $tableDef
+     */
+    function filterDef(array $tableDef)
+    {
+        return $tableDef;
+    }
+
     function isNumericType($type)
     {
         $type = strtolower($type);
index 3c23636383bbfe84070869d21fb56c8e3fbd21ce..fcf2430d804892385f1e59e47be66ceda0b0557e 100644 (file)
@@ -129,17 +129,19 @@ function dumpBuildTable($tableName)
 
 function dumpEnsureTable($tableName)
 {
-    echo "-- \n";
-    echo "-- $tableName\n";
-    echo "-- \n";
-
     $schema = Schema::get();
     $def = getCoreSchema($tableName);
     $sql = $schema->buildEnsureTable($tableName, $def);
-    $sql[] = '';
 
-    echo implode(";\n", $sql);
-    echo "\n";
+    if ($sql) {
+        echo "-- \n";
+        echo "-- $tableName\n";
+        echo "-- \n";
+
+        $sql[] = '';
+        echo implode(";\n", $sql);
+        echo "\n";
+    }
 }
 
 function showDiff($a, $b)