blob: 790c778a359cbd583d5badba1a8abfe07132ab59 [file] [log] [blame]
shanehd50deee2011-03-29 05:06:46 +00001/*
2** 2011 March 18
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 a VFS "shim" - a layer that sits in between the
14** pager and the real VFS.
15**
16** This particular shim enforces a multiplex system on DB files.
17** This shim shards/partitions a single DB file into smaller
18** "chunks" such that the total DB file size may exceed the maximum
19** file size of the underlying file system.
20**
21*/
22
drh43f58d62016-07-09 16:14:45 +000023#ifndef SQLITE_TEST_MULTIPLEX_H
24#define SQLITE_TEST_MULTIPLEX_H
shanehd50deee2011-03-29 05:06:46 +000025
26/*
27** CAPI: File-control Operations Supported by Multiplex VFS
28**
29** Values interpreted by the xFileControl method of a Multiplex VFS db file-handle.
30**
31** MULTIPLEX_CTRL_ENABLE:
32** This file control is used to enable or disable the multiplex
33** shim.
34**
35** MULTIPLEX_CTRL_SET_CHUNK_SIZE:
36** This file control is used to set the maximum allowed chunk
shaneh78c4de42011-03-31 05:31:24 +000037** size for a multiplex file set. The chunk size should be
38** a multiple of SQLITE_MAX_PAGE_SIZE, and will be rounded up
39** if not.
shanehd50deee2011-03-29 05:06:46 +000040**
41** MULTIPLEX_CTRL_SET_MAX_CHUNKS:
42** This file control is used to set the maximum number of chunks
43** allowed to be used for a mutliplex file set.
44*/
45#define MULTIPLEX_CTRL_ENABLE 214014
46#define MULTIPLEX_CTRL_SET_CHUNK_SIZE 214015
47#define MULTIPLEX_CTRL_SET_MAX_CHUNKS 214016
48
drh6e227bf2012-10-29 14:27:26 +000049#ifdef __cplusplus
50extern "C" {
51#endif
52
shaneh78c4de42011-03-31 05:31:24 +000053/*
54** CAPI: Initialize the multiplex VFS shim - sqlite3_multiplex_initialize()
55**
56** Use the VFS named zOrigVfsName as the VFS that does the actual work.
57** Use the default if zOrigVfsName==NULL.
58**
59** The multiplex VFS shim is named "multiplex". It will become the default
60** VFS if makeDefault is non-zero.
61**
62** An auto-extension is registered which will make the function
shanehd8ce22b2011-03-31 13:14:12 +000063** multiplex_control() available to database connections. This
shaneh78c4de42011-03-31 05:31:24 +000064** function gives access to the xFileControl interface of the
65** multiplex VFS shim.
66**
shaneh3801b652011-04-01 14:22:46 +000067** SELECT multiplex_control(<op>,<val>);
shaneh78c4de42011-03-31 05:31:24 +000068**
69** <op>=1 MULTIPLEX_CTRL_ENABLE
shanehd8ce22b2011-03-31 13:14:12 +000070** <val>=0 disable
shaneh78c4de42011-03-31 05:31:24 +000071** <val>=1 enable
shaneh78c4de42011-03-31 05:31:24 +000072**
shaneh3801b652011-04-01 14:22:46 +000073** <op>=2 MULTIPLEX_CTRL_SET_CHUNK_SIZE
shaneh78c4de42011-03-31 05:31:24 +000074** <val> int, chunk size
75**
shaneh3801b652011-04-01 14:22:46 +000076** <op>=3 MULTIPLEX_CTRL_SET_MAX_CHUNKS
shaneh78c4de42011-03-31 05:31:24 +000077** <val> int, max chunks
78**
79** THIS ROUTINE IS NOT THREADSAFE. Call this routine exactly once
80** during start-up.
81*/
82extern int sqlite3_multiplex_initialize(const char *zOrigVfsName, int makeDefault);
83
84/*
85** CAPI: Shutdown the multiplex system - sqlite3_multiplex_shutdown()
86**
87** All SQLite database connections must be closed before calling this
88** routine.
89**
90** THIS ROUTINE IS NOT THREADSAFE. Call this routine exactly once while
91** shutting down in order to free all remaining multiplex groups.
92*/
drha1a82982014-07-30 15:43:05 +000093extern int sqlite3_multiplex_shutdown(int eForce);
shanehd50deee2011-03-29 05:06:46 +000094
drh6e227bf2012-10-29 14:27:26 +000095#ifdef __cplusplus
96} /* End of the 'extern "C"' block */
97#endif
98
drh43f58d62016-07-09 16:14:45 +000099#endif /* SQLITE_TEST_MULTIPLEX_H */