aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Fischer <bantu@phpbb.com>2010-06-17 19:18:18 +0200
committerAndreas Fischer <bantu@phpbb.com>2010-06-17 19:18:18 +0200
commit389c24044a189aea5ae936c21b8df39cbb1b77f6 (patch)
treebd2afb1cb19526b809081e6ec131208eb8a9291e
parentcf1b0202da836801238ae6be9614df3e8ec9851b (diff)
parent6d248097e5422bf769fb3756e64e36e243865f79 (diff)
downloadforums-389c24044a189aea5ae936c21b8df39cbb1b77f6.tar
forums-389c24044a189aea5ae936c21b8df39cbb1b77f6.tar.gz
forums-389c24044a189aea5ae936c21b8df39cbb1b77f6.tar.bz2
forums-389c24044a189aea5ae936c21b8df39cbb1b77f6.tar.xz
forums-389c24044a189aea5ae936c21b8df39cbb1b77f6.zip
Merge branch 'develop-olympus' into develop
* develop-olympus: [ticket/9132] Oracle CLOB support is broken, preventing storage of long strings [ticket/9606] Optimize unread search option.
-rw-r--r--phpBB/includes/db/oracle.php5
-rw-r--r--phpBB/includes/functions.php7
-rw-r--r--phpBB/search.php19
3 files changed, 16 insertions, 15 deletions
diff --git a/phpBB/includes/db/oracle.php b/phpBB/includes/db/oracle.php
index 55b3599800..5a9b18abf0 100644
--- a/phpBB/includes/db/oracle.php
+++ b/phpBB/includes/db/oracle.php
@@ -261,6 +261,10 @@ class dbal_oracle extends dbal
{
$cols = explode(', ', $regs[2]);
+/* The code inside this comment block breaks clob handling, but does allow the
+ database restore script to work. If you want to allow no posts longer than 4KB
+ and/or need the db restore script, uncomment this.
+
preg_match_all('/\'(?:[^\']++|\'\')*+\'|[\d-.]+/', $regs[3], $vals, PREG_PATTERN_ORDER);
if (sizeof($cols) !== sizeof($vals))
@@ -310,6 +314,7 @@ class dbal_oracle extends dbal
$vals = array(0 => $vals);
}
+*/
$inserts = $vals[0];
unset($vals);
diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php
index 3e80f93114..3f097f171f 100644
--- a/phpBB/includes/functions.php
+++ b/phpBB/includes/functions.php
@@ -1660,10 +1660,11 @@ function get_complete_topic_tracking($forum_id, $topic_ids, $global_announce_lis
* @param string $sql_extra Extra WHERE SQL statement
* @param string $sql_sort ORDER BY SQL sorting statement
* @param string $sql_limit Limits the size of unread topics list, 0 for unlimited query
+* @param string $sql_limit_offset Sets the offset of the first row to search, 0 to search from the start
*
* @return array[int][int] Topic ids as keys, mark_time of topic as value
*/
-function get_unread_topics($user_id = false, $sql_extra = '', $sql_sort = '', $sql_limit = 1001)
+function get_unread_topics($user_id = false, $sql_extra = '', $sql_sort = '', $sql_limit = 1001, $sql_limit_offset = 0)
{
global $config, $db, $user;
@@ -1709,7 +1710,7 @@ function get_unread_topics($user_id = false, $sql_extra = '', $sql_sort = '', $s
);
$sql = $db->sql_build_query('SELECT', $sql_array);
- $result = $db->sql_query_limit($sql, $sql_limit);
+ $result = $db->sql_query_limit($sql, $sql_limit, $sql_limit_offset);
while ($row = $db->sql_fetchrow($result))
{
@@ -1742,7 +1743,7 @@ function get_unread_topics($user_id = false, $sql_extra = '', $sql_sort = '', $s
WHERE t.topic_last_post_time > ' . $user_lastmark . "
$sql_extra
$sql_sort";
- $result = $db->sql_query_limit($sql, $sql_limit);
+ $result = $db->sql_query_limit($sql, $sql_limit, $sql_limit_offset);
while ($row = $db->sql_fetchrow($result))
{
diff --git a/phpBB/search.php b/phpBB/search.php
index 7a9ab82f93..1e1e42d01f 100644
--- a/phpBB/search.php
+++ b/phpBB/search.php
@@ -387,18 +387,6 @@ if ($keywords || $author || $author_id || $search_id || $submit)
gen_sort_selects($limit_days, $sort_by_text, $sort_days, $sort_key, $sort_dir, $s_limit_days, $s_sort_key, $s_sort_dir, $u_sort_param);
$s_sort_key = $s_sort_dir = $u_sort_param = $s_limit_days = '';
-
- $unread_list = array();
- $unread_list = get_unread_topics($user->data['user_id'], $sql_where, $sql_sort);
-
- if (!empty($unread_list))
- {
- $sql = 'SELECT t.topic_id
- FROM ' . TOPICS_TABLE . ' t
- WHERE ' . $db->sql_in_set('t.topic_id', array_keys($unread_list)) . "
- $sql_sort";
- $field = 'topic_id';
- }
break;
case 'newposts':
@@ -476,6 +464,13 @@ if ($keywords || $author || $author_id || $search_id || $submit)
$total_match_count = sizeof($id_ary) + $start;
$id_ary = array_slice($id_ary, 0, $per_page);
}
+ else if ($search_id == 'unreadposts')
+ {
+ $id_ary = array_keys(get_unread_topics($user->data['user_id'], $sql_where, $sql_sort, 1001 - $start, $start));
+
+ $total_match_count = sizeof($id_ary) + $start;
+ $id_ary = array_slice($id_ary, 0, $per_page);
+ }
else
{
$search_id = '';