summaryrefslogtreecommitdiff
path: root/libopie2/opiedb
authorbrad <brad>2004-04-05 10:58:32 (UTC)
committer brad <brad>2004-04-05 10:58:32 (UTC)
commit0b481957a2eebf28b05d9803780d05ad4232aa00 (patch) (unidiff)
tree85b6b3123f8bbb86a79806ab07d9189c041730ce /libopie2/opiedb
parent900fb3d498891d9aca81c362b2ea3460d1dc3f59 (diff)
downloadopie-0b481957a2eebf28b05d9803780d05ad4232aa00.zip
opie-0b481957a2eebf28b05d9803780d05ad4232aa00.tar.gz
opie-0b481957a2eebf28b05d9803780d05ad4232aa00.tar.bz2
Regex support for sqlite (finally)
Diffstat (limited to 'libopie2/opiedb') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiedb/osqlitedriver.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/libopie2/opiedb/osqlitedriver.cpp b/libopie2/opiedb/osqlitedriver.cpp
index 2c53248..eea1093 100644
--- a/libopie2/opiedb/osqlitedriver.cpp
+++ b/libopie2/opiedb/osqlitedriver.cpp
@@ -34,6 +34,8 @@
34#include <opie2/odebug.h> 34#include <opie2/odebug.h>
35 35
36#include <stdlib.h> 36#include <stdlib.h>
37#include <regex.h>
38#include <stdio.h>
37 39
38// fromLocal8Bit() does not work as expected. Thus it 40// fromLocal8Bit() does not work as expected. Thus it
39// is replaced by fromLatin1() (eilers) 41// is replaced by fromLatin1() (eilers)
@@ -82,6 +84,33 @@ void OSQLiteDriver::setUrl( const QString& url ) {
82void OSQLiteDriver::setOptions( const QStringList& ) { 84void OSQLiteDriver::setOptions( const QStringList& ) {
83} 85}
84 86
87/*------------------------------------------------------------------/*
88 * Functions to patch a regex search into sqlite
89 * -----------------------------------------------------------------*/
90int sqliteRlikeCompare(const char *zPattern, const char *zString){
91 regex_t regex;
92 int res;
93 if ( zPattern==NULL || zString==NULL ) {
94 printf("One of the args was null!\n");
95 return 0;
96 }
97 res = regcomp(&regex, zPattern, REG_EXTENDED);
98 if ( res != 0 ) {
99 printf("Regcomp failed with code %u on string %s\n",res,zPattern);
100
101 return 0;
102 }
103 res = (regexec(&regex, zString, 0, NULL, 0)==0);
104 regfree(&regex);
105 return res;
106}
107
108void rlikeFunc(sqlite_func *context, int arg, const char **argv){
109 if( argv[0]==0 || argv[1]==0 ) return;
110 sqlite_set_result_int(context,
111 sqliteRlikeCompare((const char*)argv[0],
112 (const char*)argv[1]));
113}
85 114
86/* 115/*
87 * try to open a db specified via setUrl 116 * try to open a db specified via setUrl
@@ -101,6 +130,7 @@ bool OSQLiteDriver::open() {
101 free( error ); 130 free( error );
102 return false; 131 return false;
103 } 132 }
133 sqlite_create_function(m_sqlite,"rlike",2,rlikeFunc,NULL);
104 return true; 134 return true;
105} 135}
106 136