]> Some of my projects - localmylist.git/commitdiff
Make search-gui used a prepared statement for search.
authorAPTX <marek321@gmail.com>
Fri, 12 Apr 2013 11:41:21 +0000 (13:41 +0200)
committerAPTX <marek321@gmail.com>
Fri, 12 Apr 2013 11:41:21 +0000 (13:41 +0200)
search-gui/mainwindow.cpp

index 744541564a89758d42b19f5a7b32db2f4973ab0d..08f40c3c339c8b457219f2f181fa09b14de81828 100644 (file)
@@ -11,8 +11,8 @@
 using namespace LocalMyList;
 
 MainWindow::MainWindow(QWidget *parent) :
-    QMainWindow(parent),
-    ui(new Ui::MainWindow)
+       QMainWindow(parent),
+       ui(new Ui::MainWindow)
 {
        ui->setupUi(this);
        MyList::instance()->loadLocalSettings();
@@ -32,13 +32,31 @@ MainWindow::~MainWindow()
 void MainWindow::on_search_textChanged(const QString &text)
 {
 
-       QSqlQuery q(
-       "SELECT a.aid, b.title AS MainTitle, a.title, a.language, a.type FROM anime_title a"
-               " LEFT JOIN anime_title b on b.aid = a.aid"
-                               " WHERE lower(a.title) LIKE '%" + text + "%'"
-                       " AND b.type = 1"
-               " ORDER BY a.title ASC, a.aid ASC", MyList::instance()->database()->connection());
-qDebug() << q.lastError();
+       QString query;
+
+       if (text.isEmpty())
+       {
+               model->setQuery(QSqlQuery());
+               return;
+       }
+
+       if (text.length() > 3)
+               query = "%" + text + "%";
+       else
+               query = text + "%";
+
+       QSqlQuery &q = MyList::instance()->database()->prepare(
+       "SELECT a.aid, b.title AS main_title, a.title, a.language, a.type, a.title <-> :word AS distance FROM anime_title a "
+       "       LEFT JOIN anime_title b on b.aid = a.aid "
+       "       WHERE a.title ILIKE :query "
+       "               AND b.type = 1 "
+       "       ORDER BY distance ASC, a.title ASC, a.aid ASC "
+       "       LIMIT 100");
+       q.bindValue(":word", text);
+       q.bindValue(":query", query);
+
+       MyList::instance()->database()->exec(q);
        model->setQuery(q);
+       ui->resultView->resizeColumnsToContents();
 
 }