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;
}
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) {
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;
}
function __construct() {
$this->server_info = sqlite_libversion();
+ $this->_connection = new SQLiteDatabase(":memory:");
}
function open($filename) {
}
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,
);
}
}
function open($filename) {
- $this->_connection->open($filename);
+ $this->_connection = new SQLite3($filename);
}
function query($query) {
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
);
}
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;
}
$links[$j] = $orgtable;
}
}
- if ($field->charsetnr == 63) {
+ if ($field->charsetnr == 63) { // 63 - binary
$blobs[$j] = true;
}
$types[$j] = $field->type;
$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>";
}
}
* @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 ''