11#include " CondFormat.h"
22#include " Settings.h"
33#include " Data.h"
4+ #include " sqlitedb.h"
45
56#include < QAbstractTableModel>
67
@@ -48,8 +49,11 @@ CondFormat::CondFormat(const QString& filter,
4849 m_font.fromString (model->data (index, Qt::FontRole).toString ());
4950}
5051
51- QString CondFormat::filterToSqlCondition (const QString& value, const QString& encoding)
52+ std::string CondFormat::filterToSqlCondition (const QString& value, const QString& encoding)
5253{
54+ if (value.isEmpty ())
55+ return {};
56+
5357 // Check for any special comparison operators at the beginning of the value string. If there are none default to LIKE.
5458 QString op = " LIKE" ;
5559 QString val, val2;
@@ -89,15 +93,15 @@ QString CondFormat::filterToSqlCondition(const QString& value, const QString& en
8993 numeric = true ;
9094 val = " ''" ;
9195 } else {
92- value.mid (2 ).toFloat (&numeric);
96+ value.midRef (2 ).toFloat (&numeric);
9397 op = value.left (2 );
9498 val = value.mid (2 );
9599 }
96- } else if (value.left ( 1 ) == " >" || value.left ( 1 ) == " <" ) {
97- value.mid (1 ).toFloat (&numeric);
98- op = value.left ( 1 );
100+ } else if (value.front ( ) == " >" || value.front ( ) == " <" ) {
101+ value.midRef (1 ).toFloat (&numeric);
102+ op = value.front ( );
99103 val = value.mid (1 );
100- } else if (value.left ( 1 ) == " =" ) {
104+ } else if (value.front ( ) == " =" ) {
101105 val = value.mid (1 );
102106
103107 // Check if value to compare with is 'NULL'
@@ -111,7 +115,7 @@ QString CondFormat::filterToSqlCondition(const QString& value, const QString& en
111115 op = " IS" ;
112116 numeric = true ;
113117 }
114- } else if (value.left ( 1 ) == " /" && value.right ( 1 ) == " /" && value.length () > 2 ) {
118+ } else if (value.front ( ) == " /" && value.back ( ) == " /" && value.size () > 2 ) {
115119 val = value.mid (1 , value.length () - 2 );
116120 op = " REGEXP" ;
117121 numeric = false ;
@@ -138,18 +142,18 @@ QString CondFormat::filterToSqlCondition(const QString& value, const QString& en
138142 if (val.isEmpty ())
139143 val = value;
140144
141- if (val == " " || val == " %" || val == " %%" )
142- return QString () ;
145+ if (val. isEmpty () || val == " %" || val == " %%" )
146+ return {} ;
143147 else {
144148 // Quote and escape value, but only if it's not numeric and not the empty string sequence
145149 if (!numeric && val != " ''" )
146- val = QString ( " '%1' " ). arg ( val. replace ( " ' " , " '' " ) );
150+ val = sqlb::escapeString ( val);
147151
148152 QString whereClause (op + " " + QString (encodeString (val.toUtf8 (), encoding)));
149153 if (!val2.isEmpty ())
150154 whereClause += " AND " + QString (encodeString (val2.toUtf8 (), encoding));
151155 whereClause += " " + escape;
152- return whereClause;
156+ return whereClause. toStdString () ;
153157 }
154158}
155159
0 commit comments