diff --git a/classes/db/DBFirebird.class.php b/classes/db/DBFirebird.class.php index a73d183fc..62e2effd8 100644 --- a/classes/db/DBFirebird.class.php +++ b/classes/db/DBFirebird.class.php @@ -622,7 +622,7 @@ * @brief Handle the insertAct **/ function _executeInsertAct($queryObject) { - $query = $this->getInsertSql($queryObject); + $query = $this->getInsertSql($queryObject); if(is_a($query, 'Object')) return; return $this->_query($query); } @@ -662,55 +662,102 @@ else return $this->queryPageLimit($queryObject, $result); } - 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, $result){ - if ($queryObject->getLimit() && $queryObject->getLimit()->isPageHandler()) { - // Total count - $count_query = sprintf('select count(*) as "count" %s %s', 'FROM ' . $queryObject->getFromString(), ($queryObject->getWhereString() === '' ? '' : ' WHERE '. $queryObject->getWhereString())); - 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); - $count_output = $this->_fetch($result_count); - $total_count = (int)$count_output->count; - - // Total pages - if ($total_count) { - $total_page = (int) (($total_count - 1) / $queryObject->getLimit()->list_count) + 1; - } else $total_page = 1; - - $virtual_no = $total_count - ($queryObject->getLimit()->page - 1) * $queryObject->getLimit()->list_count; - $data = $this->_fetch($result, $virtual_no); - - $buff = new Object (); - $buff->total_count = $total_count; - $buff->total_page = $total_page; - $buff->page = $queryObject->getLimit()->page; - $buff->data = $data; - $buff->page_navigation = new PageHandler($total_count, $total_page, $queryObject->getLimit()->page, $queryObject->getLimit()->page_count); - }else{ - $data = $this->_fetch($result); - $buff = new Object (); - $buff->data = $data; - } - return $buff; - } - + 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 + }else + return; } + function queryPageLimit($queryObject, $result) { + if ($queryObject->getLimit() && $queryObject->getLimit()->isPageHandler()) { + // Total count + $count_query = sprintf('select count(*) as "count" %s %s', 'FROM ' . $queryObject->getFromString(), ($queryObject->getWhereString() === '' ? '' : ' WHERE ' . $queryObject->getWhereString())); + 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); + $count_output = $this->_fetch($result_count); + $total_count = (int) $count_output->count; + + // Total pages + if ($total_count) { + $total_page = (int) (($total_count - 1) / $queryObject->getLimit()->list_count) + 1; + } else + $total_page = 1; + + $virtual_no = $total_count - ($queryObject->getLimit()->page - 1) * $queryObject->getLimit()->list_count; + while ($tmp = ibase_fetch_object($result)) + $data[$virtual_no--] = $tmp; + + if (!$this->transaction_started) + @ibase_commit($this->fd); + + $buff = new Object (); + $buff->total_count = $total_count; + $buff->total_page = $total_page; + $buff->page = $queryObject->getLimit()->page->getValue(); + $buff->data = $data; + $buff->page_navigation = new PageHandler($total_count, $total_page, $queryObject->getLimit()->page->getValue(), $queryObject->getLimit()->page_count); + }else { + $data = $this->_fetch($result); + $buff = new Object (); + $buff->data = $data; + } + return $buff; + } + + function getParser() { + return new DBParser('"'); + } + + function getSelectSql($query, $with_values = true) { + + if ($query->getLimit()) { + $list_count = $query->getLimit()->list_count->getValue(); + if(!$query->getLimit()->page) $page = 1; + else $page = $query->getLimit()->page->getValue(); + + $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 ($query->getLimit()) + $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; + } + +} + return new DBFireBird; ?> diff --git a/classes/db/DBMysql.class.php b/classes/db/DBMysql.class.php index 507a343de..8a36032d3 100644 --- a/classes/db/DBMysql.class.php +++ b/classes/db/DBMysql.class.php @@ -493,9 +493,9 @@ $buff = new Object (); $buff->total_count = $total_count; $buff->total_page = $total_page; - $buff->page = $queryObject->getLimit()->page; + $buff->page = $queryObject->getLimit()->page->getValue(); $buff->data = $data; - $buff->page_navigation = new PageHandler($total_count, $total_page, $queryObject->getLimit()->page, $queryObject->getLimit()->page_count); + $buff->page_navigation = new PageHandler($total_count, $total_page, $queryObject->getLimit()->page->getValue(), $queryObject->getLimit()->page_count); }else{ $data = $this->_fetch($result); $buff = new Object (); diff --git a/classes/db/DBPostgresql.class.php b/classes/db/DBPostgresql.class.php index 38d54e228..01eefe729 100644 --- a/classes/db/DBPostgresql.class.php +++ b/classes/db/DBPostgresql.class.php @@ -614,9 +614,9 @@ class DBPostgresql extends DB $buff = new Object (); $buff->total_count = $total_count; $buff->total_page = $total_page; - $buff->page = $queryObject->getLimit()->page; + $buff->page = $queryObject->getLimit()->page->getValue(); $buff->data = $data; - $buff->page_navigation = new PageHandler($total_count, $total_page, $queryObject->getLimit()->page, $queryObject->getLimit()->page_count); + $buff->page_navigation = new PageHandler($total_count, $total_page, $queryObject->getLimit()->page->getValue(), $queryObject->getLimit()->page_count); }else{ $data = $this->_fetch($result); $buff = new Object (); diff --git a/classes/db/DBSqlite3_pdo.class.php b/classes/db/DBSqlite3_pdo.class.php index 0e3d31ef6..ac624f377 100644 --- a/classes/db/DBSqlite3_pdo.class.php +++ b/classes/db/DBSqlite3_pdo.class.php @@ -399,130 +399,141 @@ } } - /** - * @brief insertAct - **/ - function _executeInsertAct($queryObject) { - $query = $this->getInsertSql($queryObject); - if(is_a($query, 'Object')) return; - - $this->_prepare($query); + /** + * @brief insertAct + * */ + function _executeInsertAct($queryObject) { + $query = $this->getInsertSql($queryObject); + if (is_a($query, 'Object')) + return; - $val_count = count($val_list); - for($i=0;$i<$val_count;$i++) $this->_bind($val_list[$i]); + $this->_prepare($query); - return $this->_execute(); - } + $val_count = count($val_list); + for ($i = 0; $i < $val_count; $i++) + $this->_bind($val_list[$i]); - /** - * @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(); - 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 - $count_query = sprintf('select count(*) as "count" %s %s', 'FROM ' . $queryObject->getFromString(), ($queryObject->getWhereString() === '' ? '' : ' WHERE '. $queryObject->getWhereString())); - 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; - - // Total pages - if ($total_count) { - $total_page = (int) (($total_count - 1) / $queryObject->getLimit()->list_count) + 1; - } else $total_page = 1; - - $this->_prepare($this->getSelectSql($queryObject)); - $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 - ($queryObject->getLimit()->page - 1) * $queryObject->getLimit()->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; - } - $data[$virtual_no--] = $obj; - } - - $this->stmt = null; - $this->actFinish(); - - $buff = new Object (); - $buff->total_count = $total_count; - $buff->total_page = $total_page; - $buff->page = $queryObject->getLimit()->page; - $buff->data = $data; - $buff->page_navigation = new PageHandler($total_count, $total_page, $queryObject->getLimit()->page, $queryObject->getLimit()->page_count); - }else{ - //$data = $this->_fetch($result); - $buff = new Object (); - $buff->data = $data; - } - return $buff; - } + 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(); + 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 + $count_query = sprintf('select count(*) as "count" %s %s', 'FROM ' . $queryObject->getFromString(), ($queryObject->getWhereString() === '' ? '' : ' WHERE ' . $queryObject->getWhereString())); + 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; + + // Total pages + if ($total_count) { + $total_page = (int) (($total_count - 1) / $queryObject->getLimit()->list_count) + 1; + } else + $total_page = 1; + + $this->_prepare($this->getSelectSql($queryObject)); + $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 - ($queryObject->getLimit()->page - 1) * $queryObject->getLimit()->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; + } + $data[$virtual_no--] = $obj; + } + + $this->stmt = null; + $this->actFinish(); + + $buff = new Object (); + $buff->total_count = $total_count; + $buff->total_page = $total_page; + $buff->page = $queryObject->getLimit()->page->getValue(); + $buff->data = $data; + $buff->page_navigation = new PageHandler($total_count, $total_page, $queryObject->getLimit()->page->getValue(), $queryObject->getLimit()->page_count); + }else { + //$data = $this->_fetch($result); + $buff = new Object (); + $buff->data = $data; + } + return $buff; + } + +} + return new DBSqlite3_pdo; ?>