summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2013-09-03 23:35:33 +0200
committerGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2013-09-03 23:35:33 +0200
commitf55ae730e6477f37566722961ca7e7ab9ad7f3c5 (patch)
tree58067c75dca070e2785ba8ba7f0f694f3ad9881a
parentf855dbdca6e95ac367b7a9dae9d3a866e1f85d37 (diff)
Disable SQL LIMIT optimisation during search
This patch is to make search work again after the new SQL optimisations, by removing some of the optimisations when searching is used. Optimisation of search is left for some future work. The whole base is indeed transfered from MySQL to PHP, which is not good.
-rw-r--r--app/models/EntriesGetter.php12
-rwxr-xr-xapp/models/Entry.php12
2 files changed, 13 insertions, 11 deletions
diff --git a/app/models/EntriesGetter.php b/app/models/EntriesGetter.php
index dc7ecca7c..803aad732 100644
--- a/app/models/EntriesGetter.php
+++ b/app/models/EntriesGetter.php
@@ -98,13 +98,15 @@ class EntriesGetter {
HelperEntry::$first = $this->first; //TODO: Update: Now done in SQL
HelperEntry::$filter = $this->filter;
+ $sqlLimit = (empty ($this->filter['words']) && empty ($this->filter['tags'])) ? $this->nb : ''; //Disable SQL LIMIT optimisation during search //TODO: Do better!
+
switch ($this->type['type']) {
case 'all':
list ($this->entries, $this->next) = $entryDAO->listEntries (
$this->state,
$this->order,
$this->first,
- $this->nb
+ $sqlLimit
);
break;
case 'favoris':
@@ -112,7 +114,7 @@ class EntriesGetter {
$this->state,
$this->order,
$this->first,
- $this->nb
+ $sqlLimit
);
break;
case 'public':
@@ -120,7 +122,7 @@ class EntriesGetter {
$this->state,
$this->order,
$this->first,
- $this->nb
+ $sqlLimit
);
break;
case 'c':
@@ -129,7 +131,7 @@ class EntriesGetter {
$this->state,
$this->order,
$this->first,
- $this->nb
+ $sqlLimit
);
break;
case 'f':
@@ -138,7 +140,7 @@ class EntriesGetter {
$this->state,
$this->order,
$this->first,
- $this->nb
+ $sqlLimit
);
break;
default:
diff --git a/app/models/Entry.php b/app/models/Entry.php
index 4043e8f01..53f09b9c9 100755
--- a/app/models/Entry.php
+++ b/app/models/Entry.php
@@ -396,7 +396,7 @@ class EntryDAO extends Model_pdo {
. ' ORDER BY date' . $order . ', id' . $order;
if (!empty($limitCount)) {
- $sql .= ' LIMIT ' . $limitCount; //TODO: See http://explainextended.com/2009/10/23/mysql-order-by-limit-performance-late-row-lookups/
+ $sql .= ' LIMIT ' . ($limitCount + 1); //TODO: See http://explainextended.com/2009/10/23/mysql-order-by-limit-performance-late-row-lookups/
}
$stm = $this->bd->prepare ($sql);
@@ -405,19 +405,19 @@ class EntryDAO extends Model_pdo {
return HelperEntry::daoToEntry ($stm->fetchAll (PDO::FETCH_ASSOC));
}
public function listEntries ($state, $order = 'high_to_low', $limitFromId = '', $limitCount = '') {
- return $this->listWhere (' WHERE priority > 0', $state, $order, $limitFromId, $limitCount + 1);
+ return $this->listWhere (' WHERE priority > 0', $state, $order, $limitFromId, $limitCount);
}
public function listFavorites ($state, $order = 'high_to_low', $limitFromId = '', $limitCount = '') {
- return $this->listWhere (' WHERE is_favorite = 1', $state, $order, $limitFromId, $limitCount + 1);
+ return $this->listWhere (' WHERE is_favorite = 1', $state, $order, $limitFromId, $limitCount);
}
public function listPublic ($state, $order = 'high_to_low', $limitFromId = '', $limitCount = '') {
- return $this->listWhere (' WHERE is_public = 1', $state, $order, $limitFromId, $limitCount + 1);
+ return $this->listWhere (' WHERE is_public = 1', $state, $order, $limitFromId, $limitCount);
}
public function listByCategory ($cat, $state, $order = 'high_to_low', $limitFromId = '', $limitCount = '') {
- return $this->listWhere (' WHERE category = ?', $state, $order, $limitFromId, $limitCount + 1, array ($cat));
+ return $this->listWhere (' WHERE category = ?', $state, $order, $limitFromId, $limitCount, array ($cat));
}
public function listByFeed ($feed, $state, $order = 'high_to_low', $limitFromId = '', $limitCount = '') {
- return $this->listWhere (' WHERE id_feed = ?', $state, $order, $limitFromId, $limitCount + 1, array ($feed));
+ return $this->listWhere (' WHERE id_feed = ?', $state, $order, $limitFromId, $limitCount, array ($feed));
}
public function countUnreadRead () {