diff --git a/dibi/dibi.php b/dibi/dibi.php index 1c1e4601..8e14571a 100644 --- a/dibi/dibi.php +++ b/dibi/dibi.php @@ -543,9 +543,9 @@ class dibi extends NClass static $keywords1 = 'SELECT|UPDATE|INSERT(?:\s+INTO)|REPLACE(?:\s+INTO)|DELETE|FROM|WHERE|HAVING|GROUP\s+BY|ORDER\s+BY|LIMIT|SET|VALUES|LEFT\s+JOIN|INNER\s+JOIN'; // insert new lines - $sql = preg_replace("#\\b(?:$keywords1)\\b#i", "\n\$0", $sql); + $sql = ' ' . $sql; + $sql = preg_replace("#(?<=[\\s,(])($keywords1)(?=[\\s,)])#i", "\n\$1", $sql); - $sql = trim($sql); // reduce spaces $sql = preg_replace('# {2,}#', ' ', $sql); @@ -554,7 +554,8 @@ class dibi extends NClass $sql = preg_replace("#\n{2,}#", "\n", $sql); // syntax highlight - $sql = preg_replace_callback("#(/\\*.+?\\*/)|(\\*\\*.+?\\*\\*)|\\b($keywords1)\\b|\\b($keywords2)\\b#i", array('dibi', 'highlightCallback'), $sql); + $sql = preg_replace_callback("#(/\\*.+?\\*/)|(\\*\\*.+?\\*\\*)|(?<=[\\s,(])($keywords1)(?=[\\s,)])|(?<=[\\s,(])($keywords2)(?=[\\s,)])#i", array('dibi', 'highlightCallback'), $sql); + $sql = trim($sql); echo '
', $sql, "
\n"; } diff --git a/dibi/drivers/mysql.php b/dibi/drivers/mysql.php index eec6db83..41b0a2e7 100644 --- a/dibi/drivers/mysql.php +++ b/dibi/drivers/mysql.php @@ -344,8 +344,7 @@ class DibiMySqlDriver extends NObject implements DibiDriverInterface $meta = array(); for ($i = 0; $i < $count; $i++) { // items 'name' and 'table' are required - $info = (array) mysql_fetch_field($this->resultset, $i); - $meta[] = $info; + $meta[] = (array) mysql_fetch_field($this->resultset, $i); } return $meta; } diff --git a/dibi/drivers/mysqli.php b/dibi/drivers/mysqli.php index 9fb260bc..ac165e76 100644 --- a/dibi/drivers/mysqli.php +++ b/dibi/drivers/mysqli.php @@ -320,8 +320,7 @@ class DibiMySqliDriver extends NObject implements DibiDriverInterface $meta = array(); for ($i = 0; $i < $count; $i++) { // items 'name' and 'table' are required - $info = (array) mysqli_fetch_field_direct($this->resultset, $i); - $meta[] = $info; + $meta[] = (array) mysqli_fetch_field_direct($this->resultset, $i); } return $meta; } diff --git a/dibi/drivers/postgre.php b/dibi/drivers/postgre.php index 8b596e0b..cf2c0528 100644 --- a/dibi/drivers/postgre.php +++ b/dibi/drivers/postgre.php @@ -52,9 +52,9 @@ class DibiPostgreDriver extends NObject implements DibiDriverInterface /** * Escape method - * @var int + * @var bool */ - private $escMethod; + private $escMethod = FALSE; @@ -66,8 +66,6 @@ class DibiPostgreDriver extends NObject implements DibiDriverInterface if (!extension_loaded('pgsql')) { throw new DibiDriverException("PHP extension 'pgsql' is not loaded"); } - - $this->escMethod = version_compare(PHP_VERSION , '5.2.0', '>=') ? 1 : 0; } @@ -106,7 +104,7 @@ class DibiPostgreDriver extends NObject implements DibiDriverInterface DibiDriverException::restore(); } - if (!empty($config['escapefix'])) $this->escMethod = -1; + $this->escMethod = version_compare(PHP_VERSION , '5.2.0', '>='); } @@ -226,11 +224,17 @@ class DibiPostgreDriver extends NObject implements DibiDriverInterface public function format($value, $type) { if ($type === dibi::FIELD_TEXT) { - if ($this->escMethod === -1) return "'" . addSlashes($value) . "'"; - if ($this->escMethod === 1 && $this->connection) return "'" . pg_escape_string($this->connection, $value) . "'"; + if ($this->escMethod) return "'" . pg_escape_string($this->connection, $value) . "'"; return "'" . pg_escape_string($value) . "'"; } - if ($type === dibi::IDENTIFIER) return '"' . str_replace('.', '"."', str_replace('"', '""', $value)) . '"'; + + if ($type === dibi::IDENTIFIER) { + $a = strrpos($value, '.'); + if ($a === FALSE) return '"' . str_replace('"', '""', $value) . '"'; + // table.col delimite as table."col" + return substr($value, 0, $a) . '."' . str_replace('"', '""', substr($value, $a + 1)) . '"'; + } + if ($type === dibi::FIELD_BOOL) return $value ? 'TRUE' : 'FALSE'; if ($type === dibi::FIELD_DATE) return date("'Y-m-d'", $value); if ($type === dibi::FIELD_DATETIME) return date("'Y-m-d H:i:s'", $value); diff --git a/examples/sample.mdb b/examples/sample.mdb index dd1e6860..554e6a69 100644 Binary files a/examples/sample.mdb and b/examples/sample.mdb differ diff --git a/examples/sample.sdb b/examples/sample.sdb index 3b25650e..02f4cbe0 100644 Binary files a/examples/sample.sdb and b/examples/sample.sdb differ