From 055f775cc08227858a2377069deb64f6afcd26c8 Mon Sep 17 00:00:00 2001 From: ChanMyeong Date: Tue, 9 Oct 2012 02:45:35 +0000 Subject: [PATCH] Issue 2043 fixed. Muted disabled DBMS options. Removed not supported DBMS options. git-svn-id: http://xe-core.googlecode.com/svn/branches/maserati@11637 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- classes/db/DBFirebird.class.php | 868 ---------------------------- classes/db/DBPostgresql.class.php | 600 ------------------- classes/db/DBSqlite3_pdo.class.php | 636 -------------------- modules/install/tpl/css/install.css | 2 + modules/install/tpl/select_db.html | 38 +- 5 files changed, 18 insertions(+), 2126 deletions(-) delete mode 100644 classes/db/DBFirebird.class.php delete mode 100644 classes/db/DBPostgresql.class.php delete mode 100644 classes/db/DBSqlite3_pdo.class.php diff --git a/classes/db/DBFirebird.class.php b/classes/db/DBFirebird.class.php deleted file mode 100644 index b3c0bb4e8..000000000 --- a/classes/db/DBFirebird.class.php +++ /dev/null @@ -1,868 +0,0 @@ - 'BIGINT', - 'number' => 'INTEGER', - 'varchar' => 'VARCHAR', - 'char' => 'CHAR', - 'text' => 'BLOB SUB_TYPE TEXT SEGMENT SIZE 32', - 'bigtext' => 'BLOB SUB_TYPE TEXT SEGMENT SIZE 32', - 'date' => 'VARCHAR(14)', - 'float' => 'FLOAT', - ); - - /** - * @brief constructor - **/ - function DBFireBird() { - $this->_setDBInfo(); - $this->_connect(); - } - - /** - * @brief create an instance of this class - */ - function create() - { - return new DBFireBird; - } - - /** - * @brief Return if installable - **/ - function isSupported() { - if(!function_exists('ibase_connect')) return false; - return true; - } - - /** - * @brief DB Connection - **/ - function __connect($connection) { - //if(strpos($this->hostname, ':')===false && $this->port) $this->hostname .= ':'.$this->port; - // attempts to connect - $host = $connection["db_hostname"]."/".$connection["db_port"].":".$connection["db_database"]; - - $result = ibase_connect($host, $connection["db_userid"], $connection["db_password"]); - if(ibase_errmsg()) { - $this->setError(ibase_errcode(), ibase_errmsg()); - return; - } - // Error when Firebird version is lower than 2.0 - if (($service = ibase_service_attach($connection["db_hostname"], $connection["db_userid"], $connection["db_password"])) != FALSE) { - // get server version and implementation strings - $server_info = ibase_server_info($service, IBASE_SVC_SERVER_VERSION); - ibase_service_detach($service); - } - else { - $this->setError(ibase_errcode(), ibase_errmsg()); - ibase_close($result); - return; - } - - $pos = strpos($server_info, "Firebird"); - if($pos !== false) { - $ver = substr($server_info, $pos+strlen("Firebird")); - $ver = trim($ver); - } - - if($ver < "2.0") { - $this->setError(-1, "XE cannot be installed under the version of firebird 2.0. Current firebird version is ".$ver); - ibase_close($result); - return; - } - return $result; - } - - /** - * @brief DB disconnect - **/ - function _close($connection) { - ibase_commit($connection); - ibase_close($connection); - } - - /** - * @brief handles quatation of the string variables from the query - **/ - function addQuotes($string) { - if(get_magic_quotes_gpc()) $string = stripslashes(str_replace("\\","\\\\",$string)); - if(!is_numeric($string)) $string = str_replace("'","''", $string); - return $string; - } - - /** - * @brief put double quotes for tabls, column names in the query statement - **/ - function addDoubleQuotes($string) { - if($string == "*") return $string; - - if(strpos($string, "'")!==false) { - $string = str_replace("'", "\"", $string); - } - else if(strpos($string, "\"")!==false) { - } - else { - $string = "\"".$string."\""; - } - - return $string; - } - - /** - * @brief put double quotes for tabls, column names in the query statement - **/ - function autoQuotes($string){ - $string = strtolower($string); - // for substr function - if(strpos($string, "substr(") !== false) { - $tokken = strtok($string, "(,)"); - $tokken = strtok("(,)"); - while($tokken) { - $tokkens[] = $tokken; - $tokken = strtok("(,)"); - } - - if(count($tokkens) !== 3) return $string; - return sprintf("substring(%s from %s for %s)", $this->addDoubleQuotes($tokkens[0]), $tokkens[1], $tokkens[2]); - } - - // as - $as = false; - if(($no1 = strpos($string," as ")) !== false) { - $as = substr($string, $no1, strlen($string)-$no1); - $string = substr($string, 0, $no1); - - $as = str_replace(" as ", "", $as); - $as = trim($as); - $as = $this->addDoubleQuotes($as); - } - // for functions - $tmpFunc1 = null; - $tmpFunc2 = null; - if(($no1 = strpos($string,'('))!==false && ($no2 = strpos($string, ')'))!==false) { - $tmpFunc1 = substr($string, 0, $no1+1); - $tmpFunc2 = substr($string, $no2, strlen($string)-$no2+1); - $string = trim(substr($string, $no1+1, $no2-$no1-1)); - } - // for (table.column) structure - preg_match("/((?i)[a-z0-9_-]+)[.]((?i)[a-z0-9_\-\*]+)/", $string, $matches); - - if($matches) { - $string = $this->addDoubleQuotes($matches[1]).".".$this->addDoubleQuotes($matches[2]); - } - else { - $string = $this->addDoubleQuotes($string); - } - - if($tmpFunc1 != null) $string = $tmpFunc1.$string; - if($tmpFunc2 != null) $string = $string.$tmpFunc2; - - if($as !== false) $string = $string." as ".$as; - return $string; - } - - function autoValueQuotes($string, $tables){ - $tok = strtok($string, ","); - while($tok !== false) { - $values[] = $tok; - $tok = strtok(","); - } - - foreach($values as $val1) { - // for (table.column) structure - preg_match("/((?i)[a-z0-9_-]+)[.]((?i)[a-z0-9_\-\*]+)/", $val1, $matches); - if($matches) { - $isTable = false; - - foreach($tables as $key2 => $val2) { - if($key2 == $matches[1]) $isTable = true; - if($val2 == $matches[1]) $isTable = true; - } - - if($isTable) { - $return[] = $this->addDoubleQuotes($matches[1]).".".$this->addDoubleQuotes($matches[2]); - } - else { - $return[] = $val1; - } - } - else if(!is_numeric($val1)) { - if(strpos($val1, "'") !== 0) - $return[] = "'".$val1."'"; - else - $return[] = $val1; - } - else { - $return[] = $val1; - } - } - - return implode(",", $return); - } - - /** - * @brief Begin transaction - **/ - function _begin() { - return true; - } - - /** - * @brief Rollback - **/ - function _rollback() { - $connection = $this->_getConnection('master'); - ibase_rollback($connection); - return true; - } - - /** - * @brief Commits - **/ - function _commit() { - $connection = $this->_getConnection('master'); - ibase_commit($connection); - return true; - } - - /** - * @brief : Run a query and fetch the result - * - * query: run a query and return the result\n - * fetch: NULL if no value returned \n - * array object if rows returned \n - * object if a row returned \n - * return\n - **/ - function __query($query, $connection, $params = null) { - if(count($params) == 0) { - // Execute the query statement - $result = ibase_query($connection, $query); - } - else { - // Execute the query(for blob type) - $query = ibase_prepare($connection, $query); - //$fnarr = array_merge(array($query), $params); - $result = ibase_execute($query); - } - // Error Check - if(ibase_errmsg()) $this->setError(ibase_errcode(), ibase_errmsg()); - - return $result; - } - - function _queryInsertUpdateDeleteSelect($query, $params=null, $connection) { - if(!$connection) return; - - if(count($params) == 0) { - // Notify to start a query execution - $this->actStart($query); - // Execute the query statement - $trans = ibase_trans(IBASE_DEFAULT,$connection); - $result = ibase_query($trans, $query); - ibase_commit($trans); - unset($trans); - } - else { - // Notify to start a query execution - $log = $query."\n\t\t\t"; - $log .= implode(",", $params); - $this->actStart($log); - // Execute the query(for blob type) - $query = ibase_prepare($connection, $query); - //$fnarr = array_merge(array($query), $params); - $result = ibase_execute($query); - } - // Error Check - if(ibase_errmsg()) $this->setError(ibase_errcode(), ibase_errmsg()); - // Notify to complete a query execution - $this->actFinish(); - // Return the result - return $result; - } - - function getTableInfo($result){ - $coln = ibase_num_fields($result); - $column_type = array(); - for ($i = 0; $i < $coln; $i++) { - $col_info = ibase_field_info($result, $i); - if($col_info['name'] === "") $column_type[$col_info['alias']] = $col_info['type']; - else $column_type[$col_info['name']] = $col_info['type']; - } - return $column_type; - } - /** - * @brief Fetch the result - **/ - function _fetch($result, $output = null) { - if(!$this->isConnected() || $this->isError() || !$result) return; - $output->column_type = $this->getTableInfo($result); - - while($tmp = ibase_fetch_object($result)) { - foreach($tmp as $key => $val) { - $type = $output->column_type[$key]; - // type value is null when $key is an alias. so get a type by finding actual coloumn name - if($type == null && $output->columns && count($output->columns)) { - foreach($output->columns as $cols) { - if($cols['alias'] == $key) { - // checks if the format is table.column or a regular expression - preg_match("/\w+[.](\w+)/", $cols['name'], $matches); - if($matches) { - $type = $output->column_type[$matches[1]]; - } - else { - $type = $output->column_type[$cols['name']]; - } - } - } - } - - if(($type == "text" || $type == "bigtext" || $type == "BLOB") && $tmp->{$key}) { - $blob_data = ibase_blob_info($tmp->{$key}); - $blob_hndl = ibase_blob_open($tmp->{$key}); - - if($blob_data[1] === 1) { - $tmp->{$key} = ibase_blob_get($blob_hndl, $blob_data[0]); - } else { - for ($i = 0; $i < $blob_data[1]; $i++) { - $readsize = $blob_data[2]; - if ($i == ($blob_data[1] - 1)) { - $readsize = $blob_data[0] - (($blob_data[1] - 1) * $blob_data[2]); - } - $totalimage .= ibase_blob_get($blob_hndl, $readsize); - } - } - - ibase_blob_close($blob_hndl); - } - else if($type == "CHAR") { - $tmp->{$key} = trim($tmp->{$key}); // remove blanks generated when DB character set is UTF8 - } - } - - $return[] = $tmp; - } - - if(count($return)==1) return $return[0]; - return $return; - } - - /** - * @brief return sequence value incremented by 1(increase the value of the generator in firebird) - **/ - function getNextSequence() { - //$gen = "GEN_".$this->prefix."sequence_ID"; - $gen = 'GEN_XE_SEQUENCE_ID'; - $sequence = ibase_gen_id($gen, 1); - return $sequence; - } - - /** - * @brief returns if the table already exists - **/ - function isTableExists($target_name) { - $query = sprintf("select rdb\$relation_name from rdb\$relations where rdb\$system_flag=0 and rdb\$relation_name = '%s%s';", $this->prefix, $target_name); - $result = $this->_query($query); - $tmp = $this->_fetch($result); - $connection = $this->_getConnection('master'); - if(!$tmp) { - if(!$this->transaction_started) ibase_rollback($connection); - return false; - } - if(!$this->transaction_started) ibase_commit($connection); - return true; - } - - /** - * @brief add a column to the table - **/ - function addColumn($table_name, $column_name, $type='number', $size='', $default = '', $notnull=false) { - $type = $this->column_type[$type]; - if(strtoupper($type)=='INTEGER') $size = null; - else if(strtoupper($type)=='BIGINT') $size = null; - else if(strtoupper($type)=='BLOB SUB_TYPE TEXT SEGMENT SIZE 32') $size = null; - else if(strtoupper($type)=='VARCHAR' && !$size) $size = 256; - - $query = sprintf("ALTER TABLE \"%s%s\" ADD \"%s\" ", $this->prefix, $table_name, $column_name); - if($size) $query .= sprintf(" %s(%s) ", $type, $size); - else $query .= sprintf(" %s ", $type); - if(!is_null($default)) $query .= sprintf(" DEFAULT '%s' ", $default); - if($notnull) $query .= " NOT NULL "; - - $this->_query($query); - - if(!$this->transaction_started) { - $connection = $this->_getConnection('master'); - ibase_commit($connection); - } - } - - /** - * @brief drop a column from the table - **/ - function dropColumn($table_name, $column_name) { - $query = sprintf("alter table %s%s drop %s ", $this->prefix, $table_name, $column_name); - $this->_query($query); - if(!$this->transaction_started) { - $connection = $this->_getConnection('master'); - ibase_commit($connection); - } - - } - - - /** - * @brief return column information of the table - **/ - function isColumnExists($table_name, $column_name) { - $query = sprintf("SELECT RDB\$FIELD_NAME as \"FIELD\" FROM RDB\$RELATION_FIELDS WHERE RDB\$RELATION_NAME = '%s%s'", $this->prefix, $table_name); - $result = $this->_query($query); - $connection = $this->_getConnection('master'); - - if($this->isError()) { - if(!$this->transaction_started) ibase_rollback($connection); - return false; - } - - $output = $this->_fetch($result); - if(!$this->transaction_started) ibase_commit($connection); - - if($output) { - $column_name = strtolower($column_name); - foreach($output as $key => $val) { - $name = trim(strtolower($val->FIELD)); - if($column_name == $name) return true; - } - } - return false; - } - - /** - * @brief add an index to the table - * $target_columns = array(col1, col2) - * $is_unique? unique : none - **/ - function addIndex($table_name, $index_name, $target_columns, $is_unique = false) { - // index name size should be limited to 31 byte. no index name assigned - // if index name omitted, Firebird automatically assign its name like "RDB $10" - // deletes indexes when deleting the table - if(!is_array($target_columns)) $target_columns = array($target_columns); - - $query = sprintf('CREATE %s INDEX "" ON "%s%s" ("%s");', $is_unique?'UNIQUE':'', $this->prefix, $table_name, implode('", "',$target_columns)); - $this->_query($query); - - $connection = $this->_getConnection('master'); - if(!$this->transaction_started) ibase_commit($connection); - } - - /** - * @brief drop an index from the table - **/ - function dropIndex($table_name, $index_name, $is_unique = false) { - $query = sprintf('DROP INDEX "%s" ON "%s%s"', $index_name, $this->prefix, $table_name); - $this->_query($query); - - $connection = $this->_getConnection('master'); - if(!$this->transaction_started) ibase_commit($connection); - } - - - /** - * @brief return index information of the table - **/ - function isIndexExists($table_name, $index_name) { - $query = "SELECT\n"; - $query .= " RDB\$INDICES.rdb\$index_name AS Key_name\n"; - $query .= "FROM\n"; - $query .= " RDB\$INDICES, rdb\$index_segments\n"; - $query .= "WHERE\n"; - $query .= " RDB\$INDICES.rdb\$index_name = rdb\$index_segments.rdb\$index_name AND\n"; - $query .= " RDB\$INDICES.rdb\$relation_name = '"; - $query .= $this->prefix; - $query .= $table_name; - $query .= "' AND\n"; - $query .= " RDB\$INDICES.rdb\$index_name = '"; - $query .= $index_name; - $query .= "'"; - - $result = $this->_query($query); - if($this->isError()) return; - $output = $this->_fetch($result); - - if(!$output) { - $connection = $this->_getConnection('master'); - if(!$this->transaction_started) ibase_rollback($connection); - return false; - } - - if(!$this->transaction_started) { - $connection = $this->_getConnection('master'); - ibase_commit($connection); - } - - if(!is_array($output)) $output = array($output); - for($i=0;$iKEY_NAME) == $index_name) return true; - } - - return false; - } - - /** - * @brief creates a table by using xml file - **/ - function createTableByXml($xml_doc) { - return $this->_createTable($xml_doc); - } - - /** - * @brief creates a table by using xml file - **/ - function createTableByXmlFile($file_name) { - if(!file_exists($file_name)) return; - // read xml file - $buff = FileHandler::readFile($file_name); - return $this->_createTable($buff); - } - - /** - * @brief create table by using the schema xml - * - * type : number, varchar, text, char, date, \n - * opt : notnull, default, size\n - * index : primary key, index, unique\n - **/ - function _createTable($xml_doc) { - // xml parsing - $oXml = new XmlParser(); - $xml_obj = $oXml->parse($xml_doc); - // Create a table schema - $table_name = $xml_obj->table->attrs->name; - if($this->isTableExists($table_name)) return; - $table_name = $this->prefix.$table_name; - - if(!is_array($xml_obj->table->column)) $columns[] = $xml_obj->table->column; - else $columns = $xml_obj->table->column; - - foreach($columns as $column) { - $name = $column->attrs->name; - $type = $column->attrs->type; - $size = $column->attrs->size; - $notnull = $column->attrs->notnull; - $primary_key = $column->attrs->primary_key; - $index = $column->attrs->index; - $unique = $column->attrs->unique; - $default = $column->attrs->default; - $auto_increment = $column->attrs->auto_increment; - - if($this->column_type[$type]=='INTEGER') $size = null; - else if($this->column_type[$type]=='BIGINT') $size = null; - else if($this->column_type[$type]=='BLOB SUB_TYPE TEXT SEGMENT SIZE 32') $size = null; - else if($this->column_type[$type]=='VARCHAR' && !$size) $size = 256; - - $column_schema[] = sprintf('"%s" %s%s %s %s', - $name, - $this->column_type[$type], - $size?'('.$size.')':'', - is_null($default)?"":"DEFAULT '".$default."'", - $notnull?'NOT NULL':''); - - if($auto_increment) $auto_increment_list[] = $name; - - if($primary_key) $primary_list[] = $name; - else if($unique) $unique_list[$unique][] = $name; - else if($index) $index_list[$index][] = $name; - } - - if(count($primary_list)) { - $column_schema[] = sprintf("PRIMARY KEY(\"%s\")%s", implode("\",\"", $primary_list), "\n"); - } - - if(count($unique_list)) { - foreach($unique_list as $key => $val) { - $column_schema[] = sprintf("UNIQUE(\"%s\")%s", implode("\",\"", $val), "\n"); - } - } - - $schema = sprintf("CREATE TABLE \"%s\" (%s%s); \n", $table_name, "\n", implode($column_schema, ",\n")); - - $output = $this->_query($schema); - if(!$this->transaction_started) { - $connection = $this->_getConnection('master'); - ibase_commit($connection); - } - if(!$output) return false; - - if(count($index_list)) { - foreach($index_list as $key => $val) { - // index name size should be limited to 31 byte. no index name assigned - // if index name omitted, Firebird automatically assign its name like "RDB $10" - // deletes indexes when deleting the table - $schema = sprintf("CREATE INDEX \"\" ON \"%s\" (\"%s\");", - $table_name, implode($val, "\",\"")); - $output = $this->_query($schema); - if(!$this->transaction_started) { - $connection = $this->_getConnection('master'); - ibase_commit($connection); - } - if(!$output) return false; - } - } - - if($_GLOBALS['XE_EXISTS_SEQUENCE']) return; - $schema = 'CREATE GENERATOR GEN_XE_SEQUENCE_ID;'; - $output = $this->_query($schema); - if(!$this->transaction_started) { - $connection = $this->_getConnection('master'); - ibase_commit($connection); - } - if(!$output) return false; - $_GLOBALS['XE_EXISTS_SEQUENCE'] = true; - /*if($auto_increment_list) - foreach($auto_increment_list as $increment) { - $schema = sprintf('CREATE GENERATOR GEN_%s_ID;', $table_name); - $output = $this->_query($schema); - if(!$this->transaction_started) ibase_commit($this->fd); - if(!$output) return false;*/ - // auto_increment in Firebird creates a generator which activates a trigger when insert occurs - // the generator increases the value of the generator and then insert to the table - // The trigger below acts like auto_increment however I commented the below because the trigger cannot be defined by a query statement - // php api has a function to increase a generator, so - // no need to use auto increment in XE - /* - $schema = 'SET TERM ^ ; '; - $schema .= sprintf('CREATE TRIGGER "%s_BI" FOR "%s" ', $table_name, $table_name); - $schema .= 'ACTIVE BEFORE INSERT POSITION 0 '; - $schema .= sprintf('AS BEGIN IF (NEW."%s" IS NULL) THEN ', $increment); - $schema .= sprintf('NEW."%s" = GEN_ID("GEN_%s_ID",1);', $increment, $table_name); - $schema .= 'END^ SET TERM ; ^'; - - $output = $this->_query($schema); - if(!$output) return false; - */ - //} - } - - - /** - * @brief Handle the insertAct - **/ - function _executeInsertAct($queryObject) { - $query = $this->getInsertSql($queryObject); - if(is_a($query, 'Object')) return; - return $this->_queryInsertUpdateDeleteSelect($query); - } - - /** - * @brief handles updateAct - **/ - function _executeUpdateAct($queryObject) { - $query = $this->getUpdateSql($queryObject); - if(is_a($query, 'Object')) return; - return $this->_queryInsertUpdateDeleteSelect($query); - } - - /** - * @brief handles deleteAct - **/ - function _executeDeleteAct($queryObject) { - $query = $this->getDeleteSql($queryObject); - if(is_a($query, 'Object')) return; - return $this->_queryInsertUpdateDeleteSelect($query); - } - - /** - * @brief Handle selectAct - * - * In order to get a list of pages easily when selecting \n - * it supports a method as navigation - **/ - function _executeSelectAct($queryObject, $connection) { - $query = $this->getSelectSql($queryObject); - if(strpos($query, "substr")) { - $query = str_replace ("substr", "substring", $query); - $query = $this->replaceSubstrFormat($query); - } - if(is_a($query, 'Object')) return; - $query .= (__DEBUG_QUERY__&1 && $queryObject->query_id)?sprintf(' '.$this->comment_syntax,$this->query_id):''; - $result = $this->_queryInsertUpdateDeleteSelect ($query, null, $connection); - - if ($this->isError ()) return $this->queryError($queryObject); - else return $this->queryPageLimit($queryObject, $result, $connection); - } - - function queryError($queryObject) { - $limit = $queryObject->getLimit(); - if ($limit && $limit->isPageHandler()) { - $buff = new Object (); - $buff->total_count = 0; - $buff->total_page = 0; - $buff->page = 1; - $buff->data = array(); - $buff->page_navigation = new PageHandler(/* $total_count */0, /* $total_page */1, /* $page */1, /* $page_count */10); //default page handler values - }else - return; - } - - function queryPageLimit($queryObject, $result, $connection) { - $limit = $queryObject->getLimit(); - if ($limit && $limit->isPageHandler()) { - // Total count - $temp_where = $queryObject->getWhereString(true, false); - $count_query = sprintf('select count(*) as "count" %s %s', 'FROM ' . $queryObject->getFromString(), ($temp_where === '' ? '' : ' WHERE ' . $temp_where)); - if ($queryObject->getGroupByString() != '') { - $count_query = sprintf('select count(*) as "count" from (%s) xet', $count_query); - } - - $count_query .= ( __DEBUG_QUERY__ & 1 && $output->query_id) ? sprintf(' ' . $this->comment_syntax, $this->query_id) : ''; - $result_count = $this->_query($count_query, null, $connection); - $count_output = $this->_fetch($result_count); - $total_count = (int) $count_output->count; - - $list_count = $limit->list_count->getValue(); - if (!$list_count) $list_count = 20; - $page_count = $limit->page_count->getValue(); - if (!$page_count) $page_count = 10; - $page = $limit->page->getValue(); - if (!$page) $page = 1; - // Total pages - if ($total_count) $total_page = (int) (($total_count - 1) / $list_count) + 1; - else $total_page = 1; - - // check the page variables - if ($page > $total_page) { - // If requested page is bigger than total number of pages, return empty list - - $buff = new Object (); - $buff->total_count = $total_count; - $buff->total_page = $total_page; - $buff->page = $page; - $buff->data = array(); - $buff->page_navigation = new PageHandler($total_count, $total_page, $page, $page_count); - return $buff; - } - $start_count = ($page-1)*$list_count; - - $query = $this->getSelectSql($queryObject, true, $start_count); - if(strpos($query, "substr")) { - $query = str_replace ("substr", "substring", $query); - $query = $this->replaceSubstrFormat($query); - } - $query .= (__DEBUG_QUERY__&1 && $queryObject->query_id)?sprintf (' '.$this->comment_syntax, $this->query_id):''; - $result = $this->_query ($query, null, $connection); - if ($this->isError ()) - return $this->queryError($queryObject); - - $virtual_no = $total_count - ($page - 1) * $list_count; - while ($tmp = ibase_fetch_object($result)) - $data[$virtual_no--] = $tmp; - - if (!$this->transaction_started) - ibase_commit($connection); - - $buff = new Object (); - $buff->total_count = $total_count; - $buff->total_page = $total_page; - $buff->page = $page; - $buff->data = $data; - $buff->page_navigation = new PageHandler($total_count, $total_page, $page, $page_count); - }else { - $data = $this->_fetch($result); - $buff = new Object (); - $buff->data = $data; - } - return $buff; - } - - function getParser() { - return new DBParser('"', '"', $this->prefix); - } - - function getSelectSql($query, $with_values = true, $start_count = 0) { - $limit = $query->getLimit(); - if ($limit && $limit->isPageHandler()) { - $list_count = $limit->list_count->getValue(); - if(!$limit->page) $page = 1; - else $page = $limit->page->getValue(); - if(!$start_count) - $start_count = ($page - 1) * $list_count; - $limit = sprintf('SELECT FIRST %d SKIP %d ', $list_count, $start_count); - } - - $select = $query->getSelectString($with_values); - - if ($select == '') - return new Object(-1, "Invalid query"); - - if ($limit && $limit->isPageHandler()) - $select = $limit . ' ' . $select; - else - $select = 'SELECT ' . $select; - $from = $query->getFromString($with_values); - if ($from == '') - return new Object(-1, "Invalid query"); - $from = ' FROM ' . $from; - - $where = $query->getWhereString($with_values); - if ($where != '') - $where = ' WHERE ' . $where; - - $groupBy = $query->getGroupByString(); - if ($groupBy != '') - $groupBy = ' GROUP BY ' . $groupBy; - - $orderBy = $query->getOrderByString(); - if ($orderBy != '') - $orderBy = ' ORDER BY ' . $orderBy; - - return $select . ' ' . $from . ' ' . $where . ' ' . $groupBy . ' ' . $orderBy; - } - - function getDeleteSql($query, $with_values = true){ - $sql = 'DELETE '; - - $from = $query->getFromString($with_values); - if($from == '') return new Object(-1, "Invalid query"); - - $sql .= ' FROM '.$from; - - $where = $query->getWhereString($with_values); - if($where != '') $sql .= ' WHERE ' . $where; - - return $sql; - } - - function replaceSubstrFormat($queryString){ - //replacing substr("string",number,number) with substr("string" from number for number) - $pattern = '/substring\("(\w+)",(\d+),(\d+)\)/i'; - $replacement = 'substring("${1}" from $2 for $3)'; - - return preg_replace($pattern, $replacement, $queryString); - } - -} -?> diff --git a/classes/db/DBPostgresql.class.php b/classes/db/DBPostgresql.class.php deleted file mode 100644 index ddab2eac8..000000000 --- a/classes/db/DBPostgresql.class.php +++ /dev/null @@ -1,600 +0,0 @@ - 'bigint', - 'number' => 'integer', - 'varchar' => 'varchar', - 'char' => 'char', - 'text' => 'text', - 'bigtext' => 'text', - 'date' => 'varchar(14)', - 'float' => 'real', - ); - - /** - * @brief constructor - **/ - function DBPostgresql() - { - $this->_setDBInfo(); - $this->_connect(); - } - - /** - * @brief create an instance of this class - */ - function create() - { - return new DBPostgresql; - } - - /** - * @brief Return if it is installable - **/ - function isSupported() - { - if (!function_exists('pg_connect')) - return false; - return true; - } - - /** - * @brief DB Connection - **/ - function __connect($connection) - { - // the connection string for PG - $conn_string = ""; - // Create connection string - $conn_string .= ($connection["db_hostname"]) ? ' host='.$connection["db_hostname"] : ""; - $conn_string .= ($connection["db_userid"]) ? " user=" . $connection["db_userid"] : ""; - $conn_string .= ($connection["db_password"]) ? " password=" . $connection["db_password"] : ""; - $conn_string .= ($connection["db_database"]) ? " dbname=" . $connection["db_database"] : ""; - $conn_string .= ($connection["db_port"]) ? " port=" . $connection["db_port"] : ""; - - // Attempt to connect - $result = @pg_connect($conn_string); - if (!$result || pg_connection_status($result) != PGSQL_CONNECTION_OK) { - $this->setError(-1, "CONNECTION FAILURE"); - return; - } - return $result; - } - - /** - * @brief DB disconnection - **/ - function _close($connection) - { - @pg_close($connection); - } - - /** - * @brief Add quotes on the string variables in a query - **/ - function addQuotes($string) - { - if (version_compare(PHP_VERSION, "5.9.0", "<") && get_magic_quotes_gpc()) - $string = stripslashes(str_replace("\\", "\\\\", $string)); - if (!is_numeric($string)) - $string = @pg_escape_string($string); - return $string; - } - - /** - * @brief Begin transaction - **/ - function _begin() - { - $connection = $this->_getConnection('master'); - if (!$this->_query('BEGIN')) return false; - return true; - } - - /** - * @brief Rollback - **/ - function _rollback() - { - if (!$this->_query('ROLLBACK')) return false; - return true; - } - - /** - * @brief Commits - **/ - function _commit() - { - if (!$this->_query('COMMIT')) return false; - return true; - } - - /** - * @brief : Run a query and fetch the result - * - * query: run a query and return the result \n - * fetch: NULL if no value is returned \n - * array object if rows are returned \n - * object if a row is returned \n - * return\n - **/ - function __query($query, $connection) - { - if (!$this->isConnected()) - return; - - /* - $l_query_array = explode(" ", $query); - if ($l_query_array[0] = "update") - { - if (strtolower($l_query_array[2]) == "as") - { - $l_query_array[2] = ""; - $l_query_array[3] = ""; - $query = implode(" ",$l_query_array); - } - } - else if ($l_query_array[0] = "delete") - { - if (strtolower($l_query_array[3]) == "as") - { - $l_query_array[3] = ""; - $l_query_array[4] = ""; - $query = implode(" ",$l_query_array); - } - } - */ - // Notify to start a query execution - // $arr = array('Hello', 'World!', 'Beautiful', 'Day!'); - // Run the query statement - $result = @pg_query($connection, $query); - // Error Check - if (!$result) { - // var_dump($l_query_array); - //var_dump($query); - //die("\nin query statement\n"); - //var_dump(debug_backtrace()); - $this->setError(1, pg_last_error($connection)); - } - // Return result - return $result; - } - - /** - * @brief Fetch results - **/ - // TODO This is duplicate code - maybe we can find away to abastract the driver - function _fetch($result, $arrayIndexEndValue = NULL) - { - if (!$this->isConnected() || $this->isError() || !$result) - return; - while ($tmp = pg_fetch_object($result)) { - if($arrayIndexEndValue) $output[$arrayIndexEndValue--] = $tmp; - else $output[] = $tmp; - } - if(count($output)==1){ - if(isset($arrayIndexEndValue)) return $output; - else return $output[0]; - } - return $output; - } - - /** - * @brief Return sequence value incremented by 1(in postgresql, auto_increment is used in the sequence table only) - **/ - function getNextSequence() - { - $query = sprintf("select nextval('%ssequence') as seq", $this->prefix); - $result = $this->_query($query); - $tmp = $this->_fetch($result); - return $tmp->seq; - } - - /** - * @brief Return if a table already exists - **/ - function isTableExists($target_name) - { - if ($target_name == "sequence") - return true; - $query = sprintf("SELECT tablename FROM pg_tables WHERE tablename = '%s%s' AND schemaname = current_schema()", - $this->prefix, $this->addQuotes($target_name)); - - $result = $this->_query($query); - $tmp = $this->_fetch($result); - if (!$tmp) - return false; - return true; - } - - /** - * @brief Add a column to a table - **/ - function addColumn($table_name, $column_name, $type = 'number', $size = '', $default = - NULL, $notnull = false) - { - $type = $this->column_type[$type]; - if (strtoupper($type) == 'INTEGER' || strtoupper($type) == 'BIGINT') - $size = ''; - - $query = sprintf("alter table %s%s add %s ", $this->prefix, $table_name, $column_name); - - if ($size) - $query .= sprintf(" %s(%s) ", $type, $size); - else - $query .= sprintf(" %s ", $type); - - $this->_query($query); - - if (isset($default)) { - $query = sprintf("alter table %s%s alter %s set default '%s' ", $this->prefix, $table_name, $column_name, $default); - $this->_query($query); - } - if ($notnull) { - $query = sprintf("update %s%s set %s = %s ", $this->prefix, $table_name, $column_name, $default); - $this->_query($query); - $query = sprintf("alter table %s%s alter %s set not null ", $this->prefix, $table_name, $column_name); - $this->_query($query); - } - } - - - /** - * @brief Return column information of a table - **/ - function isColumnExists($table_name, $column_name) - { - $query = sprintf("SELECT attname FROM pg_attribute WHERE attrelid = (SELECT oid FROM pg_class WHERE relname = '%s%s') AND attname = '%s'", - $this->prefix, strtolower($table_name), strtolower($column_name)); - - // $query = sprintf("select column_name from information_schema.columns where table_schema = current_schema() and table_name = '%s%s' and column_name = '%s'", $this->prefix, $this->addQuotes($table_name), strtolower($column_name)); - $result = $this->_query($query); - if ($this->isError()) { - return; - } - $output = $this->_fetch($result); - if ($output) { - return true; - } - return false; - } - - /** - * @brief Add an index to a table - * $target_columns = array(col1, col2) - * $is_unique? unique : none - **/ - function addIndex($table_name, $index_name, $target_columns, $is_unique = false) - { - if (!is_array($target_columns)) - $target_columns = array($target_columns); - - if (strpos($table_name, $this->prefix) === false) - $table_name = $this->prefix . $table_name; - // Use a tablename before an index name to avoid defining the same index - $index_name = $table_name . $index_name; - - $query = sprintf("create %s index %s on %s (%s);", $is_unique ? 'unique' : '', $index_name, - $table_name, implode(',', $target_columns)); - $this->_query($query); - } - - /** - * @brief Delete a column from a table - **/ - function dropColumn($table_name, $column_name) - { - $query = sprintf("alter table %s%s drop %s ", $this->prefix, $table_name, $column_name); - $this->_query($query); - } - - /** - * @brief Drop an index from a table - **/ - function dropIndex($table_name, $index_name, $is_unique = false) - { - if (strpos($table_name, $this->prefix) === false) - $table_name = $this->prefix . $table_name; - // Use a tablename before an index name to avoid defining the same index - $index_name = $table_name . $index_name; - - $query = sprintf("drop index %s", $index_name); - $this->_query($query); - } - - - /** - * @brief Return index information of a table - **/ - function isIndexExists($table_name, $index_name) - { - if (strpos($table_name, $this->prefix) === false) - $table_name = $this->prefix . $table_name; - // Use a tablename before an index name to avoid defining the same index - $index_name = $table_name . $index_name; - - //$query = sprintf("show indexes from %s%s where key_name = '%s' ", $this->prefix, $table_name, $index_name); - $query = sprintf("select indexname from pg_indexes where schemaname = current_schema() and tablename = '%s' and indexname = '%s'", - $table_name, strtolower($index_name)); - $result = $this->_query($query); - if ($this->isError()) - return; - $output = $this->_fetch($result); - - if ($output) { - return true; - } - // var_dump($query); - // die(" no index"); - return false; - } - - /** - * @brief Create a table by using xml file - **/ - function createTableByXml($xml_doc) - { - return $this->_createTable($xml_doc); - } - - /** - * @brief Create a table by using xml file - **/ - function createTableByXmlFile($file_name) - { - if (!file_exists($file_name)) - return; - // read xml file - $buff = FileHandler::readFile($file_name); - return $this->_createTable($buff); - } - - /** - * @brief generate a query statement to create a table by using schema xml - * - * type : number, varchar, text, char, date, \n - * opt : notnull, default, size\n - * index : primary key, index, unique\n - **/ - function _createTable($xml_doc) - { - // xml parsing - $oXml = new XmlParser(); - $xml_obj = $oXml->parse($xml_doc); - // Create a table schema - $table_name = $xml_obj->table->attrs->name; - - if ($table_name == 'sequence') { - $query = sprintf('create sequence %s', $this->prefix . $table_name); - return $this->_query($query); - } - - if ($this->isTableExists($table_name)) - return; - $table_name = $this->prefix . $table_name; - - if (!is_array($xml_obj->table->column)) - $columns[] = $xml_obj->table->column; - else - $columns = $xml_obj->table->column; - - foreach ($columns as $column) { - $name = $column->attrs->name; - $type = $column->attrs->type; - $size = $column->attrs->size; - $notnull = $column->attrs->notnull; - $primary_key = $column->attrs->primary_key; - $index = $column->attrs->index; - $unique = $column->attrs->unique; - $default = $column->attrs->default; - $auto_increment = $column->attrs->auto_increment; - - if ($type == "bignumber" || $type == "number") - $size = 0; - - $column_schema[] = sprintf('%s %s%s %s %s', $name, $this->column_type[$type], $size ? - '(' . $size . ')' : '', isset($default) ? "default '" . $default . "'" : '', $notnull ? - 'not null' : ''); - - if ($primary_key) - $primary_list[] = $name; - else - if ($unique) - $unique_list[$unique][] = $name; - else - if ($index) - $index_list[$index][] = $name; - } - - if (count($primary_list)) { - $column_schema[] = sprintf("primary key (%s)", implode($primary_list, ',')); - } - - if (count($unique_list)) { - foreach ($unique_list as $key => $val) { - $column_schema[] = sprintf("unique (%s)", implode($val, ',')); - } - } - - - $schema = sprintf('create table %s (%s%s);', $this->addQuotes($table_name), "\n", - implode($column_schema, ",\n")); - - $output = $this->_query($schema); - - if (count($index_list)) { - foreach ($index_list as $key => $val) { - if (!$this->isIndexExists($table_name, $key)) - $this->addIndex($table_name, $key, $val); - } - } - - if (!$output) - return false; - - } - - - /** - * @brief Handle the insertAct - **/ - function _executeInsertAct($queryObject) - { - $query = $this->getInsertSql($queryObject); - if(is_a($query, 'Object')) return; - - return $this->_query($query); - } - - /** - * @brief Handle updateAct - **/ - function _executeUpdateAct($queryObject) - { - $query = $this->getUpdateSql($queryObject); - if(is_a($query, 'Object')) return; - return $this->_query($query); - } - - /** - * @brief Handle deleteAct - **/ - function _executeDeleteAct($queryObject) - { - $query = $this->getDeleteSql($queryObject); - - if(is_a($query, 'Object')) return; - return $this->_query($query); - } - - /** - * - * override - * @param $queryObject - */ - function getSelectSql($query){ - $select = $query->getSelectString(); - if($select == '') return new Object(-1, "Invalid query"); - $select = 'SELECT ' .$select; - - $from = $query->getFromString(); - if($from == '') return new Object(-1, "Invalid query"); - $from = ' FROM '.$from; - - $where = $query->getWhereString(); - if($where != '') $where = ' WHERE ' . $where; - - $groupBy = $query->getGroupByString(); - if($groupBy != '') $groupBy = ' GROUP BY ' . $groupBy; - - $orderBy = $query->getOrderByString(); - if($orderBy != '') $orderBy = ' ORDER BY ' . $orderBy; - - $limit = $query->getLimitString(); - $limitObject = $query->getLimit(); - if($limit != '') $limit = ' LIMIT ' . $limitObject->getLimit() . ' OFFSET ' . $limitObject->getOffset(); - - return $select . ' ' . $from . ' ' . $where . ' ' . $groupBy . ' ' . $orderBy . ' ' . $limit; - } - - /** - * @brief Handle selectAct - * - * In order to get a list of pages easily when selecting \n - * it supports a method as navigation - **/ - function _executeSelectAct($queryObject, $connection) - { - $query = $this->getSelectSql($queryObject); - - if(is_a($query, 'Object')) return; - - $query .= (__DEBUG_QUERY__&1 && $queryObject->query_id)?sprintf(' '.$this->comment_syntax,$this->query_id):''; - - // TODO Add support for click count - // TODO Add code for pagination - - $result = $this->_query ($query, $connection); - if ($this->isError ()) { - if ($limit && $output->limit->isPageHandler()){ - $buff = new Object (); - $buff->total_count = 0; - $buff->total_page = 0; - $buff->page = 1; - $buff->data = array (); - $buff->page_navigation = new PageHandler (/*$total_count*/0, /*$total_page*/1, /*$page*/1, /*$page_count*/10);//default page handler values - return $buff; - }else - return; - } - - $limit = $queryObject->getLimit(); - if ($limit && $limit->isPageHandler()) { - // Total count - $temp_where = $queryObject->getWhereString(true, false); - $count_query = sprintf('select count(*) as "count" %s %s', 'FROM ' . $queryObject->getFromString(), ($temp_where === '' ? '' : ' WHERE '. $temp_where)); - if ($queryObject->getGroupByString() != '') { - $count_query = sprintf('select count(*) as "count" from (%s) xet', $count_query); - } - - $count_query .= (__DEBUG_QUERY__&1 && $output->query_id)?sprintf (' '.$this->comment_syntax, $this->query_id):''; - $result_count = $this->_query($count_query, $connection); - $count_output = $this->_fetch($result_count); - $total_count = (int)$count_output->count; - - // Total pages - if ($total_count) { - $total_page = (int) (($total_count - 1) / $limit->list_count) + 1; - } else $total_page = 1; - - - $virtual_no = $total_count - ($limit->page - 1) * $limit->list_count; - $data = $this->_fetch($result, $virtual_no); - - $buff = new Object (); - $buff->total_count = $total_count; - $buff->total_page = $total_page; - $buff->page = $limit->page->getValue(); - $buff->data = $data; - $buff->page_navigation = new PageHandler($total_count, $total_page, $limit->page->getValue(), $limit->page_count); - }else{ - $data = $this->_fetch($result); - $buff = new Object (); - $buff->data = $data; - } - - return $buff; - } - - function getParser(){ - return new DBParser('"', '"', $this->prefix); - } -} -?> diff --git a/classes/db/DBSqlite3_pdo.class.php b/classes/db/DBSqlite3_pdo.class.php deleted file mode 100644 index e84a15b91..000000000 --- a/classes/db/DBSqlite3_pdo.class.php +++ /dev/null @@ -1,636 +0,0 @@ - 'INTEGER', - 'number' => 'INTEGER', - 'varchar' => 'VARCHAR', - 'char' => 'CHAR', - 'text' => 'TEXT', - 'bigtext' => 'TEXT', - 'date' => 'VARCHAR(14)', - 'float' => 'REAL', - ); - - /** - * @brief constructor - **/ - function DBSqlite3_pdo() { - $this->_setDBInfo(); - $this->_connect(); - } - - /** - * @brief create an instance of this class - */ - function create() - { - return new DBSqlite3_pdo; - } - - /** - * @brief Return if installable - **/ - function isSupported() { - return class_exists('PDO'); - } - - function isConnected() { - return $this->is_connected; - } - - /** - * @brief DB settings and connect/close - **/ - function _setDBInfo() { - $db_info = Context::getDBInfo(); - $this->database = $db_info->master_db["db_database"]; - $this->prefix = $db_info->master_db["db_table_prefix"]; - //if(!substr($this->prefix,-1)!='_') $this->prefix .= '_'; - } - - /** - * @brief DB Connection - **/ - function _connect() { - // override if db information not exists - if(!$this->database) return; - - // Attempt to access the database file - try { - // PDO is only supported with PHP5, - // so it is allowed to use try~catch statment in this class. - $this->handler = new PDO('sqlite:'.$this->database); - } catch (PDOException $e) { - $this->setError(-1, 'Connection failed: '.$e->getMessage()); - $this->is_connected = false; - return; - } - - // Check connections - $this->is_connected = true; - $this->password = md5($this->password); - } - - /** - * @brief disconnect to DB - **/ - function close() { - if(!$this->is_connected) return; - $this->commit(); - } - - /** - * @brief Begin a transaction - **/ - function begin() { - if(!$this->is_connected || $this->transaction_started) return; - if($this->handler->beginTransaction()) $this->transaction_started = true; - } - - /** - * @brief Rollback - **/ - function rollback() { - if(!$this->is_connected || !$this->transaction_started) return; - $this->handler->rollBack(); - $this->transaction_started = false; - } - - /** - * @brief Commit - **/ - function commit($force = false) { - if(!$force && (!$this->is_connected || !$this->transaction_started)) return; - try { - $this->handler->commit(); - } - catch(PDOException $e){ - // There was no transaction started, so just continue. - error_log($e->getMessage()); - } - $this->transaction_started = false; - } - - /** - * @brief Add or change quotes to the query string variables - **/ - function addQuotes($string) { - if(version_compare(PHP_VERSION, "5.9.0", "<") && get_magic_quotes_gpc()) $string = stripslashes(str_replace("\\","\\\\",$string)); - if(!is_numeric($string)) $string = str_replace("'","''",$string); - return $string; - } - - /** - * @brief : Prepare a query statement - **/ - function _prepare($query) { - if(!$this->is_connected) return; - - // notify to start a query execution - $this->actStart($query); - - $this->stmt = $this->handler->prepare($query); - - if($this->handler->errorCode() != '00000') { - $this->setError($this->handler->errorCode(), print_r($this->handler->errorInfo(),true)); - $this->actFinish(); - } - $this->bind_idx = 0; - $this->bind_vars = array(); - } - - /** - * @brief : Binding params in stmt - **/ - function _bind($val) { - if(!$this->is_connected || !$this->stmt) return; - - $this->bind_idx ++; - $this->bind_vars[] = $val; - $this->stmt->bindParam($this->bind_idx, $val); - } - - /** - * @brief : execute the prepared statement - **/ - function _execute() { - if(!$this->is_connected || !$this->stmt) return; - - $this->stmt->execute(); - - if($this->stmt->errorCode() === '00000') { - $output = null; - while($tmp = $this->stmt->fetch(PDO::FETCH_ASSOC)) { - unset($obj); - foreach($tmp as $key => $val) { - $pos = strpos($key, '.'); - if($pos) $key = substr($key, $pos+1); - $obj->{$key} = str_replace("''","'",$val); - } - $output[] = $obj; - } - } else { - $this->setError($this->stmt->errorCode(),print_r($this->stmt->errorInfo(),true)); - } - - $this->stmt = null; - $this->actFinish(); - - if(is_array($output) && count($output)==1) return $output[0]; - return $output; - } - - /** - * @brief Return the sequence value incremented by 1 - **/ - function getNextSequence() { - $query = sprintf("insert into %ssequence (seq) values (NULL)", $this->prefix); - $this->_prepare($query); - $result = $this->_execute(); - $sequence = $this->handler->lastInsertId(); - if($sequence % 10000 == 0) { - $query = sprintf("delete from %ssequence where seq < %d", $this->prefix, $sequence); - $this->_prepare($query); - $result = $this->_execute(); - } - - return $sequence; - } - - /** - * @brief return if the table already exists - **/ - function isTableExists($target_name) { - $query = sprintf('pragma table_info(%s%s)', $this->prefix, $target_name); - $this->_prepare($query); - if(!$this->_execute()) return false; - return true; - } - - /** - * @brief Add a column to a table - **/ - function addColumn($table_name, $column_name, $type='number', $size='', $default = '', $notnull=false) { - $type = $this->column_type[$type]; - if(strtoupper($type)=='INTEGER') $size = ''; - - $query = sprintf("alter table %s%s add %s ", $this->prefix, $table_name, $column_name); - if($size) $query .= sprintf(" %s(%s) ", $type, $size); - else $query .= sprintf(" %s ", $type); - if($default) $query .= sprintf(" default '%s' ", $default); - if($notnull) $query .= " not null "; - - $this->_prepare($query); - return $this->_execute(); - } - - /** - * @brief Remove a column from a table - **/ - function dropColumn($table_name, $column_name) { - $query = sprintf("alter table %s%s drop column %s ", $this->prefix, $table_name, $column_name); - $this->_query($query); - } - - /** - * @brief Return column information of a table - **/ - function isColumnExists($table_name, $column_name) { - $query = sprintf("pragma table_info(%s%s)", $this->prefix, $table_name); - $this->_prepare($query); - $output = $this->_execute(); - - if($output) { - $column_name = strtolower($column_name); - foreach($output as $key => $val) { - $name = strtolower($val->name); - if($column_name == $name) return true; - } - } - return false; - } - - /** - * @brief Add an index to a table - * $target_columns = array(col1, col2) - * $is_unique? unique : none - **/ - function addIndex($table_name, $index_name, $target_columns, $is_unique = false) { - if(!is_array($target_columns)) $target_columns = array($target_columns); - - $key_name = sprintf('%s%s_%s', $this->prefix, $table_name, $index_name); - - $query = sprintf('CREATE %s INDEX %s ON %s%s (%s)', $is_unique?'UNIQUE':'', $key_name, $this->prefix, $table_name, implode(',',$target_columns)); - $this->_prepare($query); - $this->_execute(); - } - - /** - * @brief Drop an index from a table - **/ - function dropIndex($table_name, $index_name, $is_unique = false) { - $key_name = sprintf('%s%s_%s', $this->prefix, $table_name, $index_name); - $query = sprintf("DROP INDEX %s", $this->prefix, $table_name, $key_name); - $this->_query($query); - } - - /** - * @brief Return index information of a table - **/ - function isIndexExists($table_name, $index_name) { - $key_name = sprintf('%s%s_%s', $this->prefix, $table_name, $index_name); - - $query = sprintf("pragma index_info(%s)", $key_name); - $this->_prepare($query); - $output = $this->_execute(); - if(!$output) return false; - return true; - } - - /** - * @brief create a table from xml file - **/ - function createTableByXml($xml_doc) { - return $this->_createTable($xml_doc); - } - - /** - * @brief create a table from xml file - **/ - function createTableByXmlFile($file_name) { - if(!file_exists($file_name)) return; - // read xml file - $buff = FileHandler::readFile($file_name); - return $this->_createTable($buff); - } - - /** - * @brief generate a query to create a table using the schema xml - * - * type : number, varchar, text, char, date, \n - * opt : notnull, default, size\n - * index : primary key, index, unique\n - **/ - function _createTable($xml_doc) { - // xml parsing - $oXml = new XmlParser(); - $xml_obj = $oXml->parse($xml_doc); - // Create a table schema - $table_name = $xml_obj->table->attrs->name; - if($this->isTableExists($table_name)) return; - $table_name = $this->prefix.$table_name; - - if(!is_array($xml_obj->table->column)) $columns[] = $xml_obj->table->column; - else $columns = $xml_obj->table->column; - - foreach($columns as $column) { - $name = $column->attrs->name; - $type = $column->attrs->type; - if(strtoupper($this->column_type[$type])=='INTEGER') $size = ''; - else $size = $column->attrs->size; - $notnull = $column->attrs->notnull; - $primary_key = $column->attrs->primary_key; - $index = $column->attrs->index; - $unique = $column->attrs->unique; - $default = $column->attrs->default; - $auto_increment = $column->attrs->auto_increment; - - if($auto_increment) { - $column_schema[] = sprintf('%s %s PRIMARY KEY %s', - $name, - $this->column_type[$type], - $auto_increment?'AUTOINCREMENT':'' - ); - } else { - $column_schema[] = sprintf('%s %s%s %s %s %s', - $name, - $this->column_type[$type], - $size?'('.$size.')':'', - $notnull?'NOT NULL':'', - $primary_key?'PRIMARY KEY':'', - isset($default)?"DEFAULT '".$default."'":'' - ); - } - - if($unique) $unique_list[$unique][] = $name; - else if($index) $index_list[$index][] = $name; - } - - $schema = sprintf('CREATE TABLE %s (%s%s) ;', $table_name," ", implode($column_schema,", ")); - $this->_prepare($schema); - $this->_execute(); - if($this->isError()) return; - - if(count($unique_list)) { - foreach($unique_list as $key => $val) { - $query = sprintf('CREATE UNIQUE INDEX %s_%s ON %s (%s)', $this->addQuotes($table_name), $key, $this->addQuotes($table_name), implode(',',$val)); - $this->_prepare($query); - $this->_execute(); - if($this->isError()) $this->rollback(); - } - } - - if(count($index_list)) { - foreach($index_list as $key => $val) { - $query = sprintf('CREATE INDEX %s_%s ON %s (%s)', $this->addQuotes($table_name), $key, $this->addQuotes($table_name), implode(',',$val)); - $this->_prepare($query); - $this->_execute(); - if($this->isError()) $this->rollback(); - } - } - } - - function _getConnection($type = null){ - return null; - } - - /** - * @brief insertAct - * */ - function _executeInsertAct($queryObject) { - $query = $this->getInsertSql($queryObject); - if (is_a($query, 'Object')) - return; - - $this->_prepare($query); - - $val_count = count($val_list); - for ($i = 0; $i < $val_count; $i++) - $this->_bind($val_list[$i]); - - return $this->_execute(); - } - - /** - * @brief updateAct - * */ - function _executeUpdateAct($queryObject) { - $query = $this->getUpdateSql($queryObject); - if (is_a($query, 'Object')) - return; - - $this->_prepare($query); - return $this->_execute(); - } - - /** - * @brief deleteAct - * */ - function _executeDeleteAct($queryObject) { - $query = $this->getDeleteSql($queryObject); - if (is_a($query, 'Object')) - return; - - $this->_prepare($query); - return $this->_execute(); - } - - /** - * @brief selectAct - * - * To fetch a list of the page conveniently when selecting, \n - * navigation method supported - * */ - function _executeSelectAct($queryObject) { - $query = $this->getSelectSql($queryObject); - if (is_a($query, 'Object')) - return; - - $this->_prepare($query); - $data = $this->_execute(); - // TODO isError is called twice - if ($this->isError()) - return; - - if ($this->isError()) - return $this->queryError($queryObject); - else - return $this->queryPageLimit($queryObject, $data); - } - - function queryError($queryObject) { - if ($queryObject->getLimit() && $queryObject->getLimit()->isPageHandler()) { - $buff = new Object (); - $buff->total_count = 0; - $buff->total_page = 0; - $buff->page = 1; - $buff->data = array(); - $buff->page_navigation = new PageHandler(/* $total_count */0, /* $total_page */1, /* $page */1, /* $page_count */10); //default page handler values - return $buff; - }else - return; - } - - function queryPageLimit($queryObject, $data) { - if ($queryObject->getLimit() && $queryObject->getLimit()->isPageHandler()) { - // Total count - $temp_where = $queryObject->getWhereString(true, false); - $count_query = sprintf('select count(*) as "count" %s %s', 'FROM ' . $queryObject->getFromString(), ($temp_where === '' ? '' : ' WHERE ' . $temp_where)); - if ($queryObject->getGroupByString() != '') { - $count_query = sprintf('select count(*) as "count" from (%s) xet', $count_query); - } - - $count_query .= ( __DEBUG_QUERY__ & 1 && $output->query_id) ? sprintf(' ' . $this->comment_syntax, $this->query_id) : ''; - $this->_prepare($count_query); - $count_output = $this->_execute(); - $total_count = (int) $count_output->count; - - $list_count = $queryObject->getLimit()->list_count->getValue(); - if (!$list_count) $list_count = 20; - $page_count = $queryObject->getLimit()->page_count->getValue(); - if (!$page_count) $page_count = 10; - $page = $queryObject->getLimit()->page->getValue(); - if (!$page) $page = 1; - // Total pages - if ($total_count) { - $total_page = (int) (($total_count - 1) / $list_count) + 1; - } else - $total_page = 1; - - // check the page variables - if ($page > $total_page) { - // If requested page is bigger than total number of pages, return empty list - - $buff = new Object (); - $buff->total_count = $total_count; - $buff->total_page = $total_page; - $buff->page = $page; - $buff->data = array(); - $buff->page_navigation = new PageHandler($total_count, $total_page, $page, $page_count); - return $buff; - } - $start_count = ($page - 1) * $list_count; - - $this->_prepare($this->getSelectPageSql($queryObject, true, $start_count, $list_count)); - $this->stmt->execute(); - if ($this->stmt->errorCode() != '00000') { - $this->setError($this->stmt->errorCode(), print_r($this->stmt->errorInfo(), true)); - $this->actFinish(); - return $buff; - } - - $output = null; - $virtual_no = $total_count - ($page - 1) * $list_count; - //$data = $this->_fetch($result, $virtual_no); - while ($tmp = $this->stmt->fetch(PDO::FETCH_ASSOC)) { - unset($obj); - foreach ($tmp as $key => $val) { - $pos = strpos($key, '.'); - if ($pos) - $key = substr($key, $pos + 1); - $obj->{$key} = $val; - } - $datatemp[$virtual_no--] = $obj; - } - - $this->stmt = null; - $this->actFinish(); - - $buff = new Object (); - $buff->total_count = $total_count; - $buff->total_page = $total_page; - $buff->page = $page; - $buff->data = $datatemp; - $buff->page_navigation = new PageHandler($total_count, $total_page, $page, $page_count); - }else { - //$data = $this->_fetch($result); - $buff = new Object (); - $buff->data = $data; - } - return $buff; - } - - function getSelectPageSql($query, $with_values = true, $start_count = 0, $list_count = 0) { - - $select = $query->getSelectString($with_values); - if ($select == '') - return new Object(-1, "Invalid query"); - $select = 'SELECT ' . $select; - - $from = $query->getFromString($with_values); - if ($from == '') - return new Object(-1, "Invalid query"); - $from = ' FROM ' . $from; - - $where = $query->getWhereString($with_values); - if ($where != '') - $where = ' WHERE ' . $where; - - $groupBy = $query->getGroupByString(); - if ($groupBy != '') - $groupBy = ' GROUP BY ' . $groupBy; - - $orderBy = $query->getOrderByString(); - if ($orderBy != '') - $orderBy = ' ORDER BY ' . $orderBy; - - $limit = $query->getLimitString(); - if ($limit != '' && $query->getLimit()) { - $limit = sprintf(' LIMIT %d, %d',$start_count, $list_count); - } - - return $select . ' ' . $from . ' ' . $where . ' ' . $groupBy . ' ' . $orderBy . ' ' . $limit; - } - - function getParser() { - return new DBParser('"', '"', $this->prefix); - } - - function getUpdateSql($query, $with_values = true, $with_priority = false){ - $columnsList = $query->getUpdateString($with_values); - if($columnsList == '') return new Object(-1, "Invalid query"); - - $tableName = $query->getFirstTableName(); - if($tableName == '') return new Object(-1, "Invalid query"); - - $where = $query->getWhereString($with_values); - if($where != '') $where = ' WHERE ' . $where; - - $priority = $with_priority?$query->getPriority():''; - - return "UPDATE $priority $tableName SET $columnsList ".$where; - } - - function getDeleteSql($query, $with_values = true, $with_priority = false){ - $sql = 'DELETE '; - - $tables = $query->getTables(); - $from = $tables[0]->getName(); - $sql .= ' FROM '.$from; - - $where = $query->getWhereString($with_values); - if($where != '') $sql .= ' WHERE ' . $where; - - return $sql; - } -} -?> diff --git a/modules/install/tpl/css/install.css b/modules/install/tpl/css/install.css index e9dc13420..e8060c709 100644 --- a/modules/install/tpl/css/install.css +++ b/modules/install/tpl/css/install.css @@ -15,6 +15,8 @@ a:hover, a:active, a:focus {text-decoration:underline} .x .x_form-horizontal .x_control-label{font-weight: bold} .x ol, .x ul{margin-top:15px;margin-bottom:15px} +.x input[type="radio"], +.x input[type="checkbox"]{margin:0} /* Layout */ #xei{width:800px;margin:0 auto;padding:120px 0 0 0} #xei #header{position:relative;background:#444;margin:0 0 1px 0;padding:10px 20px;color:#fff;border-radius:5px 5px 0 0} diff --git a/modules/install/tpl/select_db.html b/modules/install/tpl/select_db.html index 17bfbe6a1..81308e76b 100644 --- a/modules/install/tpl/select_db.html +++ b/modules/install/tpl/select_db.html @@ -4,29 +4,23 @@
- - -
    - -
  • - enable)-->disabled="disabled" id="db_type_{$val->db_type}" checked="checked" class="iRadio" id="cubrid" /> -

    {$lang->db_desc[$val->db_type]}

    -
  • - - -
  • - enable)-->disabled="disabled" id="db_type_{$val->db_type}" checked="checked" class="iRadio" id="cubrid" /> -

    {$lang->db_desc[$val->db_type]}

    -
  • - -
+ + +
+ +

{$lang->db_desc[$val->db_type]}

+
+
+ +

{$lang->db_desc[$val->db_type]}

+
- -
- -
+ + {$lang->cmd_back} + + + +