Improve drivers

git-svn-id: https://adminer.svn.sourceforge.net/svnroot/adminer/trunk@1470 7c3ca157-0c34-0410-bff1-cbf682f78f5c
This commit is contained in:
jakubvrana 2010-04-21 22:22:23 +00:00
parent 28e1dd286a
commit a29ac72c9c
4 changed files with 29 additions and 17 deletions

View file

@ -105,11 +105,13 @@ if (isset($_GET["pgsql"])) {
function fetch_field() {
$column = $this->_offset++;
$row = new stdClass;
$row->orgtable = pg_field_table($this->_result, $column);
if (function_exists('pg_field_table')) {
$row->orgtable = pg_field_table($this->_result, $column);
}
$row->name = pg_field_name($this->_result, $column);
$row->orgname = $row->name;
$row->type = pg_field_type($this->_result, $column);
$row->charsetnr = ($row->type == "bytea" ? 63 : 0);
$row->charsetnr = ($row->type == "bytea" ? 63 : 0); // 63 - binary
return $row;
}
@ -178,7 +180,7 @@ if (isset($_GET["pgsql"])) {
function tables_list() {
global $connection;
return get_key_vals("SELECT table_name, table_type FROM information_schema.tables WHERE table_schema = 'public' ORDER BY table_name");
return get_key_vals("SELECT table_name, table_type FROM information_schema.tables WHERE table_schema = current_schema() ORDER BY table_name");
}
function count_tables($databases) {
@ -188,7 +190,12 @@ if (isset($_GET["pgsql"])) {
function table_status($name = "") {
global $connection;
$return = array();
$result = $connection->query("SELECT relname AS \"Name\", CASE relkind WHEN 'r' THEN '' ELSE 'view' END AS \"Engine\", pg_relation_size(oid) AS \"Data_length\", pg_catalog.obj_description(oid, 'pg_class') AS \"Comment\" FROM pg_catalog.pg_class WHERE relkind IN ('r','v') AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'public')" . ($name != "" ? " AND relname = " . $connection->quote($name) : "")); //! Index_length, Auto_increment
$result = $connection->query("SELECT relname AS \"Name\", CASE relkind WHEN 'r' THEN '' ELSE 'view' END AS \"Engine\", pg_relation_size(oid) AS \"Data_length\", pg_catalog.obj_description(oid, 'pg_class') AS \"Comment\"
FROM pg_catalog.pg_class
WHERE relkind IN ('r','v')
AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema())"
. ($name != "" ? " AND relname = " . $connection->quote($name) : "")
); //! Index_length, Auto_increment
while ($row = $result->fetch_assoc()) {
$return[$row["Name"]] = $row;
}

View file

@ -19,6 +19,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
function __construct() {
$this->server_info = sqlite_libversion();
$this->_connection = new SQLiteDatabase(":memory:");
}
function open($filename) {
@ -79,9 +80,16 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
}
function fetch_field() {
$name = $this->_result->fieldName($this->_offset++);
$pattern = '(\\[.*]|"(?:[^"]|"")*"|(.+))';
if (preg_match("~^($pattern\\.)?$pattern\$~", $name, $match)) {
$table = ($match[3] != "" ? $match[3] : idf_unescape($match[2]));
$name = ($match[5] != "" ? $match[5] : idf_unescape($match[4]));
}
return (object) array(
"name" => $this->_result->fieldName($this->_offset++),
//! type, orgtable, charsetnr
"name" => $name,
"orgname" => $name,
"orgtable" => $table,
);
}
@ -99,7 +107,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
}
function open($filename) {
$this->_connection->open($filename);
$this->_connection = new SQLite3($filename);
}
function query($query) {
@ -146,10 +154,11 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
function fetch_field() {
$column = $this->_offset++;
$type = $this->_result->columnType($column);
return (object) array(
"name" => $this->_result->columnName($column),
"type" => $this->_result->columnType($column),
//! orgtable, charsetnr
"type" => $type,
"charsetnr" => ($type == SQLITE3_BLOB ? 63 : 0), // 63 - binary
);
}
@ -163,13 +172,8 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
class Min_DB extends Min_SQLite {
function select_db($filename) {
static $connected = false;
if ($connected) {
return true;
}
set_exception_handler('connect_error'); // try/catch is not compatible with PHP 4
$this->open($filename);
$connected = true;
restore_exception_handler();
return true;
}

View file

@ -40,7 +40,7 @@ function select($result, $connection2 = null) {
$links[$j] = $orgtable;
}
}
if ($field->charsetnr == 63) {
if ($field->charsetnr == 63) { // 63 - binary
$blobs[$j] = true;
}
$types[$j] = $field->type;
@ -59,7 +59,7 @@ function select($result, $connection2 = null) {
$val = " "; // some content to print a border
} else {
$val = h($val);
if ($types[$key] == 254) {
if ($types[$key] == 254) { // 254 - char
$val = "<code>$val</code>";
}
}

View file

@ -13,7 +13,8 @@ function connection() {
* @return string
*/
function idf_unescape($idf) {
return str_replace($idf[0] . $idf[0], $idf[0], substr($idf, 1, -1));
$last = substr($idf, -1);
return str_replace($last . $last, $last, substr($idf, 1, -1));
}
/** Escape string to use inside ''