]> git.nbdom.net Git - nb.git/commitdiff
lib/php/db/table.php
authorNicolas Boisselier <nicolas.boisselier@gmail.com>
Wed, 3 Jan 2018 17:59:15 +0000 (17:59 +0000)
committerNicolas Boisselier <nicolas.boisselier@gmail.com>
Wed, 3 Jan 2018 17:59:15 +0000 (17:59 +0000)
lib/php/db/field.php
lib/php/db/table.php
lib/php/db/types/pgsql.php

index e2b6a0ebe658561c922ab942731a210299e4f77b..bbf835e659a7489e60949736b1b6f15d598c33b7 100644 (file)
@@ -145,6 +145,12 @@ class field extends nb {
     return ( isset($Db) ? $Db : null );
   }
 
+  public function sql_name_cast_text() {
+    $name = $this->db()->sql_name($this->name);
+    if ($fct = $this->db()->conf_type('cast_text')) $name = $fct($name);
+               return $name;
+  }
+
   public function sql_name() {
     return $this->db()->sql_name($this->name);
   }
index 3702fb1afc792d28171f915005952f8abbb8cacb..16276729db48fc9627df12e243fff6e6794123f6 100644 (file)
@@ -735,10 +735,12 @@ Class Table extends nb {
 
     foreach ($this->fields() as $k => $field) {
 
+                       $name = $field->sql_name();
+                       if (!preg_match('/^(char|varchar|text|blog)/i',$field->type)) $name = $field->sql_name_cast_text();
+
       // No empty values
       $v = isset($values[$k]) ? $values[$k] : null;
       if (strcmp($v,'')==0 or $v=='!' or $v=='~') continue;
-      $number = $field->numeric();
 
       // Equal / Not Equal
       $equal = '=';
@@ -775,11 +777,11 @@ Class Table extends nb {
       } else {
 
         // Integer
-        if ($number) {
+        if ($field->numeric()) {
           if (strtolower($v)=='null') $v = '0';
           #$k = "COLAESCE($k,0)";
 
-        // Date, Time
+        // Date, Time according to field->string() behavior
         } else {
           $v = $this->db()->quote($v);
 
@@ -789,19 +791,19 @@ Class Table extends nb {
       }
 
       if (preg_match("/(LIKE|$regexp) ..$/","$equal$v") and $field->null) {
-        $k = 'COALESCE('.$field->sql_name().','.$this->db()->quote('').")";
+        $k = 'COALESCE('.$name.','.$this->db()->quote('').")";
 
       } elseif ($field->extras) {
         $k = $this->extras[$k]->sql_name();
 
-      } elseif ($number and $field->null) {
-        $k = 'COALESCE('.$field->sql_name().",0)";
+      } elseif ($field->numeric() and $field->null) {
+        $k = 'COALESCE('.$name.",0)";
 
-      } elseif (!$number and $field->null) {
-        $k = 'COALESCE('.$field->sql_name().",'')";
+      } elseif (!$field->numeric() and $field->null) {
+        $k = 'COALESCE('.$name.",'')";
 
       } else {
-        $k = $field->sql_name();
+        $k = $name;
 
       }
 
index 41b50837adc1c7cdee252ca1d19b60ae18c9d6b9..f4437970f0c1bf0675a07b43ec790511df6269d2 100644 (file)
@@ -29,6 +29,10 @@ $DB_TYPES['pgsql'] = array (
   return $chr . $str . $chr;
 },
 
+'cast_text' => function($name) {
+       return "$name::text";
+},
+
 'localFile' => array (getenv('HOME').'/.pgpass','^[^:]+:[^:]+:<D.NAME>:(?P<user>[^:]+):(?<password>[^:]+)'),
 
 'databases' => 'SELECT datname as name,pg_catalog.pg_get_userbyid(datdba) as owner,pg_catalog.pg_encoding_encoding) as encoding, datcollate as "collate",datctype as "Ctype" FROM pg_catalog.pg_database',