1 /* 2 +----------------------------------------------------------------------+ 3 | PHP Version 5 | 4 +----------------------------------------------------------------------+ 5 | Copyright (c) 1997-2014 The PHP Group | 6 +----------------------------------------------------------------------+ 7 | This source file is subject to version 3.01 of the PHP license, | 8 | that is bundled with this package in the file LICENSE, and is | 9 | available through the world-wide-web at the following url: | 10 | http://www.php.net/license/3_01.txt | 11 | If you did not receive a copy of the PHP license and are unable to | 12 | obtain it through the world-wide-web, please send a note to | 13 | license@php.net so we can mail you a copy immediately. | 14 +----------------------------------------------------------------------+ 15 | Author: Sascha Schumann <sascha@schumann.cx> | 16 +----------------------------------------------------------------------+ 17 */ 18 19 /* $Id$ */ 20 21 #ifndef PHP_DBA_H 22 #define PHP_DBA_H 23 24 #if HAVE_DBA 25 26 typedef enum { 27 /* do not allow 0 here */ 28 DBA_READER = 1, 29 DBA_WRITER, 30 DBA_TRUNC, 31 DBA_CREAT 32 } dba_mode_t; 33 34 typedef struct dba_lock { 35 php_stream *fp; 36 char *name; 37 int mode; /* LOCK_EX,LOCK_SH */ 38 } dba_lock; 39 40 typedef struct dba_info { 41 /* public */ 42 void *dbf; /* ptr to private data or whatever */ 43 char *path; 44 dba_mode_t mode; 45 php_stream *fp; /* this is the database stream for builtin handlers */ 46 int fd; 47 /* arg[cv] are only available when the dba_open handler is called! */ 48 int argc; 49 zval ***argv; 50 /* private */ 51 int flags; /* whether and how dba did locking and other flags*/ 52 struct dba_handler *hnd; 53 dba_lock lock; 54 } dba_info; 55 56 #define DBA_LOCK_READER (0x0001) 57 #define DBA_LOCK_WRITER (0x0002) 58 #define DBA_LOCK_CREAT (0x0004) 59 #define DBA_LOCK_TRUNC (0x0008) 60 61 #define DBA_LOCK_EXT (0) 62 #define DBA_LOCK_ALL (DBA_LOCK_READER|DBA_LOCK_WRITER|DBA_LOCK_CREAT|DBA_LOCK_TRUNC) 63 #define DBA_LOCK_WCT (DBA_LOCK_WRITER|DBA_LOCK_CREAT|DBA_LOCK_TRUNC) 64 65 #define DBA_STREAM_OPEN (0x0010) 66 #define DBA_PERSISTENT (0x0020) 67 68 #define DBA_CAST_AS_FD (0x0050) 69 #define DBA_NO_APPEND (0x00D0) 70 71 extern zend_module_entry dba_module_entry; 72 #define dba_module_ptr &dba_module_entry 73 74 typedef struct dba_handler { 75 char *name; /* handler name */ 76 int flags; /* whether and how dba does locking and other flags*/ 77 int (*open)(dba_info *, char **error TSRMLS_DC); 78 void (*close)(dba_info * TSRMLS_DC); 79 char* (*fetch)(dba_info *, char *, int, int, int * TSRMLS_DC); 80 int (*update)(dba_info *, char *, int, char *, int, int TSRMLS_DC); 81 int (*exists)(dba_info *, char *, int TSRMLS_DC); 82 int (*delete)(dba_info *, char *, int TSRMLS_DC); 83 char* (*firstkey)(dba_info *, int * TSRMLS_DC); 84 char* (*nextkey)(dba_info *, int * TSRMLS_DC); 85 int (*optimize)(dba_info * TSRMLS_DC); 86 int (*sync)(dba_info * TSRMLS_DC); 87 char* (*info)(struct dba_handler *hnd, dba_info * TSRMLS_DC); 88 /* dba_info==NULL: Handler info, dba_info!=NULL: Database info */ 89 } dba_handler; 90 91 /* common prototypes which must be supplied by modules */ 92 93 #define DBA_OPEN_FUNC(x) \ 94 int dba_open_##x(dba_info *info, char **error TSRMLS_DC) 95 #define DBA_CLOSE_FUNC(x) \ 96 void dba_close_##x(dba_info *info TSRMLS_DC) 97 #define DBA_FETCH_FUNC(x) \ 98 char *dba_fetch_##x(dba_info *info, char *key, int keylen, int skip, int *newlen TSRMLS_DC) 99 #define DBA_UPDATE_FUNC(x) \ 100 int dba_update_##x(dba_info *info, char *key, int keylen, char *val, int vallen, int mode TSRMLS_DC) 101 #define DBA_EXISTS_FUNC(x) \ 102 int dba_exists_##x(dba_info *info, char *key, int keylen TSRMLS_DC) 103 #define DBA_DELETE_FUNC(x) \ 104 int dba_delete_##x(dba_info *info, char *key, int keylen TSRMLS_DC) 105 #define DBA_FIRSTKEY_FUNC(x) \ 106 char *dba_firstkey_##x(dba_info *info, int *newlen TSRMLS_DC) 107 #define DBA_NEXTKEY_FUNC(x) \ 108 char *dba_nextkey_##x(dba_info *info, int *newlen TSRMLS_DC) 109 #define DBA_OPTIMIZE_FUNC(x) \ 110 int dba_optimize_##x(dba_info *info TSRMLS_DC) 111 #define DBA_SYNC_FUNC(x) \ 112 int dba_sync_##x(dba_info *info TSRMLS_DC) 113 #define DBA_INFO_FUNC(x) \ 114 char *dba_info_##x(dba_handler *hnd, dba_info *info TSRMLS_DC) 115 116 #define DBA_FUNCS(x) \ 117 DBA_OPEN_FUNC(x); \ 118 DBA_CLOSE_FUNC(x); \ 119 DBA_FETCH_FUNC(x); \ 120 DBA_UPDATE_FUNC(x); \ 121 DBA_DELETE_FUNC(x); \ 122 DBA_EXISTS_FUNC(x); \ 123 DBA_FIRSTKEY_FUNC(x); \ 124 DBA_NEXTKEY_FUNC(x); \ 125 DBA_OPTIMIZE_FUNC(x); \ 126 DBA_SYNC_FUNC(x); \ 127 DBA_INFO_FUNC(x) 128 129 #define VALLEN(p) Z_STRVAL_PP(p), Z_STRLEN_PP(p) 130 131 PHP_FUNCTION(dba_open); 132 PHP_FUNCTION(dba_popen); 133 PHP_FUNCTION(dba_close); 134 PHP_FUNCTION(dba_firstkey); 135 PHP_FUNCTION(dba_nextkey); 136 PHP_FUNCTION(dba_replace); 137 PHP_FUNCTION(dba_insert); 138 PHP_FUNCTION(dba_delete); 139 PHP_FUNCTION(dba_exists); 140 PHP_FUNCTION(dba_fetch); 141 PHP_FUNCTION(dba_optimize); 142 PHP_FUNCTION(dba_sync); 143 PHP_FUNCTION(dba_handlers); 144 PHP_FUNCTION(dba_list); 145 PHP_FUNCTION(dba_key_split); 146 147 #else 148 #define dba_module_ptr NULL 149 #endif 150 151 #define phpext_dba_ptr dba_module_ptr 152 153 #endif 154