Permalink
Browse files

Improve drivers

git-svn-id: https://adminer.svn.sourceforge.net/svnroot/adminer/trunk@1470 7c3ca157-0c34-0410-bff1-cbf682f78f5c
  • Loading branch information...
jakubvrana
jakubvrana committed Apr 21, 2010
1 parent 28e1dd2 commit a29ac72c9cc24e45acfea716b42845918fcc0227
@@ -105,11 +105,13 @@ function fetch_row() {
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 @@ function logged_user() {
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 @@ function count_tables($databases) {
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;
}
@@ -19,6 +19,7 @@ class Min_SQLite {
function __construct() {
$this->server_info = sqlite_libversion();
+ $this->_connection = new SQLiteDatabase(":memory:");
}
function open($filename) {
@@ -79,9 +80,16 @@ function fetch_row() {
}
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 @@ function __construct() {
}
function open($filename) {
- $this->_connection->open($filename);
+ $this->_connection = new SQLite3($filename);
}
function query($query) {
@@ -146,10 +154,11 @@ function fetch_row() {
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 @@ function __desctruct() {
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;
}
@@ -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>";
}
}
@@ -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 ''

0 comments on commit a29ac72

Please sign in to comment.