xref: /PHP-5.5/ext/dba/php_dba.h (revision 73c1be26)
1 /*
2    +----------------------------------------------------------------------+
3    | PHP Version 5                                                        |
4    +----------------------------------------------------------------------+
5    | Copyright (c) 1997-2015 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