/* * Copyright (c) 1997, 1998, 1999, 2000, 2001, 2006, 2009, 2010, * 2014 * Tama Communications Corporation * * This file is part of GNU GLOBAL. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef _DBOP_H_ #define _DBOP_H_ #include "gparam.h" #ifdef USE_DB185_COMPAT #include #else #include "db.h" #endif #ifdef USE_SQLITE3 #include #endif #include "regex.h" #include "strbuf.h" #if defined(_WIN32) && !defined(__CYGWIN__) typedef void* HANDLE; #endif #define DBOP_PAGESIZE 8192 #ifdef USE_SQLITE3 #define DBOP_COMMIT_THRESHOLD 800 #endif #define VERSIONKEY " __.VERSION" typedef struct { /* * (1) COMMON PART */ int mode; /**< 0:read, 1:create, 2:modify */ int openflags; /**< flags of xxxx_open() */ int ioflags; /**< flags of xxxx_first() */ char *lastdat; /**< the data of last located record */ int lastsize; /**< the size of the lastdat */ char *lastkey; /**< the key of last located record */ int lastkeysize; /**< the size of the key */ regex_t *preg; /**< compiled regular expression */ int unread; /**< leave record to read again */ const char *put_errmsg; /**< error message for put_xxx() */ /* * (2) DB185 PART */ DB *db; /**< descripter of DB */ char dbname[MAXPATHLEN]; /**< dbname */ char key[MAXKEYLEN]; /**< key */ int keylen; /**< key length */ char prev[MAXKEYLEN]; /**< previous key value */ int perm; /**< file permission */ /* * (3) sorted write */ FILE *sortout; /**< write to sort command */ FILE *sortin; /**< read from sort command */ #if defined(_WIN32) && !defined(__CYGWIN__) HANDLE pid; #else int pid; /**< sort process id */ #endif #ifdef USE_SQLITE3 /* * (4) sqlite3 part */ sqlite3 *db3; STRBUF *sb; int done; const char *tblname; sqlite3_stmt *stmt; sqlite3_stmt *stmt_put3; sqlite3_int64 lastrowid; char *lastflag; #endif /** statistics */ int readcount; #ifdef USE_SQLITE3 /** for commit */ int writecount; #endif } DBOP; /* * openflags */ /** allow duplicate records */ #define DBOP_DUP 1 #ifdef USE_SQLITE3 /** use sqlite3 database */ #define DBOP_SQLITE3 2 #endif /** raw read */ #define DBOP_RAW 4 /** sorted write */ #define DBOP_SORTED_WRITE 8 /* * ioflags */ /** read key part */ #define DBOP_KEY 1 /** prefixed read */ #define DBOP_PREFIX 2 DBOP *dbop_open(const char *, int, int, int); const char *dbop_get(DBOP *, const char *); void dbop_put(DBOP *, const char *, const char *); void dbop_put_tag(DBOP *, const char *, const char *); void dbop_put_path(DBOP *, const char *, const char *, const char *); void dbop_delete(DBOP *, const char *); void dbop_update(DBOP *, const char *, const char *); const char *dbop_first(DBOP *, const char *, regex_t *, int); const char *dbop_next(DBOP *); void dbop_unread(DBOP *); const char *dbop_lastdat(DBOP *, int *); const char *dbop_getflag(DBOP *); const char *dbop_getoption(DBOP *, const char *); void dbop_putoption(DBOP *, const char *, const char *); int dbop_getversion(DBOP *); void dbop_putversion(DBOP *, int); void dbop_close(DBOP *); #endif /* _DBOP_H_ */