public function tables_nav_page($ctl) { $db_name = null; $tables = null; if (!empty($_REQUEST['db']) && isset(Database::$config['databases'][$_REQUEST['db']])) { $database = new Database($_REQUEST['db']); $db_name = $database->database; $tables = $database->get_tables(); } return array('database' => $db_name, 'tables' => $tables, 'databases' => Database::get_databases()); }
public function structure_page($ctl) { if (!isset(Database::$config['databases'][$_REQUEST['db']])) { return trigger_error("Invalid database: {$_REQUEST['db']}"); } $database = new Database($_REQUEST['db']); if (!in_array($_REQUEST['table'], $database->get_tables())) { return trigger_error("Invalid table: {$_REQUEST['table']}"); } $sql = "SELECT * FROM sqlite_master WHERE tbl_name = " . $database->dbh()->quote($_REQUEST['table']) . ""; $sth = $database->dbh()->query($sql); $table_cols = array(); $table_indexes = array(); foreach ($sth->fetchAll(PDO::FETCH_ASSOC) as $row) { if ($row['type'] == 'table') { foreach (explode(',', preg_replace('/^CREATE TABLE \\S+ \\(/', '', preg_replace('/\\)$/', '', trim($row['sql'])))) as $col_def) { /// PRIMARY KEY if (preg_match('/^PRIMARY KEY\\s*\\(\\s*(\\w+(?:\\s*,\\s*\\w+)*)\\s*\\)/i', trim($col_def), $m)) { $table_indexes['PRIMARY KEY'] = array('definition' => $m[1]); } else { if (preg_match('/^UNIQUE KEY\\s*\\(\\s*(\\w+(?:\\s*,\\s*\\w+)*)\\s*\\)/i', trim($col_def), $m)) { $table_indexes['UNIQUE KEY'] = array('definition' => $m[1]); } else { if (preg_match('/^(PRIMARY|KEY|CONSTRAINT|UNIQUE)/i', trim($col_def), $m)) { continue; } else { if (preg_match('/^(\\w+)\\s*(\\S.+)$/', trim($col_def), $m)) { $table_cols[$m[1]] = array('definition' => $m[2]); if (strpos(strtoupper($m[2]), 'PRIMARY KEY') !== false) { $table_indexes['PRIMARY KEY'] = array('definition' => '(' . $m[1] . ')'); } } } } } } } else { if ($row['type'] == 'index') { $table_indexes[$row['name']] = array('definition' => preg_replace('/^CREATE INDEX \\S+ ON \\w+/i', '', $row['sql'])); } } } return array('database' => $database->database, 'table' => $_REQUEST['table'], 'data' => $data, 'table_cols' => $table_cols, 'table_indexes' => $table_indexes); }