diff options
author | Nathan Guse <nathaniel.guse@gmail.com> | 2013-01-15 11:31:39 -0600 |
---|---|---|
committer | Nathan Guse <nathaniel.guse@gmail.com> | 2013-01-15 11:31:39 -0600 |
commit | 51e0f002eeaf2d55a63feee66ccb37d689f46f55 (patch) | |
tree | 21590506df83029d97a02ccaafa86c085f8c568f /phpBB/includes/search/fulltext_postgres.php | |
parent | 44fcec520f785d18d3cd3b19e26db977f23b844c (diff) | |
parent | a2f6e494f37914352b0bb72d5a84904d3f2c51a3 (diff) | |
download | forums-51e0f002eeaf2d55a63feee66ccb37d689f46f55.tar forums-51e0f002eeaf2d55a63feee66ccb37d689f46f55.tar.gz forums-51e0f002eeaf2d55a63feee66ccb37d689f46f55.tar.bz2 forums-51e0f002eeaf2d55a63feee66ccb37d689f46f55.tar.xz forums-51e0f002eeaf2d55a63feee66ccb37d689f46f55.zip |
Merge branch 'develop' of github.com:phpbb/phpbb3 into ticket/11103
# By Oleg Pudeyev (37) and others
# Via Oleg Pudeyev (24) and others
* 'develop' of github.com:phpbb/phpbb3: (179 commits)
[ticket/11323] Add tests for inclusion of defined variables
[ticket/11324] Add PHP 5.5 environment to travis and allow it to fail.
[ticket/11321] Recreate schema files with develop/create_schema_files.php
[ticket/11320] Include functions file as we need phpbb_convert_30_dbms_to_31
[ticket/11313] Use correct object el instead of eel in alt_text callback
[ticket/11301] Guidelines: Add spaces in front and after the / operator.
[ticket/11301] Explicitly cast str offset to int to prevent E_NOTICE on 5.4.
[ticket/11311] Include asset core.js in subsilver2 overall_footer.html
[ticket/10949] Remove not needed comma
[ticket/11309] phpbb_extension_interface::disable_step correct docblock.
[ticket/10949] Converted missing code to new JS coding guidelines
[ticket/11302] Correctly select first timezone or selected timezone
[ticket/11305] Mock container for cache driver in functional create_user()
[ticket/11305] Check for $cache being null before using it in db drivers.
[ticket/10805] Compare phpbbAlertTimer against null
[ticket/11305] Define hook finder as a service on the container.
[ticket/11305] Adjust comment.
[ticket/11305] Use phpbb_create_default_container.
[ticket/11305] Create a normal container during final installation step.
[ticket/11305] Retrieve cache driver from container rather than cache service.
...
Conflicts:
phpBB/install/schemas/firebird_schema.sql
phpBB/install/schemas/mssql_schema.sql
phpBB/install/schemas/mysql_40_schema.sql
phpBB/install/schemas/mysql_41_schema.sql
phpBB/install/schemas/oracle_schema.sql
phpBB/install/schemas/postgres_schema.sql
phpBB/install/schemas/sqlite_schema.sql
phpBB/styles/subsilver2/template/overall_footer.html
Diffstat (limited to 'phpBB/includes/search/fulltext_postgres.php')
-rw-r--r-- | phpBB/includes/search/fulltext_postgres.php | 53 |
1 files changed, 48 insertions, 5 deletions
diff --git a/phpBB/includes/search/fulltext_postgres.php b/phpBB/includes/search/fulltext_postgres.php index f22ee2ca16..1475cc31d0 100644 --- a/phpBB/includes/search/fulltext_postgres.php +++ b/phpBB/includes/search/fulltext_postgres.php @@ -476,10 +476,14 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base $tmp_sql_match[] = "to_tsvector ('" . $this->db->sql_escape($this->config['fulltext_postgres_ts_name']) . "', " . $sql_match_column . ") @@ to_tsquery ('" . $this->db->sql_escape($this->config['fulltext_postgres_ts_name']) . "', '" . $this->db->sql_escape($this->tsearch_query) . "')"; } + $this->db->sql_transaction('begin'); + + $sql_from = "FROM $sql_from$sql_sort_table" . POSTS_TABLE . " p"; + $sql_where = "WHERE (" . implode(' OR ', $tmp_sql_match) . ") + $sql_where_options"; $sql = "SELECT $sql_select - FROM $sql_from$sql_sort_table" . POSTS_TABLE . " p - WHERE (" . implode(' OR ', $tmp_sql_match) . ") - $sql_where_options + $sql_from + $sql_where ORDER BY $sql_sort"; $result = $this->db->sql_query_limit($sql, $this->config['search_block_size'], $start); @@ -499,7 +503,12 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base // if the total result count is not cached yet, retrieve it from the db if (!$result_count) { - $result_count = sizeof ($id_ary); + $sql_count = "SELECT COUNT(*) as result_count + $sql_from + $sql_where"; + $result = $this->db->sql_query($sql_count); + $result_count = (int) $this->db->sql_fetchfield('result_count'); + $this->db->sql_freeresult($result); if (!$result_count) { @@ -507,6 +516,8 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base } } + $this->db->sql_transaction('commit'); + // store the ids, from start on then delete anything that isn't on the current page because we only need ids for one page $this->save_ids($search_key, implode(' ', $this->split_words), $author_ary, $result_count, $id_ary, $start, $sort_dir); $id_ary = array_slice($id_ary, 0, (int) $per_page); @@ -647,6 +658,8 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base $field = 'topic_id'; } + $this->db->sql_transaction('begin'); + // Only read one block of posts from the db and then cache it $result = $this->db->sql_query_limit($sql, $this->config['search_block_size'], $start); @@ -659,7 +672,35 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base // retrieve the total result count if needed if (!$result_count) { - $result_count = sizeof ($id_ary); + if ($type == 'posts') + { + $sql_count = "SELECT COUNT(*) as result_count + FROM " . $sql_sort_table . POSTS_TABLE . ' p' . (($firstpost_only) ? ', ' . TOPICS_TABLE . ' t ' : ' ') . " + WHERE $sql_author + $sql_topic_id + $sql_firstpost + $m_approve_fid_sql + $sql_fora + $sql_sort_join + $sql_time"; + } + else + { + $sql_count = "SELECT COUNT(*) as result_count + FROM " . $sql_sort_table . TOPICS_TABLE . ' t, ' . POSTS_TABLE . " p + WHERE $sql_author + $sql_topic_id + $sql_firstpost + $m_approve_fid_sql + $sql_fora + AND t.topic_id = p.topic_id + $sql_sort_join + $sql_time + GROUP BY t.topic_id, $sort_by_sql[$sort_key]"; + } + + $result = $this->db->sql_query($sql_count); + $result_count = (int) $this->db->sql_fetchfield('result_count'); if (!$result_count) { @@ -667,6 +708,8 @@ class phpbb_search_fulltext_postgres extends phpbb_search_base } } + $this->db->sql_transaction('commit'); + if (sizeof($id_ary)) { $this->save_ids($search_key, '', $author_ary, $result_count, $id_ary, $start, $sort_dir); |