added like operator and handling of string sargs

Added index stuff to HACKING file
Misc. mdb-sql updates
This commit is contained in:
brianb
2001-04-20 21:06:46 +00:00
parent 3d4dde05d2
commit 606887dfbd
22 changed files with 1004 additions and 151 deletions

View File

@@ -76,7 +76,7 @@ VERSION = 0.3
YACC = bison -y
lib_LTLIBRARIES = libmdb.la
libmdb_la_SOURCES = catalog.c mem.c file.c kkd.c table.c data.c dump.c backend.c money.c sargs.c index.c
libmdb_la_SOURCES = catalog.c mem.c file.c kkd.c table.c data.c dump.c backend.c money.c sargs.c index.c like.c
INCLUDES = -I$(top_srcdir)/include `glib-config --cflags`
LIBS = `glib-config --libs`
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
@@ -84,13 +84,13 @@ CONFIG_CLEAN_FILES =
LTLIBRARIES = $(lib_LTLIBRARIES)
DEFS = -DPACKAGE=\"mdbtools\" -DVERSION=\"0.3\" -DYYTEXT_POINTER=1 -DHAVE_LIBMDB=1 -DHAVE_FCNTL_H=1 -DHAVE_LIMITS_H=1 -DHAVE_UNISTD_H=1 -DHAVE_READLINE=1 -I. -I$(srcdir)
DEFS = -DPACKAGE=\"mdbtools\" -DVERSION=\"0.3\" -DYYTEXT_POINTER=1 -DHAVE_LIBMDB=1 -DHAVE_FCNTL_H=1 -DHAVE_LIMITS_H=1 -DHAVE_UNISTD_H=1 -DHAVE_WORDEXP_H=1 -DHAVE_READLINE=1 -I. -I$(srcdir)
CPPFLAGS =
LDFLAGS =
libmdb_la_LDFLAGS =
libmdb_la_LIBADD =
libmdb_la_OBJECTS = catalog.lo mem.lo file.lo kkd.lo table.lo data.lo \
dump.lo backend.lo money.lo sargs.lo index.lo
dump.lo backend.lo money.lo sargs.lo index.lo like.lo
CFLAGS = -g -O2
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -104,8 +104,8 @@ DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = gtar
GZIP_ENV = --best
DEP_FILES = .deps/backend.P .deps/catalog.P .deps/data.P .deps/dump.P \
.deps/file.P .deps/index.P .deps/kkd.P .deps/mem.P .deps/money.P \
.deps/sargs.P .deps/table.P
.deps/file.P .deps/index.P .deps/kkd.P .deps/like.P .deps/mem.P \
.deps/money.P .deps/sargs.P .deps/table.P
SOURCES = $(libmdb_la_SOURCES)
OBJECTS = $(libmdb_la_OBJECTS)

View File

@@ -1,4 +1,4 @@
lib_LTLIBRARIES = libmdb.la
libmdb_la_SOURCES= catalog.c mem.c file.c kkd.c table.c data.c dump.c backend.c money.c sargs.c index.c
libmdb_la_SOURCES= catalog.c mem.c file.c kkd.c table.c data.c dump.c backend.c money.c sargs.c index.c like.c
INCLUDES = -I$(top_srcdir)/include `glib-config --cflags`
LIBS = `glib-config --libs`

View File

@@ -76,7 +76,7 @@ VERSION = @VERSION@
YACC = @YACC@
lib_LTLIBRARIES = libmdb.la
libmdb_la_SOURCES = catalog.c mem.c file.c kkd.c table.c data.c dump.c backend.c money.c sargs.c index.c
libmdb_la_SOURCES = catalog.c mem.c file.c kkd.c table.c data.c dump.c backend.c money.c sargs.c index.c like.c
INCLUDES = -I$(top_srcdir)/include `glib-config --cflags`
LIBS = `glib-config --libs`
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
@@ -90,7 +90,7 @@ LDFLAGS = @LDFLAGS@
libmdb_la_LDFLAGS =
libmdb_la_LIBADD =
libmdb_la_OBJECTS = catalog.lo mem.lo file.lo kkd.lo table.lo data.lo \
dump.lo backend.lo money.lo sargs.lo index.lo
dump.lo backend.lo money.lo sargs.lo index.lo like.lo
CFLAGS = @CFLAGS@
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -104,8 +104,8 @@ DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = gtar
GZIP_ENV = --best
DEP_FILES = .deps/backend.P .deps/catalog.P .deps/data.P .deps/dump.P \
.deps/file.P .deps/index.P .deps/kkd.P .deps/mem.P .deps/money.P \
.deps/sargs.P .deps/table.P
.deps/file.P .deps/index.P .deps/kkd.P .deps/like.P .deps/mem.P \
.deps/money.P .deps/sargs.P .deps/table.P
SOURCES = $(libmdb_la_SOURCES)
OBJECTS = $(libmdb_la_OBJECTS)

View File

@@ -65,6 +65,17 @@ int j,pos;
return mdb;
}
void mdb_close(MdbHandle *mdb)
{
if (mdb->fd > 0) {
close(mdb->fd);
if (mdb->filename) {
free(mdb->filename);
mdb->filename = NULL;
}
}
}
/*
** mdb_read a wrapper for read that bails if anything is wrong
*/

38
src/libmdb/like.c Normal file
View File

@@ -0,0 +1,38 @@
#include <stdio.h>
int likecmp(char *s, char *r)
{
int i, ret;
switch (r[0]) {
case '\0':
if (s[0]=='\0') {
return 1;
} else {
return 0;
}
case '_':
/* skip one character */
return likecmp(&s[1],&r[1]);
case '%':
/* skip any number of characters */
/* the strlen(s)+1 is important so the next call can */
/* if there are trailing characters */
for(i=0;i<strlen(s)+1;i++) {
if (likecmp(&s[i],&r[1])) {
return 1;
}
}
return 0;
default:
for(i=0;i<strlen(r);i++) {
if (r[i]=='_' || r[i]=='%') break;
}
if (strncmp(s,r,i)) {
return 0;
} else {
ret = likecmp(&s[i],&r[i]);
return ret;
}
}
}

View File

@@ -19,6 +19,36 @@
#include "mdbtools.h"
int mdb_test_string(MdbSarg *sarg, char *s)
{
int rc;
if (sarg->op == MDB_LIKE) {
return likecmp(s,sarg->value.s);
}
rc = strncmp(sarg->value.s, s, 255);
switch (sarg->op) {
case MDB_EQUAL:
if (rc==0) return 1;
break;
case MDB_GT:
if (rc<0) return 1;
break;
case MDB_LT:
if (rc>0) return 1;
break;
case MDB_GTEQ:
if (rc<=0) return 1;
break;
case MDB_LTEQ:
if (rc>=0) return 1;
break;
default:
fprintf(stderr, "Calling mdb_test_sarg on unknown operator. Add code to mdb_test_string() for operator %d\n",sarg->op);
break;
}
return 0;
}
int mdb_test_int(MdbSarg *sarg, gint32 i)
{
switch (sarg->op) {
@@ -45,6 +75,9 @@ int mdb_test_int(MdbSarg *sarg, gint32 i)
}
int mdb_test_sarg(MdbHandle *mdb, MdbColumn *col, MdbSarg *sarg, int offset, int len)
{
char tmpbuf[256];
int lastchar;
switch (col->col_type) {
case MDB_BYTE:
return mdb_test_int(sarg, mdb_get_byte(mdb, offset));
@@ -55,6 +88,11 @@ int mdb_test_sarg(MdbHandle *mdb, MdbColumn *col, MdbSarg *sarg, int offset, int
case MDB_LONGINT:
return mdb_test_int(sarg, mdb_get_int32(mdb, offset));
break;
case MDB_TEXT:
strncpy(tmpbuf, &mdb->pg_buf[offset],255);
lastchar = len > 255 ? 255 : len;
tmpbuf[lastchar]='\0';
return mdb_test_string(sarg, tmpbuf);
default:
fprintf(stderr, "Calling mdb_test_sarg on unknown type. Add code to mdb_test_sarg() for type %d\n",col->col_type);
break;
@@ -95,7 +133,7 @@ int i;
for (i=0;i<table->num_cols;i++) {
col = g_ptr_array_index (table->columns, i);
if (!strcmp(col->name,colname)) {
if (!strcasecmp(col->name,colname)) {
return mdb_add_sarg(col, in_sarg);
}
}