1
0
mirror of https://github.com/dg/dibi.git synced 2025-08-13 01:24:06 +02:00

* fixed identifier delimitation in DibiPostgreDriver (table.col -> table."col")

* better SQL syntax highlighting
* removed addslashes from DibiPostgreDriver
This commit is contained in:
David Grudl
2007-12-01 17:24:49 +00:00
parent cbd37021f2
commit 7d964e054b
6 changed files with 18 additions and 15 deletions

View File

@@ -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 '<pre class="dump">', $sql, "</pre>\n";
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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);

Binary file not shown.

Binary file not shown.