author | brad <brad> | 2004-04-11 12:43:55 (UTC) |
---|---|---|
committer | brad <brad> | 2004-04-11 12:43:55 (UTC) |
commit | 9716f8c5672a8596306a9b432d9fabc4361baea5 (patch) (unidiff) | |
tree | 2b4f23f7e1291ff9f3ff7788068918e31ed63bef | |
parent | 40c0415fe7afeeb03de7441e2f667495e81edfa7 (diff) | |
download | opie-9716f8c5672a8596306a9b432d9fabc4361baea5.zip opie-9716f8c5672a8596306a9b432d9fabc4361baea5.tar.gz opie-9716f8c5672a8596306a9b432d9fabc4361baea5.tar.bz2 |
Fixes for sqlite regex driver. Function must be implemented as
rlike("pattern","match") instead of "where uid rlike("99")" you must
use "where rlike("99",uid). My mistake. Also fixes for pointer math for
context regex caching.
-rw-r--r-- | libopie2/opiedb/osqlitedriver.cpp | 15 | ||||
-rw-r--r-- | libopie2/opiepim/backend/ocontactaccessbackend_sql.cpp | 4 |
2 files changed, 12 insertions, 7 deletions
diff --git a/libopie2/opiedb/osqlitedriver.cpp b/libopie2/opiedb/osqlitedriver.cpp index ccac2f8..588fc8f 100644 --- a/libopie2/opiedb/osqlitedriver.cpp +++ b/libopie2/opiedb/osqlitedriver.cpp | |||
@@ -90,3 +90,2 @@ int sqliteRlikeCompare(const char *zPattern, const char *zString, sqregex *reg){ | |||
90 | int res; | 90 | int res; |
91 | |||
92 | if (reg->regex_raw == NULL || (strcmp (zPattern, reg->regex_raw) != 0)){ | 91 | if (reg->regex_raw == NULL || (strcmp (zPattern, reg->regex_raw) != 0)){ |
@@ -111,3 +110,3 @@ int sqliteRlikeCompare(const char *zPattern, const char *zString, sqregex *reg){ | |||
111 | void rlikeFunc(sqlite_func *context, int arg, const char **argv){ | 110 | void rlikeFunc(sqlite_func *context, int arg, const char **argv){ |
112 | if( argv[0]==0 || argv[1]==0 || argv[2]==0){ | 111 | if( argv[0]==0 || argv[1]==0 ){ |
113 | printf("One of arguments Null!!\n"); | 112 | printf("One of arguments Null!!\n"); |
@@ -117,3 +116,3 @@ void rlikeFunc(sqlite_func *context, int arg, const char **argv){ | |||
117 | sqliteRlikeCompare((const char*)argv[0], | 116 | sqliteRlikeCompare((const char*)argv[0], |
118 | (const char*)argv[1], (sqregex*)argv[2])); | 117 | (const char*)argv[1], (sqregex *)sqlite_user_data(context) )); |
119 | } | 118 | } |
@@ -126,2 +125,3 @@ bool OSQLiteDriver::open() { | |||
126 | char *error; | 125 | char *error; |
126 | |||
127 | qDebug("OSQLiteDriver::open: about to open"); | 127 | qDebug("OSQLiteDriver::open: about to open"); |
@@ -138,3 +138,7 @@ bool OSQLiteDriver::open() { | |||
138 | } | 138 | } |
139 | sqlite_create_function(m_sqlite,"rlike",3,rlikeFunc,&sqreg); | 139 | if (sqlite_create_function(m_sqlite,"rlike",2,rlikeFunc,&sqreg) != 0) |
140 | odebug << "Unable to create user defined function!" << oendl; | ||
141 | if (sqlite_function_type(m_sqlite,"rlike",SQLITE_NUMERIC) != 0) | ||
142 | odebug << "Unable to set rlike function result type!" << oendl; | ||
143 | sqreg.regex_raw = NULL; | ||
140 | return true; | 144 | return true; |
@@ -151,2 +155,3 @@ bool OSQLiteDriver::close() { | |||
151 | if (sqreg.regex_raw != NULL){ | 155 | if (sqreg.regex_raw != NULL){ |
156 | odebug << "Freeing regex on close" << oendl; | ||
152 | free(sqreg.regex_raw); | 157 | free(sqreg.regex_raw); |
@@ -171,3 +176,3 @@ OSQLResult OSQLiteDriver::query( OSQLQuery* qu) { | |||
171 | if ( sqlite_exec(m_sqlite, qu->query(),&call_back, &query, &err) > 0 ) { | 176 | if ( sqlite_exec(m_sqlite, qu->query(),&call_back, &query, &err) > 0 ) { |
172 | qWarning("OSQLiteDriver::query: Error while executing"); | 177 | qWarning("OSQLiteDriver::query: Error while executing %s",err); |
173 | free(err ); | 178 | free(err ); |
diff --git a/libopie2/opiepim/backend/ocontactaccessbackend_sql.cpp b/libopie2/opiepim/backend/ocontactaccessbackend_sql.cpp index bb5c99b..401a3c1 100644 --- a/libopie2/opiepim/backend/ocontactaccessbackend_sql.cpp +++ b/libopie2/opiepim/backend/ocontactaccessbackend_sql.cpp | |||
@@ -603,3 +603,3 @@ QArray<int> OPimContactAccessBackend_SQL::matchRegexp( const QRegExp &r ) const | |||
603 | { | 603 | { |
604 | #if 1 | 604 | #if 0 |
605 | QArray<int> nix(0); | 605 | QArray<int> nix(0); |
@@ -616,3 +616,3 @@ QArray<int> OPimContactAccessBackend_SQL::matchRegexp( const QRegExp &r ) const | |||
616 | searchlist += " OR "; | 616 | searchlist += " OR "; |
617 | searchlist += "\"" + *it + "\" rlike(\"" + r.pattern() + "\") "; | 617 | searchlist += " rlike(\""+ r.pattern() + "\",\"" + *it + "\") "; |
618 | } | 618 | } |