]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
getTableDef() mostly working in postgres
authorBrenda Wallace <shiny@cpan.org>
Sun, 10 Jan 2010 05:21:23 +0000 (05:21 +0000)
committerBrenda Wallace <shiny@cpan.org>
Sat, 30 Jan 2010 08:12:06 +0000 (21:12 +1300)
lib/schema.php

index 164387ff3d6a1d3080ada141a3a72b7710764633..c1636c21d827a6070e6d6c16ba094bc973606d1f 100644 (file)
@@ -97,7 +97,12 @@ class Schema
 
     public function getTableDef($name)
     {
-        $res = $this->conn->query('DESCRIBE ' . $name);
+        if(common_config('db','type') == 'pgsql') {
+            $res = $this->conn->query("select column_default as default, is_nullable as Null, udt_name as Type, column_name AS Field from INFORMATION_SCHEMA.COLUMNS where table_name = '$name'");
+        }
+        else { 
+            $res = $this->conn->query('DESCRIBE ' . $name);
+        }
 
         if (PEAR::isError($res)) {
             throw new Exception($res->getMessage());
@@ -111,12 +116,16 @@ class Schema
         $row = array();
 
         while ($res->fetchInto($row, DB_FETCHMODE_ASSOC)) {
+            //lower case the keys, because the php postgres driver is case insentive for column names
+           foreach($row as $k=>$v) {
+               $row[strtolower($k)] = $row[$k];
+            }
 
             $cd = new ColumnDef();
 
-            $cd->name = $row['Field'];
+            $cd->name = $row['field'];
 
-            $packed = $row['Type'];
+            $packed = $row['type'];
 
             if (preg_match('/^(\w+)\((\d+)\)$/', $packed, $match)) {
                 $cd->type = $match[1];
@@ -125,9 +134,9 @@ class Schema
                 $cd->type = $packed;
             }
 
-            $cd->nullable = ($row['Null'] == 'YES') ? true : false;
+            $cd->nullable = ($row['null'] == 'YES') ? true : false;
             $cd->key      = $row['Key'];
-            $cd->default  = $row['Default'];
+            $cd->default  = $row['default'];
             $cd->extra    = $row['Extra'];
 
             $td->columns[] = $cd;