plugins/contacts/symbian/contactsmodel/tsrc/cntplsql_qt/ut_cntsqlsearch.cpp
changeset 5 603d3f8b6302
parent 0 876b1a06bc25
--- a/plugins/contacts/symbian/contactsmodel/tsrc/cntplsql_qt/ut_cntsqlsearch.cpp	Fri Sep 17 08:34:34 2010 +0300
+++ b/plugins/contacts/symbian/contactsmodel/tsrc/cntplsql_qt/ut_cntsqlsearch.cpp	Mon Oct 04 01:37:06 2010 +0300
@@ -18,9 +18,12 @@
 #include <QtTest/QtTest>
 #include <QStringList>
 #include <QLocale>
+#include <sqldb.h>
 
 #include "ut_cntsqlsearch.h"
 #include "cntsqlsearch.h"
+#include "cqwertykeymap.h"
+#include "c12keykeymap.h"
 
 #define WRITE_LOGS
 #define SQL_QT_TEST
@@ -53,14 +56,17 @@
 
 
 void UT_CntSqlSearch::init()
-{
-mCntSqlSearch = new CntSqlSearch();
+{   
+    m12KeyKeyMap = C12keyKeyMap::NewL();
+    mQwertyKeyMap = CQwertyKeyMap::NewL();
+    mCntSqlSearch = new CntSqlSearch( *m12KeyKeyMap, *mQwertyKeyMap );
 }
 
 void UT_CntSqlSearch::cleanup()
 {
+    delete m12KeyKeyMap;
+    delete mQwertyKeyMap;
     delete mCntSqlSearch;
-    mCntSqlSearch = 0;
     
 }
 void UT_CntSqlSearch::testPredictiveSearch()
@@ -181,7 +187,7 @@
     pattern = "0705";
     #if defined(SEARCH_FROM_ONE_TABLE)
 #if defined(USE_DEMORGAN)
-    reference = QString("SELECT contact_id FROM predictivesearch0 WHERE NOT(NOT(NOT(NOT(nbr>31613158321815551 AND nbr<31630750507859968) AND NOT(nbr2>31613158321815551 AND nbr2<31630750507859968) AND NOT(nbr3>31613158321815551 AND nbr3<31630750507859968) AND NOT(nbr4>31613158321815551 AND nbr4<31630750507859968))) AND NOT(NOT(NOT(nbr2>360287970189639679 AND nbr2<432345564227567616 AND nbr>31525197391593471 AND nbr<36028797018963968) AND NOT(nbr3>360287970189639679 AND nbr3<432345564227567616 AND nbr>31525197391593471 AND nbr<36028797018963968) AND NOT(nbr3>360287970189639679 AND nbr3<432345564227567616 AND nbr2>31525197391593471 AND nbr2<36028797018963968) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr>31525197391593471 AND nbr<36028797018963968) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr2>31525197391593471 AND nbr2<36028797018963968) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr3>31525197391593471 AND nbr3<36028797018963968))) AND NOT(NOT(NOT(nbr2>31525197391593471 AND nbr2<36028797018963968 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr3>31525197391593471 AND nbr3<36028797018963968 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr3>31525197391593471 AND nbr3<36028797018963968 AND nbr2>360287970189639679 AND nbr2<432345564227567616) AND NOT(nbr4>31525197391593471 AND nbr4<36028797018963968 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr4>31525197391593471 AND nbr4<36028797018963968 AND nbr2>360287970189639679 AND nbr2<432345564227567616) AND NOT(nbr4>31525197391593471 AND nbr4<36028797018963968 AND nbr3>360287970189639679 AND nbr3<432345564227567616)))) ORDER BY predictivesearch0.first_name, predictivesearch0.last_name ASC;");
+    reference = QString("SELECT contact_id FROM (SELECT predictivesearch7.contact_id, predictivesearch7.first_name, predictivesearch7.last_name FROM predictivesearch7 WHERE ((NOT(NOT(nbr2>360287970189639679 AND nbr2<432345564227567616 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr3>360287970189639679 AND nbr3<432345564227567616 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr3>360287970189639679 AND nbr3<432345564227567616 AND nbr2>504403158265495551 AND nbr2<576460752303423488) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr2>504403158265495551 AND nbr2<576460752303423488) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr3>504403158265495551 AND nbr3<576460752303423488))) OR(NOT(NOT(nbr2>504403158265495551 AND nbr2<576460752303423488 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr3>504403158265495551 AND nbr3<576460752303423488 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr3>504403158265495551 AND nbr3<576460752303423488 AND nbr2>360287970189639679 AND nbr2<432345564227567616) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr2>360287970189639679 AND nbr2<432345564227567616) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr3>360287970189639679 AND nbr3<432345564227567616)))) UNION SELECT predictivesearch0.contact_id, predictivesearch0.first_name, predictivesearch0.last_name FROM predictivesearch0 WHERE ((NOT(NOT(predictivesearch0.nbr>31613158321815551 AND predictivesearch0.nbr<31630750507859968) AND NOT(predictivesearch0.nbr2>31613158321815551 AND predictivesearch0.nbr2<31630750507859968) AND NOT(predictivesearch0.nbr3>31613158321815551 AND predictivesearch0.nbr3<31630750507859968) AND NOT(predictivesearch0.nbr4>31613158321815551 AND predictivesearch0.nbr4<31630750507859968)))) OR(NOT(NOT(nbr2>360287970189639679 AND nbr2<432345564227567616 AND nbr>31525197391593471 AND nbr<36028797018963968) AND NOT(nbr3>360287970189639679 AND nbr3<432345564227567616 AND nbr>31525197391593471 AND nbr<36028797018963968) AND NOT(nbr3>360287970189639679 AND nbr3<432345564227567616 AND nbr2>31525197391593471 AND nbr2<36028797018963968) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr>31525197391593471 AND nbr<36028797018963968) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr2>31525197391593471 AND nbr2<36028797018963968) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr3>31525197391593471 AND nbr3<36028797018963968))) OR(NOT(NOT(nbr2>31525197391593471 AND nbr2<36028797018963968 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr3>31525197391593471 AND nbr3<36028797018963968 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr3>31525197391593471 AND nbr3<36028797018963968 AND nbr2>360287970189639679 AND nbr2<432345564227567616) AND NOT(nbr4>31525197391593471 AND nbr4<36028797018963968 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr4>31525197391593471 AND nbr4<36028797018963968 AND nbr2>360287970189639679 AND nbr2<432345564227567616) AND NOT(nbr4>31525197391593471 AND nbr4<36028797018963968 AND nbr3>360287970189639679 AND nbr3<432345564227567616)))) AS PR ORDER BY PR.first_name, PR.last_name ASC;");
 #else // #if defined(USE_DEMORGAN)
 
 #endif //#if defined(USE_DEMORGAN)
@@ -190,8 +196,8 @@
 #endif // #if defined(SEARCH_FROM_ONE_TABLE)
 
     result = mCntSqlSearch->CreatePredictiveSearch(pattern);
-    //qDebug() << pattern << result;
     LOG2(pattern, result);
+    //qDebug() << pattern << " -> result" << result;
     QVERIFY(!result.compare(reference));
     
     pattern.clear();
@@ -291,12 +297,11 @@
     // Leading zeros
     pattern = QString("001100");
 #if defined(USE_DEMORGAN)
-    reference = QString("SELECT contact_id FROM predictivesearch0 WHERE (NOT(NOT(nbr>299067162755071 AND nbr<299135882231808) AND NOT(nbr2>299067162755071 AND nbr2<299135882231808) AND NOT(nbr3>299067162755071 AND nbr3<299135882231808) AND NOT(nbr4>299067162755071 AND nbr4<299135882231808))) ORDER BY first_name, last_name ASC;");
+    reference = QString("SELECT contact_id FROM (SELECT predictivesearch1.contact_id, predictivesearch1.first_name, predictivesearch1.last_name FROM predictivesearch1 WHERE ((NOT(NOT(predictivesearch1.nbr>76561193665298431 AND predictivesearch1.nbr<81064793292668928) AND NOT(predictivesearch1.nbr2>76561193665298431 AND predictivesearch1.nbr2<81064793292668928) AND NOT(predictivesearch1.nbr3>76561193665298431 AND predictivesearch1.nbr3<81064793292668928) AND NOT(predictivesearch1.nbr4>76561193665298431 AND predictivesearch1.nbr4<81064793292668928)))) UNION SELECT predictivesearch0.contact_id, predictivesearch0.first_name, predictivesearch0.last_name FROM predictivesearch0 WHERE ((NOT(NOT(predictivesearch0.nbr>299067162755071 AND predictivesearch0.nbr<299135882231808) AND NOT(predictivesearch0.nbr2>299067162755071 AND predictivesearch0.nbr2<299135882231808) AND NOT(predictivesearch0.nbr3>299067162755071 AND predictivesearch0.nbr3<299135882231808) AND NOT(predictivesearch0.nbr4>299067162755071 AND predictivesearch0.nbr4<299135882231808))))) AS PR ORDER BY PR.first_name, PR.last_name ASC;");
 #else
     reference = QString("SELECT contact_id FROM predictivesearch0 WHERE (nbr>299067162755071 AND nbr<299135882231808) OR (nbr2>299067162755071 AND nbr2<299135882231808) OR (nbr3>299067162755071 AND nbr3<299135882231808) OR (nbr4>299067162755071 AND nbr4<299135882231808) ORDER BY first_name, last_name ASC;");
 #endif
     result = mCntSqlSearch->CreatePredictiveSearch(pattern);
-    //qDebug() << pattern << " -> result" << result;
     LOG2(pattern, result);
     QVERIFY(!result.compare(reference));
     
@@ -309,7 +314,7 @@
 
     pattern = QString("0020030");
 #if defined(USE_DEMORGAN)
-    reference = QString("SELECT contact_id FROM predictivesearch0 WHERE NOT(NOT(NOT(NOT(nbr>563156111851519 AND nbr<563160406818816) AND NOT(nbr2>563156111851519 AND nbr2<563160406818816) AND NOT(nbr3>563156111851519 AND nbr3<563160406818816) AND NOT(nbr4>563156111851519 AND nbr4<563160406818816))) AND NOT(NOT(NOT(nbr2>216172782113783807 AND nbr2<220676381741154304 AND nbr>562949953421311 AND nbr<844424930131968) AND NOT(nbr3>216172782113783807 AND nbr3<220676381741154304 AND nbr>562949953421311 AND nbr<844424930131968) AND NOT(nbr3>216172782113783807 AND nbr3<220676381741154304 AND nbr2>562949953421311 AND nbr2<844424930131968) AND NOT(nbr4>216172782113783807 AND nbr4<220676381741154304 AND nbr>562949953421311 AND nbr<844424930131968) AND NOT(nbr4>216172782113783807 AND nbr4<220676381741154304 AND nbr2>562949953421311 AND nbr2<844424930131968) AND NOT(nbr4>216172782113783807 AND nbr4<220676381741154304 AND nbr3>562949953421311 AND nbr3<844424930131968))) AND NOT(NOT(NOT(nbr2>562949953421311 AND nbr2<844424930131968 AND nbr>216172782113783807 AND nbr<220676381741154304) AND NOT(nbr3>562949953421311 AND nbr3<844424930131968 AND nbr>216172782113783807 AND nbr<220676381741154304) AND NOT(nbr3>562949953421311 AND nbr3<844424930131968 AND nbr2>216172782113783807 AND nbr2<220676381741154304) AND NOT(nbr4>562949953421311 AND nbr4<844424930131968 AND nbr>216172782113783807 AND nbr<220676381741154304) AND NOT(nbr4>562949953421311 AND nbr4<844424930131968 AND nbr2>216172782113783807 AND nbr2<220676381741154304) AND NOT(nbr4>562949953421311 AND nbr4<844424930131968 AND nbr3>216172782113783807 AND nbr3<220676381741154304)))) ORDER BY predictivesearch0.first_name, predictivesearch0.last_name ASC;");
+    reference = QString("SELECT contact_id FROM (SELECT predictivesearch2.contact_id, predictivesearch2.first_name, predictivesearch2.last_name FROM predictivesearch2 WHERE ((NOT(NOT(nbr2>216172782113783807 AND nbr2<220676381741154304 AND nbr>144115188075855871 AND nbr<216172782113783808) AND NOT(nbr3>216172782113783807 AND nbr3<220676381741154304 AND nbr>144115188075855871 AND nbr<216172782113783808) AND NOT(nbr3>216172782113783807 AND nbr3<220676381741154304 AND nbr2>144115188075855871 AND nbr2<216172782113783808) AND NOT(nbr4>216172782113783807 AND nbr4<220676381741154304 AND nbr>144115188075855871 AND nbr<216172782113783808) AND NOT(nbr4>216172782113783807 AND nbr4<220676381741154304 AND nbr2>144115188075855871 AND nbr2<216172782113783808) AND NOT(nbr4>216172782113783807 AND nbr4<220676381741154304 AND nbr3>144115188075855871 AND nbr3<216172782113783808))) OR(NOT(NOT(nbr2>144115188075855871 AND nbr2<216172782113783808 AND nbr>216172782113783807 AND nbr<220676381741154304) AND NOT(nbr3>144115188075855871 AND nbr3<216172782113783808 AND nbr>216172782113783807 AND nbr<220676381741154304) AND NOT(nbr3>144115188075855871 AND nbr3<216172782113783808 AND nbr2>216172782113783807 AND nbr2<220676381741154304) AND NOT(nbr4>144115188075855871 AND nbr4<216172782113783808 AND nbr>216172782113783807 AND nbr<220676381741154304) AND NOT(nbr4>144115188075855871 AND nbr4<216172782113783808 AND nbr2>216172782113783807 AND nbr2<220676381741154304) AND NOT(nbr4>144115188075855871 AND nbr4<216172782113783808 AND nbr3>216172782113783807 AND nbr3<220676381741154304)))) UNION SELECT predictivesearch0.contact_id, predictivesearch0.first_name, predictivesearch0.last_name FROM predictivesearch0 WHERE ((NOT(NOT(predictivesearch0.nbr>563156111851519 AND predictivesearch0.nbr<563160406818816) AND NOT(predictivesearch0.nbr2>563156111851519 AND predictivesearch0.nbr2<563160406818816) AND NOT(predictivesearch0.nbr3>563156111851519 AND predictivesearch0.nbr3<563160406818816) AND NOT(predictivesearch0.nbr4>563156111851519 AND predictivesearch0.nbr4<563160406818816)))) OR(NOT(NOT(nbr2>216172782113783807 AND nbr2<220676381741154304 AND nbr>562949953421311 AND nbr<844424930131968) AND NOT(nbr3>216172782113783807 AND nbr3<220676381741154304 AND nbr>562949953421311 AND nbr<844424930131968) AND NOT(nbr3>216172782113783807 AND nbr3<220676381741154304 AND nbr2>562949953421311 AND nbr2<844424930131968) AND NOT(nbr4>216172782113783807 AND nbr4<220676381741154304 AND nbr>562949953421311 AND nbr<844424930131968) AND NOT(nbr4>216172782113783807 AND nbr4<220676381741154304 AND nbr2>562949953421311 AND nbr2<844424930131968) AND NOT(nbr4>216172782113783807 AND nbr4<220676381741154304 AND nbr3>562949953421311 AND nbr3<844424930131968))) OR(NOT(NOT(nbr2>562949953421311 AND nbr2<844424930131968 AND nbr>216172782113783807 AND nbr<220676381741154304) AND NOT(nbr3>562949953421311 AND nbr3<844424930131968 AND nbr>216172782113783807 AND nbr<220676381741154304) AND NOT(nbr3>562949953421311 AND nbr3<844424930131968 AND nbr2>216172782113783807 AND nbr2<220676381741154304) AND NOT(nbr4>562949953421311 AND nbr4<844424930131968 AND nbr>216172782113783807 AND nbr<220676381741154304) AND NOT(nbr4>562949953421311 AND nbr4<844424930131968 AND nbr2>216172782113783807 AND nbr2<220676381741154304) AND NOT(nbr4>562949953421311 AND nbr4<844424930131968 AND nbr3>216172782113783807 AND nbr3<220676381741154304)))) AS PR ORDER BY PR.first_name, PR.last_name ASC;");
 #else
     // TODO: add non-De Morgan case
 #endif
@@ -320,13 +325,13 @@
     
     pattern = QString("00430001020");
 #if defined(USE_DEMORGAN)
-    reference = QString("SELECT contact_id FROM predictivesearch0 WHERE NOT(NOT(NOT(NOT(nbr>1178676735508479 AND nbr<1178676735574016) AND NOT(nbr2>1178676735508479 AND nbr2<1178676735574016) AND NOT(nbr3>1178676735508479 AND nbr3<1178676735574016) AND NOT(nbr4>1178676735508479 AND nbr4<1178676735574016))) AND NOT(NOT(NOT(nbr2>72620543991349247 AND nbr2<72638136177393664 AND nbr>1178676464975871 AND nbr<1196268651020288) AND NOT(nbr3>72620543991349247 AND nbr3<72638136177393664 AND nbr>1178676464975871 AND nbr<1196268651020288) AND NOT(nbr3>72620543991349247 AND nbr3<72638136177393664 AND nbr2>1178676464975871 AND nbr2<1196268651020288) AND NOT(nbr4>72620543991349247 AND nbr4<72638136177393664 AND nbr>1178676464975871 AND nbr<1196268651020288) AND NOT(nbr4>72620543991349247 AND nbr4<72638136177393664 AND nbr2>1178676464975871 AND nbr2<1196268651020288) AND NOT(nbr4>72620543991349247 AND nbr4<72638136177393664 AND nbr3>1178676464975871 AND nbr3<1196268651020288))) AND NOT(NOT(NOT(nbr2>1178676464975871 AND nbr2<1196268651020288 AND nbr>72620543991349247 AND nbr<72638136177393664) AND NOT(nbr3>1178676464975871 AND nbr3<1196268651020288 AND nbr>72620543991349247 AND nbr<72638136177393664) AND NOT(nbr3>1178676464975871 AND nbr3<1196268651020288 AND nbr2>72620543991349247 AND nbr2<72638136177393664) AND NOT(nbr4>1178676464975871 AND nbr4<1196268651020288 AND nbr>72620543991349247 AND nbr<72638136177393664) AND NOT(nbr4>1178676464975871 AND nbr4<1196268651020288 AND nbr2>72620543991349247 AND nbr2<72638136177393664) AND NOT(nbr4>1178676464975871 AND nbr4<1196268651020288 AND nbr3>72620543991349247 AND nbr3<72638136177393664)))) ORDER BY predictivesearch0.first_name, predictivesearch0.last_name ASC;");
+    reference = QString("SELECT contact_id FROM (SELECT predictivesearch4.contact_id, predictivesearch4.first_name, predictivesearch4.last_name FROM predictivesearch4 WHERE ((NOT(NOT(nbr2>72620543991349247 AND nbr2<72638136177393664 AND nbr>301741175033823231 AND nbr<306244774661193728) AND NOT(nbr3>72620543991349247 AND nbr3<72638136177393664 AND nbr>301741175033823231 AND nbr<306244774661193728) AND NOT(nbr3>72620543991349247 AND nbr3<72638136177393664 AND nbr2>301741175033823231 AND nbr2<306244774661193728) AND NOT(nbr4>72620543991349247 AND nbr4<72638136177393664 AND nbr>301741175033823231 AND nbr<306244774661193728) AND NOT(nbr4>72620543991349247 AND nbr4<72638136177393664 AND nbr2>301741175033823231 AND nbr2<306244774661193728) AND NOT(nbr4>72620543991349247 AND nbr4<72638136177393664 AND nbr3>301741175033823231 AND nbr3<306244774661193728))) OR(NOT(NOT(nbr2>301741175033823231 AND nbr2<306244774661193728 AND nbr>72620543991349247 AND nbr<72638136177393664) AND NOT(nbr3>301741175033823231 AND nbr3<306244774661193728 AND nbr>72620543991349247 AND nbr<72638136177393664) AND NOT(nbr3>301741175033823231 AND nbr3<306244774661193728 AND nbr2>72620543991349247 AND nbr2<72638136177393664) AND NOT(nbr4>301741175033823231 AND nbr4<306244774661193728 AND nbr>72620543991349247 AND nbr<72638136177393664) AND NOT(nbr4>301741175033823231 AND nbr4<306244774661193728 AND nbr2>72620543991349247 AND nbr2<72638136177393664) AND NOT(nbr4>301741175033823231 AND nbr4<306244774661193728 AND nbr3>72620543991349247 AND nbr3<72638136177393664)))) UNION SELECT predictivesearch0.contact_id, predictivesearch0.first_name, predictivesearch0.last_name FROM predictivesearch0 WHERE ((NOT(NOT(predictivesearch0.nbr>1178676735508479 AND predictivesearch0.nbr<1178676735574016) AND NOT(predictivesearch0.nbr2>1178676735508479 AND predictivesearch0.nbr2<1178676735574016) AND NOT(predictivesearch0.nbr3>1178676735508479 AND predictivesearch0.nbr3<1178676735574016) AND NOT(predictivesearch0.nbr4>1178676735508479 AND predictivesearch0.nbr4<1178676735574016)))) OR(NOT(NOT(nbr2>72620543991349247 AND nbr2<72638136177393664 AND nbr>1178676464975871 AND nbr<1196268651020288) AND NOT(nbr3>72620543991349247 AND nbr3<72638136177393664 AND nbr>1178676464975871 AND nbr<1196268651020288) AND NOT(nbr3>72620543991349247 AND nbr3<72638136177393664 AND nbr2>1178676464975871 AND nbr2<1196268651020288) AND NOT(nbr4>72620543991349247 AND nbr4<72638136177393664 AND nbr>1178676464975871 AND nbr<1196268651020288) AND NOT(nbr4>72620543991349247 AND nbr4<72638136177393664 AND nbr2>1178676464975871 AND nbr2<1196268651020288) AND NOT(nbr4>72620543991349247 AND nbr4<72638136177393664 AND nbr3>1178676464975871 AND nbr3<1196268651020288))) OR(NOT(NOT(nbr2>1178676464975871 AND nbr2<1196268651020288 AND nbr>72620543991349247 AND nbr<72638136177393664) AND NOT(nbr3>1178676464975871 AND nbr3<1196268651020288 AND nbr>72620543991349247 AND nbr<72638136177393664) AND NOT(nbr3>1178676464975871 AND nbr3<1196268651020288 AND nbr2>72620543991349247 AND nbr2<72638136177393664) AND NOT(nbr4>1178676464975871 AND nbr4<1196268651020288 AND nbr>72620543991349247 AND nbr<72638136177393664) AND NOT(nbr4>1178676464975871 AND nbr4<1196268651020288 AND nbr2>72620543991349247 AND nbr2<72638136177393664) AND NOT(nbr4>1178676464975871 AND nbr4<1196268651020288 AND nbr3>72620543991349247 AND nbr3<72638136177393664)))) AS PR ORDER BY PR.first_name, PR.last_name ASC;");
 #else
     // TODO: add non-De Morgan case
 #endif
     result = mCntSqlSearch->CreatePredictiveSearch(pattern);
+    LOG2(pattern, result);
     //qDebug() << pattern << " -> result" << result;
-    LOG2(pattern, result);
     QVERIFY(!result.compare(reference));
     
     pattern = QString("227264583788306"); // 15 digits
@@ -340,7 +345,6 @@
     LOG2(pattern, result);
     QVERIFY(!result.compare(reference));
  
-    
     pattern = QString("34096");
 #if defined(USE_DEMORGAN)
     reference = QString("SELECT contact_id FROM predictivesearch3 WHERE NOT(NOT(NOT(NOT(nbr>234352107367432191 AND nbr<234353206879059968) AND NOT(nbr2>234352107367432191 AND nbr2<234353206879059968) AND NOT(nbr3>234352107367432191 AND nbr3<234353206879059968) AND NOT(nbr4>234352107367432191 AND nbr4<234353206879059968))) AND NOT(NOT(NOT(nbr2>675539944105574399 AND nbr2<680043543732944896 AND nbr>234187180623265791 AND nbr<238690780250636288) AND NOT(nbr3>675539944105574399 AND nbr3<680043543732944896 AND nbr>234187180623265791 AND nbr<238690780250636288) AND NOT(nbr3>675539944105574399 AND nbr3<680043543732944896 AND nbr2>234187180623265791 AND nbr2<238690780250636288) AND NOT(nbr4>675539944105574399 AND nbr4<680043543732944896 AND nbr>234187180623265791 AND nbr<238690780250636288) AND NOT(nbr4>675539944105574399 AND nbr4<680043543732944896 AND nbr2>234187180623265791 AND nbr2<238690780250636288) AND NOT(nbr4>675539944105574399 AND nbr4<680043543732944896 AND nbr3>234187180623265791 AND nbr3<238690780250636288))) AND NOT(NOT(NOT(nbr2>234187180623265791 AND nbr2<238690780250636288 AND nbr>675539944105574399 AND nbr<680043543732944896) AND NOT(nbr3>234187180623265791 AND nbr3<238690780250636288 AND nbr>675539944105574399 AND nbr<680043543732944896) AND NOT(nbr3>234187180623265791 AND nbr3<238690780250636288 AND nbr2>675539944105574399 AND nbr2<680043543732944896) AND NOT(nbr4>234187180623265791 AND nbr4<238690780250636288 AND nbr>675539944105574399 AND nbr<680043543732944896) AND NOT(nbr4>234187180623265791 AND nbr4<238690780250636288 AND nbr2>675539944105574399 AND nbr2<680043543732944896) AND NOT(nbr4>234187180623265791 AND nbr4<238690780250636288 AND nbr3>675539944105574399 AND nbr3<680043543732944896)))) ORDER BY predictivesearch3.first_name, predictivesearch3.last_name ASC;");
@@ -376,7 +380,7 @@
 
     pattern = QString("200");
 #if defined(USE_DEMORGAN)
-        reference = QString("SELECT contact_id FROM predictivesearch2 WHERE (NOT(NOT(nbr>144115188075855871 AND nbr<144396663052566528) AND NOT(nbr2>144115188075855871 AND nbr2<144396663052566528) AND NOT(nbr3>144115188075855871 AND nbr3<144396663052566528) AND NOT(nbr4>144115188075855871 AND nbr4<144396663052566528))) ORDER BY first_name, last_name ASC;");
+        reference = QString("SELECT contact_id FROM predictivesearch2 WHERE NOT(NOT(NOT(NOT(nbr>144115188075855871 AND nbr<216172782113783808) AND NOT(nbr2>144115188075855871 AND nbr2<216172782113783808) AND NOT(nbr3>144115188075855871 AND nbr3<216172782113783808) AND NOT(nbr4>144115188075855871 AND nbr4<216172782113783808))) AND NOT(NOT(NOT(nbr>144115188075855871 AND nbr<144396663052566528) AND NOT(nbr2>144115188075855871 AND nbr2<144396663052566528) AND NOT(nbr3>144115188075855871 AND nbr3<144396663052566528) AND NOT(nbr4>144115188075855871 AND nbr4<144396663052566528)))) ORDER BY first_name, last_name ASC;");
 #else
     // TODO: add non-De Morgan case
 #endif
@@ -436,9 +440,15 @@
     pattern = QString("055");
     reference = QString("SELECT contact_id FROM (SELECT predictivesearch5.contact_id, predictivesearch5.first_name, predictivesearch5.last_name FROM predictivesearch5 WHERE ((NOT(NOT(predictivesearch5.nbr>382805968326492159 AND predictivesearch5.nbr<387309567953862656) AND NOT(predictivesearch5.nbr2>382805968326492159 AND predictivesearch5.nbr2<387309567953862656) AND NOT(predictivesearch5.nbr3>382805968326492159 AND predictivesearch5.nbr3<387309567953862656) AND NOT(predictivesearch5.nbr4>382805968326492159 AND predictivesearch5.nbr4<387309567953862656)))) UNION SELECT predictivesearch0.contact_id, predictivesearch0.first_name, predictivesearch0.last_name FROM predictivesearch0 WHERE ((NOT(NOT(predictivesearch0.nbr>23925373020405759 AND predictivesearch0.nbr<24206847997116416) AND NOT(predictivesearch0.nbr2>23925373020405759 AND predictivesearch0.nbr2<24206847997116416) AND NOT(predictivesearch0.nbr3>23925373020405759 AND predictivesearch0.nbr3<24206847997116416) AND NOT(predictivesearch0.nbr4>23925373020405759 AND predictivesearch0.nbr4<24206847997116416))))) AS PR ORDER BY PR.first_name, PR.last_name ASC;");
     result = mCntSqlSearch->CreatePredictiveSearch(pattern);   
+    //qDebug() << pattern << " -> result" << result;
     LOG2(pattern, result);
-    //qDebug() << pattern << " -> result" << result;
+   
     QVERIFY(!result.compare(reference));
+    
+    pattern = QString ("052207");
+    reference = QString("SELECT contact_id FROM (SELECT predictivesearch5.contact_id, predictivesearch5.first_name, predictivesearch5.last_name FROM predictivesearch5 WHERE ((NOT(NOT(nbr2>504403158265495551 AND nbr2<576460752303423488 AND nbr>369858119397801983 AND nbr<370139594374512640) AND NOT(nbr3>504403158265495551 AND nbr3<576460752303423488 AND nbr>369858119397801983 AND nbr<370139594374512640) AND NOT(nbr3>504403158265495551 AND nbr3<576460752303423488 AND nbr2>369858119397801983 AND nbr2<370139594374512640) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr>369858119397801983 AND nbr<370139594374512640) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr2>369858119397801983 AND nbr2<370139594374512640) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr3>369858119397801983 AND nbr3<370139594374512640))) OR(NOT(NOT(nbr2>369858119397801983 AND nbr2<370139594374512640 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr3>369858119397801983 AND nbr3<370139594374512640 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr3>369858119397801983 AND nbr3<370139594374512640 AND nbr2>504403158265495551 AND nbr2<576460752303423488) AND NOT(nbr4>369858119397801983 AND nbr4<370139594374512640 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr4>369858119397801983 AND nbr4<370139594374512640 AND nbr2>504403158265495551 AND nbr2<576460752303423488) AND NOT(nbr4>369858119397801983 AND nbr4<370139594374512640 AND nbr3>504403158265495551 AND nbr3<576460752303423488)))) UNION SELECT predictivesearch0.contact_id, predictivesearch0.first_name, predictivesearch0.last_name FROM predictivesearch0 WHERE ((NOT(NOT(predictivesearch0.nbr>23116613498699775 AND predictivesearch0.nbr<23116682218176512) AND NOT(predictivesearch0.nbr2>23116613498699775 AND predictivesearch0.nbr2<23116682218176512) AND NOT(predictivesearch0.nbr3>23116613498699775 AND predictivesearch0.nbr3<23116682218176512) AND NOT(predictivesearch0.nbr4>23116613498699775 AND predictivesearch0.nbr4<23116682218176512)))) OR(NOT(NOT(nbr2>504403158265495551 AND nbr2<576460752303423488 AND nbr>23116132462362623 AND nbr<23133724648407040) AND NOT(nbr3>504403158265495551 AND nbr3<576460752303423488 AND nbr>23116132462362623 AND nbr<23133724648407040) AND NOT(nbr3>504403158265495551 AND nbr3<576460752303423488 AND nbr2>23116132462362623 AND nbr2<23133724648407040) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr>23116132462362623 AND nbr<23133724648407040) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr2>23116132462362623 AND nbr2<23133724648407040) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr3>23116132462362623 AND nbr3<23133724648407040))) OR(NOT(NOT(nbr2>23116132462362623 AND nbr2<23133724648407040 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr3>23116132462362623 AND nbr3<23133724648407040 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr3>23116132462362623 AND nbr3<23133724648407040 AND nbr2>504403158265495551 AND nbr2<576460752303423488) AND NOT(nbr4>23116132462362623 AND nbr4<23133724648407040 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr4>23116132462362623 AND nbr4<23133724648407040 AND nbr2>504403158265495551 AND nbr2<576460752303423488) AND NOT(nbr4>23116132462362623 AND nbr4<23133724648407040 AND nbr3>504403158265495551 AND nbr3<576460752303423488)))) AS PR ORDER BY PR.first_name, PR.last_name ASC;");
+    result = mCntSqlSearch->CreatePredictiveSearch(pattern); 
+    QVERIFY( !result.compare( reference) );
     TEST_PASSED_LOG("testPredictiveSearch");
 }
 
@@ -451,11 +461,13 @@
     
     pattern = QString("000");
     result = mCntSqlSearch->selectQweryTable(pattern);
-    //QVERIFY(result == "qm0" );
+    //This case is ignore untli qwerty key map supports numbers
+    //QVERIFY(result == "" );
     
     pattern = QString("9");
     result = mCntSqlSearch->selectQweryTable(pattern);
     //QVERIFY(result == "qm9" );
+    //This case is ignore untli qwerty key map supports numbers
     TEST_PASSED_LOG("testSelectQweryTable");
     }
 
@@ -607,7 +619,7 @@
     pattern = QString("00202");
 #if defined(SEARCH_FROM_ONE_TABLE)
 #if defined(USE_DEMORGAN)
-    reference = QString("SELECT contact_id FROM predictivesearch0 WHERE NOT(NOT(NOT(NOT(nbr>565148976676863 AND nbr<566248488304640) AND NOT(nbr2>565148976676863 AND nbr2<566248488304640) AND NOT(nbr3>565148976676863 AND nbr3<566248488304640) AND NOT(nbr4>565148976676863 AND nbr4<566248488304640))) AND NOT(NOT(NOT(nbr2>144115188075855871 AND nbr2<216172782113783808 AND nbr>562949953421311 AND nbr<844424930131968) AND NOT(nbr3>144115188075855871 AND nbr3<216172782113783808 AND nbr>562949953421311 AND nbr<844424930131968) AND NOT(nbr3>144115188075855871 AND nbr3<216172782113783808 AND nbr2>562949953421311 AND nbr2<844424930131968) AND NOT(nbr4>144115188075855871 AND nbr4<216172782113783808 AND nbr>562949953421311 AND nbr<844424930131968) AND NOT(nbr4>144115188075855871 AND nbr4<216172782113783808 AND nbr2>562949953421311 AND nbr2<844424930131968) AND NOT(nbr4>144115188075855871 AND nbr4<216172782113783808 AND nbr3>562949953421311 AND nbr3<844424930131968))) AND NOT(NOT(NOT(nbr2>562949953421311 AND nbr2<844424930131968 AND nbr>144115188075855871 AND nbr<216172782113783808) AND NOT(nbr3>562949953421311 AND nbr3<844424930131968 AND nbr>144115188075855871 AND nbr<216172782113783808) AND NOT(nbr3>562949953421311 AND nbr3<844424930131968 AND nbr2>144115188075855871 AND nbr2<216172782113783808) AND NOT(nbr4>562949953421311 AND nbr4<844424930131968 AND nbr>144115188075855871 AND nbr<216172782113783808) AND NOT(nbr4>562949953421311 AND nbr4<844424930131968 AND nbr2>144115188075855871 AND nbr2<216172782113783808) AND NOT(nbr4>562949953421311 AND nbr4<844424930131968 AND nbr3>144115188075855871 AND nbr3<216172782113783808)))) ORDER BY predictivesearch0.first_name, predictivesearch0.last_name ASC;");
+    reference = QString("SELECT contact_id FROM (SELECT predictivesearch2.contact_id, predictivesearch2.first_name, predictivesearch2.last_name FROM predictivesearch2 WHERE ((NOT(NOT(nbr2>144115188075855871 AND nbr2<216172782113783808 AND nbr>144115188075855871 AND nbr<216172782113783808) AND NOT(nbr3>144115188075855871 AND nbr3<216172782113783808 AND nbr>144115188075855871 AND nbr<216172782113783808) AND NOT(nbr3>144115188075855871 AND nbr3<216172782113783808 AND nbr2>144115188075855871 AND nbr2<216172782113783808) AND NOT(nbr4>144115188075855871 AND nbr4<216172782113783808 AND nbr>144115188075855871 AND nbr<216172782113783808) AND NOT(nbr4>144115188075855871 AND nbr4<216172782113783808 AND nbr2>144115188075855871 AND nbr2<216172782113783808) AND NOT(nbr4>144115188075855871 AND nbr4<216172782113783808 AND nbr3>144115188075855871 AND nbr3<216172782113783808))) OR(NOT(NOT(nbr2>144115188075855871 AND nbr2<216172782113783808 AND nbr>144115188075855871 AND nbr<216172782113783808) AND NOT(nbr3>144115188075855871 AND nbr3<216172782113783808 AND nbr>144115188075855871 AND nbr<216172782113783808) AND NOT(nbr3>144115188075855871 AND nbr3<216172782113783808 AND nbr2>144115188075855871 AND nbr2<216172782113783808) AND NOT(nbr4>144115188075855871 AND nbr4<216172782113783808 AND nbr>144115188075855871 AND nbr<216172782113783808) AND NOT(nbr4>144115188075855871 AND nbr4<216172782113783808 AND nbr2>144115188075855871 AND nbr2<216172782113783808) AND NOT(nbr4>144115188075855871 AND nbr4<216172782113783808 AND nbr3>144115188075855871 AND nbr3<216172782113783808)))) UNION SELECT predictivesearch0.contact_id, predictivesearch0.first_name, predictivesearch0.last_name FROM predictivesearch0 WHERE ((NOT(NOT(predictivesearch0.nbr>565148976676863 AND predictivesearch0.nbr<566248488304640) AND NOT(predictivesearch0.nbr2>565148976676863 AND predictivesearch0.nbr2<566248488304640) AND NOT(predictivesearch0.nbr3>565148976676863 AND predictivesearch0.nbr3<566248488304640) AND NOT(predictivesearch0.nbr4>565148976676863 AND predictivesearch0.nbr4<566248488304640)))) OR(NOT(NOT(nbr2>144115188075855871 AND nbr2<216172782113783808 AND nbr>562949953421311 AND nbr<844424930131968) AND NOT(nbr3>144115188075855871 AND nbr3<216172782113783808 AND nbr>562949953421311 AND nbr<844424930131968) AND NOT(nbr3>144115188075855871 AND nbr3<216172782113783808 AND nbr2>562949953421311 AND nbr2<844424930131968) AND NOT(nbr4>144115188075855871 AND nbr4<216172782113783808 AND nbr>562949953421311 AND nbr<844424930131968) AND NOT(nbr4>144115188075855871 AND nbr4<216172782113783808 AND nbr2>562949953421311 AND nbr2<844424930131968) AND NOT(nbr4>144115188075855871 AND nbr4<216172782113783808 AND nbr3>562949953421311 AND nbr3<844424930131968))) OR(NOT(NOT(nbr2>562949953421311 AND nbr2<844424930131968 AND nbr>144115188075855871 AND nbr<216172782113783808) AND NOT(nbr3>562949953421311 AND nbr3<844424930131968 AND nbr>144115188075855871 AND nbr<216172782113783808) AND NOT(nbr3>562949953421311 AND nbr3<844424930131968 AND nbr2>144115188075855871 AND nbr2<216172782113783808) AND NOT(nbr4>562949953421311 AND nbr4<844424930131968 AND nbr>144115188075855871 AND nbr<216172782113783808) AND NOT(nbr4>562949953421311 AND nbr4<844424930131968 AND nbr2>144115188075855871 AND nbr2<216172782113783808) AND NOT(nbr4>562949953421311 AND nbr4<844424930131968 AND nbr3>144115188075855871 AND nbr3<216172782113783808)))) AS PR ORDER BY PR.first_name, PR.last_name ASC;");
 #else // #if defined(USE_DEMORGAN)
     reference = QString("SELECT contact_id FROM predictivesearch0 WHERE \
 ((nbr>565148976676863 AND nbr<566248488304640) OR \
@@ -633,8 +645,8 @@
     reference = QString("SELECT contact_id FROM (SELECT predictivesearch0.contact_id, predictivesearch0.first_name, predictivesearch0.last_name FROM predictivesearch0 WHERE (NOT(NOT(predictivesearch0.nbr>565148976676863 AND predictivesearch0.nbr<566248488304640) AND NOT(predictivesearch0.nbr2>565148976676863 AND predictivesearch0.nbr2<566248488304640) AND NOT(predictivesearch0.nbr3>565148976676863 AND predictivesearch0.nbr3<566248488304640) AND NOT(predictivesearch0.nbr4>565148976676863 AND predictivesearch0.nbr4<566248488304640))) UNION SELECT predictivesearch0.contact_id, predictivesearch0.first_name, predictivesearch0.last_name FROM predictivesearch0 JOIN predictivesearch2 ON predictivesearch0.contact_id = predictivesearch2.contact_id WHERE(NOT(NOT(predictivesearch0.nbr>562949953421311 AND predictivesearch0.nbr<844424930131968) AND NOT(predictivesearch0.nbr2>562949953421311 AND predictivesearch0.nbr2<844424930131968) AND NOT(predictivesearch0.nbr3>562949953421311 AND predictivesearch0.nbr3<844424930131968) AND NOT(predictivesearch0.nbr4>562949953421311 AND predictivesearch0.nbr4<844424930131968)))) AS PR ORDER BY PR.first_name, PR.last_name ASC;");
 #endif // #if defined(SEARCH_FROM_ONE_TABLE)
     result = mCntSqlSearch->CreateQuery(pattern);
-    //qDebug() << pattern << " -> result" << result;
-    LOG2(pattern, result);
+    //LOG2(pattern, result);
+    //qDebug() << pattern << " -> result" << result << " -> reference" << reference;
     QVERIFY( !result.compare( reference) );
 
     pattern = QString("202000");
@@ -664,13 +676,13 @@
 
     result = mCntSqlSearch->CreateQuery(pattern);
     //qDebug() << pattern << " -> result" << result;
-    LOG2(pattern, result);
+    //LOG2(pattern, result);
     QVERIFY( !result.compare( reference) );
 
     pattern = QString("0020200");
 #if defined(SEARCH_FROM_ONE_TABLE)
 #if defined(USE_DEMORGAN)
-    reference = QString("SELECT contact_id FROM predictivesearch0 WHERE NOT(NOT(NOT(NOT(nbr>565148976676863 AND nbr<565153271644160) AND NOT(nbr2>565148976676863 AND nbr2<565153271644160) AND NOT(nbr3>565148976676863 AND nbr3<565153271644160) AND NOT(nbr4>565148976676863 AND nbr4<565153271644160))) AND NOT(NOT(NOT(nbr2>144115188075855871 AND nbr2<144396663052566528 AND nbr>562949953421311 AND nbr<844424930131968) AND NOT(nbr3>144115188075855871 AND nbr3<144396663052566528 AND nbr>562949953421311 AND nbr<844424930131968) AND NOT(nbr3>144115188075855871 AND nbr3<144396663052566528 AND nbr2>562949953421311 AND nbr2<844424930131968) AND NOT(nbr4>144115188075855871 AND nbr4<144396663052566528 AND nbr>562949953421311 AND nbr<844424930131968) AND NOT(nbr4>144115188075855871 AND nbr4<144396663052566528 AND nbr2>562949953421311 AND nbr2<844424930131968) AND NOT(nbr4>144115188075855871 AND nbr4<144396663052566528 AND nbr3>562949953421311 AND nbr3<844424930131968))) AND NOT(NOT(NOT(nbr2>562949953421311 AND nbr2<844424930131968 AND nbr>144115188075855871 AND nbr<144396663052566528) AND NOT(nbr3>562949953421311 AND nbr3<844424930131968 AND nbr>144115188075855871 AND nbr<144396663052566528) AND NOT(nbr3>562949953421311 AND nbr3<844424930131968 AND nbr2>144115188075855871 AND nbr2<144396663052566528) AND NOT(nbr4>562949953421311 AND nbr4<844424930131968 AND nbr>144115188075855871 AND nbr<144396663052566528) AND NOT(nbr4>562949953421311 AND nbr4<844424930131968 AND nbr2>144115188075855871 AND nbr2<144396663052566528) AND NOT(nbr4>562949953421311 AND nbr4<844424930131968 AND nbr3>144115188075855871 AND nbr3<144396663052566528)))) ORDER BY predictivesearch0.first_name, predictivesearch0.last_name ASC;");
+    reference = QString("SELECT contact_id FROM (SELECT predictivesearch2.contact_id, predictivesearch2.first_name, predictivesearch2.last_name FROM predictivesearch2 WHERE ((NOT(NOT(nbr2>144115188075855871 AND nbr2<144396663052566528 AND nbr>144115188075855871 AND nbr<216172782113783808) AND NOT(nbr3>144115188075855871 AND nbr3<144396663052566528 AND nbr>144115188075855871 AND nbr<216172782113783808) AND NOT(nbr3>144115188075855871 AND nbr3<144396663052566528 AND nbr2>144115188075855871 AND nbr2<216172782113783808) AND NOT(nbr4>144115188075855871 AND nbr4<144396663052566528 AND nbr>144115188075855871 AND nbr<216172782113783808) AND NOT(nbr4>144115188075855871 AND nbr4<144396663052566528 AND nbr2>144115188075855871 AND nbr2<216172782113783808) AND NOT(nbr4>144115188075855871 AND nbr4<144396663052566528 AND nbr3>144115188075855871 AND nbr3<216172782113783808))) OR(NOT(NOT(nbr2>144115188075855871 AND nbr2<216172782113783808 AND nbr>144115188075855871 AND nbr<144396663052566528) AND NOT(nbr3>144115188075855871 AND nbr3<216172782113783808 AND nbr>144115188075855871 AND nbr<144396663052566528) AND NOT(nbr3>144115188075855871 AND nbr3<216172782113783808 AND nbr2>144115188075855871 AND nbr2<144396663052566528) AND NOT(nbr4>144115188075855871 AND nbr4<216172782113783808 AND nbr>144115188075855871 AND nbr<144396663052566528) AND NOT(nbr4>144115188075855871 AND nbr4<216172782113783808 AND nbr2>144115188075855871 AND nbr2<144396663052566528) AND NOT(nbr4>144115188075855871 AND nbr4<216172782113783808 AND nbr3>144115188075855871 AND nbr3<144396663052566528)))) UNION SELECT predictivesearch0.contact_id, predictivesearch0.first_name, predictivesearch0.last_name FROM predictivesearch0 WHERE ((NOT(NOT(predictivesearch0.nbr>565148976676863 AND predictivesearch0.nbr<565153271644160) AND NOT(predictivesearch0.nbr2>565148976676863 AND predictivesearch0.nbr2<565153271644160) AND NOT(predictivesearch0.nbr3>565148976676863 AND predictivesearch0.nbr3<565153271644160) AND NOT(predictivesearch0.nbr4>565148976676863 AND predictivesearch0.nbr4<565153271644160)))) OR(NOT(NOT(nbr2>144115188075855871 AND nbr2<144396663052566528 AND nbr>562949953421311 AND nbr<844424930131968) AND NOT(nbr3>144115188075855871 AND nbr3<144396663052566528 AND nbr>562949953421311 AND nbr<844424930131968) AND NOT(nbr3>144115188075855871 AND nbr3<144396663052566528 AND nbr2>562949953421311 AND nbr2<844424930131968) AND NOT(nbr4>144115188075855871 AND nbr4<144396663052566528 AND nbr>562949953421311 AND nbr<844424930131968) AND NOT(nbr4>144115188075855871 AND nbr4<144396663052566528 AND nbr2>562949953421311 AND nbr2<844424930131968) AND NOT(nbr4>144115188075855871 AND nbr4<144396663052566528 AND nbr3>562949953421311 AND nbr3<844424930131968))) OR(NOT(NOT(nbr2>562949953421311 AND nbr2<844424930131968 AND nbr>144115188075855871 AND nbr<144396663052566528) AND NOT(nbr3>562949953421311 AND nbr3<844424930131968 AND nbr>144115188075855871 AND nbr<144396663052566528) AND NOT(nbr3>562949953421311 AND nbr3<844424930131968 AND nbr2>144115188075855871 AND nbr2<144396663052566528) AND NOT(nbr4>562949953421311 AND nbr4<844424930131968 AND nbr>144115188075855871 AND nbr<144396663052566528) AND NOT(nbr4>562949953421311 AND nbr4<844424930131968 AND nbr2>144115188075855871 AND nbr2<144396663052566528) AND NOT(nbr4>562949953421311 AND nbr4<844424930131968 AND nbr3>144115188075855871 AND nbr3<144396663052566528)))) AS PR ORDER BY PR.first_name, PR.last_name ASC;");
 #else // #if defined(USE_DEMORGAN)
     reference = QString("SELECT contact_id FROM predictivesearch0 WHERE \
 ((nbr>565148976676863 AND nbr<565153271644160) OR (nbr2>565148976676863 AND nbr2<565153271644160) OR \
@@ -694,7 +706,7 @@
     reference = QString("SELECT contact_id FROM (SELECT predictivesearch0.contact_id, predictivesearch0.first_name, predictivesearch0.last_name FROM predictivesearch0 WHERE (NOT(NOT(predictivesearch0.nbr>565148976676863 AND predictivesearch0.nbr<565153271644160) AND NOT(predictivesearch0.nbr2>565148976676863 AND predictivesearch0.nbr2<565153271644160) AND NOT(predictivesearch0.nbr3>565148976676863 AND predictivesearch0.nbr3<565153271644160) AND NOT(predictivesearch0.nbr4>565148976676863 AND predictivesearch0.nbr4<565153271644160))) UNION SELECT predictivesearch0.contact_id, predictivesearch0.first_name, predictivesearch0.last_name FROM predictivesearch0 JOIN predictivesearch2 ON predictivesearch0.contact_id = predictivesearch2.contact_id WHERE((NOT(NOT(predictivesearch0.nbr>562949953421311 AND predictivesearch0.nbr<844424930131968) AND NOT(predictivesearch0.nbr2>562949953421311 AND predictivesearch0.nbr2<844424930131968) AND NOT(predictivesearch0.nbr3>562949953421311 AND predictivesearch0.nbr3<844424930131968) AND NOT(predictivesearch0.nbr4>562949953421311 AND predictivesearch0.nbr4<844424930131968))) AND (NOT(NOT(predictivesearch2.nbr>144115188075855871 AND predictivesearch2.nbr<144396663052566528) AND NOT(predictivesearch2.nbr2>144115188075855871 AND predictivesearch2.nbr2<144396663052566528) AND NOT(predictivesearch2.nbr3>144115188075855871 AND predictivesearch2.nbr3<144396663052566528) AND NOT(predictivesearch2.nbr4>144115188075855871 AND predictivesearch2.nbr4<144396663052566528))))) AS PR ORDER BY PR.first_name, PR.last_name ASC;");
 #endif //#if defined(SEARCH_FROM_ONE_TABLE) 
     result = mCntSqlSearch->CreateQuery(pattern);
-    //qDebug() << pattern << " -> result" << result;
+    qDebug() << pattern << " -> result" << result;
     LOG2(pattern, result);
     QVERIFY( !result.compare( reference) );
 
@@ -910,17 +922,72 @@
     reference = QString("SELECT contact_id FROM (SELECT predictivesearch5.contact_id, predictivesearch5.first_name, predictivesearch5.last_name FROM predictivesearch5 WHERE ((NOT(NOT(predictivesearch5.nbr>382805968326492159 AND predictivesearch5.nbr<387309567953862656) AND NOT(predictivesearch5.nbr2>382805968326492159 AND predictivesearch5.nbr2<387309567953862656) AND NOT(predictivesearch5.nbr3>382805968326492159 AND predictivesearch5.nbr3<387309567953862656) AND NOT(predictivesearch5.nbr4>382805968326492159 AND predictivesearch5.nbr4<387309567953862656)))) UNION SELECT predictivesearch0.contact_id, predictivesearch0.first_name, predictivesearch0.last_name FROM predictivesearch0 WHERE ((NOT(NOT(predictivesearch0.nbr>23925373020405759 AND predictivesearch0.nbr<24206847997116416) AND NOT(predictivesearch0.nbr2>23925373020405759 AND predictivesearch0.nbr2<24206847997116416) AND NOT(predictivesearch0.nbr3>23925373020405759 AND predictivesearch0.nbr3<24206847997116416) AND NOT(predictivesearch0.nbr4>23925373020405759 AND predictivesearch0.nbr4<24206847997116416))))) AS PR ORDER BY PR.first_name, PR.last_name ASC;");
     result = mCntSqlSearch->CompareTwoColumnsWithModifiedPattern(pattern, tokens);  
     QVERIFY( !result.compare( reference) );
-    /*tokens.clear();
-    pattern = QString ("0550");
-    tokens << "55";
-    QString reference("SELECT contact_id FROM (SELECT predictivesearch5.contact_id, predictivesearch5.first_name, predictivesearch5.last_name FROM predictivesearch5 WHERE ((NOT(NOT(predictivesearch5.nbr>23925373020405759 AND predictivesearch5.nbr<24206847997116416) AND NOT(predictivesearch5.nbr2>23925373020405759 AND predictivesearch5.nbr2<24206847997116416) AND NOT(predictivesearch5.nbr3>23925373020405759 AND predictivesearch5.nbr3<24206847997116416) AND NOT(predictivesearch5.nbr4>23925373020405759 AND predictivesearch5.nbr4<24206847997116416)))) UNION SELECT predictivesearch0.contact_id, predictivesearch0.first_name, predictivesearch0.last_name FROM predictivesearch0 WHERE ((NOT(NOT(predictivesearch0.nbr>23925373020405759 AND predictivesearch0.nbr<24206847997116416) AND NOT(predictivesearch0.nbr2>23925373020405759 AND predictivesearch0.nbr2<24206847997116416) AND NOT(predictivesearch0.nbr3>23925373020405759 AND predictivesearch0.nbr3<24206847997116416) AND NOT(predictivesearch0.nbr4>23925373020405759 AND predictivesearch0.nbr4<24206847997116416))))) AS PR ORDER BY PR.first_name, PR.last_name ASC;");
-    QString result = mCntSqlSearch->CompareTwoColumnsWithModifiedPattern(pattern, tokens);  
-        
+    
     tokens.clear();
     pattern = QString ("05505");
-    tokens << "55 << 5";
-    QString reference("SELECT contact_id FROM predictivesearch2 WHERE NOT(NOT(NOT(NOT(nbr>145522562959409151 AND nbr<145804037936119808) AND NOT(nbr2>145522562959409151 AND nbr2<145804037936119808) AND NOT(nbr3>145522562959409151 AND nbr3<145804037936119808) AND NOT(nbr4>145522562959409151 AND nbr4<145804037936119808))) AND NOT(NOT(NOT(nbr2>360287970189639679 AND nbr2<432345564227567616 AND nbr>144115188075855871 AND nbr<216172782113783808) AND NOT(nbr3>360287970189639679 AND nbr3<432345564227567616 AND nbr>144115188075855871 AND nbr<216172782113783808) AND NOT(nbr3>360287970189639679 AND nbr3<432345564227567616 AND nbr2>144115188075855871 AND nbr2<216172782113783808) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr>144115188075855871 AND nbr<216172782113783808) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr2>144115188075855871 AND nbr2<216172782113783808) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr3>144115188075855871 AND nbr3<216172782113783808))) AND NOT(NOT(NOT(nbr2>144115188075855871 AND nbr2<216172782113783808 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr3>144115188075855871 AND nbr3<216172782113783808 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr3>144115188075855871 AND nbr3<216172782113783808 AND nbr2>360287970189639679 AND nbr2<432345564227567616) AND NOT(nbr4>144115188075855871 AND nbr4<216172782113783808 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr4>144115188075855871 AND nbr4<216172782113783808 AND nbr2>360287970189639679 AND nbr2<432345564227567616) AND NOT(nbr4>144115188075855871 AND nbr4<216172782113783808 AND nbr3>360287970189639679 AND nbr3<432345564227567616)))) ORDER BY predictivesearch2.first_name, predictivesearch2.last_name ASC;");
-    QString result = mCntSqlSearch->CompareTwoColumnsWithModifiedPattern(pattern, tokens);*/  
+    tokens << "055" << "5";
+    reference = QString("SELECT contact_id FROM (SELECT predictivesearch5.contact_id, predictivesearch5.first_name, predictivesearch5.last_name FROM predictivesearch5 WHERE ((NOT(NOT(nbr2>360287970189639679 AND nbr2<432345564227567616 AND nbr>382805968326492159 AND nbr<387309567953862656) AND NOT(nbr3>360287970189639679 AND nbr3<432345564227567616 AND nbr>382805968326492159 AND nbr<387309567953862656) AND NOT(nbr3>360287970189639679 AND nbr3<432345564227567616 AND nbr2>382805968326492159 AND nbr2<387309567953862656) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr>382805968326492159 AND nbr<387309567953862656) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr2>382805968326492159 AND nbr2<387309567953862656) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr3>382805968326492159 AND nbr3<387309567953862656))) OR(NOT(NOT(nbr2>382805968326492159 AND nbr2<387309567953862656 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr3>382805968326492159 AND nbr3<387309567953862656 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr3>382805968326492159 AND nbr3<387309567953862656 AND nbr2>360287970189639679 AND nbr2<432345564227567616) AND NOT(nbr4>382805968326492159 AND nbr4<387309567953862656 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr4>382805968326492159 AND nbr4<387309567953862656 AND nbr2>360287970189639679 AND nbr2<432345564227567616) AND NOT(nbr4>382805968326492159 AND nbr4<387309567953862656 AND nbr3>360287970189639679 AND nbr3<432345564227567616)))) UNION SELECT predictivesearch0.contact_id, predictivesearch0.first_name, predictivesearch0.last_name FROM predictivesearch0 WHERE ((NOT(NOT(predictivesearch0.nbr>23930870578544639 AND predictivesearch0.nbr<23931970090172416) AND NOT(predictivesearch0.nbr2>23930870578544639 AND predictivesearch0.nbr2<23931970090172416) AND NOT(predictivesearch0.nbr3>23930870578544639 AND predictivesearch0.nbr3<23931970090172416) AND NOT(predictivesearch0.nbr4>23930870578544639 AND predictivesearch0.nbr4<23931970090172416)))) OR(NOT(NOT(nbr2>360287970189639679 AND nbr2<432345564227567616 AND nbr>23925373020405759 AND nbr<24206847997116416) AND NOT(nbr3>360287970189639679 AND nbr3<432345564227567616 AND nbr>23925373020405759 AND nbr<24206847997116416) AND NOT(nbr3>360287970189639679 AND nbr3<432345564227567616 AND nbr2>23925373020405759 AND nbr2<24206847997116416) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr>23925373020405759 AND nbr<24206847997116416) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr2>23925373020405759 AND nbr2<24206847997116416) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr3>23925373020405759 AND nbr3<24206847997116416))) OR(NOT(NOT(nbr2>23925373020405759 AND nbr2<24206847997116416 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr3>23925373020405759 AND nbr3<24206847997116416 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr3>23925373020405759 AND nbr3<24206847997116416 AND nbr2>360287970189639679 AND nbr2<432345564227567616) AND NOT(nbr4>23925373020405759 AND nbr4<24206847997116416 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr4>23925373020405759 AND nbr4<24206847997116416 AND nbr2>360287970189639679 AND nbr2<432345564227567616) AND NOT(nbr4>23925373020405759 AND nbr4<24206847997116416 AND nbr3>360287970189639679 AND nbr3<432345564227567616)))) AS PR ORDER BY PR.first_name, PR.last_name ASC;");
+    result = mCntSqlSearch->CompareTwoColumnsWithModifiedPattern(pattern, tokens);
+    QVERIFY( !result.compare( reference) );
+    
+    tokens.clear();
+    pattern = QString ("0550");
+    tokens << "055";
+    reference = QString("SELECT contact_id FROM (SELECT predictivesearch5.contact_id, predictivesearch5.first_name, predictivesearch5.last_name FROM predictivesearch5 WHERE ((NOT(NOT(predictivesearch5.nbr>382805968326492159 AND predictivesearch5.nbr<387309567953862656) AND NOT(predictivesearch5.nbr2>382805968326492159 AND predictivesearch5.nbr2<387309567953862656) AND NOT(predictivesearch5.nbr3>382805968326492159 AND predictivesearch5.nbr3<387309567953862656) AND NOT(predictivesearch5.nbr4>382805968326492159 AND predictivesearch5.nbr4<387309567953862656)))) UNION SELECT predictivesearch0.contact_id, predictivesearch0.first_name, predictivesearch0.last_name FROM predictivesearch0 WHERE ((NOT(NOT(predictivesearch0.nbr>23925373020405759 AND predictivesearch0.nbr<23942965206450176) AND NOT(predictivesearch0.nbr2>23925373020405759 AND predictivesearch0.nbr2<23942965206450176) AND NOT(predictivesearch0.nbr3>23925373020405759 AND predictivesearch0.nbr3<23942965206450176) AND NOT(predictivesearch0.nbr4>23925373020405759 AND predictivesearch0.nbr4<23942965206450176))))) AS PR ORDER BY PR.first_name, PR.last_name ASC;");
+    result = mCntSqlSearch->CompareTwoColumnsWithModifiedPattern(pattern, tokens);
+    QVERIFY( !result.compare( reference) );
+    
+    tokens.clear();
+    pattern = QString ("000550");
+    tokens << "00055";
+    reference = QString("SELECT contact_id FROM (SELECT predictivesearch5.contact_id, predictivesearch5.first_name, predictivesearch5.last_name FROM predictivesearch5 WHERE ((NOT(NOT(predictivesearch5.nbr>382805968326492159 AND predictivesearch5.nbr<387309567953862656) AND NOT(predictivesearch5.nbr2>382805968326492159 AND predictivesearch5.nbr2<387309567953862656) AND NOT(predictivesearch5.nbr3>382805968326492159 AND predictivesearch5.nbr3<387309567953862656) AND NOT(predictivesearch5.nbr4>382805968326492159 AND predictivesearch5.nbr4<387309567953862656)))) UNION SELECT predictivesearch0.contact_id, predictivesearch0.first_name, predictivesearch0.last_name FROM predictivesearch0 WHERE ((NOT(NOT(predictivesearch0.nbr>93458488360959 AND predictivesearch0.nbr<93527207837696) AND NOT(predictivesearch0.nbr2>93458488360959 AND predictivesearch0.nbr2<93527207837696) AND NOT(predictivesearch0.nbr3>93458488360959 AND predictivesearch0.nbr3<93527207837696) AND NOT(predictivesearch0.nbr4>93458488360959 AND predictivesearch0.nbr4<93527207837696))))) AS PR ORDER BY PR.first_name, PR.last_name ASC;");
+    result = mCntSqlSearch->CompareTwoColumnsWithModifiedPattern(pattern, tokens);  
+    //qDebug() << pattern << " -> result" << result;
+    QVERIFY( !result.compare( reference) );
+    
+    tokens.clear();
+    pattern = QString ("055000");
+    tokens << "055";
+    reference = QString("SELECT contact_id FROM (SELECT predictivesearch5.contact_id, predictivesearch5.first_name, predictivesearch5.last_name FROM predictivesearch5 WHERE ((NOT(NOT(predictivesearch5.nbr>382805968326492159 AND predictivesearch5.nbr<387309567953862656) AND NOT(predictivesearch5.nbr2>382805968326492159 AND predictivesearch5.nbr2<387309567953862656) AND NOT(predictivesearch5.nbr3>382805968326492159 AND predictivesearch5.nbr3<387309567953862656) AND NOT(predictivesearch5.nbr4>382805968326492159 AND predictivesearch5.nbr4<387309567953862656)))) UNION SELECT predictivesearch0.contact_id, predictivesearch0.first_name, predictivesearch0.last_name FROM predictivesearch0 WHERE ((NOT(NOT(predictivesearch0.nbr>23925373020405759 AND predictivesearch0.nbr<23925441739882496) AND NOT(predictivesearch0.nbr2>23925373020405759 AND predictivesearch0.nbr2<23925441739882496) AND NOT(predictivesearch0.nbr3>23925373020405759 AND predictivesearch0.nbr3<23925441739882496) AND NOT(predictivesearch0.nbr4>23925373020405759 AND predictivesearch0.nbr4<23925441739882496))))) AS PR ORDER BY PR.first_name, PR.last_name ASC;");
+    result = mCntSqlSearch->CompareTwoColumnsWithModifiedPattern(pattern, tokens);
+    //qDebug() << pattern << " -> result" << result;
+    QVERIFY( !result.compare( reference) );
+    
+    tokens.clear();
+    pattern = QString ("0500050");
+    tokens << "05" << "5";
+    reference = QString("SELECT contact_id FROM (SELECT predictivesearch5.contact_id, predictivesearch5.first_name, predictivesearch5.last_name FROM predictivesearch5 WHERE ((NOT(NOT(nbr2>360287970189639679 AND nbr2<432345564227567616 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr3>360287970189639679 AND nbr3<432345564227567616 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr3>360287970189639679 AND nbr3<432345564227567616 AND nbr2>360287970189639679 AND nbr2<432345564227567616) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr2>360287970189639679 AND nbr2<432345564227567616) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr3>360287970189639679 AND nbr3<432345564227567616))) OR(NOT(NOT(nbr2>360287970189639679 AND nbr2<432345564227567616 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr3>360287970189639679 AND nbr3<432345564227567616 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr3>360287970189639679 AND nbr3<432345564227567616 AND nbr2>360287970189639679 AND nbr2<432345564227567616) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr2>360287970189639679 AND nbr2<432345564227567616) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr3>360287970189639679 AND nbr3<432345564227567616)))) UNION SELECT predictivesearch0.contact_id, predictivesearch0.first_name, predictivesearch0.last_name FROM predictivesearch0 WHERE ((NOT(NOT(predictivesearch0.nbr>22518341734236159 AND predictivesearch0.nbr<22518346029203456) AND NOT(predictivesearch0.nbr2>22518341734236159 AND predictivesearch0.nbr2<22518346029203456) AND NOT(predictivesearch0.nbr3>22518341734236159 AND predictivesearch0.nbr3<22518346029203456) AND NOT(predictivesearch0.nbr4>22518341734236159 AND predictivesearch0.nbr4<22518346029203456)))) OR(NOT(NOT(nbr2>360287970189639679 AND nbr2<432345564227567616 AND nbr>22517998136852479 AND nbr<27021597764222976) AND NOT(nbr3>360287970189639679 AND nbr3<432345564227567616 AND nbr>22517998136852479 AND nbr<27021597764222976) AND NOT(nbr3>360287970189639679 AND nbr3<432345564227567616 AND nbr2>22517998136852479 AND nbr2<27021597764222976) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr>22517998136852479 AND nbr<27021597764222976) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr2>22517998136852479 AND nbr2<27021597764222976) AND NOT(nbr4>360287970189639679 AND nbr4<432345564227567616 AND nbr3>22517998136852479 AND nbr3<27021597764222976))) OR(NOT(NOT(nbr2>22517998136852479 AND nbr2<27021597764222976 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr3>22517998136852479 AND nbr3<27021597764222976 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr3>22517998136852479 AND nbr3<27021597764222976 AND nbr2>360287970189639679 AND nbr2<432345564227567616) AND NOT(nbr4>22517998136852479 AND nbr4<27021597764222976 AND nbr>360287970189639679 AND nbr<432345564227567616) AND NOT(nbr4>22517998136852479 AND nbr4<27021597764222976 AND nbr2>360287970189639679 AND nbr2<432345564227567616) AND NOT(nbr4>22517998136852479 AND nbr4<27021597764222976 AND nbr3>360287970189639679 AND nbr3<432345564227567616)))) AS PR ORDER BY PR.first_name, PR.last_name ASC;");
+    result = mCntSqlSearch->CompareTwoColumnsWithModifiedPattern(pattern, tokens);
+    QVERIFY( !result.compare( reference) );
+    
+    tokens.clear();
+    pattern = QString ("052207");
+    tokens << "0522" << "7";
+    reference = QString("SELECT contact_id FROM (SELECT predictivesearch5.contact_id, predictivesearch5.first_name, predictivesearch5.last_name FROM predictivesearch5 WHERE ((NOT(NOT(nbr2>504403158265495551 AND nbr2<576460752303423488 AND nbr>369858119397801983 AND nbr<370139594374512640) AND NOT(nbr3>504403158265495551 AND nbr3<576460752303423488 AND nbr>369858119397801983 AND nbr<370139594374512640) AND NOT(nbr3>504403158265495551 AND nbr3<576460752303423488 AND nbr2>369858119397801983 AND nbr2<370139594374512640) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr>369858119397801983 AND nbr<370139594374512640) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr2>369858119397801983 AND nbr2<370139594374512640) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr3>369858119397801983 AND nbr3<370139594374512640))) OR(NOT(NOT(nbr2>369858119397801983 AND nbr2<370139594374512640 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr3>369858119397801983 AND nbr3<370139594374512640 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr3>369858119397801983 AND nbr3<370139594374512640 AND nbr2>504403158265495551 AND nbr2<576460752303423488) AND NOT(nbr4>369858119397801983 AND nbr4<370139594374512640 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr4>369858119397801983 AND nbr4<370139594374512640 AND nbr2>504403158265495551 AND nbr2<576460752303423488) AND NOT(nbr4>369858119397801983 AND nbr4<370139594374512640 AND nbr3>504403158265495551 AND nbr3<576460752303423488)))) UNION SELECT predictivesearch0.contact_id, predictivesearch0.first_name, predictivesearch0.last_name FROM predictivesearch0 WHERE ((NOT(NOT(predictivesearch0.nbr>23116613498699775 AND predictivesearch0.nbr<23116682218176512) AND NOT(predictivesearch0.nbr2>23116613498699775 AND predictivesearch0.nbr2<23116682218176512) AND NOT(predictivesearch0.nbr3>23116613498699775 AND predictivesearch0.nbr3<23116682218176512) AND NOT(predictivesearch0.nbr4>23116613498699775 AND predictivesearch0.nbr4<23116682218176512)))) OR(NOT(NOT(nbr2>504403158265495551 AND nbr2<576460752303423488 AND nbr>23116132462362623 AND nbr<23133724648407040) AND NOT(nbr3>504403158265495551 AND nbr3<576460752303423488 AND nbr>23116132462362623 AND nbr<23133724648407040) AND NOT(nbr3>504403158265495551 AND nbr3<576460752303423488 AND nbr2>23116132462362623 AND nbr2<23133724648407040) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr>23116132462362623 AND nbr<23133724648407040) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr2>23116132462362623 AND nbr2<23133724648407040) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr3>23116132462362623 AND nbr3<23133724648407040))) OR(NOT(NOT(nbr2>23116132462362623 AND nbr2<23133724648407040 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr3>23116132462362623 AND nbr3<23133724648407040 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr3>23116132462362623 AND nbr3<23133724648407040 AND nbr2>504403158265495551 AND nbr2<576460752303423488) AND NOT(nbr4>23116132462362623 AND nbr4<23133724648407040 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr4>23116132462362623 AND nbr4<23133724648407040 AND nbr2>504403158265495551 AND nbr2<576460752303423488) AND NOT(nbr4>23116132462362623 AND nbr4<23133724648407040 AND nbr3>504403158265495551 AND nbr3<576460752303423488)))) AS PR ORDER BY PR.first_name, PR.last_name ASC;");
+    result = mCntSqlSearch->CompareTwoColumnsWithModifiedPattern(pattern, tokens);
+    QVERIFY( !result.compare( reference) );
+    
+    tokens.clear();
+    pattern = QString ("052200007");
+    tokens << "0522" << "7";
+    reference = QString("SELECT contact_id FROM (SELECT predictivesearch5.contact_id, predictivesearch5.first_name, predictivesearch5.last_name FROM predictivesearch5 WHERE ((NOT(NOT(nbr2>504403158265495551 AND nbr2<576460752303423488 AND nbr>369858119397801983 AND nbr<370139594374512640) AND NOT(nbr3>504403158265495551 AND nbr3<576460752303423488 AND nbr>369858119397801983 AND nbr<370139594374512640) AND NOT(nbr3>504403158265495551 AND nbr3<576460752303423488 AND nbr2>369858119397801983 AND nbr2<370139594374512640) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr>369858119397801983 AND nbr<370139594374512640) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr2>369858119397801983 AND nbr2<370139594374512640) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr3>369858119397801983 AND nbr3<370139594374512640))) OR(NOT(NOT(nbr2>369858119397801983 AND nbr2<370139594374512640 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr3>369858119397801983 AND nbr3<370139594374512640 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr3>369858119397801983 AND nbr3<370139594374512640 AND nbr2>504403158265495551 AND nbr2<576460752303423488) AND NOT(nbr4>369858119397801983 AND nbr4<370139594374512640 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr4>369858119397801983 AND nbr4<370139594374512640 AND nbr2>504403158265495551 AND nbr2<576460752303423488) AND NOT(nbr4>369858119397801983 AND nbr4<370139594374512640 AND nbr3>504403158265495551 AND nbr3<576460752303423488)))) UNION SELECT predictivesearch0.contact_id, predictivesearch0.first_name, predictivesearch0.last_name FROM predictivesearch0 WHERE ((NOT(NOT(predictivesearch0.nbr>23116132579803135 AND predictivesearch0.nbr<23116132596580352) AND NOT(predictivesearch0.nbr2>23116132579803135 AND predictivesearch0.nbr2<23116132596580352) AND NOT(predictivesearch0.nbr3>23116132579803135 AND predictivesearch0.nbr3<23116132596580352) AND NOT(predictivesearch0.nbr4>23116132579803135 AND predictivesearch0.nbr4<23116132596580352)))) OR(NOT(NOT(nbr2>504403158265495551 AND nbr2<576460752303423488 AND nbr>23116132462362623 AND nbr<23133724648407040) AND NOT(nbr3>504403158265495551 AND nbr3<576460752303423488 AND nbr>23116132462362623 AND nbr<23133724648407040) AND NOT(nbr3>504403158265495551 AND nbr3<576460752303423488 AND nbr2>23116132462362623 AND nbr2<23133724648407040) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr>23116132462362623 AND nbr<23133724648407040) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr2>23116132462362623 AND nbr2<23133724648407040) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr3>23116132462362623 AND nbr3<23133724648407040))) OR(NOT(NOT(nbr2>23116132462362623 AND nbr2<23133724648407040 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr3>23116132462362623 AND nbr3<23133724648407040 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr3>23116132462362623 AND nbr3<23133724648407040 AND nbr2>504403158265495551 AND nbr2<576460752303423488) AND NOT(nbr4>23116132462362623 AND nbr4<23133724648407040 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr4>23116132462362623 AND nbr4<23133724648407040 AND nbr2>504403158265495551 AND nbr2<576460752303423488) AND NOT(nbr4>23116132462362623 AND nbr4<23133724648407040 AND nbr3>504403158265495551 AND nbr3<576460752303423488)))) AS PR ORDER BY PR.first_name, PR.last_name ASC;");
+    result = mCntSqlSearch->CompareTwoColumnsWithModifiedPattern(pattern, tokens);
+    QVERIFY( !result.compare( reference) );
+    
+    tokens.clear();
+    pattern = QString ("0709");
+    tokens << "07" << "9";
+    reference = QString("SELECT contact_id FROM (SELECT predictivesearch7.contact_id, predictivesearch7.first_name, predictivesearch7.last_name FROM predictivesearch7 WHERE ((NOT(NOT(nbr2>648518346341351423 AND nbr2<720575940379279360 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr3>648518346341351423 AND nbr3<720575940379279360 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr3>648518346341351423 AND nbr3<720575940379279360 AND nbr2>504403158265495551 AND nbr2<576460752303423488) AND NOT(nbr4>648518346341351423 AND nbr4<720575940379279360 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr4>648518346341351423 AND nbr4<720575940379279360 AND nbr2>504403158265495551 AND nbr2<576460752303423488) AND NOT(nbr4>648518346341351423 AND nbr4<720575940379279360 AND nbr3>504403158265495551 AND nbr3<576460752303423488))) OR(NOT(NOT(nbr2>504403158265495551 AND nbr2<576460752303423488 AND nbr>648518346341351423 AND nbr<720575940379279360) AND NOT(nbr3>504403158265495551 AND nbr3<576460752303423488 AND nbr>648518346341351423 AND nbr<720575940379279360) AND NOT(nbr3>504403158265495551 AND nbr3<576460752303423488 AND nbr2>648518346341351423 AND nbr2<720575940379279360) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr>648518346341351423 AND nbr<720575940379279360) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr2>648518346341351423 AND nbr2<720575940379279360) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr3>648518346341351423 AND nbr3<720575940379279360)))) UNION SELECT predictivesearch0.contact_id, predictivesearch0.first_name, predictivesearch0.last_name FROM predictivesearch0 WHERE ((NOT(NOT(predictivesearch0.nbr>31683527065993215 AND predictivesearch0.nbr<31701119252037632) AND NOT(predictivesearch0.nbr2>31683527065993215 AND predictivesearch0.nbr2<31701119252037632) AND NOT(predictivesearch0.nbr3>31683527065993215 AND predictivesearch0.nbr3<31701119252037632) AND NOT(predictivesearch0.nbr4>31683527065993215 AND predictivesearch0.nbr4<31701119252037632)))) OR(NOT(NOT(nbr2>648518346341351423 AND nbr2<720575940379279360 AND nbr>31525197391593471 AND nbr<36028797018963968) AND NOT(nbr3>648518346341351423 AND nbr3<720575940379279360 AND nbr>31525197391593471 AND nbr<36028797018963968) AND NOT(nbr3>648518346341351423 AND nbr3<720575940379279360 AND nbr2>31525197391593471 AND nbr2<36028797018963968) AND NOT(nbr4>648518346341351423 AND nbr4<720575940379279360 AND nbr>31525197391593471 AND nbr<36028797018963968) AND NOT(nbr4>648518346341351423 AND nbr4<720575940379279360 AND nbr2>31525197391593471 AND nbr2<36028797018963968) AND NOT(nbr4>648518346341351423 AND nbr4<720575940379279360 AND nbr3>31525197391593471 AND nbr3<36028797018963968))) OR(NOT(NOT(nbr2>31525197391593471 AND nbr2<36028797018963968 AND nbr>648518346341351423 AND nbr<720575940379279360) AND NOT(nbr3>31525197391593471 AND nbr3<36028797018963968 AND nbr>648518346341351423 AND nbr<720575940379279360) AND NOT(nbr3>31525197391593471 AND nbr3<36028797018963968 AND nbr2>648518346341351423 AND nbr2<720575940379279360) AND NOT(nbr4>31525197391593471 AND nbr4<36028797018963968 AND nbr>648518346341351423 AND nbr<720575940379279360) AND NOT(nbr4>31525197391593471 AND nbr4<36028797018963968 AND nbr2>648518346341351423 AND nbr2<720575940379279360) AND NOT(nbr4>31525197391593471 AND nbr4<36028797018963968 AND nbr3>648518346341351423 AND nbr3<720575940379279360)))) AS PR ORDER BY PR.first_name, PR.last_name ASC;");
+    result = mCntSqlSearch->CompareTwoColumnsWithModifiedPattern(pattern, tokens);
+    QVERIFY( !result.compare( reference) );
+    
+    tokens.clear();
+    pattern = QString ("00052200007");
+    tokens << "000522" << "7";
+    reference = QString("SELECT contact_id FROM (SELECT predictivesearch5.contact_id, predictivesearch5.first_name, predictivesearch5.last_name FROM predictivesearch5 WHERE ((NOT(NOT(nbr2>504403158265495551 AND nbr2<576460752303423488 AND nbr>369858119397801983 AND nbr<370139594374512640) AND NOT(nbr3>504403158265495551 AND nbr3<576460752303423488 AND nbr>369858119397801983 AND nbr<370139594374512640) AND NOT(nbr3>504403158265495551 AND nbr3<576460752303423488 AND nbr2>369858119397801983 AND nbr2<370139594374512640) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr>369858119397801983 AND nbr<370139594374512640) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr2>369858119397801983 AND nbr2<370139594374512640) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr3>369858119397801983 AND nbr3<370139594374512640))) OR(NOT(NOT(nbr2>369858119397801983 AND nbr2<370139594374512640 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr3>369858119397801983 AND nbr3<370139594374512640 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr3>369858119397801983 AND nbr3<370139594374512640 AND nbr2>504403158265495551 AND nbr2<576460752303423488) AND NOT(nbr4>369858119397801983 AND nbr4<370139594374512640 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr4>369858119397801983 AND nbr4<370139594374512640 AND nbr2>504403158265495551 AND nbr2<576460752303423488) AND NOT(nbr4>369858119397801983 AND nbr4<370139594374512640 AND nbr3>504403158265495551 AND nbr3<576460752303423488)))) UNION SELECT predictivesearch0.contact_id, predictivesearch0.first_name, predictivesearch0.last_name FROM predictivesearch0 WHERE ((NOT(NOT(predictivesearch0.nbr>90297392889855 AND predictivesearch0.nbr<90297392955392) AND NOT(predictivesearch0.nbr2>90297392889855 AND predictivesearch0.nbr2<90297392955392) AND NOT(predictivesearch0.nbr3>90297392889855 AND predictivesearch0.nbr3<90297392955392) AND NOT(predictivesearch0.nbr4>90297392889855 AND predictivesearch0.nbr4<90297392955392)))) OR(NOT(NOT(nbr2>504403158265495551 AND nbr2<576460752303423488 AND nbr>90297392431103 AND nbr<90366111907840) AND NOT(nbr3>504403158265495551 AND nbr3<576460752303423488 AND nbr>90297392431103 AND nbr<90366111907840) AND NOT(nbr3>504403158265495551 AND nbr3<576460752303423488 AND nbr2>90297392431103 AND nbr2<90366111907840) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr>90297392431103 AND nbr<90366111907840) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr2>90297392431103 AND nbr2<90366111907840) AND NOT(nbr4>504403158265495551 AND nbr4<576460752303423488 AND nbr3>90297392431103 AND nbr3<90366111907840))) OR(NOT(NOT(nbr2>90297392431103 AND nbr2<90366111907840 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr3>90297392431103 AND nbr3<90366111907840 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr3>90297392431103 AND nbr3<90366111907840 AND nbr2>504403158265495551 AND nbr2<576460752303423488) AND NOT(nbr4>90297392431103 AND nbr4<90366111907840 AND nbr>504403158265495551 AND nbr<576460752303423488) AND NOT(nbr4>90297392431103 AND nbr4<90366111907840 AND nbr2>504403158265495551 AND nbr2<576460752303423488) AND NOT(nbr4>90297392431103 AND nbr4<90366111907840 AND nbr3>504403158265495551 AND nbr3<576460752303423488)))) AS PR ORDER BY PR.first_name, PR.last_name ASC;");
+    result = mCntSqlSearch->CompareTwoColumnsWithModifiedPattern(pattern, tokens);
+    QVERIFY( !result.compare( reference) );
+    
     TEST_PASSED_LOG("testCompareTwoColumnsWithModifiedPattern");
     }
 void UT_CntSqlSearch::testModifiedMatchColumns()
@@ -1304,6 +1371,10 @@
     tokens = mCntSqlSearch->GetTokens("000019700");
     QVERIFY(tokens.count() == 1);
     QVERIFY(tokens.at(0) == "197");
+    
+    tokens = mCntSqlSearch->GetTokens("200");
+    QVERIFY(tokens.count() == 1);
+    QVERIFY(tokens.at(0) == "2");
 
     tokens = mCntSqlSearch->GetTokens("101");
     QVERIFY(tokens.count() == 2);
@@ -1373,12 +1444,12 @@
     QCOMPARE( result, reference );
 
     pattern = QString("200");
-    reference = false;
+    reference = true;
     result = mCntSqlSearch->TestPattern(pattern, CntSqlSearch::ZerosEndOfFirstToken);
     QCOMPARE( result, reference );
 
     pattern = QString("2000");
-    reference = false;
+    reference = true;
     result = mCntSqlSearch->TestPattern(pattern, CntSqlSearch::ZerosEndOfFirstToken);
     QCOMPARE( result, reference );
 
@@ -1444,7 +1515,12 @@
     QCOMPARE( result, reference );
     
     pattern = QString("00232");
-    reference = false;
+    reference = true;
+    result = mCntSqlSearch->TestPattern(pattern, CntSqlSearch::ZeroIsFirstNumber);
+    QCOMPARE( result, reference );
+    
+    pattern = QString("052207");
+    reference = true;
     result = mCntSqlSearch->TestPattern(pattern, CntSqlSearch::ZeroIsFirstNumber);
     QCOMPARE( result, reference );