diff --git a/dibi/drivers/mssql.php b/dibi/drivers/mssql.php index 8b4b51ef..2d95a5c2 100644 --- a/dibi/drivers/mssql.php +++ b/dibi/drivers/mssql.php @@ -212,8 +212,7 @@ class DibiMsSqlDriver extends DibiObject implements IDibiDriver case dibi::IDENTIFIER: // @see http://msdn.microsoft.com/en-us/library/ms176027.aspx - $value = str_replace(array('[', ']'), array('[[', ']]'), $value); - return '[' . str_replace('.', '].[', $value) . ']'; + return '[' . str_replace(array('[', ']'), array('[[', ']]'), $value) . ']'; case dibi::BOOL: return $value ? 1 : 0; diff --git a/dibi/drivers/mssql2005.php b/dibi/drivers/mssql2005.php index b63dd058..58883d30 100644 --- a/dibi/drivers/mssql2005.php +++ b/dibi/drivers/mssql2005.php @@ -210,8 +210,7 @@ class DibiMsSql2005Driver extends DibiObject implements IDibiDriver case dibi::IDENTIFIER: // @see http://msdn.microsoft.com/en-us/library/ms176027.aspx - $value = str_replace(array('[', ']'), array('[[', ']]'), $value); - return '[' . str_replace('.', '].[', $value) . ']'; + return '[' . str_replace(array('[', ']'), array('[[', ']]'), $value) . ']'; case dibi::BOOL: return $value ? 1 : 0; diff --git a/dibi/drivers/mysql.php b/dibi/drivers/mysql.php index dc1a7f1c..d9d4b730 100644 --- a/dibi/drivers/mysql.php +++ b/dibi/drivers/mysql.php @@ -290,8 +290,7 @@ class DibiMySqlDriver extends DibiObject implements IDibiDriver case dibi::IDENTIFIER: // @see http://dev.mysql.com/doc/refman/5.0/en/identifiers.html - $value = str_replace('`', '``', $value); - return '`' . str_replace('.', '`.`', $value) . '`'; + return '`' . str_replace('`', '``', $value) . '`'; case dibi::BOOL: return $value ? 1 : 0; diff --git a/dibi/drivers/mysqli.php b/dibi/drivers/mysqli.php index 7561479d..430451ef 100644 --- a/dibi/drivers/mysqli.php +++ b/dibi/drivers/mysqli.php @@ -274,8 +274,7 @@ class DibiMySqliDriver extends DibiObject implements IDibiDriver return "_binary'" . mysqli_real_escape_string($this->connection, $value) . "'"; case dibi::IDENTIFIER: - $value = str_replace('`', '``', $value); - return '`' . str_replace('.', '`.`', $value) . '`'; + return '`' . str_replace('`', '``', $value) . '`'; case dibi::BOOL: return $value ? 1 : 0; diff --git a/dibi/drivers/odbc.php b/dibi/drivers/odbc.php index fc5d3133..9dedb00b 100644 --- a/dibi/drivers/odbc.php +++ b/dibi/drivers/odbc.php @@ -219,8 +219,7 @@ class DibiOdbcDriver extends DibiObject implements IDibiDriver return "'" . str_replace("'", "''", $value) . "'"; case dibi::IDENTIFIER: - $value = str_replace(array('[', ']'), array('[[', ']]'), $value); - return '[' . str_replace('.', '].[', $value) . ']'; + return '[' . str_replace(array('[', ']'), array('[[', ']]'), $value) . ']'; case dibi::BOOL: return $value ? 1 : 0; diff --git a/dibi/drivers/oracle.php b/dibi/drivers/oracle.php index e7b63e06..df32a185 100644 --- a/dibi/drivers/oracle.php +++ b/dibi/drivers/oracle.php @@ -228,8 +228,7 @@ class DibiOracleDriver extends DibiObject implements IDibiDriver case dibi::IDENTIFIER: // @see http://download.oracle.com/docs/cd/B10500_01/server.920/a96540/sql_elements9a.htm - $value = str_replace('"', '""', $value); - return '"' . str_replace('.', '"."', $value) . '"'; + return '"' . str_replace('"', '""', $value) . '"'; case dibi::BOOL: return $value ? 1 : 0; diff --git a/dibi/drivers/pdo.php b/dibi/drivers/pdo.php index 63cbee07..cb09b08f 100644 --- a/dibi/drivers/pdo.php +++ b/dibi/drivers/pdo.php @@ -242,25 +242,19 @@ class DibiPdoDriver extends DibiObject implements IDibiDriver case dibi::IDENTIFIER: switch ($this->connection->getAttribute(PDO::ATTR_DRIVER_NAME)) { case 'mysql': - $value = str_replace('`', '``', $value); - return '`' . str_replace('.', '`.`', $value) . '`'; + return '`' . str_replace('`', '``', $value) . '`'; case 'pgsql': - $a = strrpos($value, '.'); - if ($a === FALSE) { - return '"' . str_replace('"', '""', $value) . '"'; - } else { - return substr($value, 0, $a) . '."' . str_replace('"', '""', substr($value, $a + 1)) . '"'; - } + return '"' . str_replace('"', '""', $value) . '"'; case 'sqlite': case 'sqlite2': - $value = strtr($value, '[]', ' '); + return '[' . strtr($value, '[]', ' ') . ']'; + case 'odbc': case 'oci': // TODO: not tested case 'mssql': - $value = str_replace(array('[', ']'), array('[[', ']]'), $value); - return '[' . str_replace('.', '].[', $value) . ']'; + return '[' . str_replace(array('[', ']'), array('[[', ']]'), $value) . ']'; default: return $value; diff --git a/dibi/drivers/postgre.php b/dibi/drivers/postgre.php index ebf955bb..656f11d7 100644 --- a/dibi/drivers/postgre.php +++ b/dibi/drivers/postgre.php @@ -260,13 +260,7 @@ class DibiPostgreDriver extends DibiObject implements IDibiDriver case dibi::IDENTIFIER: // @see http://www.postgresql.org/docs/8.2/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS - $a = strrpos($value, '.'); - if ($a === FALSE) { - return '"' . str_replace('"', '""', $value) . '"'; - } else { - // table.col delimite as table."col" - return substr($value, 0, $a) . '."' . str_replace('"', '""', substr($value, $a + 1)) . '"'; - } + return '"' . str_replace('"', '""', $value) . '"'; case dibi::BOOL: return $value ? 'TRUE' : 'FALSE'; diff --git a/dibi/drivers/sqlite.php b/dibi/drivers/sqlite.php index 13e15188..6cf08cc1 100644 --- a/dibi/drivers/sqlite.php +++ b/dibi/drivers/sqlite.php @@ -234,7 +234,7 @@ class DibiSqliteDriver extends DibiObject implements IDibiDriver return "'" . sqlite_escape_string($value) . "'"; case dibi::IDENTIFIER: - return '[' . str_replace('.', '].[', strtr($value, '[]', ' ')) . ']'; + return '[' . strtr($value, '[]', ' ') . ']'; case dibi::BOOL: return $value ? 1 : 0; diff --git a/dibi/drivers/sqlite3.php b/dibi/drivers/sqlite3.php index 5cde44ca..0dc309f0 100644 --- a/dibi/drivers/sqlite3.php +++ b/dibi/drivers/sqlite3.php @@ -226,7 +226,7 @@ class DibiSqlite3Driver extends DibiObject implements IDibiDriver return "X'" . bin2hex((string) $value) . "'"; case dibi::IDENTIFIER: - return '[' . str_replace('.', '].[', strtr($value, '[]', ' ')) . ']'; + return '[' . strtr($value, '[]', ' ') . ']'; case dibi::BOOL: return $value ? 1 : 0; diff --git a/dibi/libs/DibiTranslator.php b/dibi/libs/DibiTranslator.php index 138ee2a6..6e95c433 100644 --- a/dibi/libs/DibiTranslator.php +++ b/dibi/libs/DibiTranslator.php @@ -564,14 +564,15 @@ final class DibiTranslator extends DibiObject */ private function delimite($value) { - if ($value === '*') { - return '*'; - - } elseif (strpos($value, ':') !== FALSE) { // provide substitution + if (strpos($value, ':') !== FALSE) { // provide substitution $value = preg_replace_callback('#:([^:\s]*):#', array(__CLASS__, 'subCb'), $value); } - return $this->driver->escape($value, dibi::IDENTIFIER); + $parts = explode('.', $value); + foreach ($parts as & $value) { + $value = $value === '*' ? '*' : $this->driver->escape($value, dibi::IDENTIFIER); + } + return implode('.', $parts); }