php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
dba_tcadb.c
Go to the documentation of this file.
1/*
2 +----------------------------------------------------------------------+
3 | Copyright (c) The PHP Group |
4 +----------------------------------------------------------------------+
5 | This source file is subject to version 3.01 of the PHP license, |
6 | that is bundled with this package in the file LICENSE, and is |
7 | available through the world-wide-web at the following url: |
8 | https://www.php.net/license/3_01.txt |
9 | If you did not receive a copy of the PHP license and are unable to |
10 | obtain it through the world-wide-web, please send a note to |
11 | license@php.net so we can mail you a copy immediately. |
12 +----------------------------------------------------------------------+
13 | Author: Michael Maclean <mgdm@php.net> |
14 +----------------------------------------------------------------------+
15 */
16
17#ifdef HAVE_CONFIG_H
18#include <config.h>
19#endif
20
21#include "php.h"
22
23#ifdef DBA_TCADB
24#include "php_tcadb.h"
25
26#ifdef TCADB_INCLUDE_FILE
27#include TCADB_INCLUDE_FILE
28#endif
29
30typedef struct {
31 TCADB *tcadb;
32} dba_tcadb_data;
33
34DBA_OPEN_FUNC(tcadb)
35{
36 char *path_string;
37 TCADB *tcadb = tcadbnew();
38
39 if (tcadb) {
40 switch(info->mode) {
41 case DBA_READER:
42 spprintf(&path_string, 0, "%s#mode=r", ZSTR_VAL(info->path));
43 break;
44 case DBA_WRITER:
45 spprintf(&path_string, 0, "%s#mode=w", ZSTR_VAL(info->path));
46 break;
47 case DBA_CREAT:
48 spprintf(&path_string, 0, "%s#mode=wc", ZSTR_VAL(info->path));
49 break;
50 case DBA_TRUNC:
51 spprintf(&path_string, 0, "%s#mode=wct", ZSTR_VAL(info->path));
52 break;
53 default:
54 tcadbdel(tcadb);
55 return FAILURE;
56 }
57
58 if (!tcadbopen(tcadb, path_string)) {
59 efree(path_string);
60 tcadbdel(tcadb);
61 return FAILURE;
62 }
63
64 efree(path_string);
65
66 info->dbf = pemalloc(sizeof(dba_tcadb_data), info->flags & DBA_PERSISTENT);
67 memset(info->dbf, 0, sizeof(dba_tcadb_data));
68 ((dba_tcadb_data *) info->dbf)->tcadb = tcadb;
69 return SUCCESS;
70 }
71
72 return FAILURE;
73}
74
75DBA_CLOSE_FUNC(tcadb)
76{
77 dba_tcadb_data *dba = info->dbf;
78
79 tcadbclose(dba->tcadb);
80 tcadbdel(dba->tcadb);
81 pefree(dba, info->flags & DBA_PERSISTENT);
82}
83
84DBA_FETCH_FUNC(tcadb)
85{
86 dba_tcadb_data *dba = info->dbf;
87 char *value;
88 int value_size;
89 zend_string *fetched_val = NULL;
90
91 value = tcadbget(dba->tcadb, ZSTR_VAL(key), ZSTR_LEN(key), &value_size);
92 if (value) {
93 fetched_val = zend_string_init(value, value_size, /* persistent */ false);
94 tcfree(value);
95 }
96
97 return fetched_val;
98}
99
100DBA_UPDATE_FUNC(tcadb)
101{
102 dba_tcadb_data *dba = info->dbf;
103 int result;
104
105 if (mode == 1) {
106 /* Insert */
107 if (tcadbvsiz(dba->tcadb, ZSTR_VAL(key), ZSTR_LEN(key)) > -1) {
108 return FAILURE;
109 }
110 }
111
112 result = tcadbput(dba->tcadb, ZSTR_VAL(key), ZSTR_LEN(key), ZSTR_VAL(val), ZSTR_LEN(val));
113
114 if (result) {
115 return SUCCESS;
116 }
117
118 php_error_docref(NULL, E_WARNING, "Error updating data");
119 return FAILURE;
120}
121
122DBA_EXISTS_FUNC(tcadb)
123{
124 dba_tcadb_data *dba = info->dbf;
125 char *value;
126 int value_len;
127
128 value = tcadbget(dba->tcadb, ZSTR_VAL(key), ZSTR_LEN(key), &value_len);
129 if (value) {
130 tcfree(value);
131 return SUCCESS;
132 }
133
134 return FAILURE;
135}
136
137DBA_DELETE_FUNC(tcadb)
138{
139 dba_tcadb_data *dba = info->dbf;
140
141 return tcadbout(dba->tcadb, ZSTR_VAL(key), ZSTR_LEN(key)) ? SUCCESS : FAILURE;
142}
143
144DBA_FIRSTKEY_FUNC(tcadb)
145{
146 dba_tcadb_data *dba = info->dbf;
147 int value_size;
148 char *value;
150
151 tcadbiterinit(dba->tcadb);
152
153 value = tcadbiternext(dba->tcadb, &value_size);
154 if (value) {
155 key = zend_string_init(value, value_size, /* persistent */ false);
156 tcfree(value);
157 }
158
159 return key;
160}
161
162DBA_NEXTKEY_FUNC(tcadb)
163{
164 dba_tcadb_data *dba = info->dbf;
165 int value_size;
166 char *value;
168
169 value = tcadbiternext(dba->tcadb, &value_size);
170 if (value) {
171 key = zend_string_init(value, value_size, /* persistent */ false);
172 tcfree(value);
173 }
174
175 return key;
176}
177
178DBA_OPTIMIZE_FUNC(tcadb)
179{
180 dba_tcadb_data *dba = info->dbf;
181
182#if _TC_LIBVER >= 811
183 return tcadboptimize(dba->tcadb, NULL) ? SUCCESS : FAILURE;
184#else
185 return FAILURE;
186#endif
187}
188
189DBA_SYNC_FUNC(tcadb)
190{
191 dba_tcadb_data *dba = info->dbf;
192
193 return tcadbsync(dba->tcadb) ? SUCCESS : FAILURE;
194}
195
196DBA_INFO_FUNC(tcadb)
197{
198 return estrdup(tcversion);
199}
200
201#endif
memset(ptr, 0, type->size)
zval * val
Definition ffi.c:4262
char * mode
#define NULL
Definition gdcache.h:45
#define SUCCESS
Definition hash_sha3.c:261
PHPAPI ZEND_COLD void php_error_docref(const char *docref, int type, const char *format,...)
Definition main.c:1173
unsigned char key[REFLECTION_KEY_LEN]
#define spprintf
Definition spprintf.h:29
#define efree(ptr)
Definition zend_alloc.h:155
#define estrdup(s)
Definition zend_alloc.h:164
#define pefree(ptr, persistent)
Definition zend_alloc.h:191
#define pemalloc(size, persistent)
Definition zend_alloc.h:189
#define E_WARNING
Definition zend_errors.h:24
struct _zend_string zend_string
#define ZSTR_VAL(zstr)
Definition zend_string.h:68
#define ZSTR_LEN(zstr)
Definition zend_string.h:69
@ FAILURE
Definition zend_types.h:61
bool result
value