mirror of
https://github.com/mdbtools/mdbtools.git
synced 2026-03-10 00:20:54 +08:00
added like operator and handling of string sargs
Added index stuff to HACKING file Misc. mdb-sql updates
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
38
src/libmdb/like.c
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user