diff --git a/src/PreferencesDialog.cpp b/src/PreferencesDialog.cpp
index 0be1f5f1..7285c662 100644
--- a/src/PreferencesDialog.cpp
+++ b/src/PreferencesDialog.cpp
@@ -72,6 +72,7 @@ void PreferencesDialog::loadSettings()
loadColorSetting(ui->fr_bin_bg, "bin_bg");
ui->txtNull->setText(getSettingsValue("databrowser", "null_text").toString());
+ ui->editFilterEscape->setText(getSettingsValue("databrowser", "filter_escape").toString());
for(int i=0; i < ui->treeSyntaxHighlighting->topLevelItemCount(); ++i)
{
@@ -119,6 +120,7 @@ void PreferencesDialog::saveSettings()
saveColorSetting(ui->fr_bin_fg, "bin_fg");
saveColorSetting(ui->fr_bin_bg, "bin_bg");
setSettingsValue("databrowser", "null_text", ui->txtNull->text());
+ setSettingsValue("databrowser", "filter_escape", ui->editFilterEscape->text());
for(int i=0; i < ui->treeSyntaxHighlighting->topLevelItemCount(); ++i)
{
@@ -250,6 +252,8 @@ QVariant PreferencesDialog::getSettingsDefaultValue(const QString& group, const
return 10;
if (name == "null_text")
return "NULL";
+ if (name == "filter_escape")
+ return "\\";
if (name == "null_fg_colour")
return QColor(Qt::lightGray).name();
if (name == "null_bg_colour")
diff --git a/src/PreferencesDialog.ui b/src/PreferencesDialog.ui
index 49d3e3fc..5bc30a1b 100644
--- a/src/PreferencesDialog.ui
+++ b/src/PreferencesDialog.ui
@@ -7,7 +7,7 @@
0
0
590
- 426
+ 495
@@ -486,6 +486,32 @@
+ -
+
+
+ Filters
+
+
+
-
+
+
+ 1
+
+
+
+ -
+
+
+ Escape character
+
+
+ editFilterEscape
+
+
+
+
+
+
diff --git a/src/sqlitetablemodel.cpp b/src/sqlitetablemodel.cpp
index 04ec19f8..9501c27e 100644
--- a/src/sqlitetablemodel.cpp
+++ b/src/sqlitetablemodel.cpp
@@ -536,6 +536,7 @@ void SqliteTableModel::updateFilter(int column, const QString& value)
// Check for any special comparison operators at the beginning of the value string. If there are none default to LIKE.
QString op = "LIKE";
QString val;
+ QString escape;
bool numeric = false;
if(value.left(2) == ">=" || value.left(2) == "<=" || value.left(2) == "<>")
{
@@ -556,12 +557,16 @@ void SqliteTableModel::updateFilter(int column, const QString& value)
val = value.mid(1);
numeric = true;
}
+ } else if(value.left(1) == "=") {
+ op = "=";
+ val = value.mid(1);
} else {
- if(value.left(1) == "=")
- {
- op = "=";
- val = value.mid(1);
- }
+ // Keep the default LIKE operator
+
+ QString escape_character = PreferencesDialog::getSettingsValue("databrowser", "filter_escape").toString();
+ if(escape_character == "'") escape_character = "''";
+ if(escape_character.length())
+ escape = QString("ESCAPE '%1'").arg(escape_character);
}
if(val.isEmpty())
val = value;
@@ -572,7 +577,7 @@ void SqliteTableModel::updateFilter(int column, const QString& value)
if(val == "''")
m_mWhere.remove(column);
else
- m_mWhere.insert(column, QString("%1 %2").arg(op).arg(QString(encode(val.toUtf8()))));
+ m_mWhere.insert(column, QString("%1 %2 %3").arg(op).arg(QString(encode(val.toUtf8()))).arg(escape));
// Build the new query
buildQuery();