root/ext/dba/php_dba.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2    +----------------------------------------------------------------------+
   3    | PHP Version 7                                                        |
   4    +----------------------------------------------------------------------+
   5    | Copyright (c) 1997-2016 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 #include "php_version.h"
  25 #define PHP_DBA_VERSION PHP_VERSION
  26 
  27 #if HAVE_DBA
  28 
  29 typedef enum {
  30         /* do not allow 0 here */
  31         DBA_READER = 1,
  32         DBA_WRITER,
  33         DBA_TRUNC,
  34         DBA_CREAT
  35 } dba_mode_t;
  36 
  37 typedef struct dba_lock {
  38         php_stream *fp;
  39         char *name;
  40         int mode; /* LOCK_EX,LOCK_SH */
  41 } dba_lock;
  42 
  43 typedef struct dba_info {
  44         /* public */
  45         void *dbf;               /* ptr to private data or whatever */
  46         char *path;
  47         dba_mode_t mode;
  48         php_stream *fp;  /* this is the database stream for builtin handlers */
  49         int fd;
  50         /* arg[cv] are only available when the dba_open handler is called! */
  51         int argc;
  52         zval *argv;
  53         /* private */
  54         int flags; /* whether and how dba did locking and other flags*/
  55         struct dba_handler *hnd;
  56         dba_lock lock;
  57 } dba_info;
  58 
  59 #define DBA_LOCK_READER  (0x0001)
  60 #define DBA_LOCK_WRITER  (0x0002)
  61 #define DBA_LOCK_CREAT   (0x0004)
  62 #define DBA_LOCK_TRUNC   (0x0008)
  63 
  64 #define DBA_LOCK_EXT     (0)
  65 #define DBA_LOCK_ALL     (DBA_LOCK_READER|DBA_LOCK_WRITER|DBA_LOCK_CREAT|DBA_LOCK_TRUNC)
  66 #define DBA_LOCK_WCT     (DBA_LOCK_WRITER|DBA_LOCK_CREAT|DBA_LOCK_TRUNC)
  67 
  68 #define DBA_STREAM_OPEN  (0x0010)
  69 #define DBA_PERSISTENT   (0x0020)
  70 
  71 #define DBA_CAST_AS_FD   (0x0050)
  72 #define DBA_NO_APPEND    (0x00D0)
  73 
  74 extern zend_module_entry dba_module_entry;
  75 #define dba_module_ptr &dba_module_entry
  76 
  77 typedef struct dba_handler {
  78         char *name; /* handler name */
  79         int flags; /* whether and how dba does locking and other flags*/
  80         int (*open)(dba_info *, char **error);
  81         void (*close)(dba_info *);
  82         char* (*fetch)(dba_info *, char *, int, int, int *);
  83         int (*update)(dba_info *, char *, int, char *, int, int);
  84         int (*exists)(dba_info *, char *, int);
  85         int (*delete)(dba_info *, char *, int);
  86         char* (*firstkey)(dba_info *, int *);
  87         char* (*nextkey)(dba_info *, int *);
  88         int (*optimize)(dba_info *);
  89         int (*sync)(dba_info *);
  90         char* (*info)(struct dba_handler *hnd, dba_info *);
  91                 /* dba_info==NULL: Handler info, dba_info!=NULL: Database info */
  92 } dba_handler;
  93 
  94 /* common prototypes which must be supplied by modules */
  95 
  96 #define DBA_OPEN_FUNC(x) \
  97         int dba_open_##x(dba_info *info, char **error)
  98 #define DBA_CLOSE_FUNC(x) \
  99         void dba_close_##x(dba_info *info)
 100 #define DBA_FETCH_FUNC(x) \
 101         char *dba_fetch_##x(dba_info *info, char *key, int keylen, int skip, int *newlen)
 102 #define DBA_UPDATE_FUNC(x) \
 103         int dba_update_##x(dba_info *info, char *key, int keylen, char *val, int vallen, int mode)
 104 #define DBA_EXISTS_FUNC(x) \
 105         int dba_exists_##x(dba_info *info, char *key, int keylen)
 106 #define DBA_DELETE_FUNC(x) \
 107         int dba_delete_##x(dba_info *info, char *key, int keylen)
 108 #define DBA_FIRSTKEY_FUNC(x) \
 109         char *dba_firstkey_##x(dba_info *info, int *newlen)
 110 #define DBA_NEXTKEY_FUNC(x) \
 111         char *dba_nextkey_##x(dba_info *info, int *newlen)
 112 #define DBA_OPTIMIZE_FUNC(x) \
 113         int dba_optimize_##x(dba_info *info)
 114 #define DBA_SYNC_FUNC(x) \
 115         int dba_sync_##x(dba_info *info)
 116 #define DBA_INFO_FUNC(x) \
 117         char *dba_info_##x(dba_handler *hnd, dba_info *info)
 118 
 119 #define DBA_FUNCS(x) \
 120         DBA_OPEN_FUNC(x); \
 121         DBA_CLOSE_FUNC(x); \
 122         DBA_FETCH_FUNC(x); \
 123         DBA_UPDATE_FUNC(x); \
 124         DBA_DELETE_FUNC(x); \
 125         DBA_EXISTS_FUNC(x); \
 126         DBA_FIRSTKEY_FUNC(x); \
 127         DBA_NEXTKEY_FUNC(x); \
 128         DBA_OPTIMIZE_FUNC(x); \
 129         DBA_SYNC_FUNC(x); \
 130         DBA_INFO_FUNC(x)
 131 
 132 PHP_FUNCTION(dba_open);
 133 PHP_FUNCTION(dba_popen);
 134 PHP_FUNCTION(dba_close);
 135 PHP_FUNCTION(dba_firstkey);
 136 PHP_FUNCTION(dba_nextkey);
 137 PHP_FUNCTION(dba_replace);
 138 PHP_FUNCTION(dba_insert);
 139 PHP_FUNCTION(dba_delete);
 140 PHP_FUNCTION(dba_exists);
 141 PHP_FUNCTION(dba_fetch);
 142 PHP_FUNCTION(dba_optimize);
 143 PHP_FUNCTION(dba_sync);
 144 PHP_FUNCTION(dba_handlers);
 145 PHP_FUNCTION(dba_list);
 146 PHP_FUNCTION(dba_key_split);
 147 
 148 #else
 149 #define dba_module_ptr NULL
 150 #endif
 151 
 152 #define phpext_dba_ptr dba_module_ptr
 153 
 154 #endif

/* [<][>][^][v][top][bottom][index][help] */