summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--libopie2/opiedb/osqlitedriver.cpp8
-rw-r--r--libopie2/opiedb/osqlitedriver.h3
-rw-r--r--libopie2/opiepim/backend/ocontactaccessbackend_sql.cpp35
3 files changed, 38 insertions, 8 deletions
diff --git a/libopie2/opiedb/osqlitedriver.cpp b/libopie2/opiedb/osqlitedriver.cpp
index 3ba161e..ccac2f8 100644
--- a/libopie2/opiedb/osqlitedriver.cpp
+++ b/libopie2/opiedb/osqlitedriver.cpp
@@ -13,57 +13,57 @@
    .%`+i>       _;_.
    .i_,=:_.      -<s. This program is distributed in the hope that
     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
    : ..    .:,     . . . without even the implied warranty of
    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
..}^=.=       =       ; Library General Public License for more
++=   -.     .`     .: details.
 :     =  ...= . :.=-
 -.   .:....=;==+<; You should have received a copy of the GNU
  -_. . .   )=.  = Library General Public License along with
    --        :-=` this library; see the file COPYING.LIB.
If not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#include "osqlquery.h"
#include "osqlitedriver.h"
#include <opie2/odebug.h>
#include <stdlib.h>
-#include <regex.h>
#include <stdio.h>
// fromLocal8Bit() does not work as expected. Thus it
// is replaced by fromLatin1() (eilers)
#define __BUGGY_LOCAL8BIT_
-using namespace Opie::DB;
-using namespace Opie::DB::Internal;
+namespace Opie {
+namespace DB {
+namespace Internal {
namespace {
struct Query {
OSQLError::ValueList errors;
OSQLResultItem::ValueList items;
OSQLiteDriver *driver;
};
}
OSQLiteDriver::OSQLiteDriver( QLibrary *lib )
: OSQLDriver( lib )
{
m_sqlite = 0l;
}
OSQLiteDriver::~OSQLiteDriver() {
close();
}
QString OSQLiteDriver::id()const {
return QString::fromLatin1("SQLite");
@@ -208,24 +208,26 @@ int OSQLiteDriver::call_back( void* voi, int argc,
//copy them over to a OSQLResultItem
QMap<QString, QString> tableString;
QMap<int, QString> tableInt;
for (int i = 0; i < argc; i++ ) {
#ifdef __BUGGY_LOCAL8BIT_
tableInt.insert( i, QString::fromLatin1( argv[i] ) );
tableString.insert( QString::fromLatin1( columns[i] ),
QString::fromLatin1( argv[i] ) );
#else
tableInt.insert( i, QString::fromLocal8Bit( argv[i] ) );
tableString.insert( QString::fromLocal8Bit( columns[i] ),
QString::fromLocal8Bit( argv[i] ) );
#endif
}
OSQLResultItem item( tableString, tableInt );
qu->items.append( item );
return ((Query*)voi)->driver->handleCallBack( argc,
argv,
columns );
}
+
+}}} // namespace OPIE::DB::Internal
diff --git a/libopie2/opiedb/osqlitedriver.h b/libopie2/opiedb/osqlitedriver.h
index d5ab224..33037b8 100644
--- a/libopie2/opiedb/osqlitedriver.h
+++ b/libopie2/opiedb/osqlitedriver.h
@@ -1,31 +1,34 @@
#ifndef OSQL_LITE_DRIVER_H
#define OSQL_LITE_DRIVER_H
#include <sqlite.h>
#if defined (__GNUC__) && (__GNUC__ < 3)
#include <sys/types.h>
#endif
+#ifdef Q_OS_MACX
+#include <sys/types.h>
+#endif
#include <regex.h>
#include "osqldriver.h"
#include "osqlerror.h"
#include "osqlresult.h"
namespace Opie {
namespace DB {
namespace Internal {
struct sqregex {
char *regex_raw;
regex_t regex_c;
};
class OSQLiteDriver : public OSQLDriver {
Q_OBJECT
public:
OSQLiteDriver( QLibrary *lib = 0l );
~OSQLiteDriver();
QString id()const;
void setUserName( const QString& );
void setPassword( const QString& );
void setUrl( const QString& url );
diff --git a/libopie2/opiepim/backend/ocontactaccessbackend_sql.cpp b/libopie2/opiepim/backend/ocontactaccessbackend_sql.cpp
index 3142f75..bb5c99b 100644
--- a/libopie2/opiepim/backend/ocontactaccessbackend_sql.cpp
+++ b/libopie2/opiepim/backend/ocontactaccessbackend_sql.cpp
@@ -580,60 +580,85 @@ QArray<int> OPimContactAccessBackend_SQL::queryByExample ( const OPimContact &qu
}
// Skip trailing "AND"
// if ( isAnyFieldSelected )
// qu = qu.left( qu.length() - 4 );
qu += searchQuery;
qDebug( "queryByExample query: %s", qu.latin1() );
// Execute query and return the received uid's
OSQLRawQuery raw( qu );
OSQLResult res = m_driver->query( &raw );
if ( res.state() != OSQLResult::Success ){
QArray<int> empty;
return empty;
}
QArray<int> list = extractUids( res );
return list;
}
QArray<int> OPimContactAccessBackend_SQL::matchRegexp( const QRegExp &r ) const
{
+#if 1
QArray<int> nix(0);
return nix;
+
+#else
+ QString qu = "SELECT uid FROM addressbook WHERE (";
+ QString searchlist;
+
+ QStringList fieldList = OPimContactFields::untrfields( false );
+ // QMap<QString, int> translate = OPimContactFields::untrFieldsToId();
+ for ( QStringList::Iterator it = ++fieldList.begin(); it != fieldList.end(); ++it ){
+ if ( !searchlist.isEmpty() )
+ searchlist += " OR ";
+ searchlist += "\"" + *it + "\" rlike(\"" + r.pattern() + "\") ";
+ }
+
+ qu = qu + searchlist + ")";
+
+ qDebug( "query: %s", qu.latin1() );
+
+ OSQLRawQuery raw( qu );
+ OSQLResult res = m_driver->query( &raw );
+
+ return extractUids( res );
+
+
+#endif
}
const uint OPimContactAccessBackend_SQL::querySettings()
{
return OPimContactAccess::IgnoreCase
- || OPimContactAccess::WildCards
- || OPimContactAccess::DateDiff
- || OPimContactAccess::DateYear
- || OPimContactAccess::DateMonth
- || OPimContactAccess::DateDay
+ | OPimContactAccess::WildCards
+ | OPimContactAccess::DateDiff
+ | OPimContactAccess::DateYear
+ | OPimContactAccess::DateMonth
+ | OPimContactAccess::DateDay
;
}
bool OPimContactAccessBackend_SQL::hasQuerySettings (uint querySettings) const
{
/* OPimContactAccess::IgnoreCase, DateDiff, DateYear, DateMonth, DateDay
* may be added with any of the other settings. IgnoreCase should never used alone.
* Wildcards, RegExp, ExactMatch should never used at the same time...
*/
// Step 1: Check whether the given settings are supported by this backend
if ( ( querySettings & (
OPimContactAccess::IgnoreCase
| OPimContactAccess::WildCards
| OPimContactAccess::DateDiff
| OPimContactAccess::DateYear
| OPimContactAccess::DateMonth
| OPimContactAccess::DateDay
// | OPimContactAccess::RegExp
// | OPimContactAccess::ExactMatch
) ) != querySettings )
return false;
// Step 2: Check whether the given combinations are ok..