]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
some more tweaking to do the mappings during filterDef; not totally sure I like it
authorBrion Vibber <brion@pobox.com>
Fri, 15 Oct 2010 23:32:37 +0000 (16:32 -0700)
committerBrion Vibber <brion@pobox.com>
Fri, 15 Oct 2010 23:32:37 +0000 (16:32 -0700)
db/core.php
lib/mysqlschema.php
lib/pgsqlschema.php
lib/schema.php
scripts/dumpschema.php

index c0def7ce5adee4365e802c40431c98ac71c4b356..c0be6c97aeed13509fa7602fc3b2402a630db22a 100644 (file)
@@ -182,7 +182,7 @@ $schema['notice'] = array(
         'rendered' => array('type' => 'text', 'description' => 'HTML version of the content'),
         'url' => array('type' => 'varchar', 'length' => 255, 'description' => 'URL of any attachment (image, video, bookmark, whatever)'),
         'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
-        'modified' => array('type' => 'timestamp', 'description' => 'date this record was modified'),
+        'modified' => array('type' => 'datetime', 'not null' => true, 'default' => 'CURRENT_TIMESTAMP', 'description' => 'date this record was modified'),
         'reply_to' => array('type' => 'int', 'description' => 'notice replied to (usually a guess)'),
         'is_local' => array('type' => 'int', 'size' => 'tiny', 'default' => 0, 'description' => 'notice was generated by a user'),
         'source' => array('type' => 'varchar', 'length' => 32, 'description' => 'source of comment, like "web", "im", or "clientname"'),
@@ -871,8 +871,8 @@ $schema['deleted_notice'] = array(
 
 $schema['config'] = array(
     'fields' => array(
-        'section' => array('type' => 'varchar', 'length' => 32, 'not null' => true, 'description' => 'configuration section'),
-        'setting' => array('type' => 'varchar', 'length' => 32, 'not null' => true, 'description' => 'configuration setting'),
+        'section' => array('type' => 'varchar', 'length' => 32, 'not null' => true, 'default' => '', 'description' => 'configuration section'),
+        'setting' => array('type' => 'varchar', 'length' => 32, 'not null' => true, 'default' => '', 'description' => 'configuration setting'),
         'value' => array('type' => 'varchar', 'length' => 255, 'description' => 'configuration value'),
     ),
     'primary key' => array('section', 'setting'),
index 400a7ee598f130e4d343f7bab754ade350008425..25f0e52f163b2e130e2ee088c702a7468be05a0e 100644 (file)
@@ -96,18 +96,21 @@ class MysqlSchema extends Schema
 
             // warning -- 'unsigned' attr on numbers isn't given in DATA_TYPE and friends.
             // It is stuck in on COLUMN_TYPE though (eg 'bigint(20) unsigned')
+            /*
             list($type, $size) = $this->reverseMapType($row['DATA_TYPE']);
             $field['type'] = $type;
             if ($size !== null) {
                 $field['size'] = $size;
             }
+             */
+            $field['type'] = $type = $row['DATA_TYPE'];
 
             if ($type == 'char' || $type == 'varchar') {
                 if ($row['CHARACTER_MAXIMUM_LENGTH'] !== null) {
                     $field['length'] = intval($row['CHARACTER_MAXIMUM_LENGTH']);
                 }
             }
-            if ($type == 'numeric') {
+            if ($type == 'decimal') {
                 // Other int types may report these values, but they're irrelevant.
                 // Just ignore them!
                 if ($row['NUMERIC_PRECISION'] !== null) {
@@ -137,7 +140,7 @@ class MysqlSchema extends Schema
             $extra = $row['EXTRA'];
             if ($extra) {
                 if (preg_match('/(^|\s)auto_increment(\s|$)/i', $extra)) {
-                    $field['type'] = 'serial';
+                    $field['auto_increment'] = true;
                 }
                 // $row['EXTRA'] may contain 'on update CURRENT_TIMESTAMP'
                 // ^ ...... how to specify?
@@ -446,7 +449,8 @@ class MysqlSchema extends Schema
         $line = array();
         $line[] = parent::columnSql($cd);
 
-        if ($cd['type'] == 'serial') {
+        // This'll have been added from our transform of 'serial' type
+        if (!empty($cd['auto_increment'])) {
             $line[] = 'auto_increment';
         }
 
@@ -489,6 +493,7 @@ class MysqlSchema extends Schema
      * @param string $type
      * @return array ($type, $size) -- $size may be null
      */
+    /*
     protected function reverseMapType($type)
     {
         $type = strtolower($type);
@@ -511,6 +516,7 @@ class MysqlSchema extends Schema
             return array($type, null);
         }
     }
+     */
 
     function typeAndSize($column)
     {
@@ -535,6 +541,17 @@ class MysqlSchema extends Schema
      */
     function filterDef(array $tableDef)
     {
+        foreach ($tableDef['fields'] as $name => &$col) {
+            if ($col['type'] == 'serial') {
+                $col['type'] = 'int';
+                $col['auto_increment'] = true;
+            }
+            if ($col['type'] == 'datetime' && isset($col['default']) && $col['default'] == 'CURRENT_TIMESTAMP') {
+                $col['type'] = 'timestamp';
+            }
+            $col['type'] = $this->mapType($col);
+            unset($col['size']);
+        }
         // @fixme add foreign-key support for MySQL
         unset($tableDef['foreign keys']);
         return $tableDef;
index 4fde80b55a79604beebfc01130cd52df97308c2c..ca1853494b5c75a55400c01b28a5df26827f9dba 100644 (file)
@@ -421,12 +421,16 @@ class PgsqlSchema extends Schema
             // 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']);
                 }
             }
+             */
+            $col['type'] = $this->mapType($col);
+            unset($col['size']);
         }
         return $tableDef;
     }
index c9a0fb43476bcdc161980a740f4e358f2c1f7d8e..16fb502253e2369f683a325e12633a5cb11e38d9 100644 (file)
@@ -485,7 +485,7 @@ class Schema
             return $this->buildCreateTable($tableName, $def);
         }
 
-        $old = $this->filterDef($old);
+        //$old = $this->filterDef($old);
         $def = $this->filterDef($def);
 
         // @fixme check if not present
@@ -749,15 +749,17 @@ class Schema
 
     function typeAndSize($column)
     {
-        $type = $this->mapType($column);
+        //$type = $this->mapType($column);
+        $type = $column['type'];
+        if (isset($column['size'])) {
+            $type = $column['size'] . $type;
+        }
         $lengths = array();
 
-        if ($column['type'] == 'numeric') {
-            if (isset($column['precision'])) {
-                $lengths[] = $column['precision'];
-                if (isset($column['scale'])) {
-                    $lengths[] = $column['scale'];
-                }
+        if (isset($column['precision'])) {
+            $lengths[] = $column['precision'];
+            if (isset($column['scale'])) {
+                $lengths[] = $column['scale'];
             }
         } else if (isset($column['length'])) {
             $lengths[] = $column['length'];
@@ -778,6 +780,12 @@ class Schema
      */
     protected function reverseMapType($type)
     {
+        $sizes = array('tiny', 'small', 'medium', 'big');
+        foreach ($sizes as $prefix) {
+            if (substr($type, 0, strlen($prefix)) == $prefix) {
+                return array(substr($type, strlen($prefix)), $prefix);
+            }
+        }
         return array($type, null);
     }
 
index b8d034d2a67412fd438b9f8d4e4416d430eff2c4..c1b0ff4e0692f09cf2e5c885e9a73a12af10f051 100644 (file)
@@ -162,7 +162,7 @@ function dumpDiff($tableName, $filter)
     }
 
     if ($filter) {
-        $old = $schema->filterDef($old);
+        //$old = $schema->filterDef($old);
         $def = $schema->filterDef($def);
     }