@@ -59,10 +59,26 @@
59 59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define _CRT_SECURE_NO_WARNINGS
60 60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
61 61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef unsigned int u32;
62 62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef unsigned short int u16;
63 63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Limit input nesting via .read or any other input redirect.
66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** It's not too expensive, so a generous allowance can be made.
67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define MAX_INPUT_NESTING 25
69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Used to prevent warnings about unused parameters
72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define UNUSED_PARAMETER(x) (void)(x)
74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Number of elements in an array
77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define ArraySize(X) (int)(sizeof(X)/sizeof(X[0]))
79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
64 80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
65 81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Optionally #include a user-defined header, whereby compilation options
66 82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** may be set prior to where they take effect, but after platform setup.
67 83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If SQLITE_CUSTOM_INCLUDE=? is defined, its value names the #include
68 84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** file. Note that this macro has a like effect on sqlite3.c compilation.
@@ -3879,774 +3895,10 @@
3879 3895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define SQLITE_CIO_NO_TRANSLATE
3880 3896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define SQLITE_CIO_NO_SETMODE
3881 3897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define SQLITE_CIO_NO_FLUSH
3882 3898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
3883 3899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
3884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
3885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Output routines that are able to redirect to memory rather than
3886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** doing actually I/O.
3887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Works like.
3888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** --------------
3889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** cli_printf(FILE*, const char*, ...); fprintf()
3890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** cli_puts(const char*, FILE*); fputs()
3891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** cli_vprintf(FILE*, const char*, va_list); vfprintf()
3892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
3893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** These are just thin wrappers with the following added semantics:
3894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If the file-scope variable cli_output_capture is not NULL, and
3895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** if the FILE* argument is stdout or stderr, then rather than
3896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** writing to stdout/stdout, append the text to the cli_output_capture
3897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** variable.
3898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
3899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The cli_exit(int) routine works like exit() except that it
3900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** first dumps any capture output to stdout.
3901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
3902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static sqlite3_str *cli_output_capture = 0;
3903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int cli_printf(FILE *out, const char *zFormat, ...){
3904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- va_list ap;
3905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc;
3906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- va_start(ap,zFormat);
3907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( cli_output_capture && (out==stdout || out==stderr) ){
3908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_str_vappendf(cli_output_capture, zFormat, ap);
3909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = 1;
3910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
3911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3_vfprintf(out, zFormat, ap);
3912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
3913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- va_end(ap);
3914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return rc;
3915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
3916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int cli_puts(const char *zText, FILE *out){
3917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( cli_output_capture && (out==stdout || out==stderr) ){
3918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_str_appendall(cli_output_capture, zText);
3919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 1;
3920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
3921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return sqlite3_fputs(zText, out);
3922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
3923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if 0 /* Not currently used - available if we need it later */
3924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int cli_vprintf(FILE *out, const char *zFormat, va_list ap){
3925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( cli_output_capture && (out==stdout || out==stderr) ){
3926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_str_vappendf(cli_output_capture, zFormat, ap);
3927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 1;
3928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
3929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return sqlite3_vfprintf(out, zFormat, ap);
3930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
3931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
3932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
3933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void cli_exit(int rc){
3934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( cli_output_capture ){
3935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *z = sqlite3_str_finish(cli_output_capture);
3936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_fputs(z, stdout);
3937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fflush(stdout);
3938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
3939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- exit(rc);
3940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
3941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
3942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
3943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define eputz(z) cli_puts(z,stderr)
3944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define sputz(fp,z) cli_puts(z,fp)
3945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
3946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* A version of strcmp() that works with NULL values */
3947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int cli_strcmp(const char *a, const char *b){
3948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( a==0 ) a = "";
3949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( b==0 ) b = "";
3950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return strcmp(a,b);
3951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
3952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int cli_strncmp(const char *a, const char *b, size_t n){
3953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( a==0 ) a = "";
3954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( b==0 ) b = "";
3955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return strncmp(a,b,n);
3956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
3957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
3958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Return the current wall-clock time in microseconds since the
3959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Unix epoch (1970-01-01T00:00:00Z)
3960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
3961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static sqlite3_int64 timeOfDay(void){
3962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if defined(_WIN64) && _WIN32_WINNT >= _WIN32_WINNT_WIN8
3963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_uint64 t;
3964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- FILETIME tm;
3965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- GetSystemTimePreciseAsFileTime(&tm);
3966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- t = ((u64)tm.dwHighDateTime<<32) | (u64)tm.dwLowDateTime;
3967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- t += 116444736000000000LL;
3968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- t /= 10;
3969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return t;
3970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #elif defined(_WIN32)
3971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static sqlite3_vfs *clockVfs = 0;
3972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_int64 t;
3973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( clockVfs==0 ) clockVfs = sqlite3_vfs_find(0);
3974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( clockVfs==0 ) return 0; /* Never actually happens */
3975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( clockVfs->iVersion>=2 && clockVfs->xCurrentTimeInt64!=0 ){
3976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- clockVfs->xCurrentTimeInt64(clockVfs, &t);
3977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
3978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double r;
3979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- clockVfs->xCurrentTime(clockVfs, &r);
3980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- t = (sqlite3_int64)(r*86400000.0);
3981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
3982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return t*1000;
3983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #else
3984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct timeval sNow;
3985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (void)gettimeofday(&sNow,0);
3986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return ((i64)sNow.tv_sec)*1000000 + sNow.tv_usec;
3987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
3988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
3989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
3990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
3991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
3992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Used to prevent warnings about unused parameters
3993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
3994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define UNUSED_PARAMETER(x) (void)(x)
3995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
3996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
3997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Number of elements in an array
3998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
3999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define ArraySize(X) (int)(sizeof(X)/sizeof(X[0]))
4000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If the following flag is set, then command execution stops
4003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** at an error if we are not interactive.
4004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int bail_on_error = 0;
4006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Treat stdin as an interactive input if the following variable
4009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is true. Otherwise, assume stdin is connected to a file or pipe.
4010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int stdin_is_interactive = 1;
4012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Treat stdout like a TTY if true.
4015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int stdout_is_console = 1;
4017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Use this value as the width of the output device. Or, figure it
4020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** out at runtime if the value is negative. Or use a default width
4021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** if this value is zero.
4022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int stdout_tty_width = -1;
4024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The following is the open SQLite database. We make a pointer
4027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to this database a static variable so that it can be accessed
4028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** by the SIGINT handler to interrupt database processing.
4029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static sqlite3 *globalDb = 0;
4031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** True if an interrupt (Control-C) has been received.
4034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static volatile int seenInterrupt = 0;
4036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This is the name of our program. It is set in main(), used
4039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** in a number of other places, mostly for error messages.
4040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static char *Argv0;
4042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Prompt strings. Initialized in main. Settable with
4045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** .prompt main continue
4046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define PROMPT_LEN_MAX 128
4048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* First line prompt. default: "sqlite> " */
4049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static char mainPrompt[PROMPT_LEN_MAX];
4050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Continuation prompt. default: " ...> " */
4051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static char continuePrompt[PROMPT_LEN_MAX];
4052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Write I/O traces to the following stream.
4055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_IOTRACE
4057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static FILE *iotrace = 0;
4058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
4059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* This is variant of the standard-library strncpy() routine with the
4062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** one change that the destination string is always zero-terminated, even
4063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** if there is no zero-terminator in the first n-1 characters of the source
4064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** string.
4065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static char *shell_strncpy(char *dest, const char *src, size_t n){
4067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- size_t i;
4068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<n-1 && src[i]!=0; i++) dest[i] = src[i];
4069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dest[i] = 0;
4070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return dest;
4071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** strcpy() workalike to squelch an unwarranted link-time warning
4075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** from OpenBSD.
4076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void shell_strcpy(char *dest, const char *src){
4078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( (*(dest++) = *(src++))!=0 ){}
4079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Optionally disable dynamic continuation prompt.
4083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Unless disabled, the continuation prompt shows open SQL lexemes if any,
4084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** or open parentheses level if non-zero, or continuation prompt as set.
4085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This facility interacts with the scanner and process_input() where the
4086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** below 5 macros are used.
4087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_OMIT_DYNAPROMPT
4089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define CONTINUATION_PROMPT continuePrompt
4090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define CONTINUE_PROMPT_RESET
4091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define CONTINUE_PROMPT_AWAITS(p,s)
4092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define CONTINUE_PROMPT_AWAITC(p,c)
4093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define CONTINUE_PAREN_INCR(p,n)
4094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define CONTINUE_PROMPT_PSTATE 0
4095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- typedef void *t_NoDynaPrompt;
4096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define SCAN_TRACKER_REFTYPE t_NoDynaPrompt
4097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #else
4098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define CONTINUATION_PROMPT dynamicContinuePrompt()
4099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define CONTINUE_PROMPT_RESET \
4100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- do {setLexemeOpen(&dynPrompt,0,0); trackParenLevel(&dynPrompt,0);} while(0)
4101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define CONTINUE_PROMPT_AWAITS(p,s) \
4102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(p && stdin_is_interactive) setLexemeOpen(p, s, 0)
4103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define CONTINUE_PROMPT_AWAITC(p,c) \
4104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(p && stdin_is_interactive) setLexemeOpen(p, 0, c)
4105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define CONTINUE_PAREN_INCR(p,n) \
4106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(p && stdin_is_interactive) (trackParenLevel(p,n))
4107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define CONTINUE_PROMPT_PSTATE (&dynPrompt)
4108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- typedef struct DynaPrompt *t_DynaPromptRef;
4109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define SCAN_TRACKER_REFTYPE t_DynaPromptRef
4110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static struct DynaPrompt {
4112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char dynamicPrompt[PROMPT_LEN_MAX];
4113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char acAwait[2];
4114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int inParenLevel;
4115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zScannerAwaits;
4116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- } dynPrompt = { {0}, {0}, 0, 0 };
4117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Record parenthesis nesting level change, or force level to 0. */
4119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void trackParenLevel(struct DynaPrompt *p, int ni){
4120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->inParenLevel += ni;
4121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( ni==0 ) p->inParenLevel = 0;
4122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->zScannerAwaits = 0;
4123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Record that a lexeme is opened, or closed with args==0. */
4126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void setLexemeOpen(struct DynaPrompt *p, char *s, char c){
4127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( s!=0 || c==0 ){
4128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->zScannerAwaits = s;
4129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->acAwait[0] = 0;
4130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
4131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->acAwait[0] = c;
4132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->zScannerAwaits = p->acAwait;
4133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Upon demand, derive the continuation prompt to display. */
4137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static char *dynamicContinuePrompt(void){
4138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( continuePrompt[0]==0
4139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || (dynPrompt.zScannerAwaits==0 && dynPrompt.inParenLevel == 0) ){
4140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return continuePrompt;
4141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
4142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( dynPrompt.zScannerAwaits ){
4143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- size_t ncp = strlen(continuePrompt);
4144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- size_t ndp = strlen(dynPrompt.zScannerAwaits);
4145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( ndp > ncp-3 ) return continuePrompt;
4146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- shell_strcpy(dynPrompt.dynamicPrompt, dynPrompt.zScannerAwaits);
4147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( ndp<3 ) dynPrompt.dynamicPrompt[ndp++] = ' ';
4148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- shell_strncpy(dynPrompt.dynamicPrompt+3, continuePrompt+3,
4149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- PROMPT_LEN_MAX-4);
4150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
4151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( dynPrompt.inParenLevel>9 ){
4152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- shell_strncpy(dynPrompt.dynamicPrompt, "(..", 4);
4153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( dynPrompt.inParenLevel<0 ){
4154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- shell_strncpy(dynPrompt.dynamicPrompt, ")x!", 4);
4155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
4156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- shell_strncpy(dynPrompt.dynamicPrompt, "(x.", 4);
4157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dynPrompt.dynamicPrompt[2] = (char)('0'+dynPrompt.inParenLevel);
4158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- shell_strncpy(dynPrompt.dynamicPrompt+3, continuePrompt+3,
4160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- PROMPT_LEN_MAX-4);
4161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return dynPrompt.dynamicPrompt;
4164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif /* !defined(SQLITE_OMIT_DYNAPROMPT) */
4166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Indicate out-of-memory and exit. */
4168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void shell_out_of_memory(void){
4169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- eputz("Error: out of memory\n");
4170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cli_exit(1);
4171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Check a pointer to see if it is NULL. If it is NULL, exit with an
4174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** out-of-memory error.
4175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void shell_check_oom(const void *p){
4177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p==0 ) shell_out_of_memory();
4178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This routine works like printf in that its first argument is a
4182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** format string and subsequent arguments are values to be substituted
4183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** in place of % fields. The result of formatting this string
4184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is written to iotrace.
4185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_IOTRACE
4187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void SQLITE_CDECL iotracePrintf(const char *zFormat, ...){
4188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- va_list ap;
4189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *z;
4190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( iotrace==0 ) return;
4191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- va_start(ap, zFormat);
4192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z = sqlite3_vmprintf(zFormat, ap);
4193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- va_end(ap);
4194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cli_printf(iotrace, "%s", z);
4195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_free(z);
4196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
4198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Compute a string length that is limited to what can be stored in
4201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** lower 30 bits of a 32-bit signed integer.
4202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int strlen30(const char *z){
4204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- size_t n;
4205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( z==0 ) return 0;
4206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- n = strlen(z);
4207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return n>0x3fffffff ? 0x3fffffff : (int)n;
4208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Return open FILE * if zFile exists, can be opened for read
4212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** and is an ordinary file or a character stream source.
4213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Otherwise return 0.
4214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static FILE * openChrSource(const char *zFile){
4216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if defined(_WIN32) || defined(WIN32)
4217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct __stat64 x = {0};
4218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define STAT_CHR_SRC(mode) ((mode & (_S_IFCHR|_S_IFIFO|_S_IFREG))!=0)
4219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* On Windows, open first, then check the stream nature. This order
4220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is necessary because _stat() and sibs, when checking a named pipe,
4221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** effectively break the pipe as its supplier sees it. */
4222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- FILE *rv = sqlite3_fopen(zFile, "rb");
4223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rv==0 ) return 0;
4224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( _fstat64(_fileno(rv), &x) != 0
4225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || !STAT_CHR_SRC(x.st_mode)){
4226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fclose(rv);
4227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rv = 0;
4228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return rv;
4230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #else
4231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct stat x = {0};
4232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc = stat(zFile, &x);
4233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define STAT_CHR_SRC(mode) (S_ISREG(mode)||S_ISFIFO(mode)||S_ISCHR(mode))
4234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc!=0 ) return 0;
4235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( STAT_CHR_SRC(x.st_mode) ){
4236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return sqlite3_fopen(zFile, "rb");
4237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
4238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 0;
4239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
4241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #undef STAT_CHR_SRC
4242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This routine reads a line of text from FILE in, stores
4246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the text in memory obtained from malloc() and returns a pointer
4247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to the text. NULL is returned at end of file, or if malloc()
4248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** fails, or if the length of the line is longer than about a gigabyte.
4249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If zLine is not NULL then it is a malloced buffer returned from
4251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** a previous call to this routine that may be reused.
4252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static char *local_getline(char *zLine, FILE *in){
4254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nLine = zLine==0 ? 0 : 100;
4255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int n = 0;
4256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( 1 ){
4258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( n+100>nLine ){
4259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( nLine>=1073741773 ){
4260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- free(zLine);
4261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 0;
4262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nLine = nLine*2 + 100;
4264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zLine = realloc(zLine, nLine);
4265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- shell_check_oom(zLine);
4266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3_fgets(&zLine[n], nLine - n, in)==0 ){
4268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( n==0 ){
4269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- free(zLine);
4270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 0;
4271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zLine[n] = 0;
4273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- break;
4274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( zLine[n] ) n++;
4276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( n>0 && zLine[n-1]=='\n' ){
4277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- n--;
4278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( n>0 && zLine[n-1]=='\r' ) n--;
4279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zLine[n] = 0;
4280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- break;
4281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return zLine;
4284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Retrieve a single line of input text.
4288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If in==0 then read from standard input and prompt before each line.
4290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If isContinuation is true, then a continuation prompt is appropriate.
4291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If isContinuation is zero, then the main prompt should be used.
4292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If zPrior is not NULL then it is a buffer from a prior call to this
4294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** routine that can be reused.
4295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The result is stored in space obtained from malloc() and must either
4297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** be freed by the caller or else passed back into this routine via the
4298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** zPrior argument for reuse.
4299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_SHELL_FIDDLE
4301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static char *one_input_line(FILE *in, char *zPrior, int isContinuation){
4302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zPrompt;
4303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zResult;
4304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( in!=0 ){
4305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zResult = local_getline(zPrior, in);
4306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
4307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zPrompt = isContinuation ? CONTINUATION_PROMPT : mainPrompt;
4308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if SHELL_USE_LOCAL_GETLINE
4309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sputz(stdout, zPrompt);
4310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fflush(stdout);
4311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- do{
4312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zResult = local_getline(zPrior, stdin);
4313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zPrior = 0;
4314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* ^C trap creates a false EOF, so let "interrupt" thread catch up. */
4315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zResult==0 ) sqlite3_sleep(50);
4316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }while( zResult==0 && seenInterrupt>0 );
4317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #else
4318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- free(zPrior);
4319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zResult = shell_readline(zPrompt);
4320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( zResult==0 ){
4321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* ^C trap creates a false EOF, so let "interrupt" thread catch up. */
4322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_sleep(50);
4323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( seenInterrupt==0 ) break;
4324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zResult = shell_readline("");
4325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zResult && *zResult ) shell_add_history(zResult);
4327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
4328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return zResult;
4330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif /* !SQLITE_SHELL_FIDDLE */
4332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Return the value of a hexadecimal digit. Return -1 if the input
4335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is not a hex digit.
4336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int hexDigitValue(char c){
4338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( c>='0' && c<='9' ) return c - '0';
4339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( c>='a' && c<='f' ) return c - 'a' + 10;
4340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( c>='A' && c<='F' ) return c - 'A' + 10;
4341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return -1;
4342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Interpret zArg as an integer value, possibly with suffixes.
4346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If the value specified by zArg is outside the range of values that
4348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** can be represented using a 64-bit twos-complement integer, then return
4349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the nearest representable value.
4350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static sqlite3_int64 integerValue(const char *zArg){
4352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_uint64 v = 0;
4353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static const struct { char *zSuffix; unsigned int iMult; } aMult[] = {
4354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "KiB", 1024 },
4355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "MiB", 1024*1024 },
4356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "GiB", 1024*1024*1024 },
4357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "KB", 1000 },
4358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "MB", 1000000 },
4359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "GB", 1000000000 },
4360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "K", 1000 },
4361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "M", 1000000 },
4362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "G", 1000000000 },
4363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- };
4364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i;
4365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int isNeg = 0;
4366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zArg[0]=='-' ){
4367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- isNeg = 1;
4368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zArg++;
4369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( zArg[0]=='+' ){
4370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zArg++;
4371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zArg[0]=='0' && zArg[1]=='x' ){
4373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int x;
4374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zArg += 2;
4375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( (x = hexDigitValue(zArg[0]))>=0 ){
4376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( v > 0x0fffffffffffffffULL ) goto integer_overflow;
4377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- v = (v<<4) + x;
4378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zArg++;
4379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
4381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( IsDigit(zArg[0]) ){
4382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( v>=922337203685477580LL ){
4383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( v>922337203685477580LL || zArg[0]>='8' ) goto integer_overflow;
4384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- v = v*10 + (zArg[0] - '0');
4386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zArg++;
4387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<ArraySize(aMult); i++){
4390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3_stricmp(aMult[i].zSuffix, zArg)==0 ){
4391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( 0x7fffffffffffffffULL/aMult[i].iMult < v ) goto integer_overflow;
4392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- v *= aMult[i].iMult;
4393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- break;
4394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( isNeg && v>0x7fffffffffffffffULL ) goto integer_overflow;
4397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return isNeg? -(sqlite3_int64)v : (sqlite3_int64)v;
4398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- integer_overflow:
4399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return isNeg ? (i64)0x8000000000000000LL : 0x7fffffffffffffffLL;
4400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** A variable length string to which one can append text.
4404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- typedef struct ShellText ShellText;
4406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct ShellText {
4407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zTxt; /* The text */
4408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i64 n; /* Number of bytes of zTxt[] actually used */
4409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i64 nAlloc; /* Number of bytes allocated for zTxt[] */
4410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- };
4411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Initialize and destroy a ShellText object
4414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void initText(ShellText *p){
4416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memset(p, 0, sizeof(*p));
4417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void freeText(ShellText *p){
4419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_free(p->zTxt);
4420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- initText(p);
4421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* zIn is either a pointer to a NULL-terminated string in memory obtained
4424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** from malloc(), or a NULL pointer. The string pointed to by zAppend is
4425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** added to zIn, and the result returned in memory obtained from malloc().
4426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** zIn, if it was not NULL, is freed.
4427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If the third argument, quote, is not '\0', then it is used as a
4429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** quote character for zAppend.
4430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void appendText(ShellText *p, const char *zAppend, char quote){
4432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i64 len;
4433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i64 i;
4434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i64 nAppend = strlen30(zAppend);
4435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- len = nAppend+p->n+1;
4437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( quote ){
4438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- len += 2;
4439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<nAppend; i++){
4440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zAppend[i]==quote ) len++;
4441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->zTxt==0 || p->n+len>=p->nAlloc ){
4445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->nAlloc = p->nAlloc*2 + len + 20;
4446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->zTxt = sqlite3_realloc64(p->zTxt, p->nAlloc);
4447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- shell_check_oom(p->zTxt);
4448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( quote ){
4451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zCsr = p->zTxt+p->n;
4452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *zCsr++ = quote;
4453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<nAppend; i++){
4454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *zCsr++ = zAppend[i];
4455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zAppend[i]==quote ) *zCsr++ = quote;
4456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *zCsr++ = quote;
4458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->n = (i64)(zCsr - p->zTxt);
4459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *zCsr = '\0';
4460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
4461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memcpy(p->zTxt+p->n, zAppend, nAppend);
4462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->n += nAppend;
4463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->zTxt[p->n] = '\0';
4464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Attempt to determine if identifier zName needs to be quoted, either
4469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** because it contains non-alphanumeric characters, or because it is an
4470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SQLite keyword. Be conservative in this estimate: When in doubt assume
4471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** that quoting is required.
4472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Return '"' if quoting is required. Return 0 if no quoting is required.
4474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static char quoteChar(const char *zName){
4476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i;
4477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zName==0 ) return '"';
4478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !IsAlpha(zName[0]) && zName[0]!='_' ) return '"';
4479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; zName[i]; i++){
4480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !IsAlnum(zName[i]) && zName[i]!='_' ) return '"';
4481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return sqlite3_keyword_check(zName, i) ? '"' : 0;
4483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Construct a fake object name and column list to describe the structure
4487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of the view, virtual table, or table valued function zSchema.zName.
4488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The returned string comes from sqlite3_mprintf() and should be freed
4490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** by the caller using sqlite3_free().
4491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static char *shellFakeSchema(
4493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3 *db, /* The database connection containing the vtab */
4494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zSchema, /* Schema of the database holding the vtab */
4495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zName /* The name of the virtual table */
4496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
4497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_stmt *pStmt = 0;
4498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zSql;
4499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ShellText s;
4500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char cQuote;
4501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zDiv = "(";
4502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nRow = 0;
4503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zSql = sqlite3_mprintf("PRAGMA \"%w\".table_info=%Q;",
4505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zSchema ? zSchema : "main", zName);
4506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- shell_check_oom(zSql);
4507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
4508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_free(zSql);
4509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- initText(&s);
4510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zSchema ){
4511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cQuote = quoteChar(zSchema);
4512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( cQuote && sqlite3_stricmp(zSchema,"temp")==0 ) cQuote = 0;
4513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- appendText(&s, zSchema, cQuote);
4514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- appendText(&s, ".", 0);
4515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cQuote = quoteChar(zName);
4517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- appendText(&s, zName, cQuote);
4518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( sqlite3_step(pStmt)==SQLITE_ROW ){
4519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zCol = (const char*)sqlite3_column_text(pStmt, 1);
4520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nRow++;
4521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- appendText(&s, zDiv, 0);
4522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zDiv = ",";
4523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zCol==0 ) zCol = "";
4524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cQuote = quoteChar(zCol);
4525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- appendText(&s, zCol, cQuote);
4526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- appendText(&s, ")", 0);
4528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_finalize(pStmt);
4529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( nRow==0 ){
4530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- freeText(&s);
4531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- s.zTxt = 0;
4532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return s.zTxt;
4534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SQL function: strtod(X)
4538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Use the C-library strtod() function to convert string X into a double.
4540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Used for comparing the accuracy of SQLite's internal text-to-float conversion
4541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** routines against the C-library.
4542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void shellStrtod(
4544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_context *pCtx,
4545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nVal,
4546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_value **apVal
4547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
4548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *z = (char*)sqlite3_value_text(apVal[0]);
4549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- UNUSED_PARAMETER(nVal);
4550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( z==0 ) return;
4551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_result_double(pCtx, strtod(z,0));
4552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SQL function: dtostr(X)
4556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Use the C-library printf() function to convert real value X into a string.
4558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Used for comparing the accuracy of SQLite's internal float-to-text conversion
4559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** routines against the C-library.
4560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void shellDtostr(
4562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_context *pCtx,
4563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nVal,
4564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_value **apVal
4565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
4566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double r = sqlite3_value_double(apVal[0]);
4567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int n = nVal>=2 ? sqlite3_value_int(apVal[1]) : 26;
4568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char z[400];
4569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( n<1 ) n = 1;
4570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( n>350 ) n = 350;
4571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sprintf(z, "%#+.*e", n, r);
4572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_result_text(pCtx, z, -1, SQLITE_TRANSIENT);
4573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
4576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SQL function: shell_add_schema(S,X)
4577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Add the schema name X to the CREATE statement in S and return the result.
4579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Examples:
4580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** CREATE TABLE t1(x) -> CREATE TABLE xyz.t1(x);
4582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Also works on
4584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** CREATE INDEX
4586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** CREATE UNIQUE INDEX
4587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** CREATE VIEW
4588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** CREATE TRIGGER
4589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** CREATE VIRTUAL TABLE
4590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This UDF is used by the .schema command to insert the schema name of
4592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** attached databases into the middle of the sqlite_schema.sql field.
4593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void shellAddSchemaName(
4595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_context *pCtx,
4596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nVal,
4597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_value **apVal
4598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
4599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static const char *aPrefix[] = {
4600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "TABLE",
4601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "INDEX",
4602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "UNIQUE INDEX",
4603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "VIEW",
4604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "TRIGGER",
4605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "VIRTUAL TABLE"
4606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- };
4607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i = 0;
4608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zIn = (const char*)sqlite3_value_text(apVal[0]);
4609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zSchema = (const char*)sqlite3_value_text(apVal[1]);
4610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zName = (const char*)sqlite3_value_text(apVal[2]);
4611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3 *db = sqlite3_context_db_handle(pCtx);
4612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- UNUSED_PARAMETER(nVal);
4613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zIn!=0 && cli_strncmp(zIn, "CREATE ", 7)==0 ){
4614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<ArraySize(aPrefix); i++){
4615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int n = strlen30(aPrefix[i]);
4616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( cli_strncmp(zIn+7, aPrefix[i], n)==0 && zIn[n+7]==' ' ){
4617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *z = 0;
4618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zFake = 0;
4619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zSchema ){
4620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char cQuote = quoteChar(zSchema);
4621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( cQuote && sqlite3_stricmp(zSchema,"temp")!=0 ){
4622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z = sqlite3_mprintf("%.*s \"%w\".%s", n+7, zIn, zSchema, zIn+n+8);
4623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
4624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z = sqlite3_mprintf("%.*s %s.%s", n+7, zIn, zSchema, zIn+n+8);
4625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zName
4628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && aPrefix[i][0]=='V'
4629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (zFake = shellFakeSchema(db, zSchema, zName))!=0
4630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
4631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( z==0 ){
4632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z = sqlite3_mprintf("%s\n/* %s */", zIn, zFake);
4633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
4634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z = sqlite3_mprintf("%z\n/* %s */", z, zFake);
4635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_free(zFake);
4637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( z ){
4639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_result_text(pCtx, z, -1, sqlite3_free);
4640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return;
4641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_result_value(pCtx, apVal[0]);
4646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
4647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
4648 3900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
4649 3901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The source code for several run-time loadable extensions is inserted
4650 3902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** below by the ../tool/mkshellc.tcl script. Before processing that included
4651 3903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** code, we need to override some macros to make the included program code
4652 3904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** work here in the middle of this regular program.
@@ -24654,14 +23906,764 @@
24654 23906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef DFLT_MULTI_INSERT
24655 23907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define DFLT_MULTI_INSERT 3000
24656 23908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
24657 23909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24658 23910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
24659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Limit input nesting via .read or any other input redirect.
24660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** It's not too expensive, so a generous allowance can be made.
24661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
24662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define MAX_INPUT_NESTING 25
23911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the following flag is set, then command execution stops
23912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** at an error if we are not interactive.
23913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
23914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int bail_on_error = 0;
23915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
23916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
23917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Treat stdin as an interactive input if the following variable
23918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is true. Otherwise, assume stdin is connected to a file or pipe.
23919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
23920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int stdin_is_interactive = 1;
23921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
23922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
23923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Treat stdout like a TTY if true.
23924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
23925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int stdout_is_console = 1;
23926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
23927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
23928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Use this value as the width of the output device. Or, figure it
23929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** out at runtime if the value is negative. Or use a default width
23930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** if this value is zero.
23931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
23932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int stdout_tty_width = -1;
23933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
23934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
23935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The following is the open SQLite database. We make a pointer
23936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to this database a static variable so that it can be accessed
23937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** by the SIGINT handler to interrupt database processing.
23938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
23939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static sqlite3 *globalDb = 0;
23940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
23941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
23942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** True if an interrupt (Control-C) has been received.
23943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
23944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static volatile int seenInterrupt = 0;
23945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
23946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
23947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This is the name of our program. It is set in main(), used
23948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in a number of other places, mostly for error messages.
23949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
23950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static char *Argv0;
23951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
23952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
23953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Prompt strings. Initialized in main. Settable with
23954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** .prompt main continue
23955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
23956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define PROMPT_LEN_MAX 128
23957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* First line prompt. default: "sqlite> " */
23958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static char mainPrompt[PROMPT_LEN_MAX];
23959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Continuation prompt. default: " ...> " */
23960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static char continuePrompt[PROMPT_LEN_MAX];
23961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
23962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
23963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Write I/O traces to the following stream.
23964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
23965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_IOTRACE
23966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static FILE *iotrace = 0;
23967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
23968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
23969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
23970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Output routines that are able to redirect to memory rather than
23971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** doing actually I/O.
23972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Works like.
23973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** --------------
23974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** cli_printf(FILE*, const char*, ...); fprintf()
23975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** cli_puts(const char*, FILE*); fputs()
23976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** cli_vprintf(FILE*, const char*, va_list); vfprintf()
23977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
23978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** These are just thin wrappers with the following added semantics:
23979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the file-scope variable cli_output_capture is not NULL, and
23980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** if the FILE* argument is stdout or stderr, then rather than
23981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** writing to stdout/stdout, append the text to the cli_output_capture
23982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** variable.
23983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
23984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The cli_exit(int) routine works like exit() except that it
23985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** first dumps any capture output to stdout.
23986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
23987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static sqlite3_str *cli_output_capture = 0;
23988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int cli_printf(FILE *out, const char *zFormat, ...){
23989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ va_list ap;
23990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc;
23991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ va_start(ap,zFormat);
23992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( cli_output_capture && (out==stdout || out==stderr) ){
23993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_str_vappendf(cli_output_capture, zFormat, ap);
23994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = 1;
23995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
23996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3_vfprintf(out, zFormat, ap);
23997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
23998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ va_end(ap);
23999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
24000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int cli_puts(const char *zText, FILE *out){
24002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( cli_output_capture && (out==stdout || out==stderr) ){
24003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_str_appendall(cli_output_capture, zText);
24004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1;
24005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3_fputs(zText, out);
24007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if 0 /* Not currently used - available if we need it later */
24009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int cli_vprintf(FILE *out, const char *zFormat, va_list ap){
24010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( cli_output_capture && (out==stdout || out==stderr) ){
24011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_str_vappendf(cli_output_capture, zFormat, ap);
24012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1;
24013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
24014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3_vfprintf(out, zFormat, ap);
24015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
24018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void cli_exit(int rc){
24019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( cli_output_capture ){
24020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *z = sqlite3_str_finish(cli_output_capture);
24021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_fputs(z, stdout);
24022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fflush(stdout);
24023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ exit(rc);
24025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define eputz(z) cli_puts(z,stderr)
24029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define sputz(fp,z) cli_puts(z,fp)
24030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* A version of strcmp() that works with NULL values */
24032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int cli_strcmp(const char *a, const char *b){
24033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( a==0 ) a = "";
24034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( b==0 ) b = "";
24035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return strcmp(a,b);
24036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int cli_strncmp(const char *a, const char *b, size_t n){
24038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( a==0 ) a = "";
24039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( b==0 ) b = "";
24040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return strncmp(a,b,n);
24041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Return the current wall-clock time in microseconds since the
24044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Unix epoch (1970-01-01T00:00:00Z)
24045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
24046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static sqlite3_int64 timeOfDay(void){
24047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(_WIN64) && _WIN32_WINNT >= _WIN32_WINNT_WIN8
24048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_uint64 t;
24049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FILETIME tm;
24050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ GetSystemTimePreciseAsFileTime(&tm);
24051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ t = ((u64)tm.dwHighDateTime<<32) | (u64)tm.dwLowDateTime;
24052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ t += 116444736000000000LL;
24053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ t /= 10;
24054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return t;
24055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #elif defined(_WIN32)
24056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static sqlite3_vfs *clockVfs = 0;
24057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 t;
24058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( clockVfs==0 ) clockVfs = sqlite3_vfs_find(0);
24059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( clockVfs==0 ) return 0; /* Never actually happens */
24060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( clockVfs->iVersion>=2 && clockVfs->xCurrentTimeInt64!=0 ){
24061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ clockVfs->xCurrentTimeInt64(clockVfs, &t);
24062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
24063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double r;
24064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ clockVfs->xCurrentTime(clockVfs, &r);
24065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ t = (sqlite3_int64)(r*86400000.0);
24066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return t*1000;
24068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
24069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct timeval sNow;
24070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (void)gettimeofday(&sNow,0);
24071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return ((i64)sNow.tv_sec)*1000000 + sNow.tv_usec;
24072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
24073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* This is variant of the standard-library strncpy() routine with the
24078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** one change that the destination string is always zero-terminated, even
24079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** if there is no zero-terminator in the first n-1 characters of the source
24080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** string.
24081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
24082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static char *shell_strncpy(char *dest, const char *src, size_t n){
24083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ size_t i;
24084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<n-1 && src[i]!=0; i++) dest[i] = src[i];
24085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ dest[i] = 0;
24086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return dest;
24087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
24090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** strcpy() workalike to squelch an unwarranted link-time warning
24091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** from OpenBSD.
24092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
24093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void shell_strcpy(char *dest, const char *src){
24094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( (*(dest++) = *(src++))!=0 ){}
24095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
24098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Optionally disable dynamic continuation prompt.
24099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Unless disabled, the continuation prompt shows open SQL lexemes if any,
24100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** or open parentheses level if non-zero, or continuation prompt as set.
24101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This facility interacts with the scanner and process_input() where the
24102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** below 5 macros are used.
24103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
24104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_OMIT_DYNAPROMPT
24105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define CONTINUATION_PROMPT continuePrompt
24106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define CONTINUE_PROMPT_RESET
24107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define CONTINUE_PROMPT_AWAITS(p,s)
24108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define CONTINUE_PROMPT_AWAITC(p,c)
24109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define CONTINUE_PAREN_INCR(p,n)
24110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define CONTINUE_PROMPT_PSTATE 0
24111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef void *t_NoDynaPrompt;
24112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SCAN_TRACKER_REFTYPE t_NoDynaPrompt
24113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
24114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define CONTINUATION_PROMPT dynamicContinuePrompt()
24115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define CONTINUE_PROMPT_RESET \
24116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ do {setLexemeOpen(&dynPrompt,0,0); trackParenLevel(&dynPrompt,0);} while(0)
24117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define CONTINUE_PROMPT_AWAITS(p,s) \
24118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(p && stdin_is_interactive) setLexemeOpen(p, s, 0)
24119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define CONTINUE_PROMPT_AWAITC(p,c) \
24120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(p && stdin_is_interactive) setLexemeOpen(p, 0, c)
24121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define CONTINUE_PAREN_INCR(p,n) \
24122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(p && stdin_is_interactive) (trackParenLevel(p,n))
24123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define CONTINUE_PROMPT_PSTATE (&dynPrompt)
24124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef struct DynaPrompt *t_DynaPromptRef;
24125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SCAN_TRACKER_REFTYPE t_DynaPromptRef
24126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static struct DynaPrompt {
24128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char dynamicPrompt[PROMPT_LEN_MAX];
24129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char acAwait[2];
24130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int inParenLevel;
24131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zScannerAwaits;
24132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } dynPrompt = { {0}, {0}, 0, 0 };
24133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Record parenthesis nesting level change, or force level to 0. */
24135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void trackParenLevel(struct DynaPrompt *p, int ni){
24136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->inParenLevel += ni;
24137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ni==0 ) p->inParenLevel = 0;
24138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->zScannerAwaits = 0;
24139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Record that a lexeme is opened, or closed with args==0. */
24142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void setLexemeOpen(struct DynaPrompt *p, char *s, char c){
24143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( s!=0 || c==0 ){
24144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->zScannerAwaits = s;
24145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->acAwait[0] = 0;
24146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
24147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->acAwait[0] = c;
24148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->zScannerAwaits = p->acAwait;
24149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Upon demand, derive the continuation prompt to display. */
24153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static char *dynamicContinuePrompt(void){
24154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( continuePrompt[0]==0
24155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || (dynPrompt.zScannerAwaits==0 && dynPrompt.inParenLevel == 0) ){
24156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return continuePrompt;
24157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
24158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( dynPrompt.zScannerAwaits ){
24159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ size_t ncp = strlen(continuePrompt);
24160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ size_t ndp = strlen(dynPrompt.zScannerAwaits);
24161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ndp > ncp-3 ) return continuePrompt;
24162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ shell_strcpy(dynPrompt.dynamicPrompt, dynPrompt.zScannerAwaits);
24163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( ndp<3 ) dynPrompt.dynamicPrompt[ndp++] = ' ';
24164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ shell_strncpy(dynPrompt.dynamicPrompt+3, continuePrompt+3,
24165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ PROMPT_LEN_MAX-4);
24166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
24167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( dynPrompt.inParenLevel>9 ){
24168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ shell_strncpy(dynPrompt.dynamicPrompt, "(..", 4);
24169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( dynPrompt.inParenLevel<0 ){
24170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ shell_strncpy(dynPrompt.dynamicPrompt, ")x!", 4);
24171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
24172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ shell_strncpy(dynPrompt.dynamicPrompt, "(x.", 4);
24173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ dynPrompt.dynamicPrompt[2] = (char)('0'+dynPrompt.inParenLevel);
24174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ shell_strncpy(dynPrompt.dynamicPrompt+3, continuePrompt+3,
24176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ PROMPT_LEN_MAX-4);
24177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return dynPrompt.dynamicPrompt;
24180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* !defined(SQLITE_OMIT_DYNAPROMPT) */
24182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Indicate out-of-memory and exit. */
24184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void shell_out_of_memory(void){
24185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eputz("Error: out of memory\n");
24186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cli_exit(1);
24187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Check a pointer to see if it is NULL. If it is NULL, exit with an
24190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** out-of-memory error.
24191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
24192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void shell_check_oom(const void *p){
24193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p==0 ) shell_out_of_memory();
24194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
24197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine works like printf in that its first argument is a
24198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** format string and subsequent arguments are values to be substituted
24199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in place of % fields. The result of formatting this string
24200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is written to iotrace.
24201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
24202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_IOTRACE
24203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void SQLITE_CDECL iotracePrintf(const char *zFormat, ...){
24204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ va_list ap;
24205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *z;
24206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iotrace==0 ) return;
24207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ va_start(ap, zFormat);
24208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z = sqlite3_vmprintf(zFormat, ap);
24209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ va_end(ap);
24210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cli_printf(iotrace, "%s", z);
24211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(z);
24212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
24214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
24216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Compute a string length that is limited to what can be stored in
24217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** lower 30 bits of a 32-bit signed integer.
24218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
24219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int strlen30(const char *z){
24220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ size_t n;
24221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z==0 ) return 0;
24222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n = strlen(z);
24223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return n>0x3fffffff ? 0x3fffffff : (int)n;
24224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
24227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return open FILE * if zFile exists, can be opened for read
24228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and is an ordinary file or a character stream source.
24229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Otherwise return 0.
24230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
24231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static FILE * openChrSource(const char *zFile){
24232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(_WIN32) || defined(WIN32)
24233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct __stat64 x = {0};
24234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define STAT_CHR_SRC(mode) ((mode & (_S_IFCHR|_S_IFIFO|_S_IFREG))!=0)
24235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* On Windows, open first, then check the stream nature. This order
24236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is necessary because _stat() and sibs, when checking a named pipe,
24237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** effectively break the pipe as its supplier sees it. */
24238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FILE *rv = sqlite3_fopen(zFile, "rb");
24239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rv==0 ) return 0;
24240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( _fstat64(_fileno(rv), &x) != 0
24241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || !STAT_CHR_SRC(x.st_mode)){
24242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fclose(rv);
24243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rv = 0;
24244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rv;
24246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
24247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct stat x = {0};
24248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = stat(zFile, &x);
24249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define STAT_CHR_SRC(mode) (S_ISREG(mode)||S_ISFIFO(mode)||S_ISCHR(mode))
24250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=0 ) return 0;
24251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( STAT_CHR_SRC(x.st_mode) ){
24252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3_fopen(zFile, "rb");
24253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
24254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
24255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
24257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #undef STAT_CHR_SRC
24258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
24261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine reads a line of text from FILE in, stores
24262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the text in memory obtained from malloc() and returns a pointer
24263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to the text. NULL is returned at end of file, or if malloc()
24264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** fails, or if the length of the line is longer than about a gigabyte.
24265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
24266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If zLine is not NULL then it is a malloced buffer returned from
24267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a previous call to this routine that may be reused.
24268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
24269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static char *local_getline(char *zLine, FILE *in){
24270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nLine = zLine==0 ? 0 : 100;
24271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int n = 0;
24272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( 1 ){
24274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( n+100>nLine ){
24275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nLine>=1073741773 ){
24276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(zLine);
24277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
24278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nLine = nLine*2 + 100;
24280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zLine = realloc(zLine, nLine);
24281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ shell_check_oom(zLine);
24282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3_fgets(&zLine[n], nLine - n, in)==0 ){
24284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( n==0 ){
24285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(zLine);
24286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
24287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zLine[n] = 0;
24289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
24290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( zLine[n] ) n++;
24292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( n>0 && zLine[n-1]=='\n' ){
24293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n--;
24294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( n>0 && zLine[n-1]=='\r' ) n--;
24295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zLine[n] = 0;
24296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
24297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return zLine;
24300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
24303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Retrieve a single line of input text.
24304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
24305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If in==0 then read from standard input and prompt before each line.
24306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If isContinuation is true, then a continuation prompt is appropriate.
24307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If isContinuation is zero, then the main prompt should be used.
24308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
24309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If zPrior is not NULL then it is a buffer from a prior call to this
24310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** routine that can be reused.
24311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
24312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The result is stored in space obtained from malloc() and must either
24313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** be freed by the caller or else passed back into this routine via the
24314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** zPrior argument for reuse.
24315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
24316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_SHELL_FIDDLE
24317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static char *one_input_line(ShellState *p, char *zPrior, int isContinuation){
24318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zPrompt;
24319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zResult;
24320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FILE *in = p->in;
24321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( in!=0 ){
24322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zResult = local_getline(zPrior, in);
24323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
24324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zPrompt = isContinuation ? CONTINUATION_PROMPT : mainPrompt;
24325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if SHELL_USE_LOCAL_GETLINE
24326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sputz(stdout, zPrompt);
24327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fflush(stdout);
24328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ do{
24329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zResult = local_getline(zPrior, stdin);
24330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zPrior = 0;
24331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* ^C trap creates a false EOF, so let "interrupt" thread catch up. */
24332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zResult==0 ) sqlite3_sleep(50);
24333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }while( zResult==0 && seenInterrupt>0 );
24334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
24335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(zPrior);
24336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zResult = shell_readline(zPrompt);
24337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( zResult==0 ){
24338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* ^C trap creates a false EOF, so let "interrupt" thread catch up. */
24339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_sleep(50);
24340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( seenInterrupt==0 ) break;
24341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zResult = shell_readline("");
24342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zResult && *zResult ) shell_add_history(zResult);
24344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
24345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return zResult;
24347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* !SQLITE_SHELL_FIDDLE */
24349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
24351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return the value of a hexadecimal digit. Return -1 if the input
24352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is not a hex digit.
24353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
24354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int hexDigitValue(char c){
24355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( c>='0' && c<='9' ) return c - '0';
24356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( c>='a' && c<='f' ) return c - 'a' + 10;
24357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( c>='A' && c<='F' ) return c - 'A' + 10;
24358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return -1;
24359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
24362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Interpret zArg as an integer value, possibly with suffixes.
24363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
24364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the value specified by zArg is outside the range of values that
24365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** can be represented using a 64-bit twos-complement integer, then return
24366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the nearest representable value.
24367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
24368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static sqlite3_int64 integerValue(const char *zArg){
24369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_uint64 v = 0;
24370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const struct { char *zSuffix; unsigned int iMult; } aMult[] = {
24371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "KiB", 1024 },
24372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "MiB", 1024*1024 },
24373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "GiB", 1024*1024*1024 },
24374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "KB", 1000 },
24375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "MB", 1000000 },
24376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "GB", 1000000000 },
24377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "K", 1000 },
24378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "M", 1000000 },
24379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "G", 1000000000 },
24380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
24381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
24382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isNeg = 0;
24383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zArg[0]=='-' ){
24384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ isNeg = 1;
24385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zArg++;
24386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( zArg[0]=='+' ){
24387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zArg++;
24388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zArg[0]=='0' && zArg[1]=='x' ){
24390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int x;
24391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zArg += 2;
24392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( (x = hexDigitValue(zArg[0]))>=0 ){
24393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( v > 0x0fffffffffffffffULL ) goto integer_overflow;
24394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ v = (v<<4) + x;
24395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zArg++;
24396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
24398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( IsDigit(zArg[0]) ){
24399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( v>=922337203685477580LL ){
24400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( v>922337203685477580LL || zArg[0]>='8' ) goto integer_overflow;
24401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ v = v*10 + (zArg[0] - '0');
24403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zArg++;
24404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<ArraySize(aMult); i++){
24407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3_stricmp(aMult[i].zSuffix, zArg)==0 ){
24408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( 0x7fffffffffffffffULL/aMult[i].iMult < v ) goto integer_overflow;
24409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ v *= aMult[i].iMult;
24410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
24411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isNeg && v>0x7fffffffffffffffULL ) goto integer_overflow;
24414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return isNeg? -(sqlite3_int64)v : (sqlite3_int64)v;
24415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ integer_overflow:
24416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return isNeg ? (i64)0x8000000000000000LL : 0x7fffffffffffffffLL;
24417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
24420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** A variable length string to which one can append text.
24421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
24422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef struct ShellText ShellText;
24423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct ShellText {
24424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zTxt; /* The text */
24425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 n; /* Number of bytes of zTxt[] actually used */
24426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 nAlloc; /* Number of bytes allocated for zTxt[] */
24427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
24428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
24430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Initialize and destroy a ShellText object
24431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
24432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void initText(ShellText *p){
24433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(p, 0, sizeof(*p));
24434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void freeText(ShellText *p){
24436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(p->zTxt);
24437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ initText(p);
24438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* zIn is either a pointer to a NULL-terminated string in memory obtained
24441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** from malloc(), or a NULL pointer. The string pointed to by zAppend is
24442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** added to zIn, and the result returned in memory obtained from malloc().
24443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** zIn, if it was not NULL, is freed.
24444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
24445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the third argument, quote, is not '\0', then it is used as a
24446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** quote character for zAppend.
24447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
24448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void appendText(ShellText *p, const char *zAppend, char quote){
24449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 len;
24450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 i;
24451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 nAppend = strlen30(zAppend);
24452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ len = nAppend+p->n+1;
24454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( quote ){
24455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ len += 2;
24456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<nAppend; i++){
24457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zAppend[i]==quote ) len++;
24458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->zTxt==0 || p->n+len>=p->nAlloc ){
24462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->nAlloc = p->nAlloc*2 + len + 20;
24463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->zTxt = sqlite3_realloc64(p->zTxt, p->nAlloc);
24464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ shell_check_oom(p->zTxt);
24465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( quote ){
24468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zCsr = p->zTxt+p->n;
24469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *zCsr++ = quote;
24470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<nAppend; i++){
24471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *zCsr++ = zAppend[i];
24472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zAppend[i]==quote ) *zCsr++ = quote;
24473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *zCsr++ = quote;
24475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->n = (i64)(zCsr - p->zTxt);
24476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *zCsr = '\0';
24477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
24478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memcpy(p->zTxt+p->n, zAppend, nAppend);
24479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->n += nAppend;
24480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->zTxt[p->n] = '\0';
24481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
24485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Attempt to determine if identifier zName needs to be quoted, either
24486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** because it contains non-alphanumeric characters, or because it is an
24487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLite keyword. Be conservative in this estimate: When in doubt assume
24488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that quoting is required.
24489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
24490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return '"' if quoting is required. Return 0 if no quoting is required.
24491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
24492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static char quoteChar(const char *zName){
24493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
24494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zName==0 ) return '"';
24495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !IsAlpha(zName[0]) && zName[0]!='_' ) return '"';
24496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; zName[i]; i++){
24497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !IsAlnum(zName[i]) && zName[i]!='_' ) return '"';
24498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3_keyword_check(zName, i) ? '"' : 0;
24500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
24503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Construct a fake object name and column list to describe the structure
24504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of the view, virtual table, or table valued function zSchema.zName.
24505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
24506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The returned string comes from sqlite3_mprintf() and should be freed
24507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** by the caller using sqlite3_free().
24508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
24509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static char *shellFakeSchema(
24510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3 *db, /* The database connection containing the vtab */
24511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zSchema, /* Schema of the database holding the vtab */
24512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zName /* The name of the virtual table */
24513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
24514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_stmt *pStmt = 0;
24515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zSql;
24516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ShellText s;
24517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char cQuote;
24518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zDiv = "(";
24519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nRow = 0;
24520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zSql = sqlite3_mprintf("PRAGMA \"%w\".table_info=%Q;",
24522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zSchema ? zSchema : "main", zName);
24523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ shell_check_oom(zSql);
24524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
24525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(zSql);
24526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ initText(&s);
24527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zSchema ){
24528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cQuote = quoteChar(zSchema);
24529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( cQuote && sqlite3_stricmp(zSchema,"temp")==0 ) cQuote = 0;
24530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ appendText(&s, zSchema, cQuote);
24531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ appendText(&s, ".", 0);
24532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cQuote = quoteChar(zName);
24534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ appendText(&s, zName, cQuote);
24535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( sqlite3_step(pStmt)==SQLITE_ROW ){
24536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zCol = (const char*)sqlite3_column_text(pStmt, 1);
24537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nRow++;
24538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ appendText(&s, zDiv, 0);
24539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zDiv = ",";
24540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zCol==0 ) zCol = "";
24541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cQuote = quoteChar(zCol);
24542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ appendText(&s, zCol, cQuote);
24543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ appendText(&s, ")", 0);
24545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_finalize(pStmt);
24546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nRow==0 ){
24547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ freeText(&s);
24548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ s.zTxt = 0;
24549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return s.zTxt;
24551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
24554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQL function: strtod(X)
24555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
24556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Use the C-library strtod() function to convert string X into a double.
24557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Used for comparing the accuracy of SQLite's internal text-to-float conversion
24558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** routines against the C-library.
24559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
24560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void shellStrtod(
24561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_context *pCtx,
24562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nVal,
24563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value **apVal
24564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
24565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *z = (char*)sqlite3_value_text(apVal[0]);
24566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNUSED_PARAMETER(nVal);
24567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z==0 ) return;
24568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_double(pCtx, strtod(z,0));
24569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
24572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQL function: dtostr(X)
24573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
24574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Use the C-library printf() function to convert real value X into a string.
24575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Used for comparing the accuracy of SQLite's internal float-to-text conversion
24576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** routines against the C-library.
24577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
24578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void shellDtostr(
24579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_context *pCtx,
24580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nVal,
24581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value **apVal
24582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
24583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double r = sqlite3_value_double(apVal[0]);
24584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int n = nVal>=2 ? sqlite3_value_int(apVal[1]) : 26;
24585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char z[400];
24586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( n<1 ) n = 1;
24587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( n>350 ) n = 350;
24588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sprintf(z, "%#+.*e", n, r);
24589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_text(pCtx, z, -1, SQLITE_TRANSIENT);
24590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
24593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQL function: shell_add_schema(S,X)
24594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
24595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Add the schema name X to the CREATE statement in S and return the result.
24596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Examples:
24597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
24598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** CREATE TABLE t1(x) -> CREATE TABLE xyz.t1(x);
24599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
24600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Also works on
24601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
24602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** CREATE INDEX
24603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** CREATE UNIQUE INDEX
24604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** CREATE VIEW
24605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** CREATE TRIGGER
24606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** CREATE VIRTUAL TABLE
24607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
24608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This UDF is used by the .schema command to insert the schema name of
24609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** attached databases into the middle of the sqlite_schema.sql field.
24610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
24611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void shellAddSchemaName(
24612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_context *pCtx,
24613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nVal,
24614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value **apVal
24615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
24616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const char *aPrefix[] = {
24617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "TABLE",
24618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "INDEX",
24619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "UNIQUE INDEX",
24620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "VIEW",
24621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "TRIGGER",
24622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "VIRTUAL TABLE"
24623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
24624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i = 0;
24625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zIn = (const char*)sqlite3_value_text(apVal[0]);
24626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zSchema = (const char*)sqlite3_value_text(apVal[1]);
24627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zName = (const char*)sqlite3_value_text(apVal[2]);
24628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3 *db = sqlite3_context_db_handle(pCtx);
24629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNUSED_PARAMETER(nVal);
24630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zIn!=0 && cli_strncmp(zIn, "CREATE ", 7)==0 ){
24631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<ArraySize(aPrefix); i++){
24632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int n = strlen30(aPrefix[i]);
24633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( cli_strncmp(zIn+7, aPrefix[i], n)==0 && zIn[n+7]==' ' ){
24634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *z = 0;
24635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zFake = 0;
24636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zSchema ){
24637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char cQuote = quoteChar(zSchema);
24638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( cQuote && sqlite3_stricmp(zSchema,"temp")!=0 ){
24639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z = sqlite3_mprintf("%.*s \"%w\".%s", n+7, zIn, zSchema, zIn+n+8);
24640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
24641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z = sqlite3_mprintf("%.*s %s.%s", n+7, zIn, zSchema, zIn+n+8);
24642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zName
24645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && aPrefix[i][0]=='V'
24646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (zFake = shellFakeSchema(db, zSchema, zName))!=0
24647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
24648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z==0 ){
24649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z = sqlite3_mprintf("%s\n/* %s */", zIn, zFake);
24650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
24651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z = sqlite3_mprintf("%z\n/* %s */", z, zFake);
24652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(zFake);
24654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z ){
24656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_text(pCtx, z, -1, sqlite3_free);
24657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
24658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_value(pCtx, apVal[0]);
24663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24663 24665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24664 24666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************************* BEGIN PERFORMANCE TIMER *****************************/
24665 24667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(_WIN32) && !defined(WIN32) && !defined(__minux)
24666 24668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <sys/time.h>
24667 24669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <sys/resource.h>
@@ -33862,11 +33864,11 @@
33862 33864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i==nArg-1 ){
33863 33865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dotCmdError(p, i, "missing argument", 0);
33864 33866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
33865 33867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33866 33868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i++;
33867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->tmProgress = sqlite3_atof(azArg[i]);
33869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->tmProgress = atof(azArg[i]);
33868 33870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->tmProgress>0.0 ){
33869 33871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->flgProgress = SHELL_PROGRESS_QUIET|SHELL_PROGRESS_TMOUT;
33870 33872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nn==0 ) nn = 100;
33871 33873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33872 33874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
continue;
@@ -35831,16 +35833,17 @@
35831 35833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
35832 35834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Alternate one_input_line() impl for wasm mode. This is not in the primary
35833 35835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** impl because we need the global shellState and cannot access it from that
35834 35836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** function without moving lots of code around (creating a larger/messier diff).
35835 35837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
35836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static char *one_input_line(FILE *in, char *zPrior, int isContinuation){
35838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static char *one_input_line(ShellState *p, char *zPrior, int isContinuation){
35837 35839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Parse the next line from shellState.wasm.zInput. */
35838 35840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zBegin = shellState.wasm.zPos;
35839 35841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *z = zBegin;
35840 35842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zLine = 0;
35841 35843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 nZ = 0;
35844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FILE *in = p->in;
35842 35845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35843 35846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAMETER(in);
35844 35847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAMETER(isContinuation);
35845 35848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(!z || !*z){
35846 35849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
@@ -35894,11 +35897,11 @@
35894 35897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
saved_lineno = p->lineno;
35895 35898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->lineno = 0;
35896 35899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CONTINUE_PROMPT_RESET;
35897 35900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( errCnt==0 || !bail_on_error || (p->in==0 && stdin_is_interactive) ){
35898 35901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fflush(p->out);
35899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zLine = one_input_line(p->in, zLine, nSql>0);
35902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zLine = one_input_line(p, zLine, nSql>0);
35900 35903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zLine==0 ){
35901 35904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* End of input */
35902 35905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->in==0 && stdin_is_interactive ) cli_puts("\n", p->out);
35903 35906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
35904 35907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35905 35908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!