@@ -0,0 +1,454 @@
1 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
2 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 2016-06-29
3 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
4 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The author disclaims copyright to this source code. In place of
5 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a legal notice, here is a blessing:
6 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
7 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** May you do good and not evil.
8 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** May you find forgiveness for yourself and forgive others.
9 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** May you share freely, never taking more than you give.
10 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
11 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *************************************************************************
12 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
13 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This file demonstrates how to create a table-valued-function that
14 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** returns the values in a C-language array.
15 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Examples:
16 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
17 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SELECT * FROM carray($ptr,5)
18 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
19 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The query above returns 5 integers contained in a C-language array
20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** at the address $ptr. $ptr is a pointer to the array of integers.
21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The pointer value must be assigned to $ptr using the
22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_bind_pointer() interface with a pointer type of "carray".
23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** For example:
24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** static int aX[] = { 53, 9, 17, 2231, 4, 99 };
26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** int i = sqlite3_bind_parameter_index(pStmt, "$ptr");
27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_bind_pointer(pStmt, i, aX, "carray", 0);
28 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** There is an optional third parameter to determine the datatype of
30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the C-language array. Allowed values of the third parameter are
31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 'int32', 'int64', 'double', 'char*'. Example:
32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
33 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SELECT * FROM carray($ptr,10,'char*');
34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The default value of the third parameter is 'int32'.
36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** HOW IT WORKS
38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The carray "function" is really a virtual table with the
40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** following schema:
41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** CREATE TABLE carray(
43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** value,
44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pointer HIDDEN,
45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** count HIDDEN,
46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ctype TEXT HIDDEN
47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** );
48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the hidden columns "pointer" and "count" are unconstrained, then
50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the virtual table has no rows. Otherwise, the virtual table interprets
51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the integer value of "pointer" as a pointer to the array and "count"
52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** as the number of elements in the array. The virtual table steps through
53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the array, element by element.
54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQext.h"
56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_EXTENSION_INIT1E_CORE
57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #include "sqlite3.h"
58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #include <assert.h>
59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #include <string.h>
60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #include "carray.h"
61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Allowed values for the mFlags parameter to sqlite3_carray_bind().
63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Must exactly match the definitions in carray.h.
64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if INTERFACE
66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define CARRAY_INT32 0 /* Data is 32-bit signed integers */
67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define CARRAY_INT64 1 /* Data is 64-bit signed integers */
68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define CARRAY_DOUBLE 2 /* Data is doubles */
69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define CARRAY_TEXT 3 /* Data is char* */
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* INTERFACE */
71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_VIRTUALTABLE
73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Names of allowed datatypes
76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const char *azType[] = { "int32", "int64", "double", "char*" };
78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Structure used to hold the sqlite3_carray_bind() information
81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef struct carray_bind carray_bind;
83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct carray_bind {
84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *aData; /* The data */
85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nData; /* Number of elements */
86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int mFlags; /* Control flags */
87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void (*xDel)(void*); /* Destructor for aData */
88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* carray_cursor is a subclass of sqlite3_vtab_cursor which will
92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** serve as the underlying representation of a cursor that scans
93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** over rows of the result
94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef struct carray_cursor carray_cursor;
96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct carray_cursor {
97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_vtab_cursor base; /* Base class - must be first */
98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 iRowid; /* The rowid */
99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pPtr; /* Pointer to the array of values */
100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 iCnt; /* Number of integers in the array */
101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned char eType; /* One of the CARRAY_type values */
102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The carrayConnect() method is invoked to create a new
106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** carray_vtab that describes the carray virtual table.
107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Think of this routine as the constructor for carray_vtab objects.
109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** All this routine needs to do is:
111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (1) Allocate the carray_vtab object and initialize all fields.
113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (2) Tell SQLite (via the sqlite3_declare_vtab() interface) what the
115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** result set of queries against carray will look like.
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int carrayConnect(
118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3 *db,
119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pAux,
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int argc, const char *const*argv,
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_vtab **ppVtab,
122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char **pzErr
123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_vtab *pNew;
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc;
126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Column numbers */
128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define CARRAY_COLUMN_VALUE 0
129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define CARRAY_COLUMN_POINTER 1
130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define CARRAY_COLUMN_COUNT 2
131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define CARRAY_COLUMN_CTYPE 3
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3_declare_vtab(db,
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "CREATE TABLE x(value,pointer hidden,count hidden,ctype hidden)");
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew = *ppVtab = sqlite3_malloc( sizeof(*pNew) );
137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pNew==0 ) return SQLITE_NOMEM;
138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(pNew, 0, sizeof(*pNew));
139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This method is the destructor for carray_cursor objects.
145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int carrayDisconnect(sqlite3_vtab *pVtab){
147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(pVtab);
148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Constructor for a new carray_cursor object.
153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int carrayOpen(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){
155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ carray_cursor *pCur;
156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCur = sqlite3_malloc( sizeof(*pCur) );
157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pCur==0 ) return SQLITE_NOMEM;
158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(pCur, 0, sizeof(*pCur));
159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *ppCursor = &pCur->base;
160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Destructor for a carray_cursor.
165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int carrayClose(sqlite3_vtab_cursor *cur){
167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(cur);
168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Advance a carray_cursor to its next row of output.
174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int carrayNext(sqlite3_vtab_cursor *cur){
176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ carray_cursor *pCur = (carray_cursor*)cur;
177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCur->iRowid++;
178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return values of columns for the row at which the carray_cursor
183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is currently pointing.
184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int carrayColumn(
186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_vtab_cursor *cur, /* The cursor */
187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_context *ctx, /* First argument to sqlite3_result_...() */
188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i /* Which column to return */
189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ carray_cursor *pCur = (carray_cursor*)cur;
191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 x = 0;
192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ switch( i ){
193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case CARRAY_COLUMN_POINTER: return SQLITE_OK;
194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case CARRAY_COLUMN_COUNT: x = pCur->iCnt; break;
195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case CARRAY_COLUMN_CTYPE: {
196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_text(ctx, azType[pCur->eType], -1, SQLITE_STATIC);
197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ default: {
200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ switch( pCur->eType ){
201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case CARRAY_INT32: {
202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *p = (int*)pCur->pPtr;
203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_int(ctx, p[pCur->iRowid-1]);
204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case CARRAY_INT64: {
207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 *p = (sqlite3_int64*)pCur->pPtr;
208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_int64(ctx, p[pCur->iRowid-1]);
209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case CARRAY_DOUBLE: {
212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double *p = (double*)pCur->pPtr;
213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_double(ctx, p[pCur->iRowid-1]);
214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case CARRAY_TEXT: {
217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char **p = (const char**)pCur->pPtr;
218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_text(ctx, p[pCur->iRowid-1], -1, SQLITE_TRANSIENT);
219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_int64(ctx, x);
225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return the rowid for the current row. In this implementation, the
230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** rowid is the same as the output value.
231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int carrayRowid(sqlite3_vtab_cursor *cur, sqlite_int64 *pRowid){
233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ carray_cursor *pCur = (carray_cursor*)cur;
234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pRowid = pCur->iRowid;
235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return TRUE if the cursor has been moved off of the last
240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** row of output.
241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int carrayEof(sqlite3_vtab_cursor *cur){
243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ carray_cursor *pCur = (carray_cursor*)cur;
244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return pCur->iRowid>pCur->iCnt;
245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This method is called to "rewind" the carray_cursor object back
249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to the first row of output.
250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int carrayFilter(
252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_vtab_cursor *pVtabCursor,
253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int idxNum, const char *idxStr,
254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int argc, sqlite3_value **argv
255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ carray_cursor *pCur = (carray_cursor *)pVtabCursor;
257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCur->pPtr = 0;
258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCur->iCnt = 0;
259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ switch( idxNum ){
260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 1: {
261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ carray_bind *pBind = sqlite3_value_pointer(argv[0], "carray-bind");
262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pBind==0 ) break;
263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCur->pPtr = pBind->aData;
264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCur->iCnt = pBind->nData;
265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCur->eType = pBind->mFlags & 0x03;
266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 2:
269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 3: {
270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCur->pPtr = sqlite3_value_pointer(argv[0], "carray");
271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCur->iCnt = pCur->pPtr ? sqlite3_value_int64(argv[1]) : 0;
272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( idxNum<3 ){
273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCur->eType = CARRAY_INT32;
274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned char i;
276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zType = (const char*)sqlite3_value_text(argv[2]);
277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<sizeof(azType)/sizeof(azType[0]); i++){
278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3_stricmp(zType, azType[i])==0 ) break;
279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i>=sizeof(azType)/sizeof(azType[0]) ){
281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pVtabCursor->pVtab->zErrMsg = sqlite3_mprintf(
282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "unknown datatype: %Q", zType);
283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_ERROR;
284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCur->eType = i;
286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCur->iRowid = 1;
292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLite will invoke this method one or more times while planning a query
297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that uses the carray virtual table. This routine needs to create
298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a query plan for each invocation and compute an estimated cost for that
299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** plan.
300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** In this implementation idxNum is used to represent the
302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** query plan. idxStr is unused.
303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** idxNum is:
305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 1 If only the pointer= constraint exists. In this case, the
307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** parameter must be bound using sqlite3_carray_bind().
308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 2 if the pointer= and count= constraints exist.
310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 3 if the ctype= constraint also exists.
312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** idxNum is 0 otherwise and carray becomes an empty table.
314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int carrayBestIndex(
316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_vtab *tab,
317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_index_info *pIdxInfo
318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i; /* Loop over constraints */
320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ptrIdx = -1; /* Index of the pointer= constraint, or -1 if none */
321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int cntIdx = -1; /* Index of the count= constraint, or -1 if none */
322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ctypeIdx = -1; /* Index of the ctype= constraint, or -1 if none */
323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const struct sqlite3_index_constraint *pConstraint;
325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pConstraint = pIdxInfo->aConstraint;
326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<pIdxInfo->nConstraint; i++, pConstraint++){
327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pConstraint->usable==0 ) continue;
328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pConstraint->op!=SQLITE_INDEX_CONSTRAINT_EQ ) continue;
329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ switch( pConstraint->iColumn ){
330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case CARRAY_COLUMN_POINTER:
331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ptrIdx = i;
332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case CARRAY_COLUMN_COUNT:
334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cntIdx = i;
335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case CARRAY_COLUMN_CTYPE:
337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ctypeIdx = i;
338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ptrIdx>=0 ){
342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdxInfo->aConstraintUsage[ptrIdx].argvIndex = 1;
343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdxInfo->aConstraintUsage[ptrIdx].omit = 1;
344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdxInfo->estimatedCost = (double)1;
345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdxInfo->estimatedRows = 100;
346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdxInfo->idxNum = 1;
347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( cntIdx>=0 ){
348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdxInfo->aConstraintUsage[cntIdx].argvIndex = 2;
349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdxInfo->aConstraintUsage[cntIdx].omit = 1;
350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdxInfo->idxNum = 2;
351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ctypeIdx>=0 ){
352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdxInfo->aConstraintUsage[ctypeIdx].argvIndex = 3;
353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdxInfo->aConstraintUsage[ctypeIdx].omit = 1;
354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdxInfo->idxNum = 3;
355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdxInfo->estimatedCost = (double)2147483647;
359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdxInfo->estimatedRows = 2147483647;
360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdxInfo->idxNum = 0;
361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This following structure defines all the methods for the
367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** carray virtual table.
368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static sqlite3_module carrayModule = {
370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* iVersion */
371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* xCreate */
372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ carrayConnect, /* xConnect */
373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ carrayBestIndex, /* xBestIndex */
374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ carrayDisconnect, /* xDisconnect */
375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* xDestroy */
376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ carrayOpen, /* xOpen - open a cursor */
377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ carrayClose, /* xClose - close a cursor */
378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ carrayFilter, /* xFilter - configure scan constraints */
379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ carrayNext, /* xNext - advance a cursor */
380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ carrayEof, /* xEof - check for end of scan */
381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ carrayColumn, /* xColumn - read data */
382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ carrayRowid, /* xRowid - read data */
383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* xUpdate */
384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* xBegin */
385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* xSync */
386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* xCommit */
387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* xRollback */
388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* xFindMethod */
389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* xRename */
390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Destructor for the carray_bind object
394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void carrayBindDel(void *pPtr){
396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ carray_bind *p = (carray_bind*)pPtr;
397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->xDel!=SQLITE_STATIC ){
398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->xDel(p->aData);
399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(p);
401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Invoke this interface in order to bind to the single-argument
405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** version of CARRAY().
406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef _WIN32
408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ __declspec(dllexport)
409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int sqlite3_carray_bind(
411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_stmt *pStmt,
412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int idx,
413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *aData,
414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nData,
415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int mFlags,
416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void (*xDestroy)(void*)
417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ carray_bind *pNew;
419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew = sqlite3_malloc64(sizeof(*pNew));
421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pNew==0 ){
422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( xDestroy!=SQLITE_STATIC && xDestroy!=SQLITE_TRANSIENT ){
423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ xDestroy(aData);
424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_NOMEM;
426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->nData = nData;
428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->mFlags = mFlags;
429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( xDestroy==SQLITE_TRANSIENT ){
430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 sz = nData;
431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ switch( mFlags & 0x03 ){
432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case CARRAY_INT32: sz *= 4; break;
433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case CARRAY_INT64: sz *= 8; break;
434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case CARRAY_DOUBLE: sz *= 8; break;
435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case CARRAY_TEXT: sz *= sizeof(char*); break;
436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (mFlags & 0x03)==CARRAY_TEXT ){
438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<nData; i++){
439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *z = ((char**)aData)[i];
440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z ) sz += strlen(z) + 1;
441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->aData = sqlite3_malloc64( sz );
444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pNew->aData==0 ){
445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(pNew);
446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_NOMEM;
447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (mFlags & 0x03)==CARRAY_TEXT ){
449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char **az = (char**)pNew->aData;
450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *z = (char*)&az[nData];
451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<nData; i++){
452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zData = ((char**)aData)[i];
453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 n;
454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zDa