123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598 |
- <?php
- require_once 'MDB2/Driver/Manager/Common.php';
- class MDB2_Driver_Manager_fbsql extends MDB2_Driver_Manager_Common
- {
-
-
- function createDatabase($name, $options = array())
- {
- $db =& $this->getDBInstance();
- if (MDB2::isError($db)) {
- return $db;
- }
- $name = $db->quoteIdentifier($name, true);
- $query = "CREATE DATABASE $name";
- return $db->standaloneQuery($query, null, true);
- }
-
-
-
- function dropDatabase($name)
- {
- $db =& $this->getDBInstance();
- if (MDB2::isError($db)) {
- return $db;
- }
- $name = $db->quoteIdentifier($name, true);
- $query = "DELETE DATABASE $name";
- return $db->standaloneQuery($query, null, true);
- }
-
-
-
- function dropTable($name)
- {
- $db =& $this->getDBInstance();
- if (MDB2::isError($db)) {
- return $db;
- }
- $name = $db->quoteIdentifier($name, true);
- $result = $db->exec("DROP TABLE $name CASCADE");
- if (MDB2::isError($result)) {
- return $result;
- }
- return MDB2_OK;
- }
-
-
-
- function alterTable($name, $changes, $check)
- {
- $db =& $this->getDBInstance();
- if (MDB2::isError($db)) {
- return $db;
- }
- foreach ($changes as $change_name => $change){
- switch ($change_name) {
- case 'add':
- case 'remove':
- case 'change':
- case 'rename':
- case 'name':
- break;
- default:
- return $db->raiseError(MDB2_ERROR_CANNOT_ALTER, null, null,
- 'change type "'.$change_name.'" not yet supported', __FUNCTION__);
- }
- }
- if ($check) {
- return MDB2_OK;
- }
- $query = '';
- if (!empty($changes['name'])) {
- $change_name = $db->quoteIdentifier($changes['name'], true);
- $query .= 'RENAME TO ' . $change_name;
- }
- if (!empty($changes['add']) && is_array($changes['add'])) {
- foreach ($changes['add'] as $field_name => $field) {
- if ($query) {
- $query.= ', ';
- }
- $query.= 'ADD ' . $db->getDeclaration($field['type'], $field_name, $field);
- }
- }
- if (!empty($changes['remove']) && is_array($changes['remove'])) {
- foreach ($changes['remove'] as $field_name => $field) {
- if ($query) {
- $query.= ', ';
- }
- $field_name = $db->quoteIdentifier($field_name, true);
- $query.= 'DROP ' . $field_name;
- }
- }
- $rename = array();
- if (!empty($changes['rename']) && is_array($changes['rename'])) {
- foreach ($changes['rename'] as $field_name => $field) {
- $rename[$field['name']] = $field_name;
- }
- }
- if (!empty($changes['change']) && is_array($changes['change'])) {
- foreach ($changes['change'] as $field_name => $field) {
- if ($query) {
- $query.= ', ';
- }
- if (isset($rename[$field_name])) {
- $old_field_name = $rename[$field_name];
- unset($rename[$field_name]);
- } else {
- $old_field_name = $field_name;
- }
- $old_field_name = $db->quoteIdentifier($old_field_name, true);
- $query.= "CHANGE $old_field_name " . $db->getDeclaration($field['definition']['type'], $old_field_name, $field['definition']);
- }
- }
- if (!empty($rename) && is_array($rename)) {
- foreach ($rename as $renamed_field_name => $renamed_field) {
- if ($query) {
- $query.= ', ';
- }
- $old_field_name = $rename[$renamed_field_name];
- $field = $changes['rename'][$old_field_name];
- $query.= 'CHANGE ' . $db->getDeclaration($field['definition']['type'], $old_field_name, $field['definition']);
- }
- }
- if (!$query) {
- return MDB2_OK;
- }
- $name = $db->quoteIdentifier($name, true);
- $result = $db->exec("ALTER TABLE $name $query");
- if (MDB2::isError($result)) {
- return $result;
- }
- return MDB2_OK;
- }
-
-
-
- function listDatabases()
- {
- $db =& $this->getDBInstance();
- if (MDB2::isError($db)) {
- return $db;
- }
- return $db->raiseError(MDB2_ERROR_NOT_CAPABLE, null, null,
- 'not capable', __FUNCTION__);
- }
-
-
-
- function listUsers()
- {
- $db =& $this->getDBInstance();
- if (MDB2::isError($db)) {
- return $db;
- }
- return $db->queryCol('SELECT "user_name" FROM information_schema.users');
- }
-
-
-
- function listTables()
- {
- $db =& $this->getDBInstance();
- if (MDB2::isError($db)) {
- return $db;
- }
- $table_names = $db->queryCol('SELECT "table_name"'
- . ' FROM information_schema.tables'
- . ' t0, information_schema.schemata t1'
- . ' WHERE t0.schema_pk=t1.schema_pk AND'
- . ' "table_type" = \'BASE TABLE\''
- . ' AND "schema_name" = current_schema');
- if (MDB2::isError($table_names)) {
- return $table_names;
- }
- $result = array();
- for ($i = 0, $j = count($table_names); $i < $j; ++$i) {
- if (!$this->_fixSequenceName($table_names[$i], true)) {
- $result[] = $table_names[$i];
- }
- }
- if ($db->options['portability'] & MDB2_PORTABILITY_FIX_CASE) {
- $result = array_map(($db->options['field_case'] == CASE_LOWER ? 'strtolower' : 'strtoupper'), $result);
- }
- return $result;
- }
-
-
-
- function listTableFields($table)
- {
- $db =& $this->getDBInstance();
- if (MDB2::isError($db)) {
- return $db;
- }
- $table = $db->quoteIdentifier($table, true);
- $result = $db->queryCol("SHOW COLUMNS FROM $table");
- if (MDB2::isError($result)) {
- return $result;
- }
- if ($db->options['portability'] & MDB2_PORTABILITY_FIX_CASE) {
- $result = array_map(($db->options['field_case'] == CASE_LOWER ? 'strtolower' : 'strtoupper'), $result);
- }
- return $result;
- }
-
-
-
- function dropIndex($table, $name)
- {
- $db =& $this->getDBInstance();
- if (MDB2::isError($db)) {
- return $db;
- }
- $table = $db->quoteIdentifier($table, true);
- $name = $db->quoteIdentifier($db->getIndexName($name), true);
- $result = $db->exec("ALTER TABLE $table DROP INDEX $name");
- if (MDB2::isError($result)) {
- return $result;
- }
- return MDB2_OK;
- }
-
-
-
- function listTableIndexes($table)
- {
- $db =& $this->getDBInstance();
- if (MDB2::isError($db)) {
- return $db;
- }
- $key_name = 'Key_name';
- if ($db->options['portability'] & MDB2_PORTABILITY_FIX_CASE) {
- if ($db->options['field_case'] == CASE_LOWER) {
- $key_name = strtolower($key_name);
- } else {
- $key_name = strtoupper($key_name);
- }
- }
- $table = $db->quoteIdentifier($table, true);
- $query = "SHOW INDEX FROM $table";
- $indexes = $db->queryCol($query, 'text', $key_name);
- if (MDB2::isError($indexes)) {
- return $indexes;
- }
- $result = array();
- foreach ($indexes as $index) {
- if ($index != 'PRIMARY' && ($index = $this->_fixIndexName($index))) {
- $result[$index] = true;
- }
- }
- if ($db->options['portability'] & MDB2_PORTABILITY_FIX_CASE) {
- $result = array_change_key_case($result, $db->options['field_case']);
- }
- return array_keys($result);
- }
-
-
-
- function createSequence($seq_name, $start = 1)
- {
- $db =& $this->getDBInstance();
- if (MDB2::isError($db)) {
- return $db;
- }
- $sequence_name = $db->quoteIdentifier($db->getSequenceName($seq_name), true);
- $seqcol_name = $db->quoteIdentifier($db->options['seqcol_name'], true);
- $query = "CREATE TABLE $sequence_name ($seqcol_name INTEGER DEFAULT UNIQUE, PRIMARY KEY($seqcol_name))";
- $res = $db->exec($query);
- $res = $db->exec("SET UNIQUE = 1 FOR $sequence_name");
- if (MDB2::isError($res)) {
- return $res;
- }
- if ($start == 1) {
- return MDB2_OK;
- }
- $res = $db->exec("INSERT INTO $sequence_name ($seqcol_name) VALUES (".($start-1).')');
- if (!MDB2::isError($res)) {
- return MDB2_OK;
- }
-
- $result = $db->exec("DROP TABLE $sequence_name");
- if (MDB2::isError($result)) {
- return $db->raiseError($result, null, null,
- 'could not drop inconsistent sequence table', __FUNCTION__);
- }
- return $db->raiseError($res, null, null,
- 'could not create sequence table', __FUNCTION__);
- }
-
-
-
- function dropSequence($seq_name)
- {
- $db =& $this->getDBInstance();
- if (MDB2::isError($db)) {
- return $db;
- }
- $sequence_name = $db->quoteIdentifier($db->getSequenceName($seq_name), true);
- $result = $db->exec("DROP TABLE $sequence_name CASCADE");
- if (MDB2::isError($result)) {
- return $result;
- }
- return MDB2_OK;
- }
-
-
-
- function listSequences()
- {
- $db =& $this->getDBInstance();
- if (MDB2::isError($db)) {
- return $db;
- }
- $table_names = $db->queryCol('SHOW TABLES', 'text');
- if (MDB2::isError($table_names)) {
- return $table_names;
- }
- $result = array();
- for ($i = 0, $j = count($table_names); $i < $j; ++$i) {
- if ($sqn = $this->_fixSequenceName($table_names[$i], true)) {
- $result[] = $sqn;
- }
- }
- if ($db->options['portability'] & MDB2_PORTABILITY_FIX_CASE) {
- $result = array_map(($db->options['field_case'] == CASE_LOWER ? 'strtolower' : 'strtoupper'), $result);
- }
- return $result;
- }
-
- }
- ?>
|