Mercurial
annotate third_party/sqlite3/tea/generic/tclsqlite3.c @ 279:b3b547563ec7
Add Google connector service and agent wiki
Implement the C/Seobeo Google Drive and Gmail connector with encrypted OAuth storage, Zenbu authentication, browser testing, AI tool discovery, chunked HTTP decoding, and Bazel coverage. Consolidate repository guidance into progressive wiki documentation and enforce arena-first allocation for new first-party C code.
Co-authored-by: Copilot <[email protected]>
Copilot-Session: 84c338fd-0939-4bb3-b7f3-1062eb213e5d
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Mon, 17 Aug 2026 22:22:36 -0700 |
| parents | 589bab390fb4 |
| children |
| rev | line source |
|---|---|
|
167
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1 #ifdef USE_SYSTEM_SQLITE |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2 # include <sqlite3.h> |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3 #else |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4 # include "sqlite3.c" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
5 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
6 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
7 ** 2001 September 15 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
8 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
9 ** The author disclaims copyright to this source code. In place of |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
10 ** a legal notice, here is a blessing: |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
11 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
12 ** May you do good and not evil. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
13 ** May you find forgiveness for yourself and forgive others. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
14 ** May you share freely, never taking more than you give. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
15 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
16 ************************************************************************* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
17 ** A TCL Interface to SQLite. Append this file to sqlite3.c and |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
18 ** compile the whole thing to build a TCL-enabled version of SQLite. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
19 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
20 ** Compile-time options: |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
21 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
22 ** -DTCLSH Add a "main()" routine that works as a tclsh. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
23 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
24 ** -DTCLSH_INIT_PROC=name |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
25 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
26 ** Invoke name(interp) to initialize the Tcl interpreter. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
27 ** If name(interp) returns a non-NULL string, then run |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
28 ** that string as a Tcl script to launch the application. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
29 ** If name(interp) returns NULL, then run the regular |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
30 ** tclsh-emulator code. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
31 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
32 #ifdef TCLSH_INIT_PROC |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
33 # define TCLSH 1 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
34 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
35 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
36 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
37 ** If requested, include the SQLite compiler options file for MSVC. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
38 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
39 #if defined(INCLUDE_MSVC_H) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
40 # include "msvc.h" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
41 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
42 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
43 /****** Copy of tclsqlite.h ******/ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
44 #if defined(INCLUDE_SQLITE_TCL_H) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
45 # include "sqlite_tcl.h" /* Special case for Windows using STDCALL */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
46 #else |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
47 # include <tcl.h> /* All normal cases */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
48 # ifndef SQLITE_TCLAPI |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
49 # define SQLITE_TCLAPI |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
50 # endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
51 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
52 /* Compatability between Tcl8.6 and Tcl9.0 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
53 #if TCL_MAJOR_VERSION==9 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
54 # define CONST const |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
55 #elif !defined(Tcl_Size) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
56 typedef int Tcl_Size; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
57 # ifndef Tcl_BounceRefCount |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
58 # define Tcl_BounceRefCount(X) Tcl_IncrRefCount(X); Tcl_DecrRefCount(X) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
59 /* https://www.tcl-lang.org/man/tcl9.0/TclLib/Object.html */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
60 # endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
61 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
62 /**** End copy of tclsqlite.h ****/ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
63 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
64 #include <errno.h> |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
65 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
66 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
67 ** Some additional include files are needed if this file is not |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
68 ** appended to the amalgamation. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
69 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
70 #ifndef SQLITE_AMALGAMATION |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
71 # include "sqlite3.h" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
72 # include <stdlib.h> |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
73 # include <string.h> |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
74 # include <assert.h> |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
75 typedef unsigned char u8; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
76 # ifndef SQLITE_PTRSIZE |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
77 # if defined(__SIZEOF_POINTER__) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
78 # define SQLITE_PTRSIZE __SIZEOF_POINTER__ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
79 # elif defined(i386) || defined(__i386__) || defined(_M_IX86) || \ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
80 defined(_M_ARM) || defined(__arm__) || defined(__x86) || \ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
81 (defined(__APPLE__) && defined(__POWERPC__)) || \ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
82 (defined(__TOS_AIX__) && !defined(__64BIT__)) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
83 # define SQLITE_PTRSIZE 4 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
84 # else |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
85 # define SQLITE_PTRSIZE 8 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
86 # endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
87 # endif /* SQLITE_PTRSIZE */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
88 # if defined(HAVE_STDINT_H) || (defined(__STDC_VERSION__) && \ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
89 (__STDC_VERSION__ >= 199901L)) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
90 # include <stdint.h> |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
91 typedef uintptr_t uptr; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
92 # elif SQLITE_PTRSIZE==4 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
93 typedef unsigned int uptr; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
94 # else |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
95 typedef sqlite3_uint64 uptr; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
96 # endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
97 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
98 #include <ctype.h> |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
99 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
100 /* Used to get the current process ID */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
101 #if !defined(_WIN32) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
102 # include <signal.h> |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
103 # include <unistd.h> |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
104 # define GETPID getpid |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
105 #elif !defined(_WIN32_WCE) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
106 # ifndef SQLITE_AMALGAMATION |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
107 # ifndef WIN32_LEAN_AND_MEAN |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
108 # define WIN32_LEAN_AND_MEAN |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
109 # endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
110 # include <windows.h> |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
111 # endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
112 # include <io.h> |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
113 # define isatty(h) _isatty(h) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
114 # define GETPID (int)GetCurrentProcessId |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
115 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
116 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
117 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
118 * Windows needs to know which symbols to export. Unix does not. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
119 * BUILD_sqlite should be undefined for Unix. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
120 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
121 #ifdef BUILD_sqlite |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
122 #undef TCL_STORAGE_CLASS |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
123 #define TCL_STORAGE_CLASS DLLEXPORT |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
124 #endif /* BUILD_sqlite */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
125 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
126 #define NUM_PREPARED_STMTS 10 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
127 #define MAX_PREPARED_STMTS 100 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
128 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
129 /* Forward declaration */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
130 typedef struct SqliteDb SqliteDb; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
131 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
132 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
133 ** New SQL functions can be created as TCL scripts. Each such function |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
134 ** is described by an instance of the following structure. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
135 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
136 ** Variable eType may be set to SQLITE_INTEGER, SQLITE_FLOAT, SQLITE_TEXT, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
137 ** SQLITE_BLOB or SQLITE_NULL. If it is SQLITE_NULL, then the implementation |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
138 ** attempts to determine the type of the result based on the Tcl object. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
139 ** If it is SQLITE_TEXT or SQLITE_BLOB, then a text (sqlite3_result_text()) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
140 ** or blob (sqlite3_result_blob()) is returned. If it is SQLITE_INTEGER |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
141 ** or SQLITE_FLOAT, then an attempt is made to return an integer or float |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
142 ** value, falling back to float and then text if this is not possible. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
143 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
144 typedef struct SqlFunc SqlFunc; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
145 struct SqlFunc { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
146 Tcl_Interp *interp; /* The TCL interpret to execute the function */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
147 Tcl_Obj *pScript; /* The Tcl_Obj representation of the script */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
148 SqliteDb *pDb; /* Database connection that owns this function */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
149 int useEvalObjv; /* True if it is safe to use Tcl_EvalObjv */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
150 int eType; /* Type of value to return */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
151 char *zName; /* Name of this function */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
152 SqlFunc *pNext; /* Next function on the list of them all */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
153 }; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
154 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
155 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
156 ** New collation sequences function can be created as TCL scripts. Each such |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
157 ** function is described by an instance of the following structure. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
158 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
159 typedef struct SqlCollate SqlCollate; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
160 struct SqlCollate { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
161 Tcl_Interp *interp; /* The TCL interpret to execute the function */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
162 char *zScript; /* The script to be run */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
163 SqlCollate *pNext; /* Next function on the list of them all */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
164 }; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
165 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
166 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
167 ** Prepared statements are cached for faster execution. Each prepared |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
168 ** statement is described by an instance of the following structure. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
169 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
170 typedef struct SqlPreparedStmt SqlPreparedStmt; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
171 struct SqlPreparedStmt { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
172 SqlPreparedStmt *pNext; /* Next in linked list */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
173 SqlPreparedStmt *pPrev; /* Previous on the list */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
174 sqlite3_stmt *pStmt; /* The prepared statement */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
175 int nSql; /* chars in zSql[] */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
176 const char *zSql; /* Text of the SQL statement */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
177 int nParm; /* Size of apParm array */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
178 Tcl_Obj **apParm; /* Array of referenced object pointers */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
179 }; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
180 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
181 typedef struct IncrblobChannel IncrblobChannel; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
182 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
183 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
184 ** There is one instance of this structure for each SQLite database |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
185 ** that has been opened by the SQLite TCL interface. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
186 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
187 ** If this module is built with SQLITE_TEST defined (to create the SQLite |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
188 ** testfixture executable), then it may be configured to use either |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
189 ** sqlite3_prepare_v2() or sqlite3_prepare() to prepare SQL statements. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
190 ** If SqliteDb.bLegacyPrepare is true, sqlite3_prepare() is used. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
191 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
192 struct SqliteDb { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
193 sqlite3 *db; /* The "real" database structure. MUST BE FIRST */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
194 Tcl_Interp *interp; /* The interpreter used for this database */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
195 char *zBusy; /* The busy callback routine */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
196 char *zCommit; /* The commit hook callback routine */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
197 char *zTrace; /* The trace callback routine */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
198 char *zTraceV2; /* The trace_v2 callback routine */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
199 char *zProfile; /* The profile callback routine */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
200 char *zProgress; /* The progress callback routine */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
201 char *zBindFallback; /* Callback to invoke on a binding miss */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
202 char *zAuth; /* The authorization callback routine */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
203 int disableAuth; /* Disable the authorizer if it exists */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
204 char *zNull; /* Text to substitute for an SQL NULL value */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
205 SqlFunc *pFunc; /* List of SQL functions */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
206 Tcl_Obj *pUpdateHook; /* Update hook script (if any) */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
207 Tcl_Obj *pPreUpdateHook; /* Pre-update hook script (if any) */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
208 Tcl_Obj *pRollbackHook; /* Rollback hook script (if any) */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
209 Tcl_Obj *pWalHook; /* WAL hook script (if any) */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
210 Tcl_Obj *pUnlockNotify; /* Unlock notify script (if any) */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
211 SqlCollate *pCollate; /* List of SQL collation functions */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
212 int rc; /* Return code of most recent sqlite3_exec() */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
213 Tcl_Obj *pCollateNeeded; /* Collation needed script */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
214 SqlPreparedStmt *stmtList; /* List of prepared statements*/ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
215 SqlPreparedStmt *stmtLast; /* Last statement in the list */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
216 int maxStmt; /* The next maximum number of stmtList */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
217 int nStmt; /* Number of statements in stmtList */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
218 IncrblobChannel *pIncrblob;/* Linked list of open incrblob channels */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
219 int nStep, nSort, nIndex; /* Statistics for most recent operation */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
220 int nVMStep; /* Another statistic for most recent operation */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
221 int nTransaction; /* Number of nested [transaction] methods */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
222 int openFlags; /* Flags used to open. (SQLITE_OPEN_URI) */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
223 int nRef; /* Delete object when this reaches 0 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
224 #ifdef SQLITE_TEST |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
225 int bLegacyPrepare; /* True to use sqlite3_prepare() */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
226 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
227 }; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
228 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
229 struct IncrblobChannel { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
230 sqlite3_blob *pBlob; /* sqlite3 blob handle */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
231 SqliteDb *pDb; /* Associated database connection */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
232 sqlite3_int64 iSeek; /* Current seek offset */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
233 unsigned int isClosed; /* TCL_CLOSE_READ or TCL_CLOSE_WRITE */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
234 Tcl_Channel channel; /* Channel identifier */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
235 IncrblobChannel *pNext; /* Linked list of all open incrblob channels */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
236 IncrblobChannel *pPrev; /* Linked list of all open incrblob channels */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
237 }; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
238 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
239 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
240 ** Compute a string length that is limited to what can be stored in |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
241 ** lower 30 bits of a 32-bit signed integer. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
242 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
243 static int strlen30(const char *z){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
244 const char *z2 = z; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
245 while( *z2 ){ z2++; } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
246 return 0x3fffffff & (int)(z2 - z); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
247 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
248 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
249 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
250 #ifndef SQLITE_OMIT_INCRBLOB |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
251 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
252 ** Close all incrblob channels opened using database connection pDb. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
253 ** This is called when shutting down the database connection. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
254 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
255 static void closeIncrblobChannels(SqliteDb *pDb){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
256 IncrblobChannel *p; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
257 IncrblobChannel *pNext; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
258 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
259 for(p=pDb->pIncrblob; p; p=pNext){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
260 pNext = p->pNext; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
261 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
262 /* Note: Calling unregister here call Tcl_Close on the incrblob channel, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
263 ** which deletes the IncrblobChannel structure at *p. So do not |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
264 ** call Tcl_Free() here. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
265 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
266 Tcl_UnregisterChannel(pDb->interp, p->channel); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
267 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
268 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
269 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
270 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
271 ** Close an incremental blob channel. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
272 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
273 static int SQLITE_TCLAPI incrblobClose2( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
274 ClientData instanceData, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
275 Tcl_Interp *interp, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
276 int flags |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
277 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
278 IncrblobChannel *p = (IncrblobChannel *)instanceData; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
279 int rc; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
280 sqlite3 *db = p->pDb->db; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
281 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
282 if( flags ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
283 p->isClosed |= flags; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
284 return TCL_OK; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
285 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
286 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
287 /* If we reach this point, then we really do need to close the channel */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
288 rc = sqlite3_blob_close(p->pBlob); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
289 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
290 /* Remove the channel from the SqliteDb.pIncrblob list. */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
291 if( p->pNext ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
292 p->pNext->pPrev = p->pPrev; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
293 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
294 if( p->pPrev ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
295 p->pPrev->pNext = p->pNext; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
296 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
297 if( p->pDb->pIncrblob==p ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
298 p->pDb->pIncrblob = p->pNext; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
299 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
300 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
301 /* Free the IncrblobChannel structure */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
302 Tcl_Free((char *)p); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
303 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
304 if( rc!=SQLITE_OK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
305 Tcl_SetResult(interp, (char *)sqlite3_errmsg(db), TCL_VOLATILE); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
306 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
307 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
308 return TCL_OK; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
309 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
310 static int SQLITE_TCLAPI incrblobClose( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
311 ClientData instanceData, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
312 Tcl_Interp *interp |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
313 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
314 return incrblobClose2(instanceData, interp, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
315 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
316 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
317 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
318 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
319 ** Read data from an incremental blob channel. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
320 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
321 static int SQLITE_TCLAPI incrblobInput( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
322 ClientData instanceData, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
323 char *buf, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
324 int bufSize, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
325 int *errorCodePtr |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
326 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
327 IncrblobChannel *p = (IncrblobChannel *)instanceData; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
328 sqlite3_int64 nRead = bufSize; /* Number of bytes to read */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
329 sqlite3_int64 nBlob; /* Total size of the blob */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
330 int rc; /* sqlite error code */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
331 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
332 nBlob = sqlite3_blob_bytes(p->pBlob); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
333 if( (p->iSeek+nRead)>nBlob ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
334 nRead = nBlob-p->iSeek; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
335 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
336 if( nRead<=0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
337 return 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
338 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
339 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
340 rc = sqlite3_blob_read(p->pBlob, (void *)buf, (int)nRead, (int)p->iSeek); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
341 if( rc!=SQLITE_OK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
342 *errorCodePtr = rc; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
343 return -1; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
344 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
345 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
346 p->iSeek += nRead; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
347 return nRead; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
348 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
349 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
350 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
351 ** Write data to an incremental blob channel. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
352 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
353 static int SQLITE_TCLAPI incrblobOutput( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
354 ClientData instanceData, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
355 const char *buf, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
356 int toWrite, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
357 int *errorCodePtr |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
358 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
359 IncrblobChannel *p = (IncrblobChannel *)instanceData; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
360 sqlite3_int64 nWrite = toWrite; /* Number of bytes to write */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
361 sqlite3_int64 nBlob; /* Total size of the blob */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
362 int rc; /* sqlite error code */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
363 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
364 nBlob = sqlite3_blob_bytes(p->pBlob); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
365 if( (p->iSeek+nWrite)>nBlob ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
366 *errorCodePtr = EINVAL; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
367 return -1; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
368 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
369 if( nWrite<=0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
370 return 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
371 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
372 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
373 rc = sqlite3_blob_write(p->pBlob, (void*)buf,(int)nWrite, (int)p->iSeek); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
374 if( rc!=SQLITE_OK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
375 *errorCodePtr = EIO; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
376 return -1; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
377 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
378 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
379 p->iSeek += nWrite; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
380 return nWrite; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
381 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
382 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
383 /* The datatype of Tcl_DriverWideSeekProc changes between tcl8.6 and tcl9.0 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
384 #if TCL_MAJOR_VERSION==9 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
385 # define WideSeekProcType long long |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
386 #else |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
387 # define WideSeekProcType Tcl_WideInt |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
388 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
389 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
390 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
391 ** Seek an incremental blob channel. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
392 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
393 static WideSeekProcType SQLITE_TCLAPI incrblobWideSeek( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
394 ClientData instanceData, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
395 WideSeekProcType offset, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
396 int seekMode, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
397 int *errorCodePtr |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
398 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
399 IncrblobChannel *p = (IncrblobChannel *)instanceData; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
400 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
401 switch( seekMode ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
402 case SEEK_SET: |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
403 p->iSeek = offset; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
404 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
405 case SEEK_CUR: |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
406 p->iSeek += offset; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
407 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
408 case SEEK_END: |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
409 p->iSeek = sqlite3_blob_bytes(p->pBlob) + offset; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
410 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
411 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
412 default: assert(!"Bad seekMode"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
413 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
414 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
415 return p->iSeek; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
416 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
417 static int SQLITE_TCLAPI incrblobSeek( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
418 ClientData instanceData, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
419 long offset, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
420 int seekMode, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
421 int *errorCodePtr |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
422 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
423 return incrblobWideSeek(instanceData,offset,seekMode,errorCodePtr); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
424 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
425 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
426 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
427 static void SQLITE_TCLAPI incrblobWatch( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
428 ClientData instanceData, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
429 int mode |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
430 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
431 /* NO-OP */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
432 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
433 static int SQLITE_TCLAPI incrblobHandle( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
434 ClientData instanceData, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
435 int dir, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
436 ClientData *hPtr |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
437 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
438 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
439 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
440 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
441 static Tcl_ChannelType IncrblobChannelType = { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
442 "incrblob", /* typeName */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
443 TCL_CHANNEL_VERSION_5, /* version */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
444 incrblobClose, /* closeProc */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
445 incrblobInput, /* inputProc */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
446 incrblobOutput, /* outputProc */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
447 incrblobSeek, /* seekProc */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
448 0, /* setOptionProc */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
449 0, /* getOptionProc */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
450 incrblobWatch, /* watchProc (this is a no-op) */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
451 incrblobHandle, /* getHandleProc (always returns error) */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
452 incrblobClose2, /* close2Proc */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
453 0, /* blockModeProc */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
454 0, /* flushProc */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
455 0, /* handlerProc */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
456 incrblobWideSeek, /* wideSeekProc */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
457 }; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
458 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
459 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
460 ** Create a new incrblob channel. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
461 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
462 static int createIncrblobChannel( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
463 Tcl_Interp *interp, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
464 SqliteDb *pDb, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
465 const char *zDb, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
466 const char *zTable, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
467 const char *zColumn, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
468 sqlite_int64 iRow, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
469 int isReadonly |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
470 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
471 IncrblobChannel *p; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
472 sqlite3 *db = pDb->db; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
473 sqlite3_blob *pBlob; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
474 int rc; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
475 int flags = TCL_READABLE|(isReadonly ? 0 : TCL_WRITABLE); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
476 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
477 /* This variable is used to name the channels: "incrblob_[incr count]" */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
478 static int count = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
479 char zChannel[64]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
480 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
481 rc = sqlite3_blob_open(db, zDb, zTable, zColumn, iRow, !isReadonly, &pBlob); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
482 if( rc!=SQLITE_OK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
483 Tcl_SetResult(interp, (char *)sqlite3_errmsg(pDb->db), TCL_VOLATILE); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
484 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
485 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
486 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
487 p = (IncrblobChannel *)Tcl_Alloc(sizeof(IncrblobChannel)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
488 memset(p, 0, sizeof(*p)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
489 p->pBlob = pBlob; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
490 if( (flags & TCL_WRITABLE)==0 ) p->isClosed |= TCL_CLOSE_WRITE; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
491 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
492 sqlite3_snprintf(sizeof(zChannel), zChannel, "incrblob_%d", ++count); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
493 p->channel = Tcl_CreateChannel(&IncrblobChannelType, zChannel, p, flags); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
494 Tcl_RegisterChannel(interp, p->channel); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
495 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
496 /* Link the new channel into the SqliteDb.pIncrblob list. */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
497 p->pNext = pDb->pIncrblob; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
498 p->pPrev = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
499 if( p->pNext ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
500 p->pNext->pPrev = p; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
501 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
502 pDb->pIncrblob = p; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
503 p->pDb = pDb; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
504 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
505 Tcl_SetResult(interp, (char *)Tcl_GetChannelName(p->channel), TCL_VOLATILE); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
506 return TCL_OK; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
507 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
508 #else /* else clause for "#ifndef SQLITE_OMIT_INCRBLOB" */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
509 #define closeIncrblobChannels(pDb) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
510 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
511 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
512 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
513 ** Look at the script prefix in pCmd. We will be executing this script |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
514 ** after first appending one or more arguments. This routine analyzes |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
515 ** the script to see if it is safe to use Tcl_EvalObjv() on the script |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
516 ** rather than the more general Tcl_EvalEx(). Tcl_EvalObjv() is much |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
517 ** faster. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
518 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
519 ** Scripts that are safe to use with Tcl_EvalObjv() consists of a |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
520 ** command name followed by zero or more arguments with no [...] or $ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
521 ** or {...} or ; to be seen anywhere. Most callback scripts consist |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
522 ** of just a single procedure name and they meet this requirement. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
523 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
524 static int safeToUseEvalObjv(Tcl_Obj *pCmd){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
525 /* We could try to do something with Tcl_Parse(). But we will instead |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
526 ** just do a search for forbidden characters. If any of the forbidden |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
527 ** characters appear in pCmd, we will report the string as unsafe. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
528 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
529 const char *z; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
530 Tcl_Size n; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
531 z = Tcl_GetStringFromObj(pCmd, &n); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
532 while( n-- > 0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
533 int c = *(z++); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
534 if( c=='$' || c=='[' || c==';' ) return 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
535 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
536 return 1; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
537 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
538 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
539 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
540 ** Find an SqlFunc structure with the given name. Or create a new |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
541 ** one if an existing one cannot be found. Return a pointer to the |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
542 ** structure. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
543 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
544 static SqlFunc *findSqlFunc(SqliteDb *pDb, const char *zName){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
545 SqlFunc *p, *pNew; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
546 int nName = strlen30(zName); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
547 pNew = (SqlFunc*)Tcl_Alloc( sizeof(*pNew) + nName + 1 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
548 pNew->zName = (char*)&pNew[1]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
549 memcpy(pNew->zName, zName, nName+1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
550 for(p=pDb->pFunc; p; p=p->pNext){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
551 if( sqlite3_stricmp(p->zName, pNew->zName)==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
552 Tcl_Free((char*)pNew); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
553 return p; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
554 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
555 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
556 pNew->interp = pDb->interp; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
557 pNew->pDb = pDb; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
558 pNew->pScript = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
559 pNew->pNext = pDb->pFunc; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
560 pDb->pFunc = pNew; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
561 return pNew; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
562 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
563 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
564 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
565 ** Free a single SqlPreparedStmt object. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
566 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
567 static void dbFreeStmt(SqlPreparedStmt *pStmt){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
568 #ifdef SQLITE_TEST |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
569 if( sqlite3_sql(pStmt->pStmt)==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
570 Tcl_Free((char *)pStmt->zSql); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
571 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
572 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
573 sqlite3_finalize(pStmt->pStmt); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
574 Tcl_Free((char *)pStmt); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
575 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
576 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
577 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
578 ** Finalize and free a list of prepared statements |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
579 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
580 static void flushStmtCache(SqliteDb *pDb){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
581 SqlPreparedStmt *pPreStmt; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
582 SqlPreparedStmt *pNext; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
583 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
584 for(pPreStmt = pDb->stmtList; pPreStmt; pPreStmt=pNext){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
585 pNext = pPreStmt->pNext; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
586 dbFreeStmt(pPreStmt); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
587 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
588 pDb->nStmt = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
589 pDb->stmtLast = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
590 pDb->stmtList = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
591 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
592 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
593 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
594 ** Increment the reference counter on the SqliteDb object. The reference |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
595 ** should be released by calling delDatabaseRef(). |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
596 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
597 static void addDatabaseRef(SqliteDb *pDb){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
598 pDb->nRef++; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
599 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
600 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
601 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
602 ** Decrement the reference counter associated with the SqliteDb object. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
603 ** If it reaches zero, delete the object. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
604 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
605 static void delDatabaseRef(SqliteDb *pDb){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
606 assert( pDb->nRef>0 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
607 pDb->nRef--; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
608 if( pDb->nRef==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
609 flushStmtCache(pDb); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
610 closeIncrblobChannels(pDb); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
611 sqlite3_close(pDb->db); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
612 while( pDb->pFunc ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
613 SqlFunc *pFunc = pDb->pFunc; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
614 pDb->pFunc = pFunc->pNext; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
615 assert( pFunc->pDb==pDb ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
616 Tcl_DecrRefCount(pFunc->pScript); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
617 Tcl_Free((char*)pFunc); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
618 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
619 while( pDb->pCollate ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
620 SqlCollate *pCollate = pDb->pCollate; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
621 pDb->pCollate = pCollate->pNext; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
622 Tcl_Free((char*)pCollate); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
623 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
624 if( pDb->zBusy ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
625 Tcl_Free(pDb->zBusy); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
626 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
627 if( pDb->zTrace ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
628 Tcl_Free(pDb->zTrace); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
629 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
630 if( pDb->zTraceV2 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
631 Tcl_Free(pDb->zTraceV2); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
632 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
633 if( pDb->zProfile ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
634 Tcl_Free(pDb->zProfile); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
635 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
636 if( pDb->zBindFallback ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
637 Tcl_Free(pDb->zBindFallback); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
638 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
639 if( pDb->zAuth ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
640 Tcl_Free(pDb->zAuth); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
641 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
642 if( pDb->zNull ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
643 Tcl_Free(pDb->zNull); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
644 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
645 if( pDb->pUpdateHook ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
646 Tcl_DecrRefCount(pDb->pUpdateHook); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
647 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
648 if( pDb->pPreUpdateHook ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
649 Tcl_DecrRefCount(pDb->pPreUpdateHook); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
650 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
651 if( pDb->pRollbackHook ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
652 Tcl_DecrRefCount(pDb->pRollbackHook); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
653 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
654 if( pDb->pWalHook ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
655 Tcl_DecrRefCount(pDb->pWalHook); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
656 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
657 if( pDb->pCollateNeeded ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
658 Tcl_DecrRefCount(pDb->pCollateNeeded); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
659 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
660 Tcl_Free((char*)pDb); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
661 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
662 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
663 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
664 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
665 ** TCL calls this procedure when an sqlite3 database command is |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
666 ** deleted. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
667 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
668 static void SQLITE_TCLAPI DbDeleteCmd(void *db){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
669 SqliteDb *pDb = (SqliteDb*)db; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
670 delDatabaseRef(pDb); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
671 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
672 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
673 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
674 ** This routine is called when a database file is locked while trying |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
675 ** to execute SQL. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
676 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
677 static int DbBusyHandler(void *cd, int nTries){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
678 SqliteDb *pDb = (SqliteDb*)cd; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
679 int rc; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
680 char zVal[30]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
681 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
682 sqlite3_snprintf(sizeof(zVal), zVal, "%d", nTries); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
683 rc = Tcl_VarEval(pDb->interp, pDb->zBusy, " ", zVal, (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
684 if( rc!=TCL_OK || atoi(Tcl_GetStringResult(pDb->interp)) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
685 return 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
686 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
687 return 1; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
688 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
689 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
690 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
691 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
692 ** This routine is invoked as the 'progress callback' for the database. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
693 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
694 static int DbProgressHandler(void *cd){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
695 SqliteDb *pDb = (SqliteDb*)cd; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
696 int rc; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
697 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
698 assert( pDb->zProgress ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
699 rc = Tcl_Eval(pDb->interp, pDb->zProgress); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
700 if( rc!=TCL_OK || atoi(Tcl_GetStringResult(pDb->interp)) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
701 return 1; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
702 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
703 return 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
704 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
705 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
706 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
707 #if !defined(SQLITE_OMIT_TRACE) && !defined(SQLITE_OMIT_FLOATING_POINT) && \ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
708 !defined(SQLITE_OMIT_DEPRECATED) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
709 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
710 ** This routine is called by the SQLite trace handler whenever a new |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
711 ** block of SQL is executed. The TCL script in pDb->zTrace is executed. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
712 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
713 static void DbTraceHandler(void *cd, const char *zSql){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
714 SqliteDb *pDb = (SqliteDb*)cd; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
715 Tcl_DString str; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
716 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
717 Tcl_DStringInit(&str); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
718 Tcl_DStringAppend(&str, pDb->zTrace, -1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
719 Tcl_DStringAppendElement(&str, zSql); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
720 Tcl_Eval(pDb->interp, Tcl_DStringValue(&str)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
721 Tcl_DStringFree(&str); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
722 Tcl_ResetResult(pDb->interp); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
723 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
724 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
725 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
726 #ifndef SQLITE_OMIT_TRACE |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
727 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
728 ** This routine is called by the SQLite trace_v2 handler whenever a new |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
729 ** supported event is generated. Unsupported event types are ignored. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
730 ** The TCL script in pDb->zTraceV2 is executed, with the arguments for |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
731 ** the event appended to it (as list elements). |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
732 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
733 static int DbTraceV2Handler( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
734 unsigned type, /* One of the SQLITE_TRACE_* event types. */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
735 void *cd, /* The original context data pointer. */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
736 void *pd, /* Primary event data, depends on event type. */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
737 void *xd /* Extra event data, depends on event type. */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
738 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
739 SqliteDb *pDb = (SqliteDb*)cd; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
740 Tcl_Obj *pCmd; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
741 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
742 switch( type ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
743 case SQLITE_TRACE_STMT: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
744 sqlite3_stmt *pStmt = (sqlite3_stmt *)pd; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
745 char *zSql = (char *)xd; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
746 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
747 pCmd = Tcl_NewStringObj(pDb->zTraceV2, -1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
748 Tcl_IncrRefCount(pCmd); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
749 Tcl_ListObjAppendElement(pDb->interp, pCmd, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
750 Tcl_NewWideIntObj((Tcl_WideInt)(uptr)pStmt)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
751 Tcl_ListObjAppendElement(pDb->interp, pCmd, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
752 Tcl_NewStringObj(zSql, -1)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
753 Tcl_EvalObjEx(pDb->interp, pCmd, TCL_EVAL_DIRECT); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
754 Tcl_DecrRefCount(pCmd); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
755 Tcl_ResetResult(pDb->interp); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
756 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
757 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
758 case SQLITE_TRACE_PROFILE: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
759 sqlite3_stmt *pStmt = (sqlite3_stmt *)pd; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
760 sqlite3_int64 ns = *(sqlite3_int64*)xd; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
761 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
762 pCmd = Tcl_NewStringObj(pDb->zTraceV2, -1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
763 Tcl_IncrRefCount(pCmd); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
764 Tcl_ListObjAppendElement(pDb->interp, pCmd, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
765 Tcl_NewWideIntObj((Tcl_WideInt)(uptr)pStmt)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
766 Tcl_ListObjAppendElement(pDb->interp, pCmd, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
767 Tcl_NewWideIntObj((Tcl_WideInt)ns)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
768 Tcl_EvalObjEx(pDb->interp, pCmd, TCL_EVAL_DIRECT); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
769 Tcl_DecrRefCount(pCmd); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
770 Tcl_ResetResult(pDb->interp); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
771 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
772 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
773 case SQLITE_TRACE_ROW: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
774 sqlite3_stmt *pStmt = (sqlite3_stmt *)pd; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
775 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
776 pCmd = Tcl_NewStringObj(pDb->zTraceV2, -1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
777 Tcl_IncrRefCount(pCmd); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
778 Tcl_ListObjAppendElement(pDb->interp, pCmd, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
779 Tcl_NewWideIntObj((Tcl_WideInt)(uptr)pStmt)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
780 Tcl_EvalObjEx(pDb->interp, pCmd, TCL_EVAL_DIRECT); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
781 Tcl_DecrRefCount(pCmd); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
782 Tcl_ResetResult(pDb->interp); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
783 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
784 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
785 case SQLITE_TRACE_CLOSE: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
786 sqlite3 *db = (sqlite3 *)pd; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
787 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
788 pCmd = Tcl_NewStringObj(pDb->zTraceV2, -1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
789 Tcl_IncrRefCount(pCmd); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
790 Tcl_ListObjAppendElement(pDb->interp, pCmd, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
791 Tcl_NewWideIntObj((Tcl_WideInt)(uptr)db)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
792 Tcl_EvalObjEx(pDb->interp, pCmd, TCL_EVAL_DIRECT); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
793 Tcl_DecrRefCount(pCmd); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
794 Tcl_ResetResult(pDb->interp); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
795 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
796 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
797 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
798 return SQLITE_OK; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
799 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
800 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
801 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
802 #if !defined(SQLITE_OMIT_TRACE) && !defined(SQLITE_OMIT_FLOATING_POINT) && \ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
803 !defined(SQLITE_OMIT_DEPRECATED) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
804 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
805 ** This routine is called by the SQLite profile handler after a statement |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
806 ** SQL has executed. The TCL script in pDb->zProfile is evaluated. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
807 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
808 static void DbProfileHandler(void *cd, const char *zSql, sqlite_uint64 tm){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
809 SqliteDb *pDb = (SqliteDb*)cd; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
810 Tcl_DString str; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
811 char zTm[100]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
812 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
813 sqlite3_snprintf(sizeof(zTm)-1, zTm, "%lld", tm); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
814 Tcl_DStringInit(&str); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
815 Tcl_DStringAppend(&str, pDb->zProfile, -1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
816 Tcl_DStringAppendElement(&str, zSql); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
817 Tcl_DStringAppendElement(&str, zTm); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
818 Tcl_Eval(pDb->interp, Tcl_DStringValue(&str)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
819 Tcl_DStringFree(&str); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
820 Tcl_ResetResult(pDb->interp); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
821 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
822 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
823 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
824 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
825 ** This routine is called when a transaction is committed. The |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
826 ** TCL script in pDb->zCommit is executed. If it returns non-zero or |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
827 ** if it throws an exception, the transaction is rolled back instead |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
828 ** of being committed. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
829 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
830 static int DbCommitHandler(void *cd){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
831 SqliteDb *pDb = (SqliteDb*)cd; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
832 int rc; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
833 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
834 rc = Tcl_Eval(pDb->interp, pDb->zCommit); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
835 if( rc!=TCL_OK || atoi(Tcl_GetStringResult(pDb->interp)) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
836 return 1; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
837 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
838 return 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
839 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
840 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
841 static void DbRollbackHandler(void *clientData){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
842 SqliteDb *pDb = (SqliteDb*)clientData; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
843 assert(pDb->pRollbackHook); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
844 if( TCL_OK!=Tcl_EvalObjEx(pDb->interp, pDb->pRollbackHook, 0) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
845 Tcl_BackgroundError(pDb->interp); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
846 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
847 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
848 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
849 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
850 ** This procedure handles wal_hook callbacks. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
851 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
852 static int DbWalHandler( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
853 void *clientData, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
854 sqlite3 *db, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
855 const char *zDb, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
856 int nEntry |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
857 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
858 int ret = SQLITE_OK; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
859 Tcl_Obj *p; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
860 SqliteDb *pDb = (SqliteDb*)clientData; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
861 Tcl_Interp *interp = pDb->interp; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
862 assert(pDb->pWalHook); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
863 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
864 assert( db==pDb->db ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
865 p = Tcl_DuplicateObj(pDb->pWalHook); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
866 Tcl_IncrRefCount(p); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
867 Tcl_ListObjAppendElement(interp, p, Tcl_NewStringObj(zDb, -1)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
868 Tcl_ListObjAppendElement(interp, p, Tcl_NewIntObj(nEntry)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
869 if( TCL_OK!=Tcl_EvalObjEx(interp, p, 0) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
870 || TCL_OK!=Tcl_GetIntFromObj(interp, Tcl_GetObjResult(interp), &ret) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
871 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
872 Tcl_BackgroundError(interp); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
873 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
874 Tcl_DecrRefCount(p); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
875 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
876 return ret; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
877 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
878 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
879 #if defined(SQLITE_TEST) && defined(SQLITE_ENABLE_UNLOCK_NOTIFY) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
880 static void setTestUnlockNotifyVars(Tcl_Interp *interp, int iArg, int nArg){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
881 char zBuf[64]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
882 sqlite3_snprintf(sizeof(zBuf), zBuf, "%d", iArg); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
883 Tcl_SetVar(interp, "sqlite_unlock_notify_arg", zBuf, TCL_GLOBAL_ONLY); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
884 sqlite3_snprintf(sizeof(zBuf), zBuf, "%d", nArg); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
885 Tcl_SetVar(interp, "sqlite_unlock_notify_argcount", zBuf, TCL_GLOBAL_ONLY); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
886 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
887 #else |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
888 # define setTestUnlockNotifyVars(x,y,z) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
889 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
890 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
891 #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
892 static void DbUnlockNotify(void **apArg, int nArg){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
893 int i; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
894 for(i=0; i<nArg; i++){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
895 const int flags = (TCL_EVAL_GLOBAL|TCL_EVAL_DIRECT); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
896 SqliteDb *pDb = (SqliteDb *)apArg[i]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
897 setTestUnlockNotifyVars(pDb->interp, i, nArg); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
898 assert( pDb->pUnlockNotify); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
899 Tcl_EvalObjEx(pDb->interp, pDb->pUnlockNotify, flags); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
900 Tcl_DecrRefCount(pDb->pUnlockNotify); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
901 pDb->pUnlockNotify = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
902 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
903 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
904 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
905 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
906 #ifdef SQLITE_ENABLE_PREUPDATE_HOOK |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
907 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
908 ** Pre-update hook callback. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
909 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
910 static void DbPreUpdateHandler( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
911 void *p, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
912 sqlite3 *db, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
913 int op, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
914 const char *zDb, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
915 const char *zTbl, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
916 sqlite_int64 iKey1, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
917 sqlite_int64 iKey2 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
918 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
919 SqliteDb *pDb = (SqliteDb *)p; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
920 Tcl_Obj *pCmd; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
921 static const char *azStr[] = {"DELETE", "INSERT", "UPDATE"}; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
922 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
923 assert( (SQLITE_DELETE-1)/9 == 0 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
924 assert( (SQLITE_INSERT-1)/9 == 1 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
925 assert( (SQLITE_UPDATE-1)/9 == 2 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
926 assert( pDb->pPreUpdateHook ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
927 assert( db==pDb->db ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
928 assert( op==SQLITE_INSERT || op==SQLITE_UPDATE || op==SQLITE_DELETE ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
929 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
930 pCmd = Tcl_DuplicateObj(pDb->pPreUpdateHook); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
931 Tcl_IncrRefCount(pCmd); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
932 Tcl_ListObjAppendElement(0, pCmd, Tcl_NewStringObj(azStr[(op-1)/9], -1)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
933 Tcl_ListObjAppendElement(0, pCmd, Tcl_NewStringObj(zDb, -1)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
934 Tcl_ListObjAppendElement(0, pCmd, Tcl_NewStringObj(zTbl, -1)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
935 Tcl_ListObjAppendElement(0, pCmd, Tcl_NewWideIntObj(iKey1)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
936 Tcl_ListObjAppendElement(0, pCmd, Tcl_NewWideIntObj(iKey2)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
937 Tcl_EvalObjEx(pDb->interp, pCmd, TCL_EVAL_DIRECT); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
938 Tcl_DecrRefCount(pCmd); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
939 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
940 #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
941 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
942 static void DbUpdateHandler( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
943 void *p, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
944 int op, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
945 const char *zDb, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
946 const char *zTbl, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
947 sqlite_int64 rowid |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
948 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
949 SqliteDb *pDb = (SqliteDb *)p; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
950 Tcl_Obj *pCmd; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
951 static const char *azStr[] = {"DELETE", "INSERT", "UPDATE"}; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
952 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
953 assert( (SQLITE_DELETE-1)/9 == 0 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
954 assert( (SQLITE_INSERT-1)/9 == 1 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
955 assert( (SQLITE_UPDATE-1)/9 == 2 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
956 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
957 assert( pDb->pUpdateHook ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
958 assert( op==SQLITE_INSERT || op==SQLITE_UPDATE || op==SQLITE_DELETE ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
959 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
960 pCmd = Tcl_DuplicateObj(pDb->pUpdateHook); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
961 Tcl_IncrRefCount(pCmd); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
962 Tcl_ListObjAppendElement(0, pCmd, Tcl_NewStringObj(azStr[(op-1)/9], -1)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
963 Tcl_ListObjAppendElement(0, pCmd, Tcl_NewStringObj(zDb, -1)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
964 Tcl_ListObjAppendElement(0, pCmd, Tcl_NewStringObj(zTbl, -1)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
965 Tcl_ListObjAppendElement(0, pCmd, Tcl_NewWideIntObj(rowid)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
966 Tcl_EvalObjEx(pDb->interp, pCmd, TCL_EVAL_DIRECT); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
967 Tcl_DecrRefCount(pCmd); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
968 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
969 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
970 static void tclCollateNeeded( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
971 void *pCtx, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
972 sqlite3 *db, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
973 int enc, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
974 const char *zName |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
975 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
976 SqliteDb *pDb = (SqliteDb *)pCtx; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
977 Tcl_Obj *pScript = Tcl_DuplicateObj(pDb->pCollateNeeded); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
978 Tcl_IncrRefCount(pScript); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
979 Tcl_ListObjAppendElement(0, pScript, Tcl_NewStringObj(zName, -1)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
980 Tcl_EvalObjEx(pDb->interp, pScript, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
981 Tcl_DecrRefCount(pScript); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
982 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
983 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
984 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
985 ** This routine is called to evaluate an SQL collation function implemented |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
986 ** using TCL script. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
987 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
988 static int tclSqlCollate( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
989 void *pCtx, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
990 int nA, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
991 const void *zA, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
992 int nB, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
993 const void *zB |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
994 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
995 SqlCollate *p = (SqlCollate *)pCtx; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
996 Tcl_Obj *pCmd; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
997 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
998 pCmd = Tcl_NewStringObj(p->zScript, -1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
999 Tcl_IncrRefCount(pCmd); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1000 Tcl_ListObjAppendElement(p->interp, pCmd, Tcl_NewStringObj(zA, nA)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1001 Tcl_ListObjAppendElement(p->interp, pCmd, Tcl_NewStringObj(zB, nB)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1002 Tcl_EvalObjEx(p->interp, pCmd, TCL_EVAL_DIRECT); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1003 Tcl_DecrRefCount(pCmd); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1004 return (atoi(Tcl_GetStringResult(p->interp))); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1005 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1006 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1007 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1008 ** This routine is called to evaluate an SQL function implemented |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1009 ** using TCL script. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1010 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1011 static void tclSqlFunc(sqlite3_context *context, int argc, sqlite3_value**argv){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1012 SqlFunc *p = sqlite3_user_data(context); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1013 Tcl_Obj *pCmd; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1014 int i; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1015 int rc; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1016 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1017 if( argc==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1018 /* If there are no arguments to the function, call Tcl_EvalObjEx on the |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1019 ** script object directly. This allows the TCL compiler to generate |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1020 ** bytecode for the command on the first invocation and thus make |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1021 ** subsequent invocations much faster. */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1022 pCmd = p->pScript; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1023 Tcl_IncrRefCount(pCmd); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1024 rc = Tcl_EvalObjEx(p->interp, pCmd, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1025 Tcl_DecrRefCount(pCmd); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1026 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1027 /* If there are arguments to the function, make a shallow copy of the |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1028 ** script object, lappend the arguments, then evaluate the copy. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1029 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1030 ** By "shallow" copy, we mean only the outer list Tcl_Obj is duplicated. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1031 ** The new Tcl_Obj contains pointers to the original list elements. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1032 ** That way, when Tcl_EvalObjv() is run and shimmers the first element |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1033 ** of the list to tclCmdNameType, that alternate representation will |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1034 ** be preserved and reused on the next invocation. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1035 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1036 Tcl_Obj **aArg; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1037 Tcl_Size nArg; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1038 if( Tcl_ListObjGetElements(p->interp, p->pScript, &nArg, &aArg) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1039 sqlite3_result_error(context, Tcl_GetStringResult(p->interp), -1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1040 return; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1041 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1042 pCmd = Tcl_NewListObj(nArg, aArg); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1043 Tcl_IncrRefCount(pCmd); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1044 for(i=0; i<argc; i++){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1045 sqlite3_value *pIn = argv[i]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1046 Tcl_Obj *pVal; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1047 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1048 /* Set pVal to contain the i'th column of this row. */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1049 switch( sqlite3_value_type(pIn) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1050 case SQLITE_BLOB: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1051 int bytes = sqlite3_value_bytes(pIn); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1052 pVal = Tcl_NewByteArrayObj(sqlite3_value_blob(pIn), bytes); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1053 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1054 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1055 case SQLITE_INTEGER: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1056 sqlite_int64 v = sqlite3_value_int64(pIn); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1057 if( v>=-2147483647 && v<=2147483647 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1058 pVal = Tcl_NewIntObj((int)v); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1059 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1060 pVal = Tcl_NewWideIntObj(v); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1061 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1062 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1063 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1064 case SQLITE_FLOAT: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1065 double r = sqlite3_value_double(pIn); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1066 pVal = Tcl_NewDoubleObj(r); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1067 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1068 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1069 case SQLITE_NULL: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1070 pVal = Tcl_NewStringObj(p->pDb->zNull, -1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1071 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1072 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1073 default: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1074 int bytes = sqlite3_value_bytes(pIn); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1075 pVal = Tcl_NewStringObj((char *)sqlite3_value_text(pIn), bytes); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1076 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1077 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1078 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1079 rc = Tcl_ListObjAppendElement(p->interp, pCmd, pVal); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1080 if( rc ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1081 Tcl_DecrRefCount(pCmd); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1082 sqlite3_result_error(context, Tcl_GetStringResult(p->interp), -1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1083 return; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1084 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1085 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1086 if( !p->useEvalObjv ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1087 /* Tcl_EvalObjEx() will automatically call Tcl_EvalObjv() if pCmd |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1088 ** is a list without a string representation. To prevent this from |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1089 ** happening, make sure pCmd has a valid string representation */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1090 Tcl_GetString(pCmd); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1091 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1092 rc = Tcl_EvalObjEx(p->interp, pCmd, TCL_EVAL_DIRECT); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1093 Tcl_DecrRefCount(pCmd); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1094 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1095 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1096 if( TCL_BREAK==rc ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1097 sqlite3_result_null(context); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1098 }else if( rc && rc!=TCL_RETURN ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1099 sqlite3_result_error(context, Tcl_GetStringResult(p->interp), -1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1100 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1101 Tcl_Obj *pVar = Tcl_GetObjResult(p->interp); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1102 Tcl_Size n; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1103 u8 *data; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1104 const char *zType = (pVar->typePtr ? pVar->typePtr->name : ""); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1105 char c = zType[0]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1106 int eType = p->eType; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1107 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1108 if( eType==SQLITE_NULL ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1109 if( c=='b' && strcmp(zType,"bytearray")==0 && pVar->bytes==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1110 /* Only return a BLOB type if the Tcl variable is a bytearray and |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1111 ** has no string representation. */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1112 eType = SQLITE_BLOB; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1113 }else if( (c=='b' && pVar->bytes==0 && strcmp(zType,"boolean")==0 ) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1114 || (c=='b' && pVar->bytes==0 && strcmp(zType,"booleanString")==0 ) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1115 || (c=='w' && strcmp(zType,"wideInt")==0) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1116 || (c=='i' && strcmp(zType,"int")==0) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1117 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1118 eType = SQLITE_INTEGER; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1119 }else if( c=='d' && strcmp(zType,"double")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1120 eType = SQLITE_FLOAT; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1121 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1122 eType = SQLITE_TEXT; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1123 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1124 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1125 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1126 switch( eType ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1127 case SQLITE_BLOB: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1128 data = Tcl_GetByteArrayFromObj(pVar, &n); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1129 sqlite3_result_blob(context, data, n, SQLITE_TRANSIENT); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1130 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1131 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1132 case SQLITE_INTEGER: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1133 Tcl_WideInt v; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1134 if( TCL_OK==Tcl_GetWideIntFromObj(0, pVar, &v) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1135 sqlite3_result_int64(context, v); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1136 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1137 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1138 /* fall-through */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1139 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1140 case SQLITE_FLOAT: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1141 double r; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1142 if( TCL_OK==Tcl_GetDoubleFromObj(0, pVar, &r) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1143 sqlite3_result_double(context, r); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1144 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1145 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1146 /* fall-through */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1147 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1148 default: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1149 data = (unsigned char *)Tcl_GetStringFromObj(pVar, &n); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1150 sqlite3_result_text64(context, (char *)data, n, SQLITE_TRANSIENT, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1151 SQLITE_UTF8); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1152 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1153 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1154 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1155 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1156 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1157 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1158 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1159 #ifndef SQLITE_OMIT_AUTHORIZATION |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1160 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1161 ** This is the authentication function. It appends the authentication |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1162 ** type code and the two arguments to zCmd[] then invokes the result |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1163 ** on the interpreter. The reply is examined to determine if the |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1164 ** authentication fails or succeeds. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1165 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1166 static int auth_callback( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1167 void *pArg, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1168 int code, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1169 const char *zArg1, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1170 const char *zArg2, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1171 const char *zArg3, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1172 const char *zArg4 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1173 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1174 const char *zCode; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1175 Tcl_DString str; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1176 int rc; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1177 const char *zReply; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1178 /* EVIDENCE-OF: R-38590-62769 The first parameter to the authorizer |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1179 ** callback is a copy of the third parameter to the |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1180 ** sqlite3_set_authorizer() interface. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1181 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1182 SqliteDb *pDb = (SqliteDb*)pArg; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1183 if( pDb->disableAuth ) return SQLITE_OK; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1184 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1185 /* EVIDENCE-OF: R-56518-44310 The second parameter to the callback is an |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1186 ** integer action code that specifies the particular action to be |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1187 ** authorized. */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1188 switch( code ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1189 case SQLITE_COPY : zCode="SQLITE_COPY"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1190 case SQLITE_CREATE_INDEX : zCode="SQLITE_CREATE_INDEX"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1191 case SQLITE_CREATE_TABLE : zCode="SQLITE_CREATE_TABLE"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1192 case SQLITE_CREATE_TEMP_INDEX : zCode="SQLITE_CREATE_TEMP_INDEX"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1193 case SQLITE_CREATE_TEMP_TABLE : zCode="SQLITE_CREATE_TEMP_TABLE"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1194 case SQLITE_CREATE_TEMP_TRIGGER: zCode="SQLITE_CREATE_TEMP_TRIGGER"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1195 case SQLITE_CREATE_TEMP_VIEW : zCode="SQLITE_CREATE_TEMP_VIEW"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1196 case SQLITE_CREATE_TRIGGER : zCode="SQLITE_CREATE_TRIGGER"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1197 case SQLITE_CREATE_VIEW : zCode="SQLITE_CREATE_VIEW"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1198 case SQLITE_DELETE : zCode="SQLITE_DELETE"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1199 case SQLITE_DROP_INDEX : zCode="SQLITE_DROP_INDEX"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1200 case SQLITE_DROP_TABLE : zCode="SQLITE_DROP_TABLE"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1201 case SQLITE_DROP_TEMP_INDEX : zCode="SQLITE_DROP_TEMP_INDEX"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1202 case SQLITE_DROP_TEMP_TABLE : zCode="SQLITE_DROP_TEMP_TABLE"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1203 case SQLITE_DROP_TEMP_TRIGGER : zCode="SQLITE_DROP_TEMP_TRIGGER"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1204 case SQLITE_DROP_TEMP_VIEW : zCode="SQLITE_DROP_TEMP_VIEW"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1205 case SQLITE_DROP_TRIGGER : zCode="SQLITE_DROP_TRIGGER"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1206 case SQLITE_DROP_VIEW : zCode="SQLITE_DROP_VIEW"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1207 case SQLITE_INSERT : zCode="SQLITE_INSERT"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1208 case SQLITE_PRAGMA : zCode="SQLITE_PRAGMA"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1209 case SQLITE_READ : zCode="SQLITE_READ"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1210 case SQLITE_SELECT : zCode="SQLITE_SELECT"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1211 case SQLITE_TRANSACTION : zCode="SQLITE_TRANSACTION"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1212 case SQLITE_UPDATE : zCode="SQLITE_UPDATE"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1213 case SQLITE_ATTACH : zCode="SQLITE_ATTACH"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1214 case SQLITE_DETACH : zCode="SQLITE_DETACH"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1215 case SQLITE_ALTER_TABLE : zCode="SQLITE_ALTER_TABLE"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1216 case SQLITE_REINDEX : zCode="SQLITE_REINDEX"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1217 case SQLITE_ANALYZE : zCode="SQLITE_ANALYZE"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1218 case SQLITE_CREATE_VTABLE : zCode="SQLITE_CREATE_VTABLE"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1219 case SQLITE_DROP_VTABLE : zCode="SQLITE_DROP_VTABLE"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1220 case SQLITE_FUNCTION : zCode="SQLITE_FUNCTION"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1221 case SQLITE_SAVEPOINT : zCode="SQLITE_SAVEPOINT"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1222 case SQLITE_RECURSIVE : zCode="SQLITE_RECURSIVE"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1223 default : zCode="????"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1224 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1225 Tcl_DStringInit(&str); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1226 Tcl_DStringAppend(&str, pDb->zAuth, -1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1227 Tcl_DStringAppendElement(&str, zCode); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1228 Tcl_DStringAppendElement(&str, zArg1 ? zArg1 : ""); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1229 Tcl_DStringAppendElement(&str, zArg2 ? zArg2 : ""); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1230 Tcl_DStringAppendElement(&str, zArg3 ? zArg3 : ""); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1231 Tcl_DStringAppendElement(&str, zArg4 ? zArg4 : ""); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1232 rc = Tcl_GlobalEval(pDb->interp, Tcl_DStringValue(&str)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1233 Tcl_DStringFree(&str); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1234 zReply = rc==TCL_OK ? Tcl_GetStringResult(pDb->interp) : "SQLITE_DENY"; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1235 if( strcmp(zReply,"SQLITE_OK")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1236 rc = SQLITE_OK; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1237 }else if( strcmp(zReply,"SQLITE_DENY")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1238 rc = SQLITE_DENY; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1239 }else if( strcmp(zReply,"SQLITE_IGNORE")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1240 rc = SQLITE_IGNORE; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1241 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1242 rc = 999; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1243 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1244 return rc; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1245 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1246 #endif /* SQLITE_OMIT_AUTHORIZATION */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1247 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1248 #if 0 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1249 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1250 ** This routine reads a line of text from FILE in, stores |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1251 ** the text in memory obtained from malloc() and returns a pointer |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1252 ** to the text. NULL is returned at end of file, or if malloc() |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1253 ** fails. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1254 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1255 ** The interface is like "readline" but no command-line editing |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1256 ** is done. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1257 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1258 ** copied from shell.c from '.import' command |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1259 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1260 static char *local_getline(char *zPrompt, FILE *in){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1261 char *zLine; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1262 int nLine; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1263 int n; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1264 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1265 nLine = 100; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1266 zLine = malloc( nLine ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1267 if( zLine==0 ) return 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1268 n = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1269 while( 1 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1270 if( n+100>nLine ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1271 nLine = nLine*2 + 100; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1272 zLine = realloc(zLine, nLine); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1273 if( zLine==0 ) return 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1274 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1275 if( fgets(&zLine[n], nLine - n, in)==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1276 if( n==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1277 free(zLine); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1278 return 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1279 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1280 zLine[n] = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1281 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1282 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1283 while( zLine[n] ){ n++; } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1284 if( n>0 && zLine[n-1]=='\n' ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1285 n--; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1286 zLine[n] = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1287 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1288 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1289 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1290 zLine = realloc( zLine, n+1 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1291 return zLine; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1292 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1293 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1294 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1295 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1296 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1297 ** This function is part of the implementation of the command: |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1298 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1299 ** $db transaction [-deferred|-immediate|-exclusive] SCRIPT |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1300 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1301 ** It is invoked after evaluating the script SCRIPT to commit or rollback |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1302 ** the transaction or savepoint opened by the [transaction] command. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1303 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1304 static int SQLITE_TCLAPI DbTransPostCmd( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1305 ClientData data[], /* data[0] is the Sqlite3Db* for $db */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1306 Tcl_Interp *interp, /* Tcl interpreter */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1307 int result /* Result of evaluating SCRIPT */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1308 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1309 static const char *const azEnd[] = { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1310 "RELEASE _tcl_transaction", /* rc==TCL_ERROR, nTransaction!=0 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1311 "COMMIT", /* rc!=TCL_ERROR, nTransaction==0 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1312 "ROLLBACK TO _tcl_transaction ; RELEASE _tcl_transaction", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1313 "ROLLBACK" /* rc==TCL_ERROR, nTransaction==0 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1314 }; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1315 SqliteDb *pDb = (SqliteDb*)data[0]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1316 int rc = result; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1317 const char *zEnd; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1318 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1319 pDb->nTransaction--; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1320 zEnd = azEnd[(rc==TCL_ERROR)*2 + (pDb->nTransaction==0)]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1321 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1322 pDb->disableAuth++; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1323 if( sqlite3_exec(pDb->db, zEnd, 0, 0, 0) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1324 /* This is a tricky scenario to handle. The most likely cause of an |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1325 ** error is that the exec() above was an attempt to commit the |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1326 ** top-level transaction that returned SQLITE_BUSY. Or, less likely, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1327 ** that an IO-error has occurred. In either case, throw a Tcl exception |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1328 ** and try to rollback the transaction. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1329 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1330 ** But it could also be that the user executed one or more BEGIN, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1331 ** COMMIT, SAVEPOINT, RELEASE or ROLLBACK commands that are confusing |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1332 ** this method's logic. Not clear how this would be best handled. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1333 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1334 if( rc!=TCL_ERROR ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1335 Tcl_AppendResult(interp, sqlite3_errmsg(pDb->db), (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1336 rc = TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1337 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1338 sqlite3_exec(pDb->db, "ROLLBACK", 0, 0, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1339 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1340 pDb->disableAuth--; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1341 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1342 delDatabaseRef(pDb); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1343 return rc; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1344 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1345 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1346 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1347 ** Unless SQLITE_TEST is defined, this function is a simple wrapper around |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1348 ** sqlite3_prepare_v2(). If SQLITE_TEST is defined, then it uses either |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1349 ** sqlite3_prepare_v2() or legacy interface sqlite3_prepare(), depending |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1350 ** on whether or not the [db_use_legacy_prepare] command has been used to |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1351 ** configure the connection. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1352 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1353 static int dbPrepare( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1354 SqliteDb *pDb, /* Database object */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1355 const char *zSql, /* SQL to compile */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1356 sqlite3_stmt **ppStmt, /* OUT: Prepared statement */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1357 const char **pzOut /* OUT: Pointer to next SQL statement */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1358 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1359 unsigned int prepFlags = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1360 #ifdef SQLITE_TEST |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1361 if( pDb->bLegacyPrepare ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1362 return sqlite3_prepare(pDb->db, zSql, -1, ppStmt, pzOut); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1363 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1364 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1365 /* If the statement cache is large, use the SQLITE_PREPARE_PERSISTENT |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1366 ** flags, which uses less lookaside memory. But if the cache is small, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1367 ** omit that flag to make full use of lookaside */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1368 if( pDb->maxStmt>5 ) prepFlags = SQLITE_PREPARE_PERSISTENT; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1369 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1370 return sqlite3_prepare_v3(pDb->db, zSql, -1, prepFlags, ppStmt, pzOut); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1371 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1372 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1373 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1374 ** Search the cache for a prepared-statement object that implements the |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1375 ** first SQL statement in the buffer pointed to by parameter zIn. If |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1376 ** no such prepared-statement can be found, allocate and prepare a new |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1377 ** one. In either case, bind the current values of the relevant Tcl |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1378 ** variables to any $var, :var or @var variables in the statement. Before |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1379 ** returning, set *ppPreStmt to point to the prepared-statement object. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1380 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1381 ** Output parameter *pzOut is set to point to the next SQL statement in |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1382 ** buffer zIn, or to the '\0' byte at the end of zIn if there is no |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1383 ** next statement. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1384 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1385 ** If successful, TCL_OK is returned. Otherwise, TCL_ERROR is returned |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1386 ** and an error message loaded into interpreter pDb->interp. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1387 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1388 static int dbPrepareAndBind( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1389 SqliteDb *pDb, /* Database object */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1390 char const *zIn, /* SQL to compile */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1391 char const **pzOut, /* OUT: Pointer to next SQL statement */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1392 SqlPreparedStmt **ppPreStmt /* OUT: Object used to cache statement */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1393 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1394 const char *zSql = zIn; /* Pointer to first SQL statement in zIn */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1395 sqlite3_stmt *pStmt = 0; /* Prepared statement object */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1396 SqlPreparedStmt *pPreStmt; /* Pointer to cached statement */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1397 int nSql; /* Length of zSql in bytes */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1398 int nVar = 0; /* Number of variables in statement */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1399 int iParm = 0; /* Next free entry in apParm */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1400 char c; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1401 int i; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1402 int needResultReset = 0; /* Need to invoke Tcl_ResetResult() */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1403 int rc = SQLITE_OK; /* Value to return */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1404 Tcl_Interp *interp = pDb->interp; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1405 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1406 *ppPreStmt = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1407 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1408 /* Trim spaces from the start of zSql and calculate the remaining length. */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1409 while( (c = zSql[0])==' ' || c=='\t' || c=='\r' || c=='\n' ){ zSql++; } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1410 nSql = strlen30(zSql); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1411 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1412 for(pPreStmt = pDb->stmtList; pPreStmt; pPreStmt=pPreStmt->pNext){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1413 int n = pPreStmt->nSql; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1414 if( nSql>=n |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1415 && memcmp(pPreStmt->zSql, zSql, n)==0 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1416 && (zSql[n]==0 || zSql[n-1]==';') |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1417 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1418 pStmt = pPreStmt->pStmt; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1419 *pzOut = &zSql[pPreStmt->nSql]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1420 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1421 /* When a prepared statement is found, unlink it from the |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1422 ** cache list. It will later be added back to the beginning |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1423 ** of the cache list in order to implement LRU replacement. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1424 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1425 if( pPreStmt->pPrev ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1426 pPreStmt->pPrev->pNext = pPreStmt->pNext; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1427 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1428 pDb->stmtList = pPreStmt->pNext; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1429 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1430 if( pPreStmt->pNext ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1431 pPreStmt->pNext->pPrev = pPreStmt->pPrev; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1432 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1433 pDb->stmtLast = pPreStmt->pPrev; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1434 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1435 pDb->nStmt--; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1436 nVar = sqlite3_bind_parameter_count(pStmt); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1437 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1438 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1439 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1440 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1441 /* If no prepared statement was found. Compile the SQL text. Also allocate |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1442 ** a new SqlPreparedStmt structure. */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1443 if( pPreStmt==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1444 int nByte; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1445 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1446 if( SQLITE_OK!=dbPrepare(pDb, zSql, &pStmt, pzOut) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1447 Tcl_SetObjResult(interp, Tcl_NewStringObj(sqlite3_errmsg(pDb->db), -1)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1448 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1449 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1450 if( pStmt==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1451 if( SQLITE_OK!=sqlite3_errcode(pDb->db) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1452 /* A compile-time error in the statement. */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1453 Tcl_SetObjResult(interp, Tcl_NewStringObj(sqlite3_errmsg(pDb->db), -1)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1454 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1455 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1456 /* The statement was a no-op. Continue to the next statement |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1457 ** in the SQL string. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1458 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1459 return TCL_OK; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1460 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1461 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1462 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1463 assert( pPreStmt==0 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1464 nVar = sqlite3_bind_parameter_count(pStmt); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1465 nByte = sizeof(SqlPreparedStmt) + nVar*sizeof(Tcl_Obj *); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1466 pPreStmt = (SqlPreparedStmt*)Tcl_Alloc(nByte); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1467 memset(pPreStmt, 0, nByte); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1468 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1469 pPreStmt->pStmt = pStmt; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1470 pPreStmt->nSql = (int)(*pzOut - zSql); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1471 pPreStmt->zSql = sqlite3_sql(pStmt); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1472 pPreStmt->apParm = (Tcl_Obj **)&pPreStmt[1]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1473 #ifdef SQLITE_TEST |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1474 if( pPreStmt->zSql==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1475 char *zCopy = Tcl_Alloc(pPreStmt->nSql + 1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1476 memcpy(zCopy, zSql, pPreStmt->nSql); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1477 zCopy[pPreStmt->nSql] = '\0'; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1478 pPreStmt->zSql = zCopy; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1479 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1480 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1481 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1482 assert( pPreStmt ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1483 assert( strlen30(pPreStmt->zSql)==pPreStmt->nSql ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1484 assert( 0==memcmp(pPreStmt->zSql, zSql, pPreStmt->nSql) ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1485 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1486 /* Bind values to parameters that begin with $ or : */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1487 for(i=1; i<=nVar; i++){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1488 const char *zVar = sqlite3_bind_parameter_name(pStmt, i); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1489 if( zVar!=0 && (zVar[0]=='$' || zVar[0]==':' || zVar[0]=='@') ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1490 Tcl_Obj *pVar = Tcl_GetVar2Ex(interp, &zVar[1], 0, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1491 if( pVar==0 && pDb->zBindFallback!=0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1492 Tcl_Obj *pCmd; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1493 int rx; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1494 pCmd = Tcl_NewStringObj(pDb->zBindFallback, -1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1495 Tcl_IncrRefCount(pCmd); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1496 Tcl_ListObjAppendElement(interp, pCmd, Tcl_NewStringObj(zVar,-1)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1497 if( needResultReset ) Tcl_ResetResult(interp); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1498 needResultReset = 1; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1499 rx = Tcl_EvalObjEx(interp, pCmd, TCL_EVAL_DIRECT); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1500 Tcl_DecrRefCount(pCmd); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1501 if( rx==TCL_OK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1502 pVar = Tcl_GetObjResult(interp); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1503 }else if( rx==TCL_ERROR ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1504 rc = TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1505 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1506 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1507 pVar = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1508 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1509 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1510 if( pVar ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1511 Tcl_Size n; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1512 u8 *data; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1513 const char *zType = (pVar->typePtr ? pVar->typePtr->name : ""); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1514 c = zType[0]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1515 if( zVar[0]=='@' || |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1516 (c=='b' && strcmp(zType,"bytearray")==0 && pVar->bytes==0) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1517 /* Load a BLOB type if the Tcl variable is a bytearray and |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1518 ** it has no string representation or the host |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1519 ** parameter name begins with "@". */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1520 data = Tcl_GetByteArrayFromObj(pVar, &n); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1521 sqlite3_bind_blob(pStmt, i, data, n, SQLITE_STATIC); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1522 Tcl_IncrRefCount(pVar); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1523 pPreStmt->apParm[iParm++] = pVar; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1524 }else if( c=='b' && pVar->bytes==0 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1525 && (strcmp(zType,"booleanString")==0 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1526 || strcmp(zType,"boolean")==0) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1527 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1528 int nn; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1529 Tcl_GetBooleanFromObj(interp, pVar, &nn); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1530 sqlite3_bind_int(pStmt, i, nn); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1531 }else if( c=='d' && strcmp(zType,"double")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1532 double r; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1533 Tcl_GetDoubleFromObj(interp, pVar, &r); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1534 sqlite3_bind_double(pStmt, i, r); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1535 }else if( (c=='w' && strcmp(zType,"wideInt")==0) || |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1536 (c=='i' && strcmp(zType,"int")==0) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1537 Tcl_WideInt v; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1538 Tcl_GetWideIntFromObj(interp, pVar, &v); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1539 sqlite3_bind_int64(pStmt, i, v); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1540 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1541 data = (unsigned char *)Tcl_GetStringFromObj(pVar, &n); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1542 sqlite3_bind_text64(pStmt, i, (char *)data, n, SQLITE_STATIC, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1543 SQLITE_UTF8); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1544 Tcl_IncrRefCount(pVar); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1545 pPreStmt->apParm[iParm++] = pVar; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1546 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1547 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1548 sqlite3_bind_null(pStmt, i); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1549 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1550 if( needResultReset ) Tcl_ResetResult(pDb->interp); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1551 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1552 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1553 pPreStmt->nParm = iParm; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1554 *ppPreStmt = pPreStmt; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1555 if( needResultReset && rc==TCL_OK ) Tcl_ResetResult(pDb->interp); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1556 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1557 return rc; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1558 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1559 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1560 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1561 ** Release a statement reference obtained by calling dbPrepareAndBind(). |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1562 ** There should be exactly one call to this function for each call to |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1563 ** dbPrepareAndBind(). |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1564 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1565 ** If the discard parameter is non-zero, then the statement is deleted |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1566 ** immediately. Otherwise it is added to the LRU list and may be returned |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1567 ** by a subsequent call to dbPrepareAndBind(). |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1568 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1569 static void dbReleaseStmt( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1570 SqliteDb *pDb, /* Database handle */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1571 SqlPreparedStmt *pPreStmt, /* Prepared statement handle to release */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1572 int discard /* True to delete (not cache) the pPreStmt */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1573 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1574 int i; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1575 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1576 /* Free the bound string and blob parameters */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1577 for(i=0; i<pPreStmt->nParm; i++){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1578 Tcl_DecrRefCount(pPreStmt->apParm[i]); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1579 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1580 pPreStmt->nParm = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1581 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1582 if( pDb->maxStmt<=0 || discard ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1583 /* If the cache is turned off, deallocated the statement */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1584 dbFreeStmt(pPreStmt); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1585 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1586 /* Add the prepared statement to the beginning of the cache list. */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1587 pPreStmt->pNext = pDb->stmtList; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1588 pPreStmt->pPrev = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1589 if( pDb->stmtList ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1590 pDb->stmtList->pPrev = pPreStmt; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1591 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1592 pDb->stmtList = pPreStmt; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1593 if( pDb->stmtLast==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1594 assert( pDb->nStmt==0 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1595 pDb->stmtLast = pPreStmt; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1596 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1597 assert( pDb->nStmt>0 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1598 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1599 pDb->nStmt++; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1600 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1601 /* If we have too many statement in cache, remove the surplus from |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1602 ** the end of the cache list. */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1603 while( pDb->nStmt>pDb->maxStmt ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1604 SqlPreparedStmt *pLast = pDb->stmtLast; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1605 pDb->stmtLast = pLast->pPrev; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1606 pDb->stmtLast->pNext = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1607 pDb->nStmt--; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1608 dbFreeStmt(pLast); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1609 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1610 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1611 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1612 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1613 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1614 ** Structure used with dbEvalXXX() functions: |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1615 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1616 ** dbEvalInit() |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1617 ** dbEvalStep() |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1618 ** dbEvalFinalize() |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1619 ** dbEvalRowInfo() |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1620 ** dbEvalColumnValue() |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1621 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1622 typedef struct DbEvalContext DbEvalContext; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1623 struct DbEvalContext { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1624 SqliteDb *pDb; /* Database handle */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1625 Tcl_Obj *pSql; /* Object holding string zSql */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1626 const char *zSql; /* Remaining SQL to execute */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1627 SqlPreparedStmt *pPreStmt; /* Current statement */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1628 int nCol; /* Number of columns returned by pStmt */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1629 int evalFlags; /* Flags used */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1630 Tcl_Obj *pVarName; /* Name of target array/dict variable */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1631 Tcl_Obj **apColName; /* Array of column names */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1632 }; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1633 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1634 #define SQLITE_EVAL_WITHOUTNULLS 0x00001 /* Unset array(*) for NULL */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1635 #define SQLITE_EVAL_ASDICT 0x00002 /* Use dict instead of array */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1636 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1637 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1638 ** Release any cache of column names currently held as part of |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1639 ** the DbEvalContext structure passed as the first argument. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1640 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1641 static void dbReleaseColumnNames(DbEvalContext *p){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1642 if( p->apColName ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1643 int i; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1644 for(i=0; i<p->nCol; i++){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1645 Tcl_DecrRefCount(p->apColName[i]); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1646 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1647 Tcl_Free((char *)p->apColName); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1648 p->apColName = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1649 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1650 p->nCol = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1651 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1652 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1653 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1654 ** Initialize a DbEvalContext structure. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1655 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1656 ** If pVarName is not NULL, then it contains the name of a Tcl array |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1657 ** variable. The "*" member of this array is set to a list containing |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1658 ** the names of the columns returned by the statement as part of each |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1659 ** call to dbEvalStep(), in order from left to right. e.g. if the names |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1660 ** of the returned columns are a, b and c, it does the equivalent of the |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1661 ** tcl command: |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1662 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1663 ** set ${pVarName}(*) {a b c} |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1664 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1665 static void dbEvalInit( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1666 DbEvalContext *p, /* Pointer to structure to initialize */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1667 SqliteDb *pDb, /* Database handle */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1668 Tcl_Obj *pSql, /* Object containing SQL script */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1669 Tcl_Obj *pVarName, /* Name of Tcl array to set (*) element of */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1670 int evalFlags /* Flags controlling evaluation */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1671 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1672 memset(p, 0, sizeof(DbEvalContext)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1673 p->pDb = pDb; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1674 p->zSql = Tcl_GetString(pSql); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1675 p->pSql = pSql; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1676 Tcl_IncrRefCount(pSql); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1677 if( pVarName ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1678 p->pVarName = pVarName; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1679 Tcl_IncrRefCount(pVarName); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1680 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1681 p->evalFlags = evalFlags; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1682 addDatabaseRef(p->pDb); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1683 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1684 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1685 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1686 ** Obtain information about the row that the DbEvalContext passed as the |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1687 ** first argument currently points to. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1688 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1689 static void dbEvalRowInfo( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1690 DbEvalContext *p, /* Evaluation context */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1691 int *pnCol, /* OUT: Number of column names */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1692 Tcl_Obj ***papColName /* OUT: Array of column names */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1693 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1694 /* Compute column names */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1695 if( 0==p->apColName ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1696 sqlite3_stmt *pStmt = p->pPreStmt->pStmt; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1697 int i; /* Iterator variable */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1698 int nCol; /* Number of columns returned by pStmt */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1699 Tcl_Obj **apColName = 0; /* Array of column names */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1700 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1701 p->nCol = nCol = sqlite3_column_count(pStmt); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1702 if( nCol>0 && (papColName || p->pVarName) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1703 apColName = (Tcl_Obj**)Tcl_Alloc( sizeof(Tcl_Obj*)*nCol ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1704 for(i=0; i<nCol; i++){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1705 apColName[i] = Tcl_NewStringObj(sqlite3_column_name(pStmt,i), -1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1706 Tcl_IncrRefCount(apColName[i]); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1707 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1708 p->apColName = apColName; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1709 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1710 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1711 /* If results are being stored in a variable then create the |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1712 ** array(*) or dict(*) entry for that variable. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1713 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1714 if( p->pVarName ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1715 Tcl_Interp *interp = p->pDb->interp; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1716 Tcl_Obj *pColList = Tcl_NewObj(); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1717 Tcl_Obj *pStar = Tcl_NewStringObj("*", -1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1718 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1719 Tcl_IncrRefCount(pColList); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1720 Tcl_IncrRefCount(pStar); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1721 for(i=0; i<nCol; i++){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1722 Tcl_ListObjAppendElement(interp, pColList, apColName[i]); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1723 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1724 if( 0==(SQLITE_EVAL_ASDICT & p->evalFlags) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1725 Tcl_ObjSetVar2(interp, p->pVarName, pStar, pColList, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1726 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1727 Tcl_Obj * pDict = Tcl_ObjGetVar2(interp, p->pVarName, NULL, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1728 if( !pDict ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1729 pDict = Tcl_NewDictObj(); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1730 }else if( Tcl_IsShared(pDict) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1731 pDict = Tcl_DuplicateObj(pDict); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1732 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1733 if( Tcl_DictObjPut(interp, pDict, pStar, pColList)==TCL_OK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1734 Tcl_ObjSetVar2(interp, p->pVarName, NULL, pDict, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1735 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1736 Tcl_BounceRefCount(pDict); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1737 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1738 Tcl_DecrRefCount(pStar); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1739 Tcl_DecrRefCount(pColList); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1740 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1741 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1742 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1743 if( papColName ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1744 *papColName = p->apColName; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1745 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1746 if( pnCol ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1747 *pnCol = p->nCol; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1748 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1749 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1750 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1751 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1752 ** Return one of TCL_OK, TCL_BREAK or TCL_ERROR. If TCL_ERROR is |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1753 ** returned, then an error message is stored in the interpreter before |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1754 ** returning. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1755 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1756 ** A return value of TCL_OK means there is a row of data available. The |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1757 ** data may be accessed using dbEvalRowInfo() and dbEvalColumnValue(). This |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1758 ** is analogous to a return of SQLITE_ROW from sqlite3_step(). If TCL_BREAK |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1759 ** is returned, then the SQL script has finished executing and there are |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1760 ** no further rows available. This is similar to SQLITE_DONE. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1761 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1762 static int dbEvalStep(DbEvalContext *p){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1763 const char *zPrevSql = 0; /* Previous value of p->zSql */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1764 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1765 while( p->zSql[0] || p->pPreStmt ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1766 int rc; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1767 if( p->pPreStmt==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1768 zPrevSql = (p->zSql==zPrevSql ? 0 : p->zSql); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1769 rc = dbPrepareAndBind(p->pDb, p->zSql, &p->zSql, &p->pPreStmt); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1770 if( rc!=TCL_OK ) return rc; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1771 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1772 int rcs; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1773 SqliteDb *pDb = p->pDb; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1774 SqlPreparedStmt *pPreStmt = p->pPreStmt; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1775 sqlite3_stmt *pStmt = pPreStmt->pStmt; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1776 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1777 rcs = sqlite3_step(pStmt); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1778 if( rcs==SQLITE_ROW ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1779 return TCL_OK; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1780 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1781 if( p->pVarName ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1782 dbEvalRowInfo(p, 0, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1783 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1784 rcs = sqlite3_reset(pStmt); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1785 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1786 pDb->nStep = sqlite3_stmt_status(pStmt,SQLITE_STMTSTATUS_FULLSCAN_STEP,1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1787 pDb->nSort = sqlite3_stmt_status(pStmt,SQLITE_STMTSTATUS_SORT,1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1788 pDb->nIndex = sqlite3_stmt_status(pStmt,SQLITE_STMTSTATUS_AUTOINDEX,1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1789 pDb->nVMStep = sqlite3_stmt_status(pStmt,SQLITE_STMTSTATUS_VM_STEP,1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1790 dbReleaseColumnNames(p); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1791 p->pPreStmt = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1792 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1793 if( rcs!=SQLITE_OK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1794 /* If a run-time error occurs, report the error and stop reading |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1795 ** the SQL. */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1796 dbReleaseStmt(pDb, pPreStmt, 1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1797 #if SQLITE_TEST |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1798 if( p->pDb->bLegacyPrepare && rcs==SQLITE_SCHEMA && zPrevSql ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1799 /* If the runtime error was an SQLITE_SCHEMA, and the database |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1800 ** handle is configured to use the legacy sqlite3_prepare() |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1801 ** interface, retry prepare()/step() on the same SQL statement. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1802 ** This only happens once. If there is a second SQLITE_SCHEMA |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1803 ** error, the error will be returned to the caller. */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1804 p->zSql = zPrevSql; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1805 continue; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1806 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1807 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1808 Tcl_SetObjResult(pDb->interp, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1809 Tcl_NewStringObj(sqlite3_errmsg(pDb->db), -1)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1810 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1811 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1812 dbReleaseStmt(pDb, pPreStmt, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1813 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1814 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1815 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1816 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1817 /* Finished */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1818 return TCL_BREAK; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1819 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1820 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1821 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1822 ** Free all resources currently held by the DbEvalContext structure passed |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1823 ** as the first argument. There should be exactly one call to this function |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1824 ** for each call to dbEvalInit(). |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1825 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1826 static void dbEvalFinalize(DbEvalContext *p){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1827 if( p->pPreStmt ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1828 sqlite3_reset(p->pPreStmt->pStmt); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1829 dbReleaseStmt(p->pDb, p->pPreStmt, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1830 p->pPreStmt = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1831 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1832 if( p->pVarName ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1833 Tcl_DecrRefCount(p->pVarName); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1834 p->pVarName = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1835 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1836 Tcl_DecrRefCount(p->pSql); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1837 dbReleaseColumnNames(p); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1838 delDatabaseRef(p->pDb); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1839 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1840 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1841 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1842 ** Return a pointer to a Tcl_Obj structure with ref-count 0 that contains |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1843 ** the value for the iCol'th column of the row currently pointed to by |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1844 ** the DbEvalContext structure passed as the first argument. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1845 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1846 static Tcl_Obj *dbEvalColumnValue(DbEvalContext *p, int iCol){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1847 sqlite3_stmt *pStmt = p->pPreStmt->pStmt; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1848 switch( sqlite3_column_type(pStmt, iCol) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1849 case SQLITE_BLOB: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1850 int bytes = sqlite3_column_bytes(pStmt, iCol); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1851 const char *zBlob = sqlite3_column_blob(pStmt, iCol); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1852 if( !zBlob ) bytes = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1853 return Tcl_NewByteArrayObj((u8*)zBlob, bytes); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1854 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1855 case SQLITE_INTEGER: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1856 sqlite_int64 v = sqlite3_column_int64(pStmt, iCol); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1857 if( v>=-2147483647 && v<=2147483647 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1858 return Tcl_NewIntObj((int)v); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1859 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1860 return Tcl_NewWideIntObj(v); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1861 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1862 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1863 case SQLITE_FLOAT: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1864 return Tcl_NewDoubleObj(sqlite3_column_double(pStmt, iCol)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1865 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1866 case SQLITE_NULL: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1867 return Tcl_NewStringObj(p->pDb->zNull, -1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1868 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1869 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1870 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1871 return Tcl_NewStringObj((char*)sqlite3_column_text(pStmt, iCol), -1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1872 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1873 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1874 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1875 ** If using Tcl version 8.6 or greater, use the NR functions to avoid |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1876 ** recursive evaluation of scripts by the [db eval] and [db trans] |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1877 ** commands. Even if the headers used while compiling the extension |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1878 ** are 8.6 or newer, the code still tests the Tcl version at runtime. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1879 ** This allows stubs-enabled builds to be used with older Tcl libraries. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1880 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1881 #if TCL_MAJOR_VERSION>8 || !defined(TCL_MINOR_VERSION) \ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1882 || TCL_MINOR_VERSION>=6 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1883 # define SQLITE_TCL_NRE 1 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1884 static int DbUseNre(void){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1885 int major, minor; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1886 Tcl_GetVersion(&major, &minor, 0, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1887 return( (major==8 && minor>=6) || major>8 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1888 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1889 #else |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1890 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1891 ** Compiling using headers earlier than 8.6. In this case NR cannot be |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1892 ** used, so DbUseNre() to always return zero. Add #defines for the other |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1893 ** Tcl_NRxxx() functions to prevent them from causing compilation errors, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1894 ** even though the only invocations of them are within conditional blocks |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1895 ** of the form: |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1896 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1897 ** if( DbUseNre() ) { ... } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1898 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1899 # define SQLITE_TCL_NRE 0 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1900 # define DbUseNre() 0 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1901 # define Tcl_NRAddCallback(a,b,c,d,e,f) (void)0 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1902 # define Tcl_NREvalObj(a,b,c) 0 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1903 # define Tcl_NRCreateCommand(a,b,c,d,e,f) (void)0 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1904 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1905 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1906 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1907 ** This function is part of the implementation of the command: |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1908 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1909 ** $db eval SQL ?TGT-NAME? SCRIPT |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1910 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1911 static int SQLITE_TCLAPI DbEvalNextCmd( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1912 ClientData data[], /* data[0] is the (DbEvalContext*) */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1913 Tcl_Interp *interp, /* Tcl interpreter */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1914 int result /* Result so far */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1915 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1916 int rc = result; /* Return code */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1917 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1918 /* The first element of the data[] array is a pointer to a DbEvalContext |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1919 ** structure allocated using Tcl_Alloc(). The second element of data[] |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1920 ** is a pointer to a Tcl_Obj containing the script to run for each row |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1921 ** returned by the queries encapsulated in data[0]. */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1922 DbEvalContext *p = (DbEvalContext *)data[0]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1923 Tcl_Obj * const pScript = (Tcl_Obj *)data[1]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1924 Tcl_Obj * const pVarName = p->pVarName; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1925 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1926 while( (rc==TCL_OK || rc==TCL_CONTINUE) && TCL_OK==(rc = dbEvalStep(p)) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1927 int i; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1928 int nCol; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1929 Tcl_Obj **apColName; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1930 dbEvalRowInfo(p, &nCol, &apColName); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1931 for(i=0; i<nCol; i++){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1932 if( pVarName==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1933 Tcl_ObjSetVar2(interp, apColName[i], 0, dbEvalColumnValue(p,i), 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1934 }else if( (p->evalFlags & SQLITE_EVAL_WITHOUTNULLS)!=0 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1935 && sqlite3_column_type(p->pPreStmt->pStmt, i)==SQLITE_NULL |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1936 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1937 /* Remove NULL-containing column from the target container... */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1938 if( 0==(SQLITE_EVAL_ASDICT & p->evalFlags) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1939 /* Target is an array */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1940 Tcl_UnsetVar2(interp, Tcl_GetString(pVarName), |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1941 Tcl_GetString(apColName[i]), 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1942 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1943 /* Target is a dict */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1944 Tcl_Obj *pDict = Tcl_ObjGetVar2(interp, pVarName, NULL, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1945 if( pDict ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1946 if( Tcl_IsShared(pDict) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1947 pDict = Tcl_DuplicateObj(pDict); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1948 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1949 if( Tcl_DictObjRemove(interp, pDict, apColName[i])==TCL_OK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1950 Tcl_ObjSetVar2(interp, pVarName, NULL, pDict, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1951 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1952 Tcl_BounceRefCount(pDict); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1953 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1954 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1955 }else if( 0==(SQLITE_EVAL_ASDICT & p->evalFlags) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1956 /* Target is an array: set target(colName) = colValue */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1957 Tcl_ObjSetVar2(interp, pVarName, apColName[i], |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1958 dbEvalColumnValue(p,i), 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1959 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1960 /* Target is a dict: set target(colName) = colValue */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1961 Tcl_Obj *pDict = Tcl_ObjGetVar2(interp, pVarName, NULL, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1962 if( !pDict ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1963 pDict = Tcl_NewDictObj(); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1964 }else if( Tcl_IsShared(pDict) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1965 pDict = Tcl_DuplicateObj(pDict); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1966 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1967 if( Tcl_DictObjPut(interp, pDict, apColName[i], |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1968 dbEvalColumnValue(p,i))==TCL_OK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1969 Tcl_ObjSetVar2(interp, pVarName, NULL, pDict, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1970 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1971 Tcl_BounceRefCount(pDict); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1972 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1973 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1974 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1975 /* The required interpreter variables are now populated with the data |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1976 ** from the current row. If using NRE, schedule callbacks to evaluate |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1977 ** script pScript, then to invoke this function again to fetch the next |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1978 ** row (or clean up if there is no next row or the script throws an |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1979 ** exception). After scheduling the callbacks, return control to the |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1980 ** caller. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1981 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1982 ** If not using NRE, evaluate pScript directly and continue with the |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1983 ** next iteration of this while(...) loop. */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1984 if( DbUseNre() ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1985 Tcl_NRAddCallback(interp, DbEvalNextCmd, (void*)p, (void*)pScript, 0, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1986 return Tcl_NREvalObj(interp, pScript, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1987 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1988 rc = Tcl_EvalObjEx(interp, pScript, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1989 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1990 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1991 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1992 Tcl_DecrRefCount(pScript); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1993 dbEvalFinalize(p); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1994 Tcl_Free((char *)p); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1995 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1996 if( rc==TCL_OK || rc==TCL_BREAK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1997 Tcl_ResetResult(interp); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1998 rc = TCL_OK; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1999 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2000 return rc; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2001 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2002 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2003 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2004 ** This function is used by the implementations of the following database |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2005 ** handle sub-commands: |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2006 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2007 ** $db update_hook ?SCRIPT? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2008 ** $db wal_hook ?SCRIPT? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2009 ** $db commit_hook ?SCRIPT? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2010 ** $db preupdate hook ?SCRIPT? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2011 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2012 static void DbHookCmd( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2013 Tcl_Interp *interp, /* Tcl interpreter */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2014 SqliteDb *pDb, /* Database handle */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2015 Tcl_Obj *pArg, /* SCRIPT argument (or NULL) */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2016 Tcl_Obj **ppHook /* Pointer to member of SqliteDb */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2017 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2018 sqlite3 *db = pDb->db; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2019 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2020 if( *ppHook ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2021 Tcl_SetObjResult(interp, *ppHook); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2022 if( pArg ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2023 Tcl_DecrRefCount(*ppHook); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2024 *ppHook = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2025 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2026 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2027 if( pArg ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2028 assert( !(*ppHook) ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2029 if( Tcl_GetString(pArg)[0] ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2030 *ppHook = pArg; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2031 Tcl_IncrRefCount(*ppHook); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2032 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2033 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2034 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2035 #ifdef SQLITE_ENABLE_PREUPDATE_HOOK |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2036 sqlite3_preupdate_hook(db, (pDb->pPreUpdateHook?DbPreUpdateHandler:0), pDb); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2037 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2038 sqlite3_update_hook(db, (pDb->pUpdateHook?DbUpdateHandler:0), pDb); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2039 sqlite3_rollback_hook(db, (pDb->pRollbackHook?DbRollbackHandler:0), pDb); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2040 sqlite3_wal_hook(db, (pDb->pWalHook?DbWalHandler:0), pDb); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2041 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2042 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2043 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2044 ** The "sqlite" command below creates a new Tcl command for each |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2045 ** connection it opens to an SQLite database. This routine is invoked |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2046 ** whenever one of those connection-specific commands is executed |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2047 ** in Tcl. For example, if you run Tcl code like this: |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2048 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2049 ** sqlite3 db1 "my_database" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2050 ** db1 close |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2051 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2052 ** The first command opens a connection to the "my_database" database |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2053 ** and calls that connection "db1". The second command causes this |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2054 ** subroutine to be invoked. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2055 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2056 static int SQLITE_TCLAPI DbObjCmd( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2057 void *cd, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2058 Tcl_Interp *interp, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2059 int objc, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2060 Tcl_Obj *const*objv |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2061 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2062 SqliteDb *pDb = (SqliteDb*)cd; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2063 int choice; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2064 int rc = TCL_OK; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2065 static const char *DB_strs[] = { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2066 "authorizer", "backup", "bind_fallback", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2067 "busy", "cache", "changes", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2068 "close", "collate", "collation_needed", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2069 "commit_hook", "complete", "config", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2070 "copy", "deserialize", "enable_load_extension", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2071 "errorcode", "erroroffset", "eval", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2072 "exists", "function", "incrblob", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2073 "interrupt", "last_insert_rowid", "nullvalue", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2074 "onecolumn", "preupdate", "profile", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2075 "progress", "rekey", "restore", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2076 "rollback_hook", "serialize", "status", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2077 "timeout", "total_changes", "trace", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2078 "trace_v2", "transaction", "unlock_notify", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2079 "update_hook", "version", "wal_hook", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2080 0 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2081 }; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2082 enum DB_enum { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2083 DB_AUTHORIZER, DB_BACKUP, DB_BIND_FALLBACK, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2084 DB_BUSY, DB_CACHE, DB_CHANGES, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2085 DB_CLOSE, DB_COLLATE, DB_COLLATION_NEEDED, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2086 DB_COMMIT_HOOK, DB_COMPLETE, DB_CONFIG, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2087 DB_COPY, DB_DESERIALIZE, DB_ENABLE_LOAD_EXTENSION, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2088 DB_ERRORCODE, DB_ERROROFFSET, DB_EVAL, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2089 DB_EXISTS, DB_FUNCTION, DB_INCRBLOB, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2090 DB_INTERRUPT, DB_LAST_INSERT_ROWID, DB_NULLVALUE, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2091 DB_ONECOLUMN, DB_PREUPDATE, DB_PROFILE, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2092 DB_PROGRESS, DB_REKEY, DB_RESTORE, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2093 DB_ROLLBACK_HOOK, DB_SERIALIZE, DB_STATUS, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2094 DB_TIMEOUT, DB_TOTAL_CHANGES, DB_TRACE, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2095 DB_TRACE_V2, DB_TRANSACTION, DB_UNLOCK_NOTIFY, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2096 DB_UPDATE_HOOK, DB_VERSION, DB_WAL_HOOK, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2097 }; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2098 /* don't leave trailing commas on DB_enum, it confuses the AIX xlc compiler */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2099 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2100 if( objc<2 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2101 Tcl_WrongNumArgs(interp, 1, objv, "SUBCOMMAND ..."); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2102 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2103 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2104 if( Tcl_GetIndexFromObj(interp, objv[1], DB_strs, "option", 0, &choice) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2105 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2106 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2107 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2108 switch( (enum DB_enum)choice ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2109 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2110 /* $db authorizer ?CALLBACK? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2111 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2112 ** Invoke the given callback to authorize each SQL operation as it is |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2113 ** compiled. 5 arguments are appended to the callback before it is |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2114 ** invoked: |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2115 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2116 ** (1) The authorization type (ex: SQLITE_CREATE_TABLE, SQLITE_INSERT, ...) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2117 ** (2) First descriptive name (depends on authorization type) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2118 ** (3) Second descriptive name |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2119 ** (4) Name of the database (ex: "main", "temp") |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2120 ** (5) Name of trigger that is doing the access |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2121 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2122 ** The callback should return one of the following strings: SQLITE_OK, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2123 ** SQLITE_IGNORE, or SQLITE_DENY. Any other return value is an error. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2124 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2125 ** If this method is invoked with no arguments, the current authorization |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2126 ** callback string is returned. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2127 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2128 case DB_AUTHORIZER: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2129 #ifdef SQLITE_OMIT_AUTHORIZATION |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2130 Tcl_AppendResult(interp, "authorization not available in this build", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2131 (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2132 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2133 #else |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2134 if( objc>3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2135 Tcl_WrongNumArgs(interp, 2, objv, "?CALLBACK?"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2136 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2137 }else if( objc==2 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2138 if( pDb->zAuth ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2139 Tcl_AppendResult(interp, pDb->zAuth, (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2140 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2141 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2142 char *zAuth; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2143 Tcl_Size len; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2144 if( pDb->zAuth ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2145 Tcl_Free(pDb->zAuth); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2146 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2147 zAuth = Tcl_GetStringFromObj(objv[2], &len); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2148 if( zAuth && len>0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2149 pDb->zAuth = Tcl_Alloc( len + 1 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2150 memcpy(pDb->zAuth, zAuth, len+1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2151 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2152 pDb->zAuth = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2153 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2154 if( pDb->zAuth ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2155 typedef int (*sqlite3_auth_cb)( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2156 void*,int,const char*,const char*, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2157 const char*,const char*); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2158 pDb->interp = interp; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2159 sqlite3_set_authorizer(pDb->db,(sqlite3_auth_cb)auth_callback,pDb); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2160 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2161 sqlite3_set_authorizer(pDb->db, 0, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2162 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2163 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2164 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2165 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2166 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2167 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2168 /* $db backup ?DATABASE? FILENAME |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2169 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2170 ** Open or create a database file named FILENAME. Transfer the |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2171 ** content of local database DATABASE (default: "main") into the |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2172 ** FILENAME database. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2173 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2174 case DB_BACKUP: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2175 const char *zDestFile; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2176 const char *zSrcDb; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2177 sqlite3 *pDest; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2178 sqlite3_backup *pBackup; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2179 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2180 if( objc==3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2181 zSrcDb = "main"; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2182 zDestFile = Tcl_GetString(objv[2]); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2183 }else if( objc==4 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2184 zSrcDb = Tcl_GetString(objv[2]); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2185 zDestFile = Tcl_GetString(objv[3]); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2186 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2187 Tcl_WrongNumArgs(interp, 2, objv, "?DATABASE? FILENAME"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2188 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2189 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2190 rc = sqlite3_open_v2(zDestFile, &pDest, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2191 SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE| pDb->openFlags, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2192 if( rc!=SQLITE_OK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2193 Tcl_AppendResult(interp, "cannot open target database: ", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2194 sqlite3_errmsg(pDest), (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2195 sqlite3_close(pDest); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2196 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2197 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2198 pBackup = sqlite3_backup_init(pDest, "main", pDb->db, zSrcDb); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2199 if( pBackup==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2200 Tcl_AppendResult(interp, "backup failed: ", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2201 sqlite3_errmsg(pDest), (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2202 sqlite3_close(pDest); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2203 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2204 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2205 while( (rc = sqlite3_backup_step(pBackup,100))==SQLITE_OK ){} |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2206 sqlite3_backup_finish(pBackup); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2207 if( rc==SQLITE_DONE ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2208 rc = TCL_OK; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2209 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2210 Tcl_AppendResult(interp, "backup failed: ", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2211 sqlite3_errmsg(pDest), (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2212 rc = TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2213 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2214 sqlite3_close(pDest); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2215 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2216 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2217 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2218 /* $db bind_fallback ?CALLBACK? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2219 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2220 ** When resolving bind parameters in an SQL statement, if the parameter |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2221 ** cannot be associated with a TCL variable then invoke CALLBACK with a |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2222 ** single argument that is the name of the parameter and use the return |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2223 ** value of the CALLBACK as the binding. If CALLBACK returns something |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2224 ** other than TCL_OK or TCL_ERROR then bind a NULL. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2225 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2226 ** If CALLBACK is an empty string, then revert to the default behavior |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2227 ** which is to set the binding to NULL. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2228 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2229 ** If CALLBACK returns an error, that causes the statement execution to |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2230 ** abort. Hence, to configure a connection so that it throws an error |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2231 ** on an attempt to bind an unknown variable, do something like this: |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2232 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2233 ** proc bind_error {name} {error "no such variable: $name"} |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2234 ** db bind_fallback bind_error |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2235 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2236 case DB_BIND_FALLBACK: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2237 if( objc>3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2238 Tcl_WrongNumArgs(interp, 2, objv, "?CALLBACK?"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2239 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2240 }else if( objc==2 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2241 if( pDb->zBindFallback ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2242 Tcl_AppendResult(interp, pDb->zBindFallback, (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2243 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2244 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2245 char *zCallback; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2246 Tcl_Size len; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2247 if( pDb->zBindFallback ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2248 Tcl_Free(pDb->zBindFallback); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2249 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2250 zCallback = Tcl_GetStringFromObj(objv[2], &len); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2251 if( zCallback && len>0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2252 pDb->zBindFallback = Tcl_Alloc( len + 1 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2253 memcpy(pDb->zBindFallback, zCallback, len+1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2254 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2255 pDb->zBindFallback = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2256 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2257 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2258 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2259 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2260 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2261 /* $db busy ?CALLBACK? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2262 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2263 ** Invoke the given callback if an SQL statement attempts to open |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2264 ** a locked database file. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2265 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2266 case DB_BUSY: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2267 if( objc>3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2268 Tcl_WrongNumArgs(interp, 2, objv, "CALLBACK"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2269 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2270 }else if( objc==2 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2271 if( pDb->zBusy ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2272 Tcl_AppendResult(interp, pDb->zBusy, (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2273 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2274 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2275 char *zBusy; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2276 Tcl_Size len; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2277 if( pDb->zBusy ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2278 Tcl_Free(pDb->zBusy); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2279 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2280 zBusy = Tcl_GetStringFromObj(objv[2], &len); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2281 if( zBusy && len>0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2282 pDb->zBusy = Tcl_Alloc( len + 1 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2283 memcpy(pDb->zBusy, zBusy, len+1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2284 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2285 pDb->zBusy = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2286 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2287 if( pDb->zBusy ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2288 pDb->interp = interp; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2289 sqlite3_busy_handler(pDb->db, DbBusyHandler, pDb); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2290 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2291 sqlite3_busy_handler(pDb->db, 0, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2292 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2293 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2294 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2295 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2296 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2297 /* $db cache flush |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2298 ** $db cache size n |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2299 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2300 ** Flush the prepared statement cache, or set the maximum number of |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2301 ** cached statements. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2302 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2303 case DB_CACHE: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2304 char *subCmd; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2305 int n; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2306 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2307 if( objc<=2 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2308 Tcl_WrongNumArgs(interp, 1, objv, "cache option ?arg?"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2309 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2310 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2311 subCmd = Tcl_GetStringFromObj( objv[2], 0 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2312 if( *subCmd=='f' && strcmp(subCmd,"flush")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2313 if( objc!=3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2314 Tcl_WrongNumArgs(interp, 2, objv, "flush"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2315 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2316 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2317 flushStmtCache( pDb ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2318 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2319 }else if( *subCmd=='s' && strcmp(subCmd,"size")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2320 if( objc!=4 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2321 Tcl_WrongNumArgs(interp, 2, objv, "size n"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2322 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2323 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2324 if( TCL_ERROR==Tcl_GetIntFromObj(interp, objv[3], &n) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2325 Tcl_AppendResult( interp, "cannot convert \"", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2326 Tcl_GetStringFromObj(objv[3],0), "\" to integer", (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2327 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2328 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2329 if( n<0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2330 flushStmtCache( pDb ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2331 n = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2332 }else if( n>MAX_PREPARED_STMTS ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2333 n = MAX_PREPARED_STMTS; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2334 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2335 pDb->maxStmt = n; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2336 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2337 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2338 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2339 Tcl_AppendResult( interp, "bad option \"", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2340 Tcl_GetStringFromObj(objv[2],0), "\": must be flush or size", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2341 (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2342 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2343 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2344 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2345 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2346 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2347 /* $db changes |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2348 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2349 ** Return the number of rows that were modified, inserted, or deleted by |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2350 ** the most recent INSERT, UPDATE or DELETE statement, not including |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2351 ** any changes made by trigger programs. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2352 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2353 case DB_CHANGES: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2354 Tcl_Obj *pResult; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2355 if( objc!=2 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2356 Tcl_WrongNumArgs(interp, 2, objv, ""); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2357 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2358 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2359 pResult = Tcl_GetObjResult(interp); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2360 Tcl_SetWideIntObj(pResult, sqlite3_changes64(pDb->db)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2361 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2362 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2363 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2364 /* $db close |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2365 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2366 ** Shutdown the database |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2367 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2368 case DB_CLOSE: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2369 Tcl_DeleteCommand(interp, Tcl_GetStringFromObj(objv[0], 0)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2370 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2371 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2372 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2373 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2374 ** $db collate NAME SCRIPT |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2375 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2376 ** Create a new SQL collation function called NAME. Whenever |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2377 ** that function is called, invoke SCRIPT to evaluate the function. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2378 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2379 case DB_COLLATE: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2380 SqlCollate *pCollate; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2381 char *zName; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2382 char *zScript; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2383 Tcl_Size nScript; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2384 if( objc!=4 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2385 Tcl_WrongNumArgs(interp, 2, objv, "NAME SCRIPT"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2386 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2387 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2388 zName = Tcl_GetStringFromObj(objv[2], 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2389 zScript = Tcl_GetStringFromObj(objv[3], &nScript); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2390 pCollate = (SqlCollate*)Tcl_Alloc( sizeof(*pCollate) + nScript + 1 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2391 if( pCollate==0 ) return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2392 pCollate->interp = interp; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2393 pCollate->pNext = pDb->pCollate; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2394 pCollate->zScript = (char*)&pCollate[1]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2395 pDb->pCollate = pCollate; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2396 memcpy(pCollate->zScript, zScript, nScript+1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2397 if( sqlite3_create_collation(pDb->db, zName, SQLITE_UTF8, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2398 pCollate, tclSqlCollate) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2399 Tcl_SetResult(interp, (char *)sqlite3_errmsg(pDb->db), TCL_VOLATILE); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2400 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2401 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2402 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2403 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2404 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2405 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2406 ** $db collation_needed SCRIPT |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2407 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2408 ** Create a new SQL collation function called NAME. Whenever |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2409 ** that function is called, invoke SCRIPT to evaluate the function. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2410 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2411 case DB_COLLATION_NEEDED: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2412 if( objc!=3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2413 Tcl_WrongNumArgs(interp, 2, objv, "SCRIPT"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2414 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2415 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2416 if( pDb->pCollateNeeded ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2417 Tcl_DecrRefCount(pDb->pCollateNeeded); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2418 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2419 pDb->pCollateNeeded = Tcl_DuplicateObj(objv[2]); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2420 Tcl_IncrRefCount(pDb->pCollateNeeded); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2421 sqlite3_collation_needed(pDb->db, pDb, tclCollateNeeded); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2422 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2423 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2424 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2425 /* $db commit_hook ?CALLBACK? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2426 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2427 ** Invoke the given callback just before committing every SQL transaction. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2428 ** If the callback throws an exception or returns non-zero, then the |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2429 ** transaction is aborted. If CALLBACK is an empty string, the callback |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2430 ** is disabled. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2431 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2432 case DB_COMMIT_HOOK: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2433 if( objc>3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2434 Tcl_WrongNumArgs(interp, 2, objv, "?CALLBACK?"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2435 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2436 }else if( objc==2 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2437 if( pDb->zCommit ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2438 Tcl_AppendResult(interp, pDb->zCommit, (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2439 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2440 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2441 const char *zCommit; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2442 Tcl_Size len; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2443 if( pDb->zCommit ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2444 Tcl_Free(pDb->zCommit); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2445 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2446 zCommit = Tcl_GetStringFromObj(objv[2], &len); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2447 if( zCommit && len>0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2448 pDb->zCommit = Tcl_Alloc( len + 1 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2449 memcpy(pDb->zCommit, zCommit, len+1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2450 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2451 pDb->zCommit = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2452 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2453 if( pDb->zCommit ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2454 pDb->interp = interp; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2455 sqlite3_commit_hook(pDb->db, DbCommitHandler, pDb); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2456 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2457 sqlite3_commit_hook(pDb->db, 0, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2458 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2459 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2460 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2461 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2462 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2463 /* $db complete SQL |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2464 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2465 ** Return TRUE if SQL is a complete SQL statement. Return FALSE if |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2466 ** additional lines of input are needed. This is similar to the |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2467 ** built-in "info complete" command of Tcl. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2468 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2469 case DB_COMPLETE: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2470 #ifndef SQLITE_OMIT_COMPLETE |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2471 Tcl_Obj *pResult; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2472 int isComplete; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2473 if( objc!=3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2474 Tcl_WrongNumArgs(interp, 2, objv, "SQL"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2475 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2476 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2477 isComplete = sqlite3_complete( Tcl_GetStringFromObj(objv[2], 0) ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2478 pResult = Tcl_GetObjResult(interp); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2479 Tcl_SetBooleanObj(pResult, isComplete); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2480 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2481 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2482 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2483 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2484 /* $db config ?OPTION? ?BOOLEAN? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2485 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2486 ** Configure the database connection using the sqlite3_db_config() |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2487 ** interface. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2488 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2489 case DB_CONFIG: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2490 static const struct DbConfigChoices { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2491 const char *zName; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2492 int op; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2493 } aDbConfig[] = { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2494 { "defensive", SQLITE_DBCONFIG_DEFENSIVE }, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2495 { "dqs_ddl", SQLITE_DBCONFIG_DQS_DDL }, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2496 { "dqs_dml", SQLITE_DBCONFIG_DQS_DML }, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2497 { "enable_fkey", SQLITE_DBCONFIG_ENABLE_FKEY }, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2498 { "enable_qpsg", SQLITE_DBCONFIG_ENABLE_QPSG }, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2499 { "enable_trigger", SQLITE_DBCONFIG_ENABLE_TRIGGER }, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2500 { "enable_view", SQLITE_DBCONFIG_ENABLE_VIEW }, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2501 { "fts3_tokenizer", SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER }, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2502 { "legacy_alter_table", SQLITE_DBCONFIG_LEGACY_ALTER_TABLE }, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2503 { "legacy_file_format", SQLITE_DBCONFIG_LEGACY_FILE_FORMAT }, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2504 { "load_extension", SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION }, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2505 { "no_ckpt_on_close", SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE }, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2506 { "reset_database", SQLITE_DBCONFIG_RESET_DATABASE }, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2507 { "trigger_eqp", SQLITE_DBCONFIG_TRIGGER_EQP }, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2508 { "trusted_schema", SQLITE_DBCONFIG_TRUSTED_SCHEMA }, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2509 { "writable_schema", SQLITE_DBCONFIG_WRITABLE_SCHEMA }, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2510 }; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2511 Tcl_Obj *pResult; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2512 int ii; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2513 if( objc>4 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2514 Tcl_WrongNumArgs(interp, 2, objv, "?OPTION? ?BOOLEAN?"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2515 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2516 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2517 if( objc==2 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2518 /* With no arguments, list all configuration options and with the |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2519 ** current value */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2520 pResult = Tcl_NewListObj(0,0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2521 for(ii=0; ii<sizeof(aDbConfig)/sizeof(aDbConfig[0]); ii++){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2522 int v = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2523 sqlite3_db_config(pDb->db, aDbConfig[ii].op, -1, &v); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2524 Tcl_ListObjAppendElement(interp, pResult, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2525 Tcl_NewStringObj(aDbConfig[ii].zName,-1)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2526 Tcl_ListObjAppendElement(interp, pResult, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2527 Tcl_NewIntObj(v)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2528 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2529 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2530 const char *zOpt = Tcl_GetString(objv[2]); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2531 int onoff = -1; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2532 int v = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2533 if( zOpt[0]=='-' ) zOpt++; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2534 for(ii=0; ii<sizeof(aDbConfig)/sizeof(aDbConfig[0]); ii++){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2535 if( strcmp(aDbConfig[ii].zName, zOpt)==0 ) break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2536 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2537 if( ii>=sizeof(aDbConfig)/sizeof(aDbConfig[0]) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2538 Tcl_AppendResult(interp, "unknown config option: \"", zOpt, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2539 "\"", (void*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2540 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2541 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2542 if( objc==4 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2543 if( Tcl_GetBooleanFromObj(interp, objv[3], &onoff) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2544 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2545 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2546 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2547 sqlite3_db_config(pDb->db, aDbConfig[ii].op, onoff, &v); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2548 pResult = Tcl_NewIntObj(v); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2549 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2550 Tcl_SetObjResult(interp, pResult); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2551 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2552 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2553 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2554 /* $db copy conflict-algorithm table filename ?SEPARATOR? ?NULLINDICATOR? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2555 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2556 ** Copy data into table from filename, optionally using SEPARATOR |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2557 ** as column separators. If a column contains a null string, or the |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2558 ** value of NULLINDICATOR, a NULL is inserted for the column. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2559 ** conflict-algorithm is one of the sqlite conflict algorithms: |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2560 ** rollback, abort, fail, ignore, replace |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2561 ** On success, return the number of lines processed, not necessarily same |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2562 ** as 'db changes' due to conflict-algorithm selected. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2563 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2564 ** This code is basically an implementation/enhancement of |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2565 ** the sqlite3 shell.c ".import" command. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2566 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2567 ** This command usage is equivalent to the sqlite2.x COPY statement, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2568 ** which imports file data into a table using the PostgreSQL COPY file format: |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2569 ** $db copy $conflict_algorithm $table_name $filename \t \\N |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2570 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2571 case DB_COPY: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2572 char *zTable; /* Insert data into this table */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2573 char *zFile; /* The file from which to extract data */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2574 char *zConflict; /* The conflict algorithm to use */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2575 sqlite3_stmt *pStmt; /* A statement */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2576 int nCol; /* Number of columns in the table */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2577 int nByte; /* Number of bytes in an SQL string */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2578 int i, j; /* Loop counters */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2579 int nSep; /* Number of bytes in zSep[] */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2580 int nNull; /* Number of bytes in zNull[] */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2581 char *zSql; /* An SQL statement */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2582 char *zLine; /* A single line of input from the file */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2583 char **azCol; /* zLine[] broken up into columns */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2584 const char *zCommit; /* How to commit changes */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2585 Tcl_Channel in; /* The input file */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2586 int lineno = 0; /* Line number of input file */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2587 char zLineNum[80]; /* Line number print buffer */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2588 Tcl_Obj *str; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2589 Tcl_Obj *pResult; /* interp result */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2590 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2591 const char *zSep; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2592 const char *zNull; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2593 if( objc<5 || objc>7 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2594 Tcl_WrongNumArgs(interp, 2, objv, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2595 "CONFLICT-ALGORITHM TABLE FILENAME ?SEPARATOR? ?NULLINDICATOR?"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2596 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2597 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2598 if( objc>=6 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2599 zSep = Tcl_GetStringFromObj(objv[5], 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2600 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2601 zSep = "\t"; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2602 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2603 if( objc>=7 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2604 zNull = Tcl_GetStringFromObj(objv[6], 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2605 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2606 zNull = ""; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2607 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2608 zConflict = Tcl_GetStringFromObj(objv[2], 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2609 zTable = Tcl_GetStringFromObj(objv[3], 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2610 zFile = Tcl_GetStringFromObj(objv[4], 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2611 nSep = strlen30(zSep); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2612 nNull = strlen30(zNull); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2613 if( nSep==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2614 Tcl_AppendResult(interp,"Error: non-null separator required for copy", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2615 (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2616 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2617 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2618 if(strcmp(zConflict, "rollback") != 0 && |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2619 strcmp(zConflict, "abort" ) != 0 && |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2620 strcmp(zConflict, "fail" ) != 0 && |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2621 strcmp(zConflict, "ignore" ) != 0 && |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2622 strcmp(zConflict, "replace" ) != 0 ) { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2623 Tcl_AppendResult(interp, "Error: \"", zConflict, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2624 "\", conflict-algorithm must be one of: rollback, " |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2625 "abort, fail, ignore, or replace", (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2626 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2627 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2628 zSql = sqlite3_mprintf("SELECT * FROM '%q'", zTable); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2629 if( zSql==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2630 Tcl_AppendResult(interp, "Error: no such table: ", zTable, (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2631 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2632 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2633 nByte = strlen30(zSql); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2634 rc = sqlite3_prepare(pDb->db, zSql, -1, &pStmt, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2635 sqlite3_free(zSql); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2636 if( rc ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2637 Tcl_AppendResult(interp, "Error: ", sqlite3_errmsg(pDb->db), (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2638 nCol = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2639 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2640 nCol = sqlite3_column_count(pStmt); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2641 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2642 sqlite3_finalize(pStmt); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2643 if( nCol==0 ) { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2644 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2645 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2646 zSql = malloc( nByte + 50 + nCol*2 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2647 if( zSql==0 ) { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2648 Tcl_AppendResult(interp, "Error: can't malloc()", (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2649 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2650 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2651 sqlite3_snprintf(nByte+50, zSql, "INSERT OR %q INTO '%q' VALUES(?", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2652 zConflict, zTable); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2653 j = strlen30(zSql); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2654 for(i=1; i<nCol; i++){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2655 zSql[j++] = ','; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2656 zSql[j++] = '?'; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2657 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2658 zSql[j++] = ')'; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2659 zSql[j] = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2660 rc = sqlite3_prepare(pDb->db, zSql, -1, &pStmt, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2661 free(zSql); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2662 if( rc ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2663 Tcl_AppendResult(interp, "Error: ", sqlite3_errmsg(pDb->db), (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2664 sqlite3_finalize(pStmt); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2665 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2666 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2667 in = Tcl_OpenFileChannel(interp, zFile, "rb", 0666); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2668 if( in==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2669 sqlite3_finalize(pStmt); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2670 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2671 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2672 Tcl_SetChannelOption(NULL, in, "-translation", "auto"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2673 azCol = malloc( sizeof(azCol[0])*(nCol+1) ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2674 if( azCol==0 ) { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2675 Tcl_AppendResult(interp, "Error: can't malloc()", (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2676 Tcl_Close(interp, in); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2677 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2678 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2679 str = Tcl_NewObj(); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2680 Tcl_IncrRefCount(str); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2681 (void)sqlite3_exec(pDb->db, "BEGIN", 0, 0, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2682 zCommit = "COMMIT"; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2683 while( Tcl_GetsObj(in, str)>=0 ) { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2684 char *z; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2685 Tcl_Size byteLen; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2686 lineno++; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2687 zLine = (char *)Tcl_GetByteArrayFromObj(str, &byteLen); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2688 azCol[0] = zLine; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2689 for(i=0, z=zLine; *z; z++){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2690 if( *z==zSep[0] && strncmp(z, zSep, nSep)==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2691 *z = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2692 i++; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2693 if( i<nCol ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2694 azCol[i] = &z[nSep]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2695 z += nSep-1; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2696 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2697 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2698 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2699 if( i+1!=nCol ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2700 char *zErr; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2701 int nErr = strlen30(zFile) + 200; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2702 zErr = malloc(nErr); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2703 if( zErr ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2704 sqlite3_snprintf(nErr, zErr, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2705 "Error: %s line %d: expected %d columns of data but found %d", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2706 zFile, lineno, nCol, i+1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2707 Tcl_AppendResult(interp, zErr, (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2708 free(zErr); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2709 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2710 zCommit = "ROLLBACK"; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2711 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2712 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2713 for(i=0; i<nCol; i++){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2714 /* check for null data, if so, bind as null */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2715 if( (nNull>0 && strcmp(azCol[i], zNull)==0) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2716 || strlen30(azCol[i])==0 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2717 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2718 sqlite3_bind_null(pStmt, i+1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2719 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2720 sqlite3_bind_text(pStmt, i+1, azCol[i], -1, SQLITE_STATIC); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2721 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2722 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2723 sqlite3_step(pStmt); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2724 rc = sqlite3_reset(pStmt); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2725 Tcl_SetObjLength(str, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2726 if( rc!=SQLITE_OK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2727 Tcl_AppendResult(interp,"Error: ", sqlite3_errmsg(pDb->db), (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2728 zCommit = "ROLLBACK"; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2729 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2730 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2731 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2732 Tcl_DecrRefCount(str); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2733 free(azCol); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2734 Tcl_Close(interp, in); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2735 sqlite3_finalize(pStmt); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2736 (void)sqlite3_exec(pDb->db, zCommit, 0, 0, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2737 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2738 if( zCommit[0] == 'C' ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2739 /* success, set result as number of lines processed */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2740 pResult = Tcl_GetObjResult(interp); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2741 Tcl_SetIntObj(pResult, lineno); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2742 rc = TCL_OK; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2743 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2744 /* failure, append lineno where failed */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2745 sqlite3_snprintf(sizeof(zLineNum), zLineNum,"%d",lineno); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2746 Tcl_AppendResult(interp,", failed while processing line: ",zLineNum, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2747 (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2748 rc = TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2749 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2750 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2751 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2752 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2753 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2754 ** $db deserialize ?-maxsize N? ?-readonly BOOL? ?DATABASE? VALUE |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2755 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2756 ** Reopen DATABASE (default "main") using the content in $VALUE |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2757 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2758 case DB_DESERIALIZE: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2759 #ifdef SQLITE_OMIT_DESERIALIZE |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2760 Tcl_AppendResult(interp, "MEMDB not available in this build", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2761 (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2762 rc = TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2763 #else |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2764 const char *zSchema = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2765 Tcl_Obj *pValue = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2766 unsigned char *pBA; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2767 unsigned char *pData; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2768 Tcl_Size len; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2769 int xrc; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2770 sqlite3_int64 mxSize = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2771 int i; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2772 int isReadonly = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2773 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2774 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2775 if( objc<3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2776 Tcl_WrongNumArgs(interp, 2, objv, "?DATABASE? VALUE"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2777 rc = TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2778 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2779 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2780 for(i=2; i<objc-1; i++){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2781 const char *z = Tcl_GetString(objv[i]); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2782 if( strcmp(z,"-maxsize")==0 && i<objc-2 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2783 Tcl_WideInt x; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2784 rc = Tcl_GetWideIntFromObj(interp, objv[++i], &x); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2785 if( rc ) goto deserialize_error; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2786 mxSize = x; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2787 continue; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2788 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2789 if( strcmp(z,"-readonly")==0 && i<objc-2 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2790 rc = Tcl_GetBooleanFromObj(interp, objv[++i], &isReadonly); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2791 if( rc ) goto deserialize_error; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2792 continue; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2793 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2794 if( zSchema==0 && i==objc-2 && z[0]!='-' ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2795 zSchema = z; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2796 continue; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2797 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2798 Tcl_AppendResult(interp, "unknown option: ", z, (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2799 rc = TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2800 goto deserialize_error; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2801 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2802 pValue = objv[objc-1]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2803 pBA = Tcl_GetByteArrayFromObj(pValue, &len); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2804 pData = sqlite3_malloc64( len ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2805 if( pData==0 && len>0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2806 Tcl_AppendResult(interp, "out of memory", (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2807 rc = TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2808 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2809 int flags; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2810 if( len>0 ) memcpy(pData, pBA, len); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2811 if( isReadonly ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2812 flags = SQLITE_DESERIALIZE_FREEONCLOSE | SQLITE_DESERIALIZE_READONLY; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2813 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2814 flags = SQLITE_DESERIALIZE_FREEONCLOSE | SQLITE_DESERIALIZE_RESIZEABLE; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2815 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2816 xrc = sqlite3_deserialize(pDb->db, zSchema, pData, len, len, flags); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2817 if( xrc ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2818 Tcl_AppendResult(interp, "unable to set MEMDB content", (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2819 rc = TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2820 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2821 if( mxSize>0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2822 sqlite3_file_control(pDb->db, zSchema,SQLITE_FCNTL_SIZE_LIMIT,&mxSize); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2823 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2824 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2825 deserialize_error: |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2826 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2827 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2828 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2829 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2830 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2831 ** $db enable_load_extension BOOLEAN |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2832 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2833 ** Turn the extension loading feature on or off. It if off by |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2834 ** default. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2835 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2836 case DB_ENABLE_LOAD_EXTENSION: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2837 #ifndef SQLITE_OMIT_LOAD_EXTENSION |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2838 int onoff; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2839 if( objc!=3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2840 Tcl_WrongNumArgs(interp, 2, objv, "BOOLEAN"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2841 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2842 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2843 if( Tcl_GetBooleanFromObj(interp, objv[2], &onoff) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2844 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2845 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2846 sqlite3_enable_load_extension(pDb->db, onoff); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2847 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2848 #else |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2849 Tcl_AppendResult(interp, "extension loading is turned off at compile-time", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2850 (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2851 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2852 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2853 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2854 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2855 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2856 ** $db errorcode |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2857 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2858 ** Return the numeric error code that was returned by the most recent |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2859 ** call to sqlite3_exec(). |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2860 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2861 case DB_ERRORCODE: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2862 Tcl_SetObjResult(interp, Tcl_NewIntObj(sqlite3_errcode(pDb->db))); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2863 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2864 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2865 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2866 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2867 ** $db erroroffset |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2868 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2869 ** Return the numeric error code that was returned by the most recent |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2870 ** call to sqlite3_exec(). |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2871 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2872 case DB_ERROROFFSET: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2873 Tcl_SetObjResult(interp, Tcl_NewIntObj(sqlite3_error_offset(pDb->db))); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2874 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2875 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2876 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2877 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2878 ** $db exists $sql |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2879 ** $db onecolumn $sql |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2880 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2881 ** The onecolumn method is the equivalent of: |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2882 ** lindex [$db eval $sql] 0 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2883 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2884 case DB_EXISTS: |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2885 case DB_ONECOLUMN: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2886 Tcl_Obj *pResult = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2887 DbEvalContext sEval; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2888 if( objc!=3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2889 Tcl_WrongNumArgs(interp, 2, objv, "SQL"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2890 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2891 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2892 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2893 dbEvalInit(&sEval, pDb, objv[2], 0, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2894 rc = dbEvalStep(&sEval); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2895 if( choice==DB_ONECOLUMN ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2896 if( rc==TCL_OK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2897 pResult = dbEvalColumnValue(&sEval, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2898 }else if( rc==TCL_BREAK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2899 Tcl_ResetResult(interp); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2900 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2901 }else if( rc==TCL_BREAK || rc==TCL_OK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2902 pResult = Tcl_NewBooleanObj(rc==TCL_OK); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2903 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2904 dbEvalFinalize(&sEval); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2905 if( pResult ) Tcl_SetObjResult(interp, pResult); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2906 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2907 if( rc==TCL_BREAK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2908 rc = TCL_OK; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2909 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2910 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2911 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2912 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2913 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2914 ** $db eval ?options? $sql ?varName? ?{ ...code... }? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2915 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2916 ** The SQL statement in $sql is evaluated. For each row, the values |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2917 ** are placed in elements of the array or dict named $varName and |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2918 ** ...code... is executed. If $varName and $code are omitted, then |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2919 ** no callback is ever invoked. If $varName is an empty string, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2920 ** then the values are placed in variables that have the same name |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2921 ** as the fields extracted by the query, and those variables are |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2922 ** accessible during the eval of $code. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2923 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2924 case DB_EVAL: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2925 int evalFlags = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2926 const char *zOpt; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2927 while( objc>3 && (zOpt = Tcl_GetString(objv[2]))!=0 && zOpt[0]=='-' ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2928 if( strcmp(zOpt, "-withoutnulls")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2929 evalFlags |= SQLITE_EVAL_WITHOUTNULLS; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2930 }else if( strcmp(zOpt, "-asdict")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2931 evalFlags |= SQLITE_EVAL_ASDICT; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2932 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2933 Tcl_AppendResult(interp, "unknown option: \"", zOpt, "\"", (void*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2934 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2935 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2936 objc--; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2937 objv++; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2938 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2939 if( objc<3 || objc>5 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2940 Tcl_WrongNumArgs(interp, 2, objv, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2941 "?OPTIONS? SQL ?VAR-NAME? ?SCRIPT?"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2942 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2943 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2944 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2945 if( objc==3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2946 DbEvalContext sEval; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2947 Tcl_Obj *pRet = Tcl_NewObj(); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2948 Tcl_IncrRefCount(pRet); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2949 dbEvalInit(&sEval, pDb, objv[2], 0, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2950 while( TCL_OK==(rc = dbEvalStep(&sEval)) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2951 int i; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2952 int nCol; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2953 dbEvalRowInfo(&sEval, &nCol, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2954 for(i=0; i<nCol; i++){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2955 Tcl_ListObjAppendElement(interp, pRet, dbEvalColumnValue(&sEval, i)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2956 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2957 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2958 dbEvalFinalize(&sEval); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2959 if( rc==TCL_BREAK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2960 Tcl_SetObjResult(interp, pRet); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2961 rc = TCL_OK; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2962 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2963 Tcl_DecrRefCount(pRet); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2964 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2965 ClientData cd2[2]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2966 DbEvalContext *p; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2967 Tcl_Obj *pVarName = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2968 Tcl_Obj *pScript; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2969 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2970 if( objc>=5 && *(char *)Tcl_GetString(objv[3]) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2971 pVarName = objv[3]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2972 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2973 pScript = objv[objc-1]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2974 Tcl_IncrRefCount(pScript); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2975 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2976 p = (DbEvalContext *)Tcl_Alloc(sizeof(DbEvalContext)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2977 dbEvalInit(p, pDb, objv[2], pVarName, evalFlags); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2978 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2979 cd2[0] = (void *)p; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2980 cd2[1] = (void *)pScript; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2981 rc = DbEvalNextCmd(cd2, interp, TCL_OK); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2982 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2983 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2984 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2985 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2986 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2987 ** $db function NAME [OPTIONS] SCRIPT |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2988 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2989 ** Create a new SQL function called NAME. Whenever that function is |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2990 ** called, invoke SCRIPT to evaluate the function. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2991 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2992 ** Options: |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2993 ** --argcount N Function has exactly N arguments |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2994 ** --deterministic The function is pure |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2995 ** --directonly Prohibit use inside triggers and views |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2996 ** --innocuous Has no side effects or information leaks |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2997 ** --returntype TYPE Specify the return type of the function |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2998 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2999 case DB_FUNCTION: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3000 int flags = SQLITE_UTF8; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3001 SqlFunc *pFunc; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3002 Tcl_Obj *pScript; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3003 char *zName; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3004 int nArg = -1; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3005 int i; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3006 int eType = SQLITE_NULL; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3007 if( objc<4 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3008 Tcl_WrongNumArgs(interp, 2, objv, "NAME ?SWITCHES? SCRIPT"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3009 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3010 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3011 for(i=3; i<(objc-1); i++){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3012 const char *z = Tcl_GetString(objv[i]); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3013 int n = strlen30(z); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3014 if( n>1 && strncmp(z, "-argcount",n)==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3015 if( i==(objc-2) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3016 Tcl_AppendResult(interp, "option requires an argument: ", z,(char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3017 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3018 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3019 if( Tcl_GetIntFromObj(interp, objv[i+1], &nArg) ) return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3020 if( nArg<0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3021 Tcl_AppendResult(interp, "number of arguments must be non-negative", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3022 (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3023 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3024 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3025 i++; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3026 }else |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3027 if( n>1 && strncmp(z, "-deterministic",n)==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3028 flags |= SQLITE_DETERMINISTIC; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3029 }else |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3030 if( n>1 && strncmp(z, "-directonly",n)==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3031 flags |= SQLITE_DIRECTONLY; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3032 }else |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3033 if( n>1 && strncmp(z, "-innocuous",n)==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3034 flags |= SQLITE_INNOCUOUS; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3035 }else |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3036 if( n>1 && strncmp(z, "-returntype", n)==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3037 const char *azType[] = {"integer", "real", "text", "blob", "any", 0}; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3038 assert( SQLITE_INTEGER==1 && SQLITE_FLOAT==2 && SQLITE_TEXT==3 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3039 assert( SQLITE_BLOB==4 && SQLITE_NULL==5 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3040 if( i==(objc-2) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3041 Tcl_AppendResult(interp, "option requires an argument: ", z,(char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3042 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3043 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3044 i++; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3045 if( Tcl_GetIndexFromObj(interp, objv[i], azType, "type", 0, &eType) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3046 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3047 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3048 eType++; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3049 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3050 Tcl_AppendResult(interp, "bad option \"", z, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3051 "\": must be -argcount, -deterministic, -directonly," |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3052 " -innocuous, or -returntype", (char*)0 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3053 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3054 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3055 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3056 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3057 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3058 pScript = objv[objc-1]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3059 zName = Tcl_GetStringFromObj(objv[2], 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3060 pFunc = findSqlFunc(pDb, zName); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3061 if( pFunc==0 ) return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3062 if( pFunc->pScript ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3063 Tcl_DecrRefCount(pFunc->pScript); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3064 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3065 pFunc->pScript = pScript; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3066 Tcl_IncrRefCount(pScript); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3067 pFunc->useEvalObjv = safeToUseEvalObjv(pScript); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3068 pFunc->eType = eType; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3069 rc = sqlite3_create_function(pDb->db, zName, nArg, flags, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3070 pFunc, tclSqlFunc, 0, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3071 if( rc!=SQLITE_OK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3072 rc = TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3073 Tcl_SetResult(interp, (char *)sqlite3_errmsg(pDb->db), TCL_VOLATILE); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3074 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3075 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3076 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3077 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3078 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3079 ** $db incrblob ?-readonly? ?DB? TABLE COLUMN ROWID |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3080 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3081 case DB_INCRBLOB: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3082 #ifdef SQLITE_OMIT_INCRBLOB |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3083 Tcl_AppendResult(interp, "incrblob not available in this build", (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3084 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3085 #else |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3086 int isReadonly = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3087 const char *zDb = "main"; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3088 const char *zTable; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3089 const char *zColumn; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3090 Tcl_WideInt iRow; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3091 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3092 /* Check for the -readonly option */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3093 if( objc>3 && strcmp(Tcl_GetString(objv[2]), "-readonly")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3094 isReadonly = 1; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3095 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3096 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3097 if( objc!=(5+isReadonly) && objc!=(6+isReadonly) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3098 Tcl_WrongNumArgs(interp, 2, objv, "?-readonly? ?DB? TABLE COLUMN ROWID"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3099 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3100 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3101 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3102 if( objc==(6+isReadonly) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3103 zDb = Tcl_GetString(objv[2+isReadonly]); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3104 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3105 zTable = Tcl_GetString(objv[objc-3]); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3106 zColumn = Tcl_GetString(objv[objc-2]); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3107 rc = Tcl_GetWideIntFromObj(interp, objv[objc-1], &iRow); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3108 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3109 if( rc==TCL_OK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3110 rc = createIncrblobChannel( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3111 interp, pDb, zDb, zTable, zColumn, (sqlite3_int64)iRow, isReadonly |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3112 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3113 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3114 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3115 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3116 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3117 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3118 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3119 ** $db interrupt |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3120 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3121 ** Interrupt the execution of the inner-most SQL interpreter. This |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3122 ** causes the SQL statement to return an error of SQLITE_INTERRUPT. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3123 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3124 case DB_INTERRUPT: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3125 sqlite3_interrupt(pDb->db); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3126 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3127 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3128 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3129 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3130 ** $db nullvalue ?STRING? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3131 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3132 ** Change text used when a NULL comes back from the database. If ?STRING? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3133 ** is not present, then the current string used for NULL is returned. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3134 ** If STRING is present, then STRING is returned. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3135 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3136 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3137 case DB_NULLVALUE: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3138 if( objc!=2 && objc!=3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3139 Tcl_WrongNumArgs(interp, 2, objv, "NULLVALUE"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3140 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3141 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3142 if( objc==3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3143 Tcl_Size len; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3144 char *zNull = Tcl_GetStringFromObj(objv[2], &len); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3145 if( pDb->zNull ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3146 Tcl_Free(pDb->zNull); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3147 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3148 if( zNull && len>0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3149 pDb->zNull = Tcl_Alloc( len + 1 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3150 memcpy(pDb->zNull, zNull, len); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3151 pDb->zNull[len] = '\0'; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3152 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3153 pDb->zNull = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3154 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3155 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3156 Tcl_SetObjResult(interp, Tcl_NewStringObj(pDb->zNull, -1)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3157 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3158 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3159 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3160 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3161 ** $db last_insert_rowid |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3162 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3163 ** Return an integer which is the ROWID for the most recent insert. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3164 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3165 case DB_LAST_INSERT_ROWID: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3166 Tcl_Obj *pResult; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3167 Tcl_WideInt rowid; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3168 if( objc!=2 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3169 Tcl_WrongNumArgs(interp, 2, objv, ""); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3170 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3171 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3172 rowid = sqlite3_last_insert_rowid(pDb->db); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3173 pResult = Tcl_GetObjResult(interp); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3174 Tcl_SetWideIntObj(pResult, rowid); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3175 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3176 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3177 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3178 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3179 ** The DB_ONECOLUMN method is implemented together with DB_EXISTS. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3180 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3181 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3182 /* $db progress ?N CALLBACK? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3183 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3184 ** Invoke the given callback every N virtual machine opcodes while executing |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3185 ** queries. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3186 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3187 case DB_PROGRESS: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3188 if( objc==2 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3189 if( pDb->zProgress ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3190 Tcl_AppendResult(interp, pDb->zProgress, (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3191 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3192 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3193 sqlite3_progress_handler(pDb->db, 0, 0, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3194 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3195 }else if( objc==4 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3196 char *zProgress; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3197 Tcl_Size len; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3198 int N; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3199 if( TCL_OK!=Tcl_GetIntFromObj(interp, objv[2], &N) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3200 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3201 }; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3202 if( pDb->zProgress ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3203 Tcl_Free(pDb->zProgress); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3204 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3205 zProgress = Tcl_GetStringFromObj(objv[3], &len); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3206 if( zProgress && len>0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3207 pDb->zProgress = Tcl_Alloc( len + 1 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3208 memcpy(pDb->zProgress, zProgress, len+1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3209 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3210 pDb->zProgress = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3211 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3212 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3213 if( pDb->zProgress ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3214 pDb->interp = interp; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3215 sqlite3_progress_handler(pDb->db, N, DbProgressHandler, pDb); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3216 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3217 sqlite3_progress_handler(pDb->db, 0, 0, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3218 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3219 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3220 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3221 Tcl_WrongNumArgs(interp, 2, objv, "N CALLBACK"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3222 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3223 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3224 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3225 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3226 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3227 /* $db profile ?CALLBACK? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3228 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3229 ** Make arrangements to invoke the CALLBACK routine after each SQL statement |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3230 ** that has run. The text of the SQL and the amount of elapse time are |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3231 ** appended to CALLBACK before the script is run. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3232 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3233 case DB_PROFILE: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3234 if( objc>3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3235 Tcl_WrongNumArgs(interp, 2, objv, "?CALLBACK?"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3236 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3237 }else if( objc==2 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3238 if( pDb->zProfile ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3239 Tcl_AppendResult(interp, pDb->zProfile, (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3240 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3241 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3242 char *zProfile; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3243 Tcl_Size len; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3244 if( pDb->zProfile ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3245 Tcl_Free(pDb->zProfile); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3246 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3247 zProfile = Tcl_GetStringFromObj(objv[2], &len); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3248 if( zProfile && len>0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3249 pDb->zProfile = Tcl_Alloc( len + 1 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3250 memcpy(pDb->zProfile, zProfile, len+1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3251 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3252 pDb->zProfile = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3253 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3254 #if !defined(SQLITE_OMIT_TRACE) && !defined(SQLITE_OMIT_FLOATING_POINT) && \ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3255 !defined(SQLITE_OMIT_DEPRECATED) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3256 if( pDb->zProfile ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3257 pDb->interp = interp; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3258 sqlite3_profile(pDb->db, DbProfileHandler, pDb); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3259 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3260 sqlite3_profile(pDb->db, 0, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3261 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3262 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3263 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3264 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3265 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3266 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3267 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3268 ** $db rekey KEY |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3269 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3270 ** Change the encryption key on the currently open database. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3271 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3272 case DB_REKEY: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3273 if( objc!=3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3274 Tcl_WrongNumArgs(interp, 2, objv, "KEY"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3275 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3276 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3277 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3278 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3279 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3280 /* $db restore ?DATABASE? FILENAME |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3281 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3282 ** Open a database file named FILENAME. Transfer the content |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3283 ** of FILENAME into the local database DATABASE (default: "main"). |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3284 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3285 case DB_RESTORE: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3286 const char *zSrcFile; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3287 const char *zDestDb; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3288 sqlite3 *pSrc; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3289 sqlite3_backup *pBackup; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3290 int nTimeout = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3291 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3292 if( objc==3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3293 zDestDb = "main"; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3294 zSrcFile = Tcl_GetString(objv[2]); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3295 }else if( objc==4 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3296 zDestDb = Tcl_GetString(objv[2]); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3297 zSrcFile = Tcl_GetString(objv[3]); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3298 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3299 Tcl_WrongNumArgs(interp, 2, objv, "?DATABASE? FILENAME"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3300 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3301 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3302 rc = sqlite3_open_v2(zSrcFile, &pSrc, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3303 SQLITE_OPEN_READONLY | pDb->openFlags, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3304 if( rc!=SQLITE_OK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3305 Tcl_AppendResult(interp, "cannot open source database: ", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3306 sqlite3_errmsg(pSrc), (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3307 sqlite3_close(pSrc); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3308 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3309 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3310 pBackup = sqlite3_backup_init(pDb->db, zDestDb, pSrc, "main"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3311 if( pBackup==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3312 Tcl_AppendResult(interp, "restore failed: ", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3313 sqlite3_errmsg(pDb->db), (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3314 sqlite3_close(pSrc); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3315 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3316 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3317 while( (rc = sqlite3_backup_step(pBackup,100))==SQLITE_OK |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3318 || rc==SQLITE_BUSY ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3319 if( rc==SQLITE_BUSY ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3320 if( nTimeout++ >= 3 ) break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3321 sqlite3_sleep(100); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3322 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3323 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3324 sqlite3_backup_finish(pBackup); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3325 if( rc==SQLITE_DONE ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3326 rc = TCL_OK; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3327 }else if( rc==SQLITE_BUSY || rc==SQLITE_LOCKED ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3328 Tcl_AppendResult(interp, "restore failed: source database busy", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3329 (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3330 rc = TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3331 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3332 Tcl_AppendResult(interp, "restore failed: ", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3333 sqlite3_errmsg(pDb->db), (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3334 rc = TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3335 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3336 sqlite3_close(pSrc); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3337 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3338 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3339 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3340 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3341 ** $db serialize ?DATABASE? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3342 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3343 ** Return a serialization of a database. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3344 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3345 case DB_SERIALIZE: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3346 #ifdef SQLITE_OMIT_DESERIALIZE |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3347 Tcl_AppendResult(interp, "MEMDB not available in this build", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3348 (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3349 rc = TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3350 #else |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3351 const char *zSchema = objc>=3 ? Tcl_GetString(objv[2]) : "main"; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3352 sqlite3_int64 sz = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3353 unsigned char *pData; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3354 if( objc!=2 && objc!=3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3355 Tcl_WrongNumArgs(interp, 2, objv, "?DATABASE?"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3356 rc = TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3357 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3358 int needFree; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3359 pData = sqlite3_serialize(pDb->db, zSchema, &sz, SQLITE_SERIALIZE_NOCOPY); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3360 if( pData ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3361 needFree = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3362 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3363 pData = sqlite3_serialize(pDb->db, zSchema, &sz, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3364 needFree = 1; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3365 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3366 Tcl_SetObjResult(interp, Tcl_NewByteArrayObj(pData,sz)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3367 if( needFree ) sqlite3_free(pData); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3368 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3369 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3370 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3371 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3372 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3373 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3374 ** $db status (step|sort|autoindex|vmstep) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3375 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3376 ** Display SQLITE_STMTSTATUS_FULLSCAN_STEP or |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3377 ** SQLITE_STMTSTATUS_SORT for the most recent eval. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3378 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3379 case DB_STATUS: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3380 int v; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3381 const char *zOp; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3382 if( objc!=3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3383 Tcl_WrongNumArgs(interp, 2, objv, "(step|sort|autoindex)"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3384 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3385 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3386 zOp = Tcl_GetString(objv[2]); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3387 if( strcmp(zOp, "step")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3388 v = pDb->nStep; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3389 }else if( strcmp(zOp, "sort")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3390 v = pDb->nSort; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3391 }else if( strcmp(zOp, "autoindex")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3392 v = pDb->nIndex; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3393 }else if( strcmp(zOp, "vmstep")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3394 v = pDb->nVMStep; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3395 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3396 Tcl_AppendResult(interp, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3397 "bad argument: should be autoindex, step, sort or vmstep", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3398 (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3399 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3400 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3401 Tcl_SetObjResult(interp, Tcl_NewIntObj(v)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3402 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3403 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3404 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3405 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3406 ** $db timeout MILLESECONDS |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3407 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3408 ** Delay for the number of milliseconds specified when a file is locked. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3409 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3410 case DB_TIMEOUT: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3411 int ms; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3412 if( objc!=3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3413 Tcl_WrongNumArgs(interp, 2, objv, "MILLISECONDS"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3414 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3415 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3416 if( Tcl_GetIntFromObj(interp, objv[2], &ms) ) return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3417 sqlite3_busy_timeout(pDb->db, ms); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3418 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3419 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3420 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3421 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3422 ** $db total_changes |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3423 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3424 ** Return the number of rows that were modified, inserted, or deleted |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3425 ** since the database handle was created. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3426 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3427 case DB_TOTAL_CHANGES: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3428 Tcl_Obj *pResult; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3429 if( objc!=2 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3430 Tcl_WrongNumArgs(interp, 2, objv, ""); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3431 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3432 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3433 pResult = Tcl_GetObjResult(interp); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3434 Tcl_SetWideIntObj(pResult, sqlite3_total_changes64(pDb->db)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3435 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3436 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3437 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3438 /* $db trace ?CALLBACK? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3439 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3440 ** Make arrangements to invoke the CALLBACK routine for each SQL statement |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3441 ** that is executed. The text of the SQL is appended to CALLBACK before |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3442 ** it is executed. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3443 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3444 case DB_TRACE: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3445 if( objc>3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3446 Tcl_WrongNumArgs(interp, 2, objv, "?CALLBACK?"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3447 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3448 }else if( objc==2 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3449 if( pDb->zTrace ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3450 Tcl_AppendResult(interp, pDb->zTrace, (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3451 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3452 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3453 char *zTrace; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3454 Tcl_Size len; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3455 if( pDb->zTrace ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3456 Tcl_Free(pDb->zTrace); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3457 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3458 zTrace = Tcl_GetStringFromObj(objv[2], &len); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3459 if( zTrace && len>0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3460 pDb->zTrace = Tcl_Alloc( len + 1 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3461 memcpy(pDb->zTrace, zTrace, len+1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3462 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3463 pDb->zTrace = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3464 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3465 #if !defined(SQLITE_OMIT_TRACE) && !defined(SQLITE_OMIT_FLOATING_POINT) && \ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3466 !defined(SQLITE_OMIT_DEPRECATED) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3467 if( pDb->zTrace ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3468 pDb->interp = interp; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3469 sqlite3_trace(pDb->db, DbTraceHandler, pDb); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3470 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3471 sqlite3_trace(pDb->db, 0, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3472 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3473 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3474 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3475 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3476 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3477 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3478 /* $db trace_v2 ?CALLBACK? ?MASK? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3479 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3480 ** Make arrangements to invoke the CALLBACK routine for each trace event |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3481 ** matching the mask that is generated. The parameters are appended to |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3482 ** CALLBACK before it is executed. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3483 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3484 case DB_TRACE_V2: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3485 if( objc>4 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3486 Tcl_WrongNumArgs(interp, 2, objv, "?CALLBACK? ?MASK?"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3487 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3488 }else if( objc==2 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3489 if( pDb->zTraceV2 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3490 Tcl_AppendResult(interp, pDb->zTraceV2, (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3491 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3492 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3493 char *zTraceV2; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3494 Tcl_Size len; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3495 Tcl_WideInt wMask = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3496 if( objc==4 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3497 static const char *TTYPE_strs[] = { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3498 "statement", "profile", "row", "close", 0 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3499 }; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3500 enum TTYPE_enum { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3501 TTYPE_STMT, TTYPE_PROFILE, TTYPE_ROW, TTYPE_CLOSE |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3502 }; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3503 Tcl_Size i; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3504 if( TCL_OK!=Tcl_ListObjLength(interp, objv[3], &len) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3505 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3506 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3507 for(i=0; i<len; i++){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3508 Tcl_Obj *pObj; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3509 int ttype; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3510 if( TCL_OK!=Tcl_ListObjIndex(interp, objv[3], i, &pObj) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3511 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3512 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3513 if( Tcl_GetIndexFromObj(interp, pObj, TTYPE_strs, "trace type", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3514 0, &ttype)!=TCL_OK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3515 Tcl_WideInt wType; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3516 Tcl_Obj *pError = Tcl_DuplicateObj(Tcl_GetObjResult(interp)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3517 Tcl_IncrRefCount(pError); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3518 if( TCL_OK==Tcl_GetWideIntFromObj(interp, pObj, &wType) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3519 Tcl_DecrRefCount(pError); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3520 wMask |= wType; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3521 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3522 Tcl_SetObjResult(interp, pError); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3523 Tcl_DecrRefCount(pError); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3524 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3525 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3526 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3527 switch( (enum TTYPE_enum)ttype ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3528 case TTYPE_STMT: wMask |= SQLITE_TRACE_STMT; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3529 case TTYPE_PROFILE: wMask |= SQLITE_TRACE_PROFILE; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3530 case TTYPE_ROW: wMask |= SQLITE_TRACE_ROW; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3531 case TTYPE_CLOSE: wMask |= SQLITE_TRACE_CLOSE; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3532 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3533 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3534 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3535 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3536 wMask = SQLITE_TRACE_STMT; /* use the "legacy" default */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3537 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3538 if( pDb->zTraceV2 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3539 Tcl_Free(pDb->zTraceV2); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3540 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3541 zTraceV2 = Tcl_GetStringFromObj(objv[2], &len); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3542 if( zTraceV2 && len>0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3543 pDb->zTraceV2 = Tcl_Alloc( len + 1 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3544 memcpy(pDb->zTraceV2, zTraceV2, len+1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3545 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3546 pDb->zTraceV2 = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3547 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3548 #if !defined(SQLITE_OMIT_TRACE) && !defined(SQLITE_OMIT_FLOATING_POINT) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3549 if( pDb->zTraceV2 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3550 pDb->interp = interp; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3551 sqlite3_trace_v2(pDb->db, (unsigned)wMask, DbTraceV2Handler, pDb); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3552 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3553 sqlite3_trace_v2(pDb->db, 0, 0, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3554 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3555 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3556 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3557 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3558 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3559 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3560 /* $db transaction [-deferred|-immediate|-exclusive] SCRIPT |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3561 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3562 ** Start a new transaction (if we are not already in the midst of a |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3563 ** transaction) and execute the TCL script SCRIPT. After SCRIPT |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3564 ** completes, either commit the transaction or roll it back if SCRIPT |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3565 ** throws an exception. Or if no new transaction was started, do nothing. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3566 ** pass the exception on up the stack. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3567 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3568 ** This command was inspired by Dave Thomas's talk on Ruby at the |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3569 ** 2005 O'Reilly Open Source Convention (OSCON). |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3570 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3571 case DB_TRANSACTION: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3572 Tcl_Obj *pScript; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3573 const char *zBegin = "SAVEPOINT _tcl_transaction"; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3574 if( objc!=3 && objc!=4 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3575 Tcl_WrongNumArgs(interp, 2, objv, "[TYPE] SCRIPT"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3576 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3577 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3578 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3579 if( pDb->nTransaction==0 && objc==4 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3580 static const char *TTYPE_strs[] = { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3581 "deferred", "exclusive", "immediate", 0 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3582 }; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3583 enum TTYPE_enum { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3584 TTYPE_DEFERRED, TTYPE_EXCLUSIVE, TTYPE_IMMEDIATE |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3585 }; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3586 int ttype; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3587 if( Tcl_GetIndexFromObj(interp, objv[2], TTYPE_strs, "transaction type", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3588 0, &ttype) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3589 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3590 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3591 switch( (enum TTYPE_enum)ttype ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3592 case TTYPE_DEFERRED: /* no-op */; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3593 case TTYPE_EXCLUSIVE: zBegin = "BEGIN EXCLUSIVE"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3594 case TTYPE_IMMEDIATE: zBegin = "BEGIN IMMEDIATE"; break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3595 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3596 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3597 pScript = objv[objc-1]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3598 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3599 /* Run the SQLite BEGIN command to open a transaction or savepoint. */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3600 pDb->disableAuth++; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3601 rc = sqlite3_exec(pDb->db, zBegin, 0, 0, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3602 pDb->disableAuth--; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3603 if( rc!=SQLITE_OK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3604 Tcl_AppendResult(interp, sqlite3_errmsg(pDb->db), (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3605 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3606 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3607 pDb->nTransaction++; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3608 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3609 /* If using NRE, schedule a callback to invoke the script pScript, then |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3610 ** a second callback to commit (or rollback) the transaction or savepoint |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3611 ** opened above. If not using NRE, evaluate the script directly, then |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3612 ** call function DbTransPostCmd() to commit (or rollback) the transaction |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3613 ** or savepoint. */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3614 addDatabaseRef(pDb); /* DbTransPostCmd() calls delDatabaseRef() */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3615 if( DbUseNre() ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3616 Tcl_NRAddCallback(interp, DbTransPostCmd, cd, 0, 0, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3617 (void)Tcl_NREvalObj(interp, pScript, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3618 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3619 rc = DbTransPostCmd(&cd, interp, Tcl_EvalObjEx(interp, pScript, 0)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3620 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3621 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3622 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3623 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3624 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3625 ** $db unlock_notify ?script? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3626 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3627 case DB_UNLOCK_NOTIFY: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3628 #ifndef SQLITE_ENABLE_UNLOCK_NOTIFY |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3629 Tcl_AppendResult(interp, "unlock_notify not available in this build", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3630 (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3631 rc = TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3632 #else |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3633 if( objc!=2 && objc!=3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3634 Tcl_WrongNumArgs(interp, 2, objv, "?SCRIPT?"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3635 rc = TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3636 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3637 void (*xNotify)(void **, int) = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3638 void *pNotifyArg = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3639 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3640 if( pDb->pUnlockNotify ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3641 Tcl_DecrRefCount(pDb->pUnlockNotify); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3642 pDb->pUnlockNotify = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3643 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3644 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3645 if( objc==3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3646 xNotify = DbUnlockNotify; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3647 pNotifyArg = (void *)pDb; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3648 pDb->pUnlockNotify = objv[2]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3649 Tcl_IncrRefCount(pDb->pUnlockNotify); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3650 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3651 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3652 if( sqlite3_unlock_notify(pDb->db, xNotify, pNotifyArg) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3653 Tcl_AppendResult(interp, sqlite3_errmsg(pDb->db), (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3654 rc = TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3655 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3656 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3657 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3658 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3659 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3660 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3661 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3662 ** $db preupdate_hook count |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3663 ** $db preupdate_hook hook ?SCRIPT? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3664 ** $db preupdate_hook new INDEX |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3665 ** $db preupdate_hook old INDEX |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3666 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3667 case DB_PREUPDATE: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3668 #ifndef SQLITE_ENABLE_PREUPDATE_HOOK |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3669 Tcl_AppendResult(interp, "preupdate_hook was omitted at compile-time", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3670 (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3671 rc = TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3672 #else |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3673 static const char *azSub[] = {"count", "depth", "hook", "new", "old", 0}; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3674 enum DbPreupdateSubCmd { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3675 PRE_COUNT, PRE_DEPTH, PRE_HOOK, PRE_NEW, PRE_OLD |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3676 }; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3677 int iSub; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3678 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3679 if( objc<3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3680 Tcl_WrongNumArgs(interp, 2, objv, "SUB-COMMAND ?ARGS?"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3681 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3682 if( Tcl_GetIndexFromObj(interp, objv[2], azSub, "sub-command", 0, &iSub) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3683 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3684 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3685 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3686 switch( (enum DbPreupdateSubCmd)iSub ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3687 case PRE_COUNT: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3688 int nCol = sqlite3_preupdate_count(pDb->db); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3689 Tcl_SetObjResult(interp, Tcl_NewIntObj(nCol)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3690 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3691 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3692 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3693 case PRE_HOOK: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3694 if( objc>4 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3695 Tcl_WrongNumArgs(interp, 2, objv, "hook ?SCRIPT?"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3696 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3697 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3698 DbHookCmd(interp, pDb, (objc==4 ? objv[3] : 0), &pDb->pPreUpdateHook); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3699 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3700 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3701 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3702 case PRE_DEPTH: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3703 Tcl_Obj *pRet; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3704 if( objc!=3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3705 Tcl_WrongNumArgs(interp, 3, objv, ""); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3706 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3707 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3708 pRet = Tcl_NewIntObj(sqlite3_preupdate_depth(pDb->db)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3709 Tcl_SetObjResult(interp, pRet); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3710 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3711 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3712 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3713 case PRE_NEW: |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3714 case PRE_OLD: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3715 int iIdx; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3716 sqlite3_value *pValue; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3717 if( objc!=4 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3718 Tcl_WrongNumArgs(interp, 3, objv, "INDEX"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3719 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3720 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3721 if( Tcl_GetIntFromObj(interp, objv[3], &iIdx) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3722 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3723 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3724 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3725 if( iSub==PRE_OLD ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3726 rc = sqlite3_preupdate_old(pDb->db, iIdx, &pValue); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3727 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3728 assert( iSub==PRE_NEW ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3729 rc = sqlite3_preupdate_new(pDb->db, iIdx, &pValue); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3730 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3731 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3732 if( rc==SQLITE_OK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3733 Tcl_Obj *pObj; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3734 pObj = Tcl_NewStringObj((char*)sqlite3_value_text(pValue), -1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3735 Tcl_SetObjResult(interp, pObj); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3736 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3737 Tcl_AppendResult(interp, sqlite3_errmsg(pDb->db), (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3738 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3739 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3740 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3741 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3742 #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3743 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3744 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3745 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3746 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3747 ** $db wal_hook ?script? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3748 ** $db update_hook ?script? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3749 ** $db rollback_hook ?script? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3750 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3751 case DB_WAL_HOOK: |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3752 case DB_UPDATE_HOOK: |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3753 case DB_ROLLBACK_HOOK: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3754 /* set ppHook to point at pUpdateHook or pRollbackHook, depending on |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3755 ** whether [$db update_hook] or [$db rollback_hook] was invoked. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3756 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3757 Tcl_Obj **ppHook = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3758 if( choice==DB_WAL_HOOK ) ppHook = &pDb->pWalHook; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3759 if( choice==DB_UPDATE_HOOK ) ppHook = &pDb->pUpdateHook; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3760 if( choice==DB_ROLLBACK_HOOK ) ppHook = &pDb->pRollbackHook; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3761 if( objc>3 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3762 Tcl_WrongNumArgs(interp, 2, objv, "?SCRIPT?"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3763 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3764 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3765 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3766 DbHookCmd(interp, pDb, (objc==3 ? objv[2] : 0), ppHook); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3767 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3768 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3769 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3770 /* $db version |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3771 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3772 ** Return the version string for this database. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3773 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3774 case DB_VERSION: { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3775 int i; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3776 for(i=2; i<objc; i++){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3777 const char *zArg = Tcl_GetString(objv[i]); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3778 /* Optional arguments to $db version are used for testing purpose */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3779 #ifdef SQLITE_TEST |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3780 /* $db version -use-legacy-prepare BOOLEAN |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3781 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3782 ** Turn the use of legacy sqlite3_prepare() on or off. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3783 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3784 if( strcmp(zArg, "-use-legacy-prepare")==0 && i+1<objc ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3785 i++; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3786 if( Tcl_GetBooleanFromObj(interp, objv[i], &pDb->bLegacyPrepare) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3787 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3788 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3789 }else |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3790 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3791 /* $db version -last-stmt-ptr |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3792 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3793 ** Return a string which is a hex encoding of the pointer to the |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3794 ** most recent sqlite3_stmt in the statement cache. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3795 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3796 if( strcmp(zArg, "-last-stmt-ptr")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3797 char zBuf[100]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3798 sqlite3_snprintf(sizeof(zBuf), zBuf, "%p", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3799 pDb->stmtList ? pDb->stmtList->pStmt: 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3800 Tcl_SetResult(interp, zBuf, TCL_VOLATILE); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3801 }else |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3802 #endif /* SQLITE_TEST */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3803 { |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3804 Tcl_AppendResult(interp, "unknown argument: ", zArg, (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3805 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3806 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3807 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3808 if( i==2 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3809 Tcl_SetResult(interp, (char *)sqlite3_libversion(), TCL_STATIC); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3810 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3811 break; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3812 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3813 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3814 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3815 } /* End of the SWITCH statement */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3816 return rc; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3817 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3818 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3819 #if SQLITE_TCL_NRE |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3820 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3821 ** Adaptor that provides an objCmd interface to the NRE-enabled |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3822 ** interface implementation. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3823 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3824 static int SQLITE_TCLAPI DbObjCmdAdaptor( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3825 void *cd, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3826 Tcl_Interp *interp, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3827 int objc, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3828 Tcl_Obj *const*objv |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3829 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3830 return Tcl_NRCallObjProc(interp, DbObjCmd, cd, objc, objv); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3831 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3832 #endif /* SQLITE_TCL_NRE */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3833 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3834 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3835 ** Issue the usage message when the "sqlite3" command arguments are |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3836 ** incorrect. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3837 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3838 static int sqliteCmdUsage( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3839 Tcl_Interp *interp, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3840 Tcl_Obj *const*objv |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3841 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3842 Tcl_WrongNumArgs(interp, 1, objv, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3843 "HANDLE ?FILENAME? ?-vfs VFSNAME? ?-readonly BOOLEAN? ?-create BOOLEAN?" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3844 " ?-nofollow BOOLEAN?" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3845 " ?-nomutex BOOLEAN? ?-fullmutex BOOLEAN? ?-uri BOOLEAN?" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3846 ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3847 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3848 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3849 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3850 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3851 ** sqlite3 DBNAME FILENAME ?-vfs VFSNAME? ?-key KEY? ?-readonly BOOLEAN? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3852 ** ?-create BOOLEAN? ?-nomutex BOOLEAN? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3853 ** ?-nofollow BOOLEAN? |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3854 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3855 ** This is the main Tcl command. When the "sqlite" Tcl command is |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3856 ** invoked, this routine runs to process that command. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3857 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3858 ** The first argument, DBNAME, is an arbitrary name for a new |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3859 ** database connection. This command creates a new command named |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3860 ** DBNAME that is used to control that connection. The database |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3861 ** connection is deleted when the DBNAME command is deleted. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3862 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3863 ** The second argument is the name of the database file. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3864 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3865 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3866 static int SQLITE_TCLAPI DbMain( |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3867 void *cd, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3868 Tcl_Interp *interp, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3869 int objc, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3870 Tcl_Obj *const*objv |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3871 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3872 SqliteDb *p; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3873 const char *zArg; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3874 char *zErrMsg; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3875 int i; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3876 const char *zFile = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3877 const char *zVfs = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3878 int flags; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3879 int bTranslateFileName = 1; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3880 Tcl_DString translatedFilename; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3881 int rc; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3882 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3883 /* In normal use, each TCL interpreter runs in a single thread. So |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3884 ** by default, we can turn off mutexing on SQLite database connections. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3885 ** However, for testing purposes it is useful to have mutexes turned |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3886 ** on. So, by default, mutexes default off. But if compiled with |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3887 ** SQLITE_TCL_DEFAULT_FULLMUTEX then mutexes default on. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3888 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3889 #ifdef SQLITE_TCL_DEFAULT_FULLMUTEX |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3890 flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_FULLMUTEX; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3891 #else |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3892 flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_NOMUTEX; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3893 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3894 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3895 if( objc==1 ) return sqliteCmdUsage(interp, objv); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3896 if( objc==2 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3897 zArg = Tcl_GetStringFromObj(objv[1], 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3898 if( strcmp(zArg,"-version")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3899 Tcl_AppendResult(interp,sqlite3_libversion(), (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3900 return TCL_OK; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3901 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3902 if( strcmp(zArg,"-sourceid")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3903 Tcl_AppendResult(interp,sqlite3_sourceid(), (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3904 return TCL_OK; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3905 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3906 if( strcmp(zArg,"-has-codec")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3907 Tcl_AppendResult(interp,"0",(char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3908 return TCL_OK; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3909 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3910 if( zArg[0]=='-' ) return sqliteCmdUsage(interp, objv); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3911 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3912 for(i=2; i<objc; i++){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3913 zArg = Tcl_GetString(objv[i]); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3914 if( zArg[0]!='-' ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3915 if( zFile!=0 ) return sqliteCmdUsage(interp, objv); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3916 zFile = zArg; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3917 continue; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3918 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3919 if( i==objc-1 ) return sqliteCmdUsage(interp, objv); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3920 i++; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3921 if( strcmp(zArg,"-key")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3922 /* no-op */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3923 }else if( strcmp(zArg, "-vfs")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3924 zVfs = Tcl_GetString(objv[i]); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3925 }else if( strcmp(zArg, "-readonly")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3926 int b; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3927 if( Tcl_GetBooleanFromObj(interp, objv[i], &b) ) return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3928 if( b ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3929 flags &= ~(SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3930 flags |= SQLITE_OPEN_READONLY; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3931 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3932 flags &= ~SQLITE_OPEN_READONLY; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3933 flags |= SQLITE_OPEN_READWRITE; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3934 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3935 }else if( strcmp(zArg, "-create")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3936 int b; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3937 if( Tcl_GetBooleanFromObj(interp, objv[i], &b) ) return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3938 if( b && (flags & SQLITE_OPEN_READONLY)==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3939 flags |= SQLITE_OPEN_CREATE; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3940 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3941 flags &= ~SQLITE_OPEN_CREATE; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3942 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3943 }else if( strcmp(zArg, "-nofollow")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3944 int b; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3945 if( Tcl_GetBooleanFromObj(interp, objv[i], &b) ) return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3946 if( b ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3947 flags |= SQLITE_OPEN_NOFOLLOW; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3948 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3949 flags &= ~SQLITE_OPEN_NOFOLLOW; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3950 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3951 }else if( strcmp(zArg, "-nomutex")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3952 int b; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3953 if( Tcl_GetBooleanFromObj(interp, objv[i], &b) ) return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3954 if( b ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3955 flags |= SQLITE_OPEN_NOMUTEX; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3956 flags &= ~SQLITE_OPEN_FULLMUTEX; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3957 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3958 flags &= ~SQLITE_OPEN_NOMUTEX; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3959 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3960 }else if( strcmp(zArg, "-fullmutex")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3961 int b; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3962 if( Tcl_GetBooleanFromObj(interp, objv[i], &b) ) return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3963 if( b ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3964 flags |= SQLITE_OPEN_FULLMUTEX; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3965 flags &= ~SQLITE_OPEN_NOMUTEX; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3966 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3967 flags &= ~SQLITE_OPEN_FULLMUTEX; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3968 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3969 }else if( strcmp(zArg, "-uri")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3970 int b; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3971 if( Tcl_GetBooleanFromObj(interp, objv[i], &b) ) return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3972 if( b ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3973 flags |= SQLITE_OPEN_URI; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3974 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3975 flags &= ~SQLITE_OPEN_URI; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3976 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3977 }else if( strcmp(zArg, "-translatefilename")==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3978 if( Tcl_GetBooleanFromObj(interp, objv[i], &bTranslateFileName) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3979 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3980 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3981 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3982 Tcl_AppendResult(interp, "unknown option: ", zArg, (char*)0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3983 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3984 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3985 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3986 zErrMsg = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3987 p = (SqliteDb*)Tcl_Alloc( sizeof(*p) ); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3988 memset(p, 0, sizeof(*p)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3989 if( zFile==0 ) zFile = ""; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3990 if( bTranslateFileName ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3991 zFile = Tcl_TranslateFileName(interp, zFile, &translatedFilename); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3992 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3993 rc = sqlite3_open_v2(zFile, &p->db, flags, zVfs); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3994 if( bTranslateFileName ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3995 Tcl_DStringFree(&translatedFilename); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3996 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3997 if( p->db ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3998 if( SQLITE_OK!=sqlite3_errcode(p->db) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3999 zErrMsg = sqlite3_mprintf("%s", sqlite3_errmsg(p->db)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4000 sqlite3_close(p->db); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4001 p->db = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4002 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4003 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4004 zErrMsg = sqlite3_mprintf("%s", sqlite3_errstr(rc)); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4005 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4006 if( p->db==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4007 Tcl_SetResult(interp, zErrMsg, TCL_VOLATILE); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4008 Tcl_Free((char*)p); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4009 sqlite3_free(zErrMsg); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4010 return TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4011 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4012 p->maxStmt = NUM_PREPARED_STMTS; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4013 p->openFlags = flags & SQLITE_OPEN_URI; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4014 p->interp = interp; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4015 zArg = Tcl_GetStringFromObj(objv[1], 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4016 if( DbUseNre() ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4017 Tcl_NRCreateCommand(interp, zArg, DbObjCmdAdaptor, DbObjCmd, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4018 (char*)p, DbDeleteCmd); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4019 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4020 Tcl_CreateObjCommand(interp, zArg, DbObjCmd, (char*)p, DbDeleteCmd); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4021 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4022 p->nRef = 1; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4023 return TCL_OK; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4024 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4025 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4026 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4027 ** Provide a dummy Tcl_InitStubs if we are using this as a static |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4028 ** library. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4029 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4030 #ifndef USE_TCL_STUBS |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4031 # undef Tcl_InitStubs |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4032 # define Tcl_InitStubs(a,b,c) TCL_VERSION |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4033 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4034 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4035 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4036 ** Make sure we have a PACKAGE_VERSION macro defined. This will be |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4037 ** defined automatically by the TEA makefile. But other makefiles |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4038 ** do not define it. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4039 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4040 #ifndef PACKAGE_VERSION |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4041 # define PACKAGE_VERSION SQLITE_VERSION |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4042 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4043 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4044 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4045 ** Initialize this module. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4046 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4047 ** This Tcl module contains only a single new Tcl command named "sqlite". |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4048 ** (Hence there is no namespace. There is no point in using a namespace |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4049 ** if the extension only supplies one new name!) The "sqlite" command is |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4050 ** used to open a new SQLite database. See the DbMain() routine above |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4051 ** for additional information. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4052 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4053 ** The EXTERN macros are required by TCL in order to work on windows. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4054 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4055 EXTERN int Sqlite3_Init(Tcl_Interp *interp){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4056 int rc = Tcl_InitStubs(interp, "8.5-", 0) ? TCL_OK : TCL_ERROR; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4057 if( rc==TCL_OK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4058 Tcl_CreateObjCommand(interp, "sqlite3", (Tcl_ObjCmdProc*)DbMain, 0, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4059 #ifndef SQLITE_3_SUFFIX_ONLY |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4060 /* The "sqlite" alias is undocumented. It is here only to support |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4061 ** legacy scripts. All new scripts should use only the "sqlite3" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4062 ** command. */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4063 Tcl_CreateObjCommand(interp, "sqlite", (Tcl_ObjCmdProc*)DbMain, 0, 0); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4064 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4065 rc = Tcl_PkgProvide(interp, "sqlite3", PACKAGE_VERSION); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4066 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4067 return rc; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4068 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4069 EXTERN int Tclsqlite3_Init(Tcl_Interp *interp){ return Sqlite3_Init(interp); } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4070 EXTERN int Sqlite3_Unload(Tcl_Interp *interp, int flags){ return TCL_OK; } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4071 EXTERN int Tclsqlite3_Unload(Tcl_Interp *interp, int flags){ return TCL_OK; } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4072 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4073 /* Because it accesses the file-system and uses persistent state, SQLite |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4074 ** is not considered appropriate for safe interpreters. Hence, we cause |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4075 ** the _SafeInit() interfaces return TCL_ERROR. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4076 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4077 EXTERN int Sqlite3_SafeInit(Tcl_Interp *interp){ return TCL_ERROR; } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4078 EXTERN int Sqlite3_SafeUnload(Tcl_Interp *interp, int flags){return TCL_ERROR;} |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4079 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4080 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4081 ** Versions of all of the above entry points that omit the "3" at the end |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4082 ** of the name. Years ago (circa 2004) the "3" was necessary to distinguish |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4083 ** SQLite version 3 from Sqlite version 2. But two decades have elapsed. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4084 ** SQLite2 is not longer a conflict. So it is ok to omit the "3". |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4085 ** |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4086 ** Omitting the "3" helps TCL find the entry point. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4087 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4088 EXTERN int Sqlite_Init(Tcl_Interp *interp){ return Sqlite3_Init(interp);} |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4089 EXTERN int Tclsqlite_Init(Tcl_Interp *interp){ return Sqlite3_Init(interp); } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4090 EXTERN int Sqlite_Unload(Tcl_Interp *interp, int flags){ return TCL_OK; } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4091 EXTERN int Tclsqlite_Unload(Tcl_Interp *interp, int flags){ return TCL_OK; } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4092 EXTERN int Sqlite_SafeInit(Tcl_Interp *interp){ return TCL_ERROR; } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4093 EXTERN int Sqlite_SafeUnload(Tcl_Interp *interp, int flags){return TCL_ERROR;} |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4094 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4095 /* Also variants with a lowercase "s". I'm told that these are |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4096 ** deprecated in Tcl9, but they continue to be included for backwards |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4097 ** compatibility. */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4098 EXTERN int sqlite3_Init(Tcl_Interp *interp){ return Sqlite3_Init(interp);} |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4099 EXTERN int sqlite_Init(Tcl_Interp *interp){ return Sqlite3_Init(interp);} |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4100 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4101 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4102 /* |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4103 ** If the TCLSH macro is defined, add code to make a stand-alone program. |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4104 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4105 #if defined(TCLSH) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4106 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4107 /* This is the main routine for an ordinary TCL shell. If there are |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4108 ** arguments, run the first argument as a script. Otherwise, read TCL |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4109 ** commands from standard input |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4110 */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4111 static const char *tclsh_main_loop(void){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4112 static const char zMainloop[] = |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4113 "if {[llength $argv]>=1} {\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4114 #ifdef WIN32 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4115 "set new [list]\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4116 "foreach arg $argv {\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4117 "if {[string match -* $arg] || [file exists $arg]} {\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4118 "lappend new $arg\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4119 "} else {\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4120 "set once 0\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4121 "foreach match [lsort [glob -nocomplain $arg]] {\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4122 "lappend new $match\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4123 "set once 1\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4124 "}\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4125 "if {!$once} {lappend new $arg}\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4126 "}\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4127 "}\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4128 "set argv $new\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4129 "unset new\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4130 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4131 "set argv0 [lindex $argv 0]\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4132 "set argv [lrange $argv 1 end]\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4133 "source $argv0\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4134 "} else {\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4135 "set line {}\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4136 "while {![eof stdin]} {\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4137 "if {$line!=\"\"} {\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4138 "puts -nonewline \"> \"\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4139 "} else {\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4140 "puts -nonewline \"% \"\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4141 "}\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4142 "flush stdout\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4143 "append line [gets stdin]\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4144 "if {[info complete $line]} {\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4145 "if {[catch {uplevel #0 $line} result]} {\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4146 "puts stderr \"Error: $result\"\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4147 "} elseif {$result!=\"\"} {\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4148 "puts $result\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4149 "}\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4150 "set line {}\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4151 "} else {\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4152 "append line \\n\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4153 "}\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4154 "}\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4155 "}\n" |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4156 ; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4157 return zMainloop; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4158 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4159 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4160 #ifndef TCLSH_MAIN |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4161 # define TCLSH_MAIN main |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4162 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4163 int SQLITE_CDECL TCLSH_MAIN(int argc, char **argv){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4164 Tcl_Interp *interp; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4165 int i; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4166 const char *zScript = 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4167 char zArgc[32]; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4168 #if defined(TCLSH_INIT_PROC) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4169 extern const char *TCLSH_INIT_PROC(Tcl_Interp*); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4170 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4171 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4172 #if !defined(_WIN32_WCE) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4173 if( getenv("SQLITE_DEBUG_BREAK") ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4174 if( isatty(0) && isatty(2) ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4175 fprintf(stderr, |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4176 "attach debugger to process %d and press any key to continue.\n", |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4177 GETPID()); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4178 fgetc(stdin); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4179 }else{ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4180 #if defined(_WIN32) || defined(WIN32) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4181 DebugBreak(); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4182 #elif defined(SIGTRAP) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4183 raise(SIGTRAP); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4184 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4185 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4186 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4187 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4188 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4189 /* Call sqlite3_shutdown() once before doing anything else. This is to |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4190 ** test that sqlite3_shutdown() can be safely called by a process before |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4191 ** sqlite3_initialize() is. */ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4192 sqlite3_shutdown(); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4193 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4194 Tcl_FindExecutable(argv[0]); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4195 Tcl_SetSystemEncoding(NULL, "utf-8"); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4196 interp = Tcl_CreateInterp(); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4197 Sqlite3_Init(interp); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4198 |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4199 sqlite3_snprintf(sizeof(zArgc), zArgc, "%d", argc-1); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4200 Tcl_SetVar(interp,"argc", zArgc, TCL_GLOBAL_ONLY); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4201 Tcl_SetVar(interp,"argv0",argv[0],TCL_GLOBAL_ONLY); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4202 Tcl_SetVar(interp,"argv", "", TCL_GLOBAL_ONLY); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4203 for(i=1; i<argc; i++){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4204 Tcl_SetVar(interp, "argv", argv[i], |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4205 TCL_GLOBAL_ONLY | TCL_LIST_ELEMENT | TCL_APPEND_VALUE); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4206 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4207 #if defined(TCLSH_INIT_PROC) |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4208 zScript = TCLSH_INIT_PROC(interp); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4209 #endif |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4210 if( zScript==0 ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4211 zScript = tclsh_main_loop(); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4212 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4213 if( Tcl_GlobalEval(interp, zScript)!=TCL_OK ){ |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4214 const char *zInfo = Tcl_GetVar(interp, "errorInfo", TCL_GLOBAL_ONLY); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4215 if( zInfo==0 ) zInfo = Tcl_GetStringResult(interp); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4216 fprintf(stderr,"%s: %s\n", *argv, zInfo); |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4217 return 1; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4218 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4219 return 0; |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4220 } |
|
589bab390fb4
[ThirdParty] Added sqlite3 to the third_party.
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4221 #endif /* TCLSH */ |