From 92d1ecf3d5f7ffb232c6647876079e61d0d30298 Mon Sep 17 00:00:00 2001 From: Nicolas Boisselier Date: Wed, 3 Jan 2018 17:59:15 +0000 Subject: [PATCH] lib/php/db/table.php --- lib/php/db/field.php | 6 ++++++ lib/php/db/table.php | 20 +++++++++++--------- lib/php/db/types/pgsql.php | 4 ++++ 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/lib/php/db/field.php b/lib/php/db/field.php index e2b6a0eb..bbf835e6 100644 --- a/lib/php/db/field.php +++ b/lib/php/db/field.php @@ -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); } diff --git a/lib/php/db/table.php b/lib/php/db/table.php index 3702fb1a..16276729 100644 --- a/lib/php/db/table.php +++ b/lib/php/db/table.php @@ -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; } diff --git a/lib/php/db/types/pgsql.php b/lib/php/db/types/pgsql.php index 41b50837..f4437970 100644 --- a/lib/php/db/types/pgsql.php +++ b/lib/php/db/types/pgsql.php @@ -29,6 +29,10 @@ $DB_TYPES['pgsql'] = array ( return $chr . $str . $chr; }, +'cast_text' => function($name) { + return "$name::text"; +}, + 'localFile' => array (getenv('HOME').'/.pgpass','^[^:]+:[^:]+::(?P[^:]+):(?[^:]+)'), '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', -- 2.47.3