Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(238)

Side by Side Diff: third_party/sqlite/sqlite-src-3080704/src/test_quota.h

Issue 883353008: [sql] Import reference version of SQLite 3.8.7.4. (Closed) Base URL: http://chromium.googlesource.com/chromium/src.git@master
Patch Set: Hold back encoding change which is messing up patch. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 ** 2011 December 1
3 **
4 ** The author disclaims copyright to this source code. In place of
5 ** a legal notice, here is a blessing:
6 **
7 ** May you do good and not evil.
8 ** May you find forgiveness for yourself and forgive others.
9 ** May you share freely, never taking more than you give.
10 **
11 *************************************************************************
12 **
13 ** This file contains the interface definition for the quota a VFS shim.
14 **
15 ** This particular shim enforces a quota system on files. One or more
16 ** database files are in a "quota group" that is defined by a GLOB
17 ** pattern. A quota is set for the combined size of all files in the
18 ** the group. A quota of zero means "no limit". If the total size
19 ** of all files in the quota group is greater than the limit, then
20 ** write requests that attempt to enlarge a file fail with SQLITE_FULL.
21 **
22 ** However, before returning SQLITE_FULL, the write requests invoke
23 ** a callback function that is configurable for each quota group.
24 ** This callback has the opportunity to enlarge the quota. If the
25 ** callback does enlarge the quota such that the total size of all
26 ** files within the group is less than the new quota, then the write
27 ** continues as if nothing had happened.
28 */
29 #ifndef _QUOTA_H_
30 #include "sqlite3.h"
31 #include <stdio.h>
32 #include <sys/types.h>
33 #include <sys/stat.h>
34
35 /* Make this callable from C++ */
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39
40 /*
41 ** Initialize the quota VFS shim. Use the VFS named zOrigVfsName
42 ** as the VFS that does the actual work. Use the default if
43 ** zOrigVfsName==NULL.
44 **
45 ** The quota VFS shim is named "quota". It will become the default
46 ** VFS if makeDefault is non-zero.
47 **
48 ** THIS ROUTINE IS NOT THREADSAFE. Call this routine exactly once
49 ** during start-up.
50 */
51 int sqlite3_quota_initialize(const char *zOrigVfsName, int makeDefault);
52
53 /*
54 ** Shutdown the quota system.
55 **
56 ** All SQLite database connections must be closed before calling this
57 ** routine.
58 **
59 ** THIS ROUTINE IS NOT THREADSAFE. Call this routine exactly once while
60 ** shutting down in order to free all remaining quota groups.
61 */
62 int sqlite3_quota_shutdown(void);
63
64 /*
65 ** Create or destroy a quota group.
66 **
67 ** The quota group is defined by the zPattern. When calling this routine
68 ** with a zPattern for a quota group that already exists, this routine
69 ** merely updates the iLimit, xCallback, and pArg values for that quota
70 ** group. If zPattern is new, then a new quota group is created.
71 **
72 ** The zPattern is always compared against the full pathname of the file.
73 ** Even if APIs are called with relative pathnames, SQLite converts the
74 ** name to a full pathname before comparing it against zPattern. zPattern
75 ** is a glob pattern with the following matching rules:
76 **
77 ** '*' Matches any sequence of zero or more characters.
78 **
79 ** '?' Matches exactly one character.
80 **
81 ** [...] Matches one character from the enclosed list of
82 ** characters. "]" can be part of the list if it is
83 ** the first character. Within the list "X-Y" matches
84 ** characters X or Y or any character in between the
85 ** two. Ex: "[0-9]" matches any digit.
86 **
87 ** [^...] Matches one character not in the enclosed list.
88 **
89 ** / Matches either / or \. This allows glob patterns
90 ** containing / to work on both unix and windows.
91 **
92 ** Note that, unlike unix shell globbing, the directory separator "/"
93 ** can match a wildcard. So, for example, the pattern "/abc/xyz/" "*"
94 ** matches any files anywhere in the directory hierarchy beneath
95 ** /abc/xyz.
96 **
97 ** The glob algorithm works on bytes. Multi-byte UTF8 characters are
98 ** matched as if each byte were a separate character.
99 **
100 ** If the iLimit for a quota group is set to zero, then the quota group
101 ** is disabled and will be deleted when the last database connection using
102 ** the quota group is closed.
103 **
104 ** Calling this routine on a zPattern that does not exist and with a
105 ** zero iLimit is a no-op.
106 **
107 ** A quota group must exist with a non-zero iLimit prior to opening
108 ** database connections if those connections are to participate in the
109 ** quota group. Creating a quota group does not affect database connections
110 ** that are already open.
111 **
112 ** The patterns that define the various quota groups should be distinct.
113 ** If the same filename matches more than one quota group pattern, then
114 ** the behavior of this package is undefined.
115 */
116 int sqlite3_quota_set(
117 const char *zPattern, /* The filename pattern */
118 sqlite3_int64 iLimit, /* New quota to set for this quota group */
119 void (*xCallback)( /* Callback invoked when going over quota */
120 const char *zFilename, /* Name of file whose size increases */
121 sqlite3_int64 *piLimit, /* IN/OUT: The current limit */
122 sqlite3_int64 iSize, /* Total size of all files in the group */
123 void *pArg /* Client data */
124 ),
125 void *pArg, /* client data passed thru to callback */
126 void (*xDestroy)(void*) /* Optional destructor for pArg */
127 );
128
129 /*
130 ** Bring the named file under quota management, assuming its name matches
131 ** the glob pattern of some quota group. Or if it is already under
132 ** management, update its size. If zFilename does not match the glob
133 ** pattern of any quota group, this routine is a no-op.
134 */
135 int sqlite3_quota_file(const char *zFilename);
136
137 /*
138 ** The following object serves the same role as FILE in the standard C
139 ** library. It represents an open connection to a file on disk for I/O.
140 **
141 ** A single quota_FILE should not be used by two or more threads at the
142 ** same time. Multiple threads can be using different quota_FILE objects
143 ** simultaneously, but not the same quota_FILE object.
144 */
145 typedef struct quota_FILE quota_FILE;
146
147 /*
148 ** Create a new quota_FILE object used to read and/or write to the
149 ** file zFilename. The zMode parameter is as with standard library zMode.
150 */
151 quota_FILE *sqlite3_quota_fopen(const char *zFilename, const char *zMode);
152
153 /*
154 ** Perform I/O against a quota_FILE object. When doing writes, the
155 ** quota mechanism may result in a short write, in order to prevent
156 ** the sum of sizes of all files from going over quota.
157 */
158 size_t sqlite3_quota_fread(void*, size_t, size_t, quota_FILE*);
159 size_t sqlite3_quota_fwrite(const void*, size_t, size_t, quota_FILE*);
160
161 /*
162 ** Flush all written content held in memory buffers out to disk.
163 ** This is the equivalent of fflush() in the standard library.
164 **
165 ** If the hardSync parameter is true (non-zero) then this routine
166 ** also forces OS buffers to disk - the equivalent of fsync().
167 **
168 ** This routine return zero on success and non-zero if something goes
169 ** wrong.
170 */
171 int sqlite3_quota_fflush(quota_FILE*, int hardSync);
172
173 /*
174 ** Close a quota_FILE object and free all associated resources. The
175 ** file remains under quota management.
176 */
177 int sqlite3_quota_fclose(quota_FILE*);
178
179 /*
180 ** Move the read/write pointer for a quota_FILE object. Or tell the
181 ** current location of the read/write pointer.
182 */
183 int sqlite3_quota_fseek(quota_FILE*, long, int);
184 void sqlite3_quota_rewind(quota_FILE*);
185 long sqlite3_quota_ftell(quota_FILE*);
186
187 /*
188 ** Test the error indicator for the given file.
189 **
190 ** Return non-zero if the error indicator is set.
191 */
192 int sqlite3_quota_ferror(quota_FILE*);
193
194 /*
195 ** Truncate a file previously opened by sqlite3_quota_fopen(). Return
196 ** zero on success and non-zero on any kind of failure.
197 **
198 ** The newSize argument must be less than or equal to the current file size.
199 ** Any attempt to "truncate" a file to a larger size results in
200 ** undefined behavior.
201 */
202 int sqlite3_quota_ftruncate(quota_FILE*, sqlite3_int64 newSize);
203
204 /*
205 ** Return the last modification time of the opened file, in seconds
206 ** since 1970.
207 */
208 int sqlite3_quota_file_mtime(quota_FILE*, time_t *pTime);
209
210 /*
211 ** Return the size of the file as it is known to the quota system.
212 **
213 ** This size might be different from the true size of the file on
214 ** disk if some outside process has modified the file without using the
215 ** quota mechanism, or if calls to sqlite3_quota_fwrite() have occurred
216 ** which have increased the file size, but those writes have not yet been
217 ** forced to disk using sqlite3_quota_fflush().
218 **
219 ** Return -1 if the file is not participating in quota management.
220 */
221 sqlite3_int64 sqlite3_quota_file_size(quota_FILE*);
222
223 /*
224 ** Return the true size of the file.
225 **
226 ** The true size should be the same as the size of the file as known
227 ** to the quota system, however the sizes might be different if the
228 ** file has been extended or truncated via some outside process or if
229 ** pending writes have not yet been flushed to disk.
230 **
231 ** Return -1 if the file does not exist or if the size of the file
232 ** cannot be determined for some reason.
233 */
234 sqlite3_int64 sqlite3_quota_file_truesize(quota_FILE*);
235
236 /*
237 ** Determine the amount of data in bytes available for reading
238 ** in the given file.
239 **
240 ** Return -1 if the amount cannot be determined for some reason.
241 */
242 long sqlite3_quota_file_available(quota_FILE*);
243
244 /*
245 ** Delete a file from the disk, if that file is under quota management.
246 ** Adjust quotas accordingly.
247 **
248 ** If zFilename is the name of a directory that matches one of the
249 ** quota glob patterns, then all files under quota management that
250 ** are contained within that directory are deleted.
251 **
252 ** A standard SQLite result code is returned (SQLITE_OK, SQLITE_NOMEM, etc.)
253 ** When deleting a directory of files, if the deletion of any one
254 ** file fails (for example due to an I/O error), then this routine
255 ** returns immediately, with the error code, and does not try to
256 ** delete any of the other files in the specified directory.
257 **
258 ** All files are removed from quota management and deleted from disk.
259 ** However, no attempt is made to remove empty directories.
260 **
261 ** This routine is a no-op for files that are not under quota management.
262 */
263 int sqlite3_quota_remove(const char *zFilename);
264
265 #ifdef __cplusplus
266 } /* end of the 'extern "C"' block */
267 #endif
268 #endif /* _QUOTA_H_ */
OLDNEW
« no previous file with comments | « third_party/sqlite/sqlite-src-3080704/src/test_pcache.c ('k') | third_party/sqlite/sqlite-src-3080704/src/test_quota.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698