This commit closes ticket #12. The search terms are ANDed now and a call to trimmed...
authorPhilipp Spitzer <philipp@spitzer.priv.at>
Tue, 12 Jul 2011 20:16:12 +0000 (20:16 +0000)
committerPhilipp Spitzer <philipp@spitzer.priv.at>
Tue, 12 Jul 2011 20:16:12 +0000 (20:16 +0000)
src/sql/sqlengine.cpp

index 419b3e0..2d82f7c 100644 (file)
@@ -313,23 +313,26 @@ int SqlEngine::searchEvent(int aConferenceId, const QHash<QString,QString> &aCol
     }
     sql += QString("WHERE EVENT.xid_conference = %1 AND (").arg( aConferenceId );
 
-    QStringList searchKeywords = aKeyword.split(QRegExp("\\s+"));
-    foreach (QString table, aColumns.uniqueKeys()){
-        foreach (QString column, aColumns.values(table)){
-            for (int i=0; i < searchKeywords.count(); i++){
-                 sql += QString("%1.%2 LIKE '\%' || :%1%2%3 || '\%' OR ").arg(table).arg(column).arg(i);
+    QStringList searchKeywords = aKeyword.trimmed().split(QRegExp("\\s+"));
+    QStringList whereAnd;
+    for (int i=0; i < searchKeywords.count(); i++) {
+        QStringList whereOr;
+        foreach (QString table, aColumns.uniqueKeys()) {
+            foreach (QString column, aColumns.values(table)){
+                 whereOr.append(QString("%1.%2 LIKE '\%' || :%1%2%3 || '\%'").arg(table).arg(column).arg(i));
             }
         }
+        whereAnd.append(whereOr.join(" OR "));
     }
-    sql.chop( QString(" OR ").length() );
+    sql += whereAnd.join(") AND (");
     sql += QString(")");
 
     QSqlQuery query(db);
     query.prepare(sql);
-    foreach (QString table, aColumns.uniqueKeys()){
-        foreach (QString column, aColumns.values(table)){
-            for (int i = 0; i != searchKeywords.size(); ++i) {
-                QString keyword = searchKeywords[i];
+    for (int i = 0; i != searchKeywords.size(); ++i) {
+        QString keyword = searchKeywords[i];
+        foreach (QString table, aColumns.uniqueKeys()) {
+            foreach (QString column, aColumns.values(table)) {
                 query.bindValue(QString(":%1%2%3").arg(table).arg(column).arg(i), keyword );
             }
         }