author | eilers <eilers> | 2004-10-27 14:28:16 (UTC) |
---|---|---|
committer | eilers <eilers> | 2004-10-27 14:28:16 (UTC) |
commit | 03adfc8b698fbed4b6f31c8320f510eb6da0d51d (patch) (side-by-side diff) | |
tree | cb2faa9af5eedab6c816ca81433f457e8930cfc2 | |
parent | e44d35ca3fd26ef7a3184b07516f6535d8844a83 (diff) | |
download | opie-03adfc8b698fbed4b6f31c8320f510eb6da0d51d.zip opie-03adfc8b698fbed4b6f31c8320f510eb6da0d51d.tar.gz opie-03adfc8b698fbed4b6f31c8320f510eb6da0d51d.tar.bz2 |
Switching to sqlite3
Please read the following page for upgrade your old sqlite V2 database:
http://opie.handhelds.org/cgi-bin/moin.cgi/SqlBackends
-rw-r--r-- | Rules.make | 2 | ||||
-rw-r--r-- | dependencies.in | 2 | ||||
-rw-r--r-- | development/pim/dbpaper/intro.tex | 4 | ||||
-rw-r--r-- | libopie2/opiedb/config.in | 2 | ||||
-rw-r--r-- | libopie2/opiedb/libopiedb2.control | 4 | ||||
-rw-r--r-- | libopie2/opiedb/opiedb.pro | 2 | ||||
-rw-r--r-- | libopie2/opiedb/osqlitedriver.cpp | 98 | ||||
-rw-r--r-- | libopie2/opiedb/osqlitedriver.h | 4 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimaccesstemplate.h | 7 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimcontactfields.h | 2 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimtemplatebase.h | 6 |
11 files changed, 62 insertions, 71 deletions
@@ -308,9 +308,9 @@ define descend $(MAKE) $(if $(QMAKE),QMAKE=$(QMAKE)) -C $(1) $(2) endef define makefilegen - cd $(if $(1),$(dir $(1))); $(TOPDIR)/qmake/qmake $(3) -o $(if $(1),$(notdir $(1))) $(word 3,$(shell grep -m 1 "[[:space:]]$(patsubst %/Makefile,%,$(1))[[:space:]]" $(OPIEDIR)/packages)) + cd $(if $(1),$(dir $(1))); $(TOPDIR)/qmake/qmake $(3) -o $(if $(1),$(notdir $(1))) $(word 3,$(shell grep "[[:space:]]$(patsubst %/Makefile,%,$(1))[[:space:]]" $(OPIEDIR)/packages)) endef define makecfg $(TOPDIR)/scripts/makecfg.pl $1 $(OPIEDIR) diff --git a/dependencies.in b/dependencies.in index 55b44e6..ce1ac96 100644 --- a/dependencies.in +++ b/dependencies.in @@ -22,9 +22,9 @@ string "LIBPCAP include dir" depends LIBPCAP_DEP config LIBSQLITE_DEP - boolean "Have sqlite >= 2.8.6" + boolean "Have sqlite >= 3.0.7" default n config LIBSQLITE_LIB_DIR string "LIBSQLITE library dir" diff --git a/development/pim/dbpaper/intro.tex b/development/pim/dbpaper/intro.tex index c456333..fd790d7 100644 --- a/development/pim/dbpaper/intro.tex +++ b/development/pim/dbpaper/intro.tex @@ -11,9 +11,9 @@ Design goal is a fast and extendable layout on a sql database to support cross r \subsection{Copyright} Copyright notice -\copyright 2002, Maximilian Rei{\ss} \& Stefan Eilers \& Holger Freyther +\copyright 2002-2004, Maximilian Rei{\ss} \& Stefan Eilers \& Holger Freyther \pagebreak \section{Relations} \subsection{About Cross Referencing and Horizontal Data Storage} @@ -21,9 +21,9 @@ Before you read on, it may be helpful to get some information about the solution Some of the tables are just using 5 attributes: \begin{enumerate} \item UID: This countains an unique ID for the complete entry. An entry may consist of multiple rows, seperated by ID. -\item ID: This defines a number to seperate the rows of an entry. UID + ID must be unique for every entry. +\item ID: This defines a number to seperate the rows of an entry. UID + ID must be unique for every entry (primary key). \item Type: Describes the type of this entry. \item Priority: For instance: Your default email-address will get the priority 1 and the other 2.. . 0 means ``not defined''. \item Value: The data which was described by ``Type'' is stored here. \end{enumerate} diff --git a/libopie2/opiedb/config.in b/libopie2/opiedb/config.in index 4d85609..0d74887 100644 --- a/libopie2/opiedb/config.in +++ b/libopie2/opiedb/config.in @@ -1,7 +1,7 @@ config LIBOPIE2DB boolean "libopie2db (database related classes)" default "y" depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE2CORE && LIBSQLITE_DEP - comment "libopie2db needs a libqpe, sqlite and libopie2core" + comment "libopie2db needs a libqpe, libsqlite3 and libopie2core" depends !(( LIBQPE || LIBQPE-X11 ) && LIBOPIE2CORE && LIBSQLITE_DEP) diff --git a/libopie2/opiedb/libopiedb2.control b/libopie2/opiedb/libopiedb2.control index 4859c46..29fae78 100644 --- a/libopie2/opiedb/libopiedb2.control +++ b/libopie2/opiedb/libopiedb2.control @@ -4,7 +4,7 @@ Priority: optional Section: opie/system Maintainer: Opie Team <opie@handhelds.org> Architecture: arm Version: 1.8.2-$SUB_VERSION.2 -Depends: libqpe1, libopiecore2 (1.8.2), libsqlite0 | sqlite +Depends: libqpe1, libopiecore2 (1.8.2), libsqlite3 | sqlite3 Provides: libopiedb2 -Description: Opie library 2.0 DB +Description: Opie library 2.1 DB diff --git a/libopie2/opiedb/opiedb.pro b/libopie2/opiedb/opiedb.pro index 8432674..f727995 100644 --- a/libopie2/opiedb/opiedb.pro +++ b/libopie2/opiedb/opiedb.pro @@ -24,9 +24,9 @@ SOURCES = osqlbackend.cpp \ TARGET = opiedb2 VERSION = 1.9.0 INCLUDEPATH = $(OPIEDIR)/include DEPENDPATH = $(OPIEDIR)/include -LIBS += -lopiecore2 -lqpe -lsqlite +LIBS += -lopiecore2 -lqpe -lsqlite3 !contains( platform, x11 ) { include ( $(OPIEDIR)/include.pro ) } diff --git a/libopie2/opiedb/osqlitedriver.cpp b/libopie2/opiedb/osqlitedriver.cpp index c8b560f..816223e 100644 --- a/libopie2/opiedb/osqlitedriver.cpp +++ b/libopie2/opiedb/osqlitedriver.cpp @@ -102,42 +102,44 @@ int sqliteRlikeCompare(const char *zPattern, const char *zString, sqregex *reg){ res = (regexec(®->regex_c, zString, 0, NULL, 0)==0); return res; } -void rlikeFunc(sqlite_func *context, int arg, const char **argv){ - if( arg < 2 || argv[0]==0 || argv[1]==0 ){ - printf("One of arguments Null!!\n"); - return; +void rlikeFunc( sqlite3_context* context, int count, sqlite3_value** values ){ + const unsigned char* argv0 = sqlite3_value_text( values[0] ); + const unsigned char* argv1 = sqlite3_value_text( values[1] ); + if( count < 2 || argv0 == 0 || argv1 == 0 ){ + qWarning( "One of arguments Null!!\n" ); + return; } - sqlite_set_result_int(context, - sqliteRlikeCompare((const char*)argv[0], - (const char*)argv[1], (sqregex *)sqlite_user_data(context) )); + sqlite3_result_int(context, sqliteRlikeCompare((const char*)argv0, + (const char*)argv1, + (sqregex *) sqlite3_user_data( context ) )); } /* * try to open a db specified via setUrl * and options */ bool OSQLiteDriver::open() { - char *error; - odebug << "OSQLiteDriver::open: about to open" << oendl; - m_sqlite = sqlite_open(m_url.local8Bit(), - 0, - &error ); + + int error = sqlite3_open( m_url.utf8(), + &m_sqlite ); /* failed to open */ - if (m_sqlite == 0l ) { + if ( error != SQLITE_OK ) { // FIXME set the last error owarn << "OSQLiteDriver::open: " << error << "" << oendl; - free( error ); + sqlite3_close( m_sqlite ); return false; } - if (sqlite_create_function(m_sqlite,"rlike",2,rlikeFunc,&sqreg) != 0) - odebug << "Unable to create user defined function!" << oendl; - if (sqlite_function_type(m_sqlite,"rlike",SQLITE_NUMERIC) != 0) - odebug << "Unable to set rlike function result type!" << oendl; + if ( sqlite3_create_function( m_sqlite, "rlike", 2, SQLITE_UTF8, &sqreg, rlikeFunc, NULL, NULL ) != SQLITE_OK ){ + odebug << "Unable to create user defined function!" << oendl; + return false; + } + sqreg.regex_raw = NULL; + return true; } @@ -145,41 +147,43 @@ bool OSQLiteDriver::open() { * sqlite closes them without * telling failure or success */ bool OSQLiteDriver::close() { - if (m_sqlite ) - sqlite_close( m_sqlite ), m_sqlite=0l; - if (sqreg.regex_raw != NULL){ - odebug << "Freeing regex on close" << oendl; - free(sqreg.regex_raw); - sqreg.regex_raw=NULL; - regfree(&sqreg.regex_c); - } - return true; + if ( m_sqlite ){ + sqlite3_close( m_sqlite ); + m_sqlite=0l; + } + if ( sqreg.regex_raw != NULL){ + odebug << "Freeing regex on close" << oendl; + free( sqreg.regex_raw ); + sqreg.regex_raw = NULL; + regfree( &sqreg.regex_c ); + } + return true; } /* Query */ OSQLResult OSQLiteDriver::query( OSQLQuery* qu) { - if ( !m_sqlite ) { - // FIXME set error code - OSQLResult result( OSQLResult::Failure ); - return result; - } - Query query; - query.driver = this; - char *err; - /* SQLITE_OK 0 if return code > 0 == failure */ - if ( sqlite_exec(m_sqlite, qu->query().utf8(),&call_back, &query, &err) > 0 ) { - owarn << "OSQLiteDriver::query: Error while executing " << err << "" << oendl; - free( err ); - // FixMe Errors - } - - OSQLResult result(OSQLResult::Success, - query.items, - query.errors ); - return result; + if ( !m_sqlite ) { + // FIXME set error code + OSQLResult result( OSQLResult::Failure ); + return result; + } + Query query; + query.driver = this; + char *err; + /* SQLITE_OK 0 if return code > 0 == failure */ + if ( sqlite3_exec( m_sqlite, qu->query().utf8(), &call_back, &query, &err ) > SQLITE_OK ) { + owarn << "OSQLiteDriver::query: Error while executing " << err << "" << oendl; + free( err ); + // FixMe Errors + } + + OSQLResult result(OSQLResult::Success, + query.items, + query.errors ); + return result; } OSQLTable::ValueList OSQLiteDriver::tables() const { @@ -202,9 +206,9 @@ int OSQLiteDriver::handleCallBack( int, char**, char** ) { /* callback_handler add the values to the list*/ int OSQLiteDriver::call_back( void* voi, int argc, - char** argv, char** columns) { + char** argv, char** columns ) { Query* qu = (Query*)voi; //copy them over to a OSQLResultItem QMap<QString, QString> tableString; diff --git a/libopie2/opiedb/osqlitedriver.h b/libopie2/opiedb/osqlitedriver.h index e38fd52..4990a11 100644 --- a/libopie2/opiedb/osqlitedriver.h +++ b/libopie2/opiedb/osqlitedriver.h @@ -1,8 +1,8 @@ #ifndef OSQL_LITE_DRIVER_H #define OSQL_LITE_DRIVER_H -#include <sqlite.h> +#include <sqlite3.h> #include <sys/types.h> #include <regex.h> #include "osqldriver.h" @@ -40,9 +40,9 @@ private: OSQLResultItem m_items; int handleCallBack( int, char**, char** ); static int call_back( void*, int, char**, char** ); QString m_url; - sqlite *m_sqlite; + sqlite3 *m_sqlite; sqregex sqreg; }; } } diff --git a/libopie2/opiepim/core/opimaccesstemplate.h b/libopie2/opiepim/core/opimaccesstemplate.h index 7ab1ea5..f936d4e 100644 --- a/libopie2/opiepim/core/opimaccesstemplate.h +++ b/libopie2/opiepim/core/opimaccesstemplate.h @@ -177,9 +177,8 @@ public: void setReadAhead( uint count ); /** * @internal */ - virtual T cacheFind( int uid )const; void cache( const T& )const; void setSaneCacheSize( int ); QArray<int> records()const; @@ -265,14 +264,8 @@ T OPimAccessTemplate<T>::find( int uid ) const{ return t; } template <class T> -T OPimAccessTemplate<T>::cacheFind( int uid ) const -{ - return m_cache.find( uid ); -} - -template <class T> T OPimAccessTemplate<T>::find( int uid, const QArray<int>& ar, uint current, typename OTemplateBase<T>::CacheDirection dir )const { /* * better do T.isEmpty() diff --git a/libopie2/opiepim/core/opimcontactfields.h b/libopie2/opiepim/core/opimcontactfields.h index 3aa3894..2e42951 100644 --- a/libopie2/opiepim/core/opimcontactfields.h +++ b/libopie2/opiepim/core/opimcontactfields.h @@ -1,7 +1,7 @@ /* This file is part of the Opie Project - Copyright (C) The Main Author <main-author@whereever.org> + Copyright (C) Stefan Eielrs <eilers.stefan@epost.de> =. Copyright (C) The Opie Team <opie-devel@handhelds.org> .=l. .>+-= _;:, .> :=|. This program is free software; you can diff --git a/libopie2/opiepim/core/opimtemplatebase.h b/libopie2/opiepim/core/opimtemplatebase.h index ec9a94e..787486c 100644 --- a/libopie2/opiepim/core/opimtemplatebase.h +++ b/libopie2/opiepim/core/opimtemplatebase.h @@ -92,14 +92,8 @@ public: virtual T find( int uid, const QArray<int>& items, uint current, CacheDirection dir = Forward )const = 0; /** - * Find in Cache.. - * Returns empty object if nothing found. - */ - virtual T cacheFind( int uid )const = 0; - - /** * Put element into Cache */ virtual void cache( const T& )const = 0; virtual void setSaneCacheSize( int ) = 0; |