engine/sqlite/src/sqliteInt.h
author Lars Persson <lars.persson@embeddev.se>
Wed, 31 Mar 2010 18:09:02 +0200
changeset 97 b52f6033af15
parent 2 29cda98b007e
permissions -rw-r--r--
Add so image conversion is done in feedinfo if image already exist. Check in feedengine if image exist from previous database(files might exist, even though the db is corrupt.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
     1
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
     2
** 2001 September 15
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
     3
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
     4
** The author disclaims copyright to this source code.  In place of
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
     5
** a legal notice, here is a blessing:
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
     6
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
     7
**    May you do good and not evil.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
     8
**    May you find forgiveness for yourself and forgive others.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
     9
**    May you share freely, never taking more than you give.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    10
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    11
*************************************************************************
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    12
** Internal interface definitions for SQLite.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    13
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    14
** @(#) $Id: sqliteInt.h 1282 2008-11-13 09:31:33Z LarsPson $
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    15
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    16
#ifndef _SQLITEINT_H_
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    17
#define _SQLITEINT_H_
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    18
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    19
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    20
** The macro unlikely() is a hint that surrounds a boolean
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    21
** expression that is usually false.  Macro likely() surrounds
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    22
** a boolean expression that is usually true.  GCC is able to
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    23
** use these hints to generate better code, sometimes.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    24
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    25
#if defined(__GNUC__)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    26
# define likely(X)    __builtin_expect((X),1)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    27
# define unlikely(X)  __builtin_expect((X),0)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    28
#else
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    29
# define likely(X)    !!(X)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    30
# define unlikely(X)  !!(X)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    31
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    32
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    33
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    34
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    35
** These #defines should enable >2GB file support on Posix if the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    36
** underlying operating system supports it.  If the OS lacks
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    37
** large file support, or if the OS is windows, these should be no-ops.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    38
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    39
** Ticket #2739:  The _LARGEFILE_SOURCE macro must appear before any
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    40
** system #includes.  Hence, this block of code must be the very first
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    41
** code in all source files.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    42
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    43
** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    44
** on the compiler command line.  This is necessary if you are compiling
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    45
** on a recent machine (ex: RedHat 7.2) but you want your code to work
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    46
** on an older machine (ex: RedHat 6.0).  If you compile on RedHat 7.2
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    47
** without this option, LFS is enable.  But LFS does not exist in the kernel
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    48
** in RedHat 6.0, so the code won't work.  Hence, for maximum binary
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    49
** portability you should omit LFS.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    50
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    51
** Similar is true for MacOS.  LFS is only supported on MacOS 9 and later.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    52
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    53
#ifndef SQLITE_DISABLE_LFS
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    54
# define _LARGE_FILE       1
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    55
# ifndef _FILE_OFFSET_BITS
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    56
#   define _FILE_OFFSET_BITS 64
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    57
# endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    58
# define _LARGEFILE_SOURCE 1
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    59
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    60
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    61
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    62
#include "sqliteLimit.h"
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    63
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    64
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    65
** For testing purposes, the various size limit constants are really
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    66
** variables that we can modify in the testfixture.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    67
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    68
#ifdef SQLITE_TEST
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    69
  #undef SQLITE_MAX_LENGTH
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    70
  #undef SQLITE_MAX_COLUMN
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    71
  #undef SQLITE_MAX_SQL_LENGTH
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    72
  #undef SQLITE_MAX_EXPR_DEPTH
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    73
  #undef SQLITE_MAX_COMPOUND_SELECT
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    74
  #undef SQLITE_MAX_VDBE_OP
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    75
  #undef SQLITE_MAX_FUNCTION_ARG
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    76
  #undef SQLITE_MAX_VARIABLE_NUMBER
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    77
  #undef SQLITE_MAX_PAGE_SIZE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    78
  #undef SQLITE_MAX_PAGE_COUNT
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    79
  #undef SQLITE_MAX_LIKE_PATTERN_LENGTH
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    80
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    81
  #define SQLITE_MAX_LENGTH              sqlite3MAX_LENGTH
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    82
  #define SQLITE_MAX_COLUMN              sqlite3MAX_COLUMN
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    83
  #define SQLITE_MAX_SQL_LENGTH          sqlite3MAX_SQL_LENGTH
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    84
  #define SQLITE_MAX_EXPR_DEPTH          sqlite3MAX_EXPR_DEPTH
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    85
  #define SQLITE_MAX_COMPOUND_SELECT     sqlite3MAX_COMPOUND_SELECT
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    86
  #define SQLITE_MAX_VDBE_OP             sqlite3MAX_VDBE_OP
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    87
  #define SQLITE_MAX_FUNCTION_ARG        sqlite3MAX_FUNCTION_ARG
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    88
  #define SQLITE_MAX_VARIABLE_NUMBER     sqlite3MAX_VARIABLE_NUMBER
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    89
  #define SQLITE_MAX_PAGE_SIZE           sqlite3MAX_PAGE_SIZE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    90
  #define SQLITE_MAX_PAGE_COUNT          sqlite3MAX_PAGE_COUNT
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    91
  #define SQLITE_MAX_LIKE_PATTERN_LENGTH sqlite3MAX_LIKE_PATTERN_LENGTH
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    92
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    93
  extern int sqlite3MAX_LENGTH;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    94
  extern int sqlite3MAX_COLUMN;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    95
  extern int sqlite3MAX_SQL_LENGTH;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    96
  extern int sqlite3MAX_EXPR_DEPTH;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    97
  extern int sqlite3MAX_COMPOUND_SELECT;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    98
  extern int sqlite3MAX_VDBE_OP;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
    99
  extern int sqlite3MAX_FUNCTION_ARG;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   100
  extern int sqlite3MAX_VARIABLE_NUMBER;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   101
  extern int sqlite3MAX_PAGE_SIZE;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   102
  extern int sqlite3MAX_PAGE_COUNT;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   103
  extern int sqlite3MAX_LIKE_PATTERN_LENGTH;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   104
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   105
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   106
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   107
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   108
** The SQLITE_THREADSAFE macro must be defined as either 0 or 1.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   109
** Older versions of SQLite used an optional THREADSAFE macro.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   110
** We support that for legacy
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   111
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   112
#if !defined(SQLITE_THREADSAFE)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   113
#if defined(THREADSAFE)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   114
# define SQLITE_THREADSAFE THREADSAFE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   115
#else
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   116
# define SQLITE_THREADSAFE 1
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   117
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   118
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   119
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   120
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   121
** We need to define _XOPEN_SOURCE as follows in order to enable
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   122
** recursive mutexes on most unix systems.  But Mac OS X is different.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   123
** The _XOPEN_SOURCE define causes problems for Mac OS X we are told,
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   124
** so it is omitted there.  See ticket #2673.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   125
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   126
** Later we learn that _XOPEN_SOURCE is poorly or incorrectly
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   127
** implemented on some systems.  So we avoid defining it at all
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   128
** if it is already defined or if it is unneeded because we are
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   129
** not doing a threadsafe build.  Ticket #2681.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   130
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   131
** See also ticket #2741.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   132
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   133
#if !defined(_XOPEN_SOURCE) && !defined(__DARWIN__) && SQLITE_THREADSAFE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   134
#  define _XOPEN_SOURCE 500  /* Needed to enable pthread recursive mutexes */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   135
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   136
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   137
#if defined(SQLITE_TCL) || defined(TCLSH)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   138
# include <tcl.h>
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   139
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   140
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   141
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   142
** Many people are failing to set -DNDEBUG=1 when compiling SQLite.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   143
** Setting NDEBUG makes the code smaller and run faster.  So the following
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   144
** lines are added to automatically set NDEBUG unless the -DSQLITE_DEBUG=1
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   145
** option is set.  Thus NDEBUG becomes an opt-in rather than an opt-out
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   146
** feature.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   147
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   148
#if !defined(NDEBUG) && !defined(SQLITE_DEBUG) 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   149
# define NDEBUG 1
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   150
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   151
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   152
#include "sqlite3.h"
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   153
#include "hash.h"
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   154
#include "parse.h"
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   155
#include <stdio.h>
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   156
#include <stdlib.h>
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   157
#include <string.h>
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   158
#include <assert.h>
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   159
#include <stddef.h>
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   160
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   161
#define sqlite3_isnan(X)  ((X)!=(X))
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   162
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   163
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   164
** If compiling for a processor that lacks floating point support,
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   165
** substitute integer for floating-point
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   166
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   167
#ifdef SQLITE_OMIT_FLOATING_POINT
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   168
# define double sqlite_int64
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   169
# define LONGDOUBLE_TYPE sqlite_int64
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   170
# ifndef SQLITE_BIG_DBL
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   171
#   define SQLITE_BIG_DBL (0x7fffffffffffffff)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   172
# endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   173
# define SQLITE_OMIT_DATETIME_FUNCS 1
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   174
# define SQLITE_OMIT_TRACE 1
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   175
# undef SQLITE_MIXED_ENDIAN_64BIT_FLOAT
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   176
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   177
#ifndef SQLITE_BIG_DBL
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   178
# define SQLITE_BIG_DBL (1e99)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   179
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   180
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   181
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   182
** OMIT_TEMPDB is set to 1 if SQLITE_OMIT_TEMPDB is defined, or 0
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   183
** afterward. Having this macro allows us to cause the C compiler 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   184
** to omit code used by TEMP tables without messy #ifndef statements.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   185
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   186
#ifdef SQLITE_OMIT_TEMPDB
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   187
#define OMIT_TEMPDB 1
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   188
#else
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   189
#define OMIT_TEMPDB 0
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   190
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   191
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   192
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   193
** If the following macro is set to 1, then NULL values are considered
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   194
** distinct when determining whether or not two entries are the same
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   195
** in a UNIQUE index.  This is the way PostgreSQL, Oracle, DB2, MySQL,
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   196
** OCELOT, and Firebird all work.  The SQL92 spec explicitly says this
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   197
** is the way things are suppose to work.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   198
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   199
** If the following macro is set to 0, the NULLs are indistinct for
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   200
** a UNIQUE index.  In this mode, you can only have a single NULL entry
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   201
** for a column declared UNIQUE.  This is the way Informix and SQL Server
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   202
** work.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   203
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   204
#define NULL_DISTINCT_FOR_UNIQUE 1
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   205
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   206
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   207
** The "file format" number is an integer that is incremented whenever
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   208
** the VDBE-level file format changes.  The following macros define the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   209
** the default file format for new databases and the maximum file format
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   210
** that the library can read.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   211
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   212
#define SQLITE_MAX_FILE_FORMAT 4
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   213
#ifndef SQLITE_DEFAULT_FILE_FORMAT
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   214
# define SQLITE_DEFAULT_FILE_FORMAT 1
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   215
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   216
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   217
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   218
** Provide a default value for TEMP_STORE in case it is not specified
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   219
** on the command-line
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   220
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   221
#ifndef TEMP_STORE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   222
# define TEMP_STORE 1
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   223
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   224
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   225
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   226
** GCC does not define the offsetof() macro so we'll have to do it
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   227
** ourselves.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   228
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   229
#ifndef offsetof
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   230
#define offsetof(STRUCTURE,FIELD) ((int)((char*)&((STRUCTURE*)0)->FIELD))
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   231
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   232
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   233
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   234
** Check to see if this machine uses EBCDIC.  (Yes, believe it or
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   235
** not, there are still machines out there that use EBCDIC.)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   236
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   237
#if 'A' == '\301'
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   238
# define SQLITE_EBCDIC 1
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   239
#else
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   240
# define SQLITE_ASCII 1
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   241
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   242
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   243
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   244
** Integers of known sizes.  These typedefs might change for architectures
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   245
** where the sizes very.  Preprocessor macros are available so that the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   246
** types can be conveniently redefined at compile-type.  Like this:
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   247
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   248
**         cc '-DUINTPTR_TYPE=long long int' ...
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   249
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   250
#ifndef UINT32_TYPE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   251
# define UINT32_TYPE unsigned int
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   252
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   253
#ifndef UINT16_TYPE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   254
# define UINT16_TYPE unsigned short int
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   255
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   256
#ifndef INT16_TYPE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   257
# define INT16_TYPE short int
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   258
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   259
#ifndef UINT8_TYPE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   260
# define UINT8_TYPE unsigned char
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   261
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   262
#ifndef INT8_TYPE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   263
# define INT8_TYPE signed char
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   264
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   265
#ifndef LONGDOUBLE_TYPE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   266
# define LONGDOUBLE_TYPE long double
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   267
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   268
typedef sqlite_int64 i64;          /* 8-byte signed integer */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   269
typedef sqlite_uint64 u64;         /* 8-byte unsigned integer */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   270
typedef UINT32_TYPE u32;           /* 4-byte unsigned integer */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   271
typedef UINT16_TYPE u16;           /* 2-byte unsigned integer */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   272
typedef INT16_TYPE i16;            /* 2-byte signed integer */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   273
typedef UINT8_TYPE u8;             /* 1-byte unsigned integer */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   274
typedef UINT8_TYPE i8;             /* 1-byte signed integer */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   275
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   276
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   277
** Macros to determine whether the machine is big or little endian,
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   278
** evaluated at runtime.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   279
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   280
#ifdef SQLITE_AMALGAMATION
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   281
const int sqlite3One;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   282
#else
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   283
extern const int sqlite3one;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   284
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   285
#if defined(i386) || defined(__i386__) || defined(_M_IX86)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   286
# define SQLITE_BIGENDIAN    0
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   287
# define SQLITE_LITTLEENDIAN 1
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   288
# define SQLITE_UTF16NATIVE  SQLITE_UTF16LE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   289
#else
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   290
# define SQLITE_BIGENDIAN    (*(char *)(&sqlite3one)==0)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   291
# define SQLITE_LITTLEENDIAN (*(char *)(&sqlite3one)==1)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   292
# define SQLITE_UTF16NATIVE (SQLITE_BIGENDIAN?SQLITE_UTF16BE:SQLITE_UTF16LE)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   293
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   294
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   295
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   296
** An instance of the following structure is used to store the busy-handler
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   297
** callback for a given sqlite handle. 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   298
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   299
** The sqlite.busyHandler member of the sqlite struct contains the busy
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   300
** callback for the database handle. Each pager opened via the sqlite
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   301
** handle is passed a pointer to sqlite.busyHandler. The busy-handler
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   302
** callback is currently invoked only from within pager.c.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   303
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   304
typedef struct BusyHandler BusyHandler;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   305
struct BusyHandler {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   306
  int (*xFunc)(void *,int);  /* The busy callback */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   307
  void *pArg;                /* First arg to busy callback */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   308
  int nBusy;                 /* Incremented with each busy call */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   309
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   310
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   311
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   312
** Defer sourcing vdbe.h and btree.h until after the "u8" and 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   313
** "BusyHandler typedefs.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   314
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   315
#include "btree.h"
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   316
#include "vdbe.h"
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   317
#include "pager.h"
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   318
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   319
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   320
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   321
** Name of the master database table.  The master database table
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   322
** is a special table that holds the names and attributes of all
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   323
** user tables and indices.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   324
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   325
#define MASTER_NAME       "sqlite_master"
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   326
#define TEMP_MASTER_NAME  "sqlite_temp_master"
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   327
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   328
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   329
** The root-page of the master database table.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   330
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   331
#define MASTER_ROOT       1
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   332
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   333
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   334
** The name of the schema table.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   335
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   336
#define SCHEMA_TABLE(x)  ((!OMIT_TEMPDB)&&(x==1)?TEMP_MASTER_NAME:MASTER_NAME)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   337
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   338
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   339
** A convenience macro that returns the number of elements in
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   340
** an array.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   341
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   342
#define ArraySize(X)    (sizeof(X)/sizeof(X[0]))
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   343
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   344
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   345
** Forward references to structures
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   346
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   347
typedef struct AggInfo AggInfo;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   348
typedef struct AuthContext AuthContext;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   349
typedef struct CollSeq CollSeq;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   350
typedef struct Column Column;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   351
typedef struct Db Db;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   352
typedef struct Schema Schema;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   353
typedef struct Expr Expr;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   354
typedef struct ExprList ExprList;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   355
typedef struct FKey FKey;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   356
typedef struct FuncDef FuncDef;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   357
typedef struct IdList IdList;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   358
typedef struct Index Index;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   359
typedef struct KeyClass KeyClass;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   360
typedef struct KeyInfo KeyInfo;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   361
typedef struct Module Module;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   362
typedef struct NameContext NameContext;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   363
typedef struct Parse Parse;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   364
typedef struct Select Select;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   365
typedef struct SrcList SrcList;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   366
typedef struct StrAccum StrAccum;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   367
typedef struct Table Table;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   368
typedef struct TableLock TableLock;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   369
typedef struct Token Token;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   370
typedef struct TriggerStack TriggerStack;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   371
typedef struct TriggerStep TriggerStep;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   372
typedef struct Trigger Trigger;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   373
typedef struct WhereInfo WhereInfo;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   374
typedef struct WhereLevel WhereLevel;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   375
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   376
#include "os.h"
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   377
#include "mutex.h"
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   378
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   379
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   380
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   381
** If X is a character that can be used in an identifier then
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   382
** IdChar(X) will be true.  Otherwise it is false.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   383
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   384
** For ASCII, any character with the high-order bit set is
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   385
** allowed in an identifier.  For 7-bit characters, 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   386
** sqlite3IsIdChar[X] must be 1.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   387
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   388
** For EBCDIC, the rules are more complex but have the same
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   389
** end result.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   390
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   391
** Ticket #1066.  the SQL standard does not allow '$' in the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   392
** middle of identfiers.  But many SQL implementations do. 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   393
** SQLite will allow '$' in identifiers for compatibility.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   394
** But the feature is undocumented.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   395
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   396
#ifdef SQLITE_ASCII
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   397
const char sqlite3IsAsciiIdChar[] = {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   398
/* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   399
    0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* 2x */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   400
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,  /* 3x */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   401
    0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /* 4x */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   402
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1,  /* 5x */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   403
    0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /* 6x */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   404
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,  /* 7x */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   405
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   406
#define IdChar(C)  (((c=C)&0x80)!=0 || (c>0x1f && sqlite3IsAsciiIdChar[c-0x20]))
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   407
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   408
#ifdef SQLITE_EBCDIC
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   409
const char sqlite3IsEbcdicIdChar[] = {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   410
/* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   411
    0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,  /* 4x */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   412
    0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0,  /* 5x */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   413
    0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0,  /* 6x */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   414
    0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,  /* 7x */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   415
    0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0,  /* 8x */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   416
    0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0,  /* 9x */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   417
    1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0,  /* Ax */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   418
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* Bx */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   419
    0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,  /* Cx */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   420
    0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,  /* Dx */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   421
    0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,  /* Ex */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   422
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0,  /* Fx */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   423
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   424
#define IdChar(C)  (((c=C)>=0x42 && sqlite3IsEbcdicIdChar[c-0x40]))
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   425
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   426
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   427
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   428
** Each database file to be accessed by the system is an instance
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   429
** of the following structure.  There are normally two of these structures
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   430
** in the sqlite.aDb[] array.  aDb[0] is the main database file and
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   431
** aDb[1] is the database file used to hold temporary tables.  Additional
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   432
** databases may be attached.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   433
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   434
struct Db {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   435
  char *zName;         /* Name of this database */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   436
  Btree *pBt;          /* The B*Tree structure for this database file */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   437
  u8 inTrans;          /* 0: not writable.  1: Transaction.  2: Checkpoint */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   438
  u8 safety_level;     /* How aggressive at synching data to disk */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   439
  void *pAux;               /* Auxiliary data.  Usually NULL */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   440
  void (*xFreeAux)(void*);  /* Routine to free pAux */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   441
  Schema *pSchema;     /* Pointer to database schema (possibly shared) */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   442
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   443
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   444
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   445
** An instance of the following structure stores a database schema.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   446
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   447
** If there are no virtual tables configured in this schema, the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   448
** Schema.db variable is set to NULL. After the first virtual table
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   449
** has been added, it is set to point to the database connection 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   450
** used to create the connection. Once a virtual table has been
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   451
** added to the Schema structure and the Schema.db variable populated, 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   452
** only that database connection may use the Schema to prepare 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   453
** statements.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   454
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   455
struct Schema {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   456
  int schema_cookie;   /* Database schema version number for this file */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   457
  Hash tblHash;        /* All tables indexed by name */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   458
  Hash idxHash;        /* All (named) indices indexed by name */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   459
  Hash trigHash;       /* All triggers indexed by name */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   460
  Hash aFKey;          /* Foreign keys indexed by to-table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   461
  Table *pSeqTab;      /* The sqlite_sequence table used by AUTOINCREMENT */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   462
  u8 file_format;      /* Schema format version for this file */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   463
  u8 enc;              /* Text encoding used by this database */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   464
  u16 flags;           /* Flags associated with this schema */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   465
  int cache_size;      /* Number of pages to use in the cache */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   466
#ifndef SQLITE_OMIT_VIRTUALTABLE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   467
  sqlite3 *db;         /* "Owner" connection. See comment above */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   468
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   469
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   470
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   471
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   472
** These macros can be used to test, set, or clear bits in the 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   473
** Db.flags field.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   474
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   475
#define DbHasProperty(D,I,P)     (((D)->aDb[I].pSchema->flags&(P))==(P))
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   476
#define DbHasAnyProperty(D,I,P)  (((D)->aDb[I].pSchema->flags&(P))!=0)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   477
#define DbSetProperty(D,I,P)     (D)->aDb[I].pSchema->flags|=(P)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   478
#define DbClearProperty(D,I,P)   (D)->aDb[I].pSchema->flags&=~(P)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   479
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   480
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   481
** Allowed values for the DB.flags field.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   482
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   483
** The DB_SchemaLoaded flag is set after the database schema has been
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   484
** read into internal hash tables.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   485
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   486
** DB_UnresetViews means that one or more views have column names that
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   487
** have been filled out.  If the schema changes, these column names might
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   488
** changes and so the view will need to be reset.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   489
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   490
#define DB_SchemaLoaded    0x0001  /* The schema has been loaded */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   491
#define DB_UnresetViews    0x0002  /* Some views have defined column names */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   492
#define DB_Empty           0x0004  /* The file is empty (length 0 bytes) */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   493
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   494
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   495
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   496
** Each database is an instance of the following structure.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   497
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   498
** The sqlite.lastRowid records the last insert rowid generated by an
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   499
** insert statement.  Inserts on views do not affect its value.  Each
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   500
** trigger has its own context, so that lastRowid can be updated inside
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   501
** triggers as usual.  The previous value will be restored once the trigger
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   502
** exits.  Upon entering a before or instead of trigger, lastRowid is no
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   503
** longer (since after version 2.8.12) reset to -1.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   504
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   505
** The sqlite.nChange does not count changes within triggers and keeps no
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   506
** context.  It is reset at start of sqlite3_exec.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   507
** The sqlite.lsChange represents the number of changes made by the last
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   508
** insert, update, or delete statement.  It remains constant throughout the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   509
** length of a statement and is then updated by OP_SetCounts.  It keeps a
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   510
** context stack just like lastRowid so that the count of changes
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   511
** within a trigger is not seen outside the trigger.  Changes to views do not
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   512
** affect the value of lsChange.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   513
** The sqlite.csChange keeps track of the number of current changes (since
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   514
** the last statement) and is used to update sqlite_lsChange.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   515
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   516
** The member variables sqlite.errCode, sqlite.zErrMsg and sqlite.zErrMsg16
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   517
** store the most recent error code and, if applicable, string. The
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   518
** internal function sqlite3Error() is used to set these variables
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   519
** consistently.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   520
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   521
struct sqlite3 {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   522
  sqlite3_vfs *pVfs;            /* OS Interface */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   523
  int nDb;                      /* Number of backends currently in use */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   524
  Db *aDb;                      /* All backends */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   525
  int flags;                    /* Miscellanous flags. See below */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   526
  int openFlags;                /* Flags passed to sqlite3_vfs.xOpen() */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   527
  int errCode;                  /* Most recent error code (SQLITE_*) */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   528
  int errMask;                  /* & result codes with this before returning */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   529
  u8 autoCommit;                /* The auto-commit flag. */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   530
  u8 temp_store;                /* 1: file 2: memory 0: default */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   531
  u8 mallocFailed;              /* True if we have seen a malloc failure */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   532
  char nextAutovac;             /* Autovac setting after VACUUM if >=0 */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   533
  int nTable;                   /* Number of tables in the database */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   534
  CollSeq *pDfltColl;           /* The default collating sequence (BINARY) */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   535
  i64 lastRowid;                /* ROWID of most recent insert (see above) */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   536
  i64 priorNewRowid;            /* Last randomly generated ROWID */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   537
  int magic;                    /* Magic number for detect library misuse */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   538
  int nChange;                  /* Value returned by sqlite3_changes() */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   539
  int nTotalChange;             /* Value returned by sqlite3_total_changes() */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   540
  sqlite3_mutex *mutex;         /* Connection mutex */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   541
  struct sqlite3InitInfo {      /* Information used during initialization */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   542
    int iDb;                    /* When back is being initialized */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   543
    int newTnum;                /* Rootpage of table being initialized */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   544
    u8 busy;                    /* TRUE if currently initializing */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   545
  } init;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   546
  int nExtension;               /* Number of loaded extensions */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   547
  void **aExtension;            /* Array of shared libraray handles */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   548
  struct Vdbe *pVdbe;           /* List of active virtual machines */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   549
  int activeVdbeCnt;            /* Number of vdbes currently executing */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   550
  void (*xTrace)(void*,const char*);        /* Trace function */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   551
  void *pTraceArg;                          /* Argument to the trace function */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   552
  void (*xProfile)(void*,const char*,u64);  /* Profiling function */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   553
  void *pProfileArg;                        /* Argument to profile function */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   554
  void *pCommitArg;                 /* Argument to xCommitCallback() */   
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   555
  int (*xCommitCallback)(void*);    /* Invoked at every commit. */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   556
  void *pRollbackArg;               /* Argument to xRollbackCallback() */   
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   557
  void (*xRollbackCallback)(void*); /* Invoked at every commit. */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   558
  void *pUpdateArg;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   559
  void (*xUpdateCallback)(void*,int, const char*,const char*,sqlite_int64);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   560
  void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   561
  void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   562
  void *pCollNeededArg;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   563
  sqlite3_value *pErr;          /* Most recent error message */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   564
  char *zErrMsg;                /* Most recent error message (UTF-8 encoded) */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   565
  char *zErrMsg16;              /* Most recent error message (UTF-16 encoded) */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   566
  union {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   567
    int isInterrupted;          /* True if sqlite3_interrupt has been called */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   568
    double notUsed1;            /* Spacer */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   569
  } u1;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   570
#ifndef SQLITE_OMIT_AUTHORIZATION
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   571
  int (*xAuth)(void*,int,const char*,const char*,const char*,const char*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   572
                                /* Access authorization function */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   573
  void *pAuthArg;               /* 1st argument to the access auth function */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   574
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   575
#ifndef SQLITE_OMIT_PROGRESS_CALLBACK
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   576
  int (*xProgress)(void *);     /* The progress callback */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   577
  void *pProgressArg;           /* Argument to the progress callback */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   578
  int nProgressOps;             /* Number of opcodes for progress callback */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   579
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   580
#ifndef SQLITE_OMIT_VIRTUALTABLE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   581
  Hash aModule;                 /* populated by sqlite3_create_module() */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   582
  Table *pVTab;                 /* vtab with active Connect/Create method */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   583
  sqlite3_vtab **aVTrans;       /* Virtual tables with open transactions */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   584
  int nVTrans;                  /* Allocated size of aVTrans */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   585
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   586
  Hash aFunc;                   /* All functions that can be in SQL exprs */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   587
  Hash aCollSeq;                /* All collating sequences */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   588
  BusyHandler busyHandler;      /* Busy callback */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   589
  int busyTimeout;              /* Busy handler timeout, in msec */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   590
  Db aDbStatic[2];              /* Static space for the 2 default backends */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   591
#ifdef SQLITE_SSE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   592
  sqlite3_stmt *pFetch;         /* Used by SSE to fetch stored statements */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   593
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   594
  u8 dfltLockMode;              /* Default locking-mode for attached dbs */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   595
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   596
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   597
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   598
** A macro to discover the encoding of a database.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   599
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   600
#define ENC(db) ((db)->aDb[0].pSchema->enc)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   601
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   602
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   603
** Possible values for the sqlite.flags and or Db.flags fields.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   604
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   605
** On sqlite.flags, the SQLITE_InTrans value means that we have
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   606
** executed a BEGIN.  On Db.flags, SQLITE_InTrans means a statement
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   607
** transaction is active on that particular database file.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   608
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   609
#define SQLITE_VdbeTrace      0x00000001  /* True to trace VDBE execution */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   610
#define SQLITE_InTrans        0x00000008  /* True if in a transaction */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   611
#define SQLITE_InternChanges  0x00000010  /* Uncommitted Hash table changes */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   612
#define SQLITE_FullColNames   0x00000020  /* Show full column names on SELECT */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   613
#define SQLITE_ShortColNames  0x00000040  /* Show short columns names */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   614
#define SQLITE_CountRows      0x00000080  /* Count rows changed by INSERT, */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   615
                                          /*   DELETE, or UPDATE and return */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   616
                                          /*   the count using a callback. */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   617
#define SQLITE_NullCallback   0x00000100  /* Invoke the callback once if the */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   618
                                          /*   result set is empty */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   619
#define SQLITE_SqlTrace       0x00000200  /* Debug print SQL as it executes */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   620
#define SQLITE_VdbeListing    0x00000400  /* Debug listings of VDBE programs */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   621
#define SQLITE_WriteSchema    0x00000800  /* OK to update SQLITE_MASTER */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   622
#define SQLITE_NoReadlock     0x00001000  /* Readlocks are omitted when 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   623
                                          ** accessing read-only databases */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   624
#define SQLITE_IgnoreChecks   0x00002000  /* Do not enforce check constraints */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   625
#define SQLITE_ReadUncommitted 0x00004000 /* For shared-cache mode */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   626
#define SQLITE_LegacyFileFmt  0x00008000  /* Create new databases in format 1 */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   627
#define SQLITE_FullFSync      0x00010000  /* Use full fsync on the backend */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   628
#define SQLITE_LoadExtension  0x00020000  /* Enable load_extension */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   629
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   630
#define SQLITE_RecoveryMode   0x00040000  /* Ignore schema errors */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   631
#define SQLITE_SharedCache    0x00080000  /* Cache sharing is enabled */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   632
#define SQLITE_Vtab           0x00100000  /* There exists a virtual table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   633
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   634
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   635
** Possible values for the sqlite.magic field.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   636
** The numbers are obtained at random and have no special meaning, other
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   637
** than being distinct from one another.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   638
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   639
#define SQLITE_MAGIC_OPEN     0xa029a697  /* Database is open */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   640
#define SQLITE_MAGIC_CLOSED   0x9f3c2d33  /* Database is closed */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   641
#define SQLITE_MAGIC_BUSY     0xf03b7906  /* Database currently in use */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   642
#define SQLITE_MAGIC_ERROR    0xb5357930  /* An SQLITE_MISUSE error occurred */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   643
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   644
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   645
** Each SQL function is defined by an instance of the following
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   646
** structure.  A pointer to this structure is stored in the sqlite.aFunc
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   647
** hash table.  When multiple functions have the same name, the hash table
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   648
** points to a linked list of these structures.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   649
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   650
struct FuncDef {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   651
  i16 nArg;            /* Number of arguments.  -1 means unlimited */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   652
  u8 iPrefEnc;         /* Preferred text encoding (SQLITE_UTF8, 16LE, 16BE) */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   653
  u8 needCollSeq;      /* True if sqlite3GetFuncCollSeq() might be called */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   654
  u8 flags;            /* Some combination of SQLITE_FUNC_* */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   655
  void *pUserData;     /* User data parameter */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   656
  FuncDef *pNext;      /* Next function with same name */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   657
  void (*xFunc)(sqlite3_context*,int,sqlite3_value**); /* Regular function */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   658
  void (*xStep)(sqlite3_context*,int,sqlite3_value**); /* Aggregate step */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   659
  void (*xFinalize)(sqlite3_context*);                /* Aggregate finializer */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   660
  char zName[1];       /* SQL name of the function.  MUST BE LAST */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   661
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   662
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   663
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   664
** Each SQLite module (virtual table definition) is defined by an
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   665
** instance of the following structure, stored in the sqlite3.aModule
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   666
** hash table.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   667
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   668
struct Module {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   669
  const sqlite3_module *pModule;       /* Callback pointers */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   670
  const char *zName;                   /* Name passed to create_module() */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   671
  void *pAux;                          /* pAux passed to create_module() */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   672
  void (*xDestroy)(void *);            /* Module destructor function */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   673
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   674
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   675
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   676
** Possible values for FuncDef.flags
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   677
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   678
#define SQLITE_FUNC_LIKE   0x01  /* Candidate for the LIKE optimization */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   679
#define SQLITE_FUNC_CASE   0x02  /* Case-sensitive LIKE-type function */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   680
#define SQLITE_FUNC_EPHEM  0x04  /* Ephermeral.  Delete with VDBE */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   681
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   682
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   683
** information about each column of an SQL table is held in an instance
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   684
** of this structure.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   685
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   686
struct Column {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   687
  char *zName;     /* Name of this column */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   688
  Expr *pDflt;     /* Default value of this column */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   689
  char *zType;     /* Data type for this column */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   690
  char *zColl;     /* Collating sequence.  If NULL, use the default */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   691
  u8 notNull;      /* True if there is a NOT NULL constraint */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   692
  u8 isPrimKey;    /* True if this column is part of the PRIMARY KEY */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   693
  char affinity;   /* One of the SQLITE_AFF_... values */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   694
#ifndef SQLITE_OMIT_VIRTUALTABLE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   695
  u8 isHidden;     /* True if this column is 'hidden' */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   696
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   697
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   698
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   699
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   700
** A "Collating Sequence" is defined by an instance of the following
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   701
** structure. Conceptually, a collating sequence consists of a name and
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   702
** a comparison routine that defines the order of that sequence.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   703
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   704
** There may two seperate implementations of the collation function, one
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   705
** that processes text in UTF-8 encoding (CollSeq.xCmp) and another that
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   706
** processes text encoded in UTF-16 (CollSeq.xCmp16), using the machine
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   707
** native byte order. When a collation sequence is invoked, SQLite selects
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   708
** the version that will require the least expensive encoding
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   709
** translations, if any.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   710
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   711
** The CollSeq.pUser member variable is an extra parameter that passed in
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   712
** as the first argument to the UTF-8 comparison function, xCmp.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   713
** CollSeq.pUser16 is the equivalent for the UTF-16 comparison function,
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   714
** xCmp16.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   715
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   716
** If both CollSeq.xCmp and CollSeq.xCmp16 are NULL, it means that the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   717
** collating sequence is undefined.  Indices built on an undefined
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   718
** collating sequence may not be read or written.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   719
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   720
struct CollSeq {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   721
  char *zName;          /* Name of the collating sequence, UTF-8 encoded */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   722
  u8 enc;               /* Text encoding handled by xCmp() */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   723
  u8 type;              /* One of the SQLITE_COLL_... values below */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   724
  void *pUser;          /* First argument to xCmp() */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   725
  int (*xCmp)(void*,int, const void*, int, const void*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   726
  void (*xDel)(void*);  /* Destructor for pUser */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   727
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   728
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   729
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   730
** Allowed values of CollSeq flags:
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   731
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   732
#define SQLITE_COLL_BINARY  1  /* The default memcmp() collating sequence */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   733
#define SQLITE_COLL_NOCASE  2  /* The built-in NOCASE collating sequence */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   734
#define SQLITE_COLL_REVERSE 3  /* The built-in REVERSE collating sequence */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   735
#define SQLITE_COLL_USER    0  /* Any other user-defined collating sequence */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   736
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   737
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   738
** A sort order can be either ASC or DESC.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   739
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   740
#define SQLITE_SO_ASC       0  /* Sort in ascending order */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   741
#define SQLITE_SO_DESC      1  /* Sort in ascending order */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   742
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   743
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   744
** Column affinity types.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   745
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   746
** These used to have mnemonic name like 'i' for SQLITE_AFF_INTEGER and
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   747
** 't' for SQLITE_AFF_TEXT.  But we can save a little space and improve
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   748
** the speed a little by number the values consecutively.  
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   749
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   750
** But rather than start with 0 or 1, we begin with 'a'.  That way,
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   751
** when multiple affinity types are concatenated into a string and
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   752
** used as the P3 operand, they will be more readable.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   753
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   754
** Note also that the numeric types are grouped together so that testing
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   755
** for a numeric type is a single comparison.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   756
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   757
#define SQLITE_AFF_TEXT     'a'
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   758
#define SQLITE_AFF_NONE     'b'
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   759
#define SQLITE_AFF_NUMERIC  'c'
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   760
#define SQLITE_AFF_INTEGER  'd'
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   761
#define SQLITE_AFF_REAL     'e'
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   762
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   763
#define sqlite3IsNumericAffinity(X)  ((X)>=SQLITE_AFF_NUMERIC)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   764
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   765
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   766
** Each SQL table is represented in memory by an instance of the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   767
** following structure.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   768
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   769
** Table.zName is the name of the table.  The case of the original
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   770
** CREATE TABLE statement is stored, but case is not significant for
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   771
** comparisons.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   772
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   773
** Table.nCol is the number of columns in this table.  Table.aCol is a
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   774
** pointer to an array of Column structures, one for each column.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   775
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   776
** If the table has an INTEGER PRIMARY KEY, then Table.iPKey is the index of
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   777
** the column that is that key.   Otherwise Table.iPKey is negative.  Note
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   778
** that the datatype of the PRIMARY KEY must be INTEGER for this field to
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   779
** be set.  An INTEGER PRIMARY KEY is used as the rowid for each row of
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   780
** the table.  If a table has no INTEGER PRIMARY KEY, then a random rowid
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   781
** is generated for each row of the table.  Table.hasPrimKey is true if
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   782
** the table has any PRIMARY KEY, INTEGER or otherwise.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   783
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   784
** Table.tnum is the page number for the root BTree page of the table in the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   785
** database file.  If Table.iDb is the index of the database table backend
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   786
** in sqlite.aDb[].  0 is for the main database and 1 is for the file that
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   787
** holds temporary tables and indices.  If Table.isEphem
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   788
** is true, then the table is stored in a file that is automatically deleted
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   789
** when the VDBE cursor to the table is closed.  In this case Table.tnum 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   790
** refers VDBE cursor number that holds the table open, not to the root
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   791
** page number.  Transient tables are used to hold the results of a
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   792
** sub-query that appears instead of a real table name in the FROM clause 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   793
** of a SELECT statement.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   794
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   795
struct Table {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   796
  char *zName;     /* Name of the table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   797
  int nCol;        /* Number of columns in this table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   798
  Column *aCol;    /* Information about each column */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   799
  int iPKey;       /* If not less then 0, use aCol[iPKey] as the primary key */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   800
  Index *pIndex;   /* List of SQL indexes on this table. */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   801
  int tnum;        /* Root BTree node for this table (see note above) */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   802
  Select *pSelect; /* NULL for tables.  Points to definition if a view. */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   803
  int nRef;          /* Number of pointers to this Table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   804
  Trigger *pTrigger; /* List of SQL triggers on this table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   805
  FKey *pFKey;       /* Linked list of all foreign keys in this table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   806
  char *zColAff;     /* String defining the affinity of each column */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   807
#ifndef SQLITE_OMIT_CHECK
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   808
  Expr *pCheck;      /* The AND of all CHECK constraints */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   809
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   810
#ifndef SQLITE_OMIT_ALTERTABLE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   811
  int addColOffset;  /* Offset in CREATE TABLE statement to add a new column */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   812
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   813
  u8 readOnly;     /* True if this table should not be written by the user */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   814
  u8 isEphem;      /* True if created using OP_OpenEphermeral */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   815
  u8 hasPrimKey;   /* True if there exists a primary key */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   816
  u8 keyConf;      /* What to do in case of uniqueness conflict on iPKey */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   817
  u8 autoInc;      /* True if the integer primary key is autoincrement */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   818
#ifndef SQLITE_OMIT_VIRTUALTABLE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   819
  u8 isVirtual;             /* True if this is a virtual table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   820
  u8 isCommit;              /* True once the CREATE TABLE has been committed */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   821
  Module *pMod;             /* Pointer to the implementation of the module */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   822
  sqlite3_vtab *pVtab;      /* Pointer to the module instance */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   823
  int nModuleArg;           /* Number of arguments to the module */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   824
  char **azModuleArg;       /* Text of all module args. [0] is module name */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   825
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   826
  Schema *pSchema;          /* Schema that contains this table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   827
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   828
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   829
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   830
** Test to see whether or not a table is a virtual table.  This is
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   831
** done as a macro so that it will be optimized out when virtual
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   832
** table support is omitted from the build.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   833
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   834
#ifndef SQLITE_OMIT_VIRTUALTABLE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   835
#  define IsVirtual(X)      ((X)->isVirtual)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   836
#  define IsHiddenColumn(X) ((X)->isHidden)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   837
#else
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   838
#  define IsVirtual(X)      0
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   839
#  define IsHiddenColumn(X) 0
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   840
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   841
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   842
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   843
** Each foreign key constraint is an instance of the following structure.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   844
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   845
** A foreign key is associated with two tables.  The "from" table is
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   846
** the table that contains the REFERENCES clause that creates the foreign
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   847
** key.  The "to" table is the table that is named in the REFERENCES clause.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   848
** Consider this example:
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   849
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   850
**     CREATE TABLE ex1(
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   851
**       a INTEGER PRIMARY KEY,
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   852
**       b INTEGER CONSTRAINT fk1 REFERENCES ex2(x)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   853
**     );
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   854
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   855
** For foreign key "fk1", the from-table is "ex1" and the to-table is "ex2".
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   856
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   857
** Each REFERENCES clause generates an instance of the following structure
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   858
** which is attached to the from-table.  The to-table need not exist when
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   859
** the from-table is created.  The existance of the to-table is not checked
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   860
** until an attempt is made to insert data into the from-table.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   861
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   862
** The sqlite.aFKey hash table stores pointers to this structure
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   863
** given the name of a to-table.  For each to-table, all foreign keys
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   864
** associated with that table are on a linked list using the FKey.pNextTo
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   865
** field.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   866
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   867
struct FKey {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   868
  Table *pFrom;     /* The table that constains the REFERENCES clause */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   869
  FKey *pNextFrom;  /* Next foreign key in pFrom */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   870
  char *zTo;        /* Name of table that the key points to */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   871
  FKey *pNextTo;    /* Next foreign key that points to zTo */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   872
  int nCol;         /* Number of columns in this key */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   873
  struct sColMap {  /* Mapping of columns in pFrom to columns in zTo */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   874
    int iFrom;         /* Index of column in pFrom */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   875
    char *zCol;        /* Name of column in zTo.  If 0 use PRIMARY KEY */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   876
  } *aCol;          /* One entry for each of nCol column s */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   877
  u8 isDeferred;    /* True if constraint checking is deferred till COMMIT */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   878
  u8 updateConf;    /* How to resolve conflicts that occur on UPDATE */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   879
  u8 deleteConf;    /* How to resolve conflicts that occur on DELETE */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   880
  u8 insertConf;    /* How to resolve conflicts that occur on INSERT */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   881
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   882
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   883
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   884
** SQLite supports many different ways to resolve a constraint
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   885
** error.  ROLLBACK processing means that a constraint violation
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   886
** causes the operation in process to fail and for the current transaction
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   887
** to be rolled back.  ABORT processing means the operation in process
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   888
** fails and any prior changes from that one operation are backed out,
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   889
** but the transaction is not rolled back.  FAIL processing means that
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   890
** the operation in progress stops and returns an error code.  But prior
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   891
** changes due to the same operation are not backed out and no rollback
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   892
** occurs.  IGNORE means that the particular row that caused the constraint
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   893
** error is not inserted or updated.  Processing continues and no error
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   894
** is returned.  REPLACE means that preexisting database rows that caused
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   895
** a UNIQUE constraint violation are removed so that the new insert or
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   896
** update can proceed.  Processing continues and no error is reported.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   897
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   898
** RESTRICT, SETNULL, and CASCADE actions apply only to foreign keys.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   899
** RESTRICT is the same as ABORT for IMMEDIATE foreign keys and the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   900
** same as ROLLBACK for DEFERRED keys.  SETNULL means that the foreign
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   901
** key is set to NULL.  CASCADE means that a DELETE or UPDATE of the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   902
** referenced table row is propagated into the row that holds the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   903
** foreign key.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   904
** 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   905
** The following symbolic values are used to record which type
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   906
** of action to take.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   907
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   908
#define OE_None     0   /* There is no constraint to check */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   909
#define OE_Rollback 1   /* Fail the operation and rollback the transaction */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   910
#define OE_Abort    2   /* Back out changes but do no rollback transaction */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   911
#define OE_Fail     3   /* Stop the operation but leave all prior changes */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   912
#define OE_Ignore   4   /* Ignore the error. Do not do the INSERT or UPDATE */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   913
#define OE_Replace  5   /* Delete existing record, then do INSERT or UPDATE */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   914
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   915
#define OE_Restrict 6   /* OE_Abort for IMMEDIATE, OE_Rollback for DEFERRED */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   916
#define OE_SetNull  7   /* Set the foreign key value to NULL */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   917
#define OE_SetDflt  8   /* Set the foreign key value to its default */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   918
#define OE_Cascade  9   /* Cascade the changes */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   919
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   920
#define OE_Default  99  /* Do whatever the default action is */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   921
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   922
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   923
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   924
** An instance of the following structure is passed as the first
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   925
** argument to sqlite3VdbeKeyCompare and is used to control the 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   926
** comparison of the two index keys.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   927
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   928
** If the KeyInfo.incrKey value is true and the comparison would
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   929
** otherwise be equal, then return a result as if the second key
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   930
** were larger.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   931
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   932
struct KeyInfo {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   933
  sqlite3 *db;        /* The database connection */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   934
  u8 enc;             /* Text encoding - one of the TEXT_Utf* values */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   935
  u8 incrKey;         /* Increase 2nd key by epsilon before comparison */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   936
  u8 prefixIsEqual;   /* Treat a prefix as equal */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   937
  int nField;         /* Number of entries in aColl[] */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   938
  u8 *aSortOrder;     /* If defined an aSortOrder[i] is true, sort DESC */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   939
  CollSeq *aColl[1];  /* Collating sequence for each term of the key */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   940
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   941
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   942
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   943
** Each SQL index is represented in memory by an
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   944
** instance of the following structure.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   945
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   946
** The columns of the table that are to be indexed are described
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   947
** by the aiColumn[] field of this structure.  For example, suppose
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   948
** we have the following table and index:
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   949
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   950
**     CREATE TABLE Ex1(c1 int, c2 int, c3 text);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   951
**     CREATE INDEX Ex2 ON Ex1(c3,c1);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   952
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   953
** In the Table structure describing Ex1, nCol==3 because there are
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   954
** three columns in the table.  In the Index structure describing
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   955
** Ex2, nColumn==2 since 2 of the 3 columns of Ex1 are indexed.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   956
** The value of aiColumn is {2, 0}.  aiColumn[0]==2 because the 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   957
** first column to be indexed (c3) has an index of 2 in Ex1.aCol[].
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   958
** The second column to be indexed (c1) has an index of 0 in
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   959
** Ex1.aCol[], hence Ex2.aiColumn[1]==0.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   960
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   961
** The Index.onError field determines whether or not the indexed columns
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   962
** must be unique and what to do if they are not.  When Index.onError=OE_None,
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   963
** it means this is not a unique index.  Otherwise it is a unique index
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   964
** and the value of Index.onError indicate the which conflict resolution 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   965
** algorithm to employ whenever an attempt is made to insert a non-unique
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   966
** element.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   967
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   968
struct Index {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   969
  char *zName;     /* Name of this index */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   970
  int nColumn;     /* Number of columns in the table used by this index */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   971
  int *aiColumn;   /* Which columns are used by this index.  1st is 0 */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   972
  unsigned *aiRowEst; /* Result of ANALYZE: Est. rows selected by each column */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   973
  Table *pTable;   /* The SQL table being indexed */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   974
  int tnum;        /* Page containing root of this index in database file */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   975
  u8 onError;      /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   976
  u8 autoIndex;    /* True if is automatically created (ex: by UNIQUE) */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   977
  char *zColAff;   /* String defining the affinity of each column */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   978
  Index *pNext;    /* The next index associated with the same table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   979
  Schema *pSchema; /* Schema containing this index */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   980
  u8 *aSortOrder;  /* Array of size Index.nColumn. True==DESC, False==ASC */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   981
  char **azColl;   /* Array of collation sequence names for index */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   982
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   983
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   984
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   985
** Each token coming out of the lexer is an instance of
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   986
** this structure.  Tokens are also used as part of an expression.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   987
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   988
** Note if Token.z==0 then Token.dyn and Token.n are undefined and
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   989
** may contain random values.  Do not make any assuptions about Token.dyn
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   990
** and Token.n when Token.z==0.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   991
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   992
struct Token {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   993
  const unsigned char *z; /* Text of the token.  Not NULL-terminated! */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   994
  unsigned dyn;//  : 1;      /* True for malloced memory, false for static */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   995
  unsigned n;//    : 31;     /* Number of characters in this token */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   996
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   997
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   998
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
   999
** An instance of this structure contains information needed to generate
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1000
** code for a SELECT that contains aggregate functions.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1001
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1002
** If Expr.op==TK_AGG_COLUMN or TK_AGG_FUNCTION then Expr.pAggInfo is a
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1003
** pointer to this structure.  The Expr.iColumn field is the index in
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1004
** AggInfo.aCol[] or AggInfo.aFunc[] of information needed to generate
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1005
** code for that node.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1006
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1007
** AggInfo.pGroupBy and AggInfo.aFunc.pExpr point to fields within the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1008
** original Select structure that describes the SELECT statement.  These
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1009
** fields do not need to be freed when deallocating the AggInfo structure.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1010
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1011
struct AggInfo {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1012
  u8 directMode;          /* Direct rendering mode means take data directly
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1013
                          ** from source tables rather than from accumulators */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1014
  u8 useSortingIdx;       /* In direct mode, reference the sorting index rather
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1015
                          ** than the source table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1016
  int sortingIdx;         /* Cursor number of the sorting index */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1017
  ExprList *pGroupBy;     /* The group by clause */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1018
  int nSortingColumn;     /* Number of columns in the sorting index */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1019
  struct AggInfo_col {    /* For each column used in source tables */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1020
    Table *pTab;             /* Source table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1021
    int iTable;              /* Cursor number of the source table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1022
    int iColumn;             /* Column number within the source table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1023
    int iSorterColumn;       /* Column number in the sorting index */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1024
    int iMem;                /* Memory location that acts as accumulator */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1025
    Expr *pExpr;             /* The original expression */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1026
  } *aCol;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1027
  int nColumn;            /* Number of used entries in aCol[] */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1028
  int nColumnAlloc;       /* Number of slots allocated for aCol[] */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1029
  int nAccumulator;       /* Number of columns that show through to the output.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1030
                          ** Additional columns are used only as parameters to
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1031
                          ** aggregate functions */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1032
  struct AggInfo_func {   /* For each aggregate function */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1033
    Expr *pExpr;             /* Expression encoding the function */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1034
    FuncDef *pFunc;          /* The aggregate function implementation */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1035
    int iMem;                /* Memory location that acts as accumulator */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1036
    int iDistinct;           /* Ephermeral table used to enforce DISTINCT */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1037
  } *aFunc;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1038
  int nFunc;              /* Number of entries in aFunc[] */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1039
  int nFuncAlloc;         /* Number of slots allocated for aFunc[] */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1040
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1041
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1042
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1043
** Each node of an expression in the parse tree is an instance
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1044
** of this structure.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1045
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1046
** Expr.op is the opcode.  The integer parser token codes are reused
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1047
** as opcodes here.  For example, the parser defines TK_GE to be an integer
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1048
** code representing the ">=" operator.  This same integer code is reused
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1049
** to represent the greater-than-or-equal-to operator in the expression
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1050
** tree.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1051
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1052
** Expr.pRight and Expr.pLeft are subexpressions.  Expr.pList is a list
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1053
** of argument if the expression is a function.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1054
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1055
** Expr.token is the operator token for this node.  For some expressions
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1056
** that have subexpressions, Expr.token can be the complete text that gave
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1057
** rise to the Expr.  In the latter case, the token is marked as being
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1058
** a compound token.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1059
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1060
** An expression of the form ID or ID.ID refers to a column in a table.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1061
** For such expressions, Expr.op is set to TK_COLUMN and Expr.iTable is
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1062
** the integer cursor number of a VDBE cursor pointing to that table and
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1063
** Expr.iColumn is the column number for the specific column.  If the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1064
** expression is used as a result in an aggregate SELECT, then the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1065
** value is also stored in the Expr.iAgg column in the aggregate so that
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1066
** it can be accessed after all aggregates are computed.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1067
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1068
** If the expression is a function, the Expr.iTable is an integer code
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1069
** representing which function.  If the expression is an unbound variable
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1070
** marker (a question mark character '?' in the original SQL) then the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1071
** Expr.iTable holds the index number for that variable.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1072
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1073
** If the expression is a subquery then Expr.iColumn holds an integer
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1074
** register number containing the result of the subquery.  If the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1075
** subquery gives a constant result, then iTable is -1.  If the subquery
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1076
** gives a different answer at different times during statement processing
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1077
** then iTable is the address of a subroutine that computes the subquery.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1078
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1079
** The Expr.pSelect field points to a SELECT statement.  The SELECT might
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1080
** be the right operand of an IN operator.  Or, if a scalar SELECT appears
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1081
** in an expression the opcode is TK_SELECT and Expr.pSelect is the only
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1082
** operand.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1083
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1084
** If the Expr is of type OP_Column, and the table it is selecting from
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1085
** is a disk table or the "old.*" pseudo-table, then pTab points to the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1086
** corresponding table definition.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1087
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1088
struct Expr {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1089
  u8 op;                 /* Operation performed by this node */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1090
  char affinity;         /* The affinity of the column or 0 if not a column */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1091
  u16 flags;             /* Various flags.  See below */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1092
  CollSeq *pColl;        /* The collation type of the column or 0 */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1093
  Expr *pLeft, *pRight;  /* Left and right subnodes */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1094
  ExprList *pList;       /* A list of expressions used as function arguments
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1095
                         ** or in "<expr> IN (<expr-list)" */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1096
  Token token;           /* An operand token */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1097
  Token span;            /* Complete text of the expression */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1098
  int iTable, iColumn;   /* When op==TK_COLUMN, then this expr node means the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1099
                         ** iColumn-th field of the iTable-th table. */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1100
  AggInfo *pAggInfo;     /* Used by TK_AGG_COLUMN and TK_AGG_FUNCTION */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1101
  int iAgg;              /* Which entry in pAggInfo->aCol[] or ->aFunc[] */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1102
  int iRightJoinTable;   /* If EP_FromJoin, the right table of the join */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1103
  Select *pSelect;       /* When the expression is a sub-select.  Also the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1104
                         ** right side of "<expr> IN (<select>)" */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1105
  Table *pTab;           /* Table for OP_Column expressions. */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1106
/*  Schema *pSchema; */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1107
#if defined(SQLITE_TEST) || SQLITE_MAX_EXPR_DEPTH>0
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1108
  int nHeight;           /* Height of the tree headed by this node */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1109
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1110
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1111
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1112
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1113
** The following are the meanings of bits in the Expr.flags field.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1114
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1115
#define EP_FromJoin     0x01  /* Originated in ON or USING clause of a join */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1116
#define EP_Agg          0x02  /* Contains one or more aggregate functions */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1117
#define EP_Resolved     0x04  /* IDs have been resolved to COLUMNs */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1118
#define EP_Error        0x08  /* Expression contains one or more errors */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1119
#define EP_Distinct     0x10  /* Aggregate function with DISTINCT keyword */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1120
#define EP_VarSelect    0x20  /* pSelect is correlated, not constant */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1121
#define EP_Dequoted     0x40  /* True if the string has been dequoted */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1122
#define EP_InfixFunc    0x80  /* True for an infix function: LIKE, GLOB, etc */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1123
#define EP_ExpCollate  0x100  /* Collating sequence specified explicitly */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1124
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1125
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1126
** These macros can be used to test, set, or clear bits in the 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1127
** Expr.flags field.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1128
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1129
#define ExprHasProperty(E,P)     (((E)->flags&(P))==(P))
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1130
#define ExprHasAnyProperty(E,P)  (((E)->flags&(P))!=0)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1131
#define ExprSetProperty(E,P)     (E)->flags|=(P)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1132
#define ExprClearProperty(E,P)   (E)->flags&=~(P)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1133
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1134
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1135
** A list of expressions.  Each expression may optionally have a
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1136
** name.  An expr/name combination can be used in several ways, such
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1137
** as the list of "expr AS ID" fields following a "SELECT" or in the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1138
** list of "ID = expr" items in an UPDATE.  A list of expressions can
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1139
** also be used as the argument to a function, in which case the a.zName
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1140
** field is not used.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1141
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1142
struct ExprList {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1143
  int nExpr;             /* Number of expressions on the list */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1144
  int nAlloc;            /* Number of entries allocated below */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1145
  int iECursor;          /* VDBE Cursor associated with this ExprList */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1146
  struct ExprList_item {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1147
    Expr *pExpr;           /* The list of expressions */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1148
    char *zName;           /* Token associated with this expression */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1149
    u8 sortOrder;          /* 1 for DESC or 0 for ASC */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1150
    u8 isAgg;              /* True if this is an aggregate like count(*) */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1151
    u8 done;               /* A flag to indicate when processing is finished */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1152
  } *a;                  /* One entry for each expression */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1153
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1154
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1155
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1156
** An instance of this structure can hold a simple list of identifiers,
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1157
** such as the list "a,b,c" in the following statements:
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1158
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1159
**      INSERT INTO t(a,b,c) VALUES ...;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1160
**      CREATE INDEX idx ON t(a,b,c);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1161
**      CREATE TRIGGER trig BEFORE UPDATE ON t(a,b,c) ...;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1162
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1163
** The IdList.a.idx field is used when the IdList represents the list of
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1164
** column names after a table name in an INSERT statement.  In the statement
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1165
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1166
**     INSERT INTO t(a,b,c) ...
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1167
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1168
** If "a" is the k-th column of table "t", then IdList.a[0].idx==k.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1169
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1170
struct IdList {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1171
  struct IdList_item {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1172
    char *zName;      /* Name of the identifier */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1173
    int idx;          /* Index in some Table.aCol[] of a column named zName */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1174
  } *a;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1175
  int nId;         /* Number of identifiers on the list */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1176
  int nAlloc;      /* Number of entries allocated for a[] below */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1177
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1178
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1179
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1180
** The bitmask datatype defined below is used for various optimizations.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1181
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1182
** Changing this from a 64-bit to a 32-bit type limits the number of
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1183
** tables in a join to 32 instead of 64.  But it also reduces the size
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1184
** of the library by 738 bytes on ix86.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1185
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1186
typedef u64 Bitmask;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1187
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1188
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1189
** The following structure describes the FROM clause of a SELECT statement.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1190
** Each table or subquery in the FROM clause is a separate element of
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1191
** the SrcList.a[] array.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1192
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1193
** With the addition of multiple database support, the following structure
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1194
** can also be used to describe a particular table such as the table that
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1195
** is modified by an INSERT, DELETE, or UPDATE statement.  In standard SQL,
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1196
** such a table must be a simple name: ID.  But in SQLite, the table can
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1197
** now be identified by a database name, a dot, then the table name: ID.ID.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1198
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1199
** The jointype starts out showing the join type between the current table
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1200
** and the next table on the list.  The parser builds the list this way.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1201
** But sqlite3SrcListShiftJoinType() later shifts the jointypes so that each
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1202
** jointype expresses the join between the table and the previous table.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1203
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1204
struct SrcList {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1205
  i16 nSrc;        /* Number of tables or subqueries in the FROM clause */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1206
  i16 nAlloc;      /* Number of entries allocated in a[] below */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1207
  struct SrcList_item {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1208
    char *zDatabase;  /* Name of database holding this table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1209
    char *zName;      /* Name of the table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1210
    char *zAlias;     /* The "B" part of a "A AS B" phrase.  zName is the "A" */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1211
    Table *pTab;      /* An SQL table corresponding to zName */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1212
    Select *pSelect;  /* A SELECT statement used in place of a table name */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1213
    u8 isPopulated;   /* Temporary table associated with SELECT is populated */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1214
    u8 jointype;      /* Type of join between this able and the previous */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1215
    int iCursor;      /* The VDBE cursor number used to access this table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1216
    Expr *pOn;        /* The ON clause of a join */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1217
    IdList *pUsing;   /* The USING clause of a join */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1218
    Bitmask colUsed;  /* Bit N (1<<N) set if column N or pTab is used */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1219
  } a[1];             /* One entry for each identifier on the list */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1220
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1221
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1222
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1223
** Permitted values of the SrcList.a.jointype field
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1224
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1225
#define JT_INNER     0x0001    /* Any kind of inner or cross join */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1226
#define JT_CROSS     0x0002    /* Explicit use of the CROSS keyword */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1227
#define JT_NATURAL   0x0004    /* True for a "natural" join */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1228
#define JT_LEFT      0x0008    /* Left outer join */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1229
#define JT_RIGHT     0x0010    /* Right outer join */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1230
#define JT_OUTER     0x0020    /* The "OUTER" keyword is present */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1231
#define JT_ERROR     0x0040    /* unknown or unsupported join type */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1232
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1233
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1234
** For each nested loop in a WHERE clause implementation, the WhereInfo
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1235
** structure contains a single instance of this structure.  This structure
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1236
** is intended to be private the the where.c module and should not be
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1237
** access or modified by other modules.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1238
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1239
** The pIdxInfo and pBestIdx fields are used to help pick the best
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1240
** index on a virtual table.  The pIdxInfo pointer contains indexing
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1241
** information for the i-th table in the FROM clause before reordering.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1242
** All the pIdxInfo pointers are freed by whereInfoFree() in where.c.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1243
** The pBestIdx pointer is a copy of pIdxInfo for the i-th table after
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1244
** FROM clause ordering.  This is a little confusing so I will repeat
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1245
** it in different words.  WhereInfo.a[i].pIdxInfo is index information 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1246
** for WhereInfo.pTabList.a[i].  WhereInfo.a[i].pBestInfo is the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1247
** index information for the i-th loop of the join.  pBestInfo is always
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1248
** either NULL or a copy of some pIdxInfo.  So for cleanup it is 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1249
** sufficient to free all of the pIdxInfo pointers.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1250
** 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1251
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1252
struct WhereLevel {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1253
  int iFrom;            /* Which entry in the FROM clause */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1254
  int flags;            /* Flags associated with this level */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1255
  int iMem;             /* First memory cell used by this level */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1256
  int iLeftJoin;        /* Memory cell used to implement LEFT OUTER JOIN */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1257
  Index *pIdx;          /* Index used.  NULL if no index */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1258
  int iTabCur;          /* The VDBE cursor used to access the table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1259
  int iIdxCur;          /* The VDBE cursor used to acesss pIdx */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1260
  int brk;              /* Jump here to break out of the loop */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1261
  int nxt;              /* Jump here to start the next IN combination */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1262
  int cont;             /* Jump here to continue with the next loop cycle */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1263
  int top;              /* First instruction of interior of the loop */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1264
  int op, p1, p2;       /* Opcode used to terminate the loop */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1265
  int nEq;              /* Number of == or IN constraints on this loop */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1266
  int nIn;              /* Number of IN operators constraining this loop */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1267
  struct InLoop {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1268
    int iCur;              /* The VDBE cursor used by this IN operator */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1269
    int topAddr;           /* Top of the IN loop */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1270
  } *aInLoop;           /* Information about each nested IN operator */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1271
  sqlite3_index_info *pBestIdx;  /* Index information for this level */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1272
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1273
  /* The following field is really not part of the current level.  But
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1274
  ** we need a place to cache index information for each table in the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1275
  ** FROM clause and the WhereLevel structure is a convenient place.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1276
  */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1277
  sqlite3_index_info *pIdxInfo;  /* Index info for n-th source table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1278
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1279
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1280
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1281
** The WHERE clause processing routine has two halves.  The
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1282
** first part does the start of the WHERE loop and the second
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1283
** half does the tail of the WHERE loop.  An instance of
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1284
** this structure is returned by the first half and passed
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1285
** into the second half to give some continuity.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1286
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1287
struct WhereInfo {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1288
  Parse *pParse;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1289
  SrcList *pTabList;   /* List of tables in the join */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1290
  int iTop;            /* The very beginning of the WHERE loop */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1291
  int iContinue;       /* Jump here to continue with next record */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1292
  int iBreak;          /* Jump here to break out of the loop */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1293
  int nLevel;          /* Number of nested loop */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1294
  sqlite3_index_info **apInfo;  /* Array of pointers to index info structures */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1295
  WhereLevel a[1];     /* Information about each nest loop in the WHERE */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1296
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1297
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1298
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1299
** A NameContext defines a context in which to resolve table and column
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1300
** names.  The context consists of a list of tables (the pSrcList) field and
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1301
** a list of named expression (pEList).  The named expression list may
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1302
** be NULL.  The pSrc corresponds to the FROM clause of a SELECT or
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1303
** to the table being operated on by INSERT, UPDATE, or DELETE.  The
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1304
** pEList corresponds to the result set of a SELECT and is NULL for
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1305
** other statements.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1306
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1307
** NameContexts can be nested.  When resolving names, the inner-most 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1308
** context is searched first.  If no match is found, the next outer
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1309
** context is checked.  If there is still no match, the next context
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1310
** is checked.  This process continues until either a match is found
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1311
** or all contexts are check.  When a match is found, the nRef member of
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1312
** the context containing the match is incremented. 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1313
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1314
** Each subquery gets a new NameContext.  The pNext field points to the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1315
** NameContext in the parent query.  Thus the process of scanning the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1316
** NameContext list corresponds to searching through successively outer
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1317
** subqueries looking for a match.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1318
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1319
struct NameContext {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1320
  Parse *pParse;       /* The parser */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1321
  SrcList *pSrcList;   /* One or more tables used to resolve names */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1322
  ExprList *pEList;    /* Optional list of named expressions */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1323
  int nRef;            /* Number of names resolved by this context */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1324
  int nErr;            /* Number of errors encountered while resolving names */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1325
  u8 allowAgg;         /* Aggregate functions allowed here */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1326
  u8 hasAgg;           /* True if aggregates are seen */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1327
  u8 isCheck;          /* True if resolving names in a CHECK constraint */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1328
  int nDepth;          /* Depth of subquery recursion. 1 for no recursion */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1329
  AggInfo *pAggInfo;   /* Information about aggregates at this level */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1330
  NameContext *pNext;  /* Next outer name context.  NULL for outermost */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1331
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1332
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1333
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1334
** An instance of the following structure contains all information
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1335
** needed to generate code for a single SELECT statement.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1336
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1337
** nLimit is set to -1 if there is no LIMIT clause.  nOffset is set to 0.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1338
** If there is a LIMIT clause, the parser sets nLimit to the value of the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1339
** limit and nOffset to the value of the offset (or 0 if there is not
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1340
** offset).  But later on, nLimit and nOffset become the memory locations
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1341
** in the VDBE that record the limit and offset counters.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1342
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1343
** addrOpenEphm[] entries contain the address of OP_OpenEphemeral opcodes.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1344
** These addresses must be stored so that we can go back and fill in
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1345
** the P3_KEYINFO and P2 parameters later.  Neither the KeyInfo nor
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1346
** the number of columns in P2 can be computed at the same time
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1347
** as the OP_OpenEphm instruction is coded because not
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1348
** enough information about the compound query is known at that point.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1349
** The KeyInfo for addrOpenTran[0] and [1] contains collating sequences
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1350
** for the result set.  The KeyInfo for addrOpenTran[2] contains collating
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1351
** sequences for the ORDER BY clause.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1352
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1353
struct Select {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1354
  ExprList *pEList;      /* The fields of the result */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1355
  u8 op;                 /* One of: TK_UNION TK_ALL TK_INTERSECT TK_EXCEPT */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1356
  u8 isDistinct;         /* True if the DISTINCT keyword is present */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1357
  u8 isResolved;         /* True once sqlite3SelectResolve() has run. */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1358
  u8 isAgg;              /* True if this is an aggregate query */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1359
  u8 usesEphm;           /* True if uses an OpenEphemeral opcode */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1360
  u8 disallowOrderBy;    /* Do not allow an ORDER BY to be attached if TRUE */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1361
  char affinity;         /* MakeRecord with this affinity for SRT_Set */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1362
  SrcList *pSrc;         /* The FROM clause */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1363
  Expr *pWhere;          /* The WHERE clause */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1364
  ExprList *pGroupBy;    /* The GROUP BY clause */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1365
  Expr *pHaving;         /* The HAVING clause */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1366
  ExprList *pOrderBy;    /* The ORDER BY clause */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1367
  Select *pPrior;        /* Prior select in a compound select statement */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1368
  Select *pNext;         /* Next select to the left in a compound */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1369
  Select *pRightmost;    /* Right-most select in a compound select statement */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1370
  Expr *pLimit;          /* LIMIT expression. NULL means not used. */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1371
  Expr *pOffset;         /* OFFSET expression. NULL means not used. */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1372
  int iLimit, iOffset;   /* Memory registers holding LIMIT & OFFSET counters */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1373
  int addrOpenEphm[3];   /* OP_OpenEphem opcodes related to this select */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1374
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1375
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1376
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1377
** The results of a select can be distributed in several ways.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1378
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1379
#define SRT_Union        1  /* Store result as keys in an index */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1380
#define SRT_Except       2  /* Remove result from a UNION index */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1381
#define SRT_Discard      3  /* Do not save the results anywhere */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1382
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1383
/* The ORDER BY clause is ignored for all of the above */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1384
#define IgnorableOrderby(X) (X<=SRT_Discard)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1385
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1386
#define SRT_Callback     4  /* Invoke a callback with each row of result */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1387
#define SRT_Mem          5  /* Store result in a memory cell */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1388
#define SRT_Set          6  /* Store non-null results as keys in an index */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1389
#define SRT_Table        7  /* Store result as data with an automatic rowid */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1390
#define SRT_EphemTab     8  /* Create transient tab and store like SRT_Table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1391
#define SRT_Subroutine   9  /* Call a subroutine to handle results */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1392
#define SRT_Exists      10  /* Store 1 if the result is not empty */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1393
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1394
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1395
** An SQL parser context.  A copy of this structure is passed through
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1396
** the parser and down into all the parser action routine in order to
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1397
** carry around information that is global to the entire parse.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1398
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1399
** The structure is divided into two parts.  When the parser and code
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1400
** generate call themselves recursively, the first part of the structure
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1401
** is constant but the second part is reset at the beginning and end of
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1402
** each recursion.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1403
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1404
** The nTableLock and aTableLock variables are only used if the shared-cache 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1405
** feature is enabled (if sqlite3Tsd()->useSharedData is true). They are
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1406
** used to store the set of table-locks required by the statement being
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1407
** compiled. Function sqlite3TableLock() is used to add entries to the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1408
** list.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1409
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1410
struct Parse {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1411
  sqlite3 *db;         /* The main database structure */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1412
  int rc;              /* Return code from execution */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1413
  char *zErrMsg;       /* An error message */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1414
  Vdbe *pVdbe;         /* An engine for executing database bytecode */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1415
  u8 colNamesSet;      /* TRUE after OP_ColumnName has been issued to pVdbe */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1416
  u8 nameClash;        /* A permanent table name clashes with temp table name */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1417
  u8 checkSchema;      /* Causes schema cookie check after an error */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1418
  u8 nested;           /* Number of nested calls to the parser/code generator */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1419
  u8 parseError;       /* True after a parsing error.  Ticket #1794 */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1420
  int nErr;            /* Number of errors seen */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1421
  int nTab;            /* Number of previously allocated VDBE cursors */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1422
  int nMem;            /* Number of memory cells used so far */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1423
  int nSet;            /* Number of sets used so far */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1424
  int ckOffset;        /* Stack offset to data used by CHECK constraints */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1425
  u32 writeMask;       /* Start a write transaction on these databases */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1426
  u32 cookieMask;      /* Bitmask of schema verified databases */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1427
  int cookieGoto;      /* Address of OP_Goto to cookie verifier subroutine */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1428
  int cookieValue[SQLITE_MAX_ATTACHED+2];  /* Values of cookies to verify */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1429
#ifndef SQLITE_OMIT_SHARED_CACHE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1430
  int nTableLock;        /* Number of locks in aTableLock */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1431
  TableLock *aTableLock; /* Required table locks for shared-cache mode */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1432
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1433
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1434
  /* Above is constant between recursions.  Below is reset before and after
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1435
  ** each recursion */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1436
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1437
  int nVar;            /* Number of '?' variables seen in the SQL so far */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1438
  int nVarExpr;        /* Number of used slots in apVarExpr[] */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1439
  int nVarExprAlloc;   /* Number of allocated slots in apVarExpr[] */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1440
  Expr **apVarExpr;    /* Pointers to :aaa and $aaaa wildcard expressions */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1441
  u8 explain;          /* True if the EXPLAIN flag is found on the query */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1442
  Token sErrToken;     /* The token at which the error occurred */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1443
  Token sNameToken;    /* Token with unqualified schema object name */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1444
  Token sLastToken;    /* The last token parsed */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1445
  const char *zSql;    /* All SQL text */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1446
  const char *zTail;   /* All SQL text past the last semicolon parsed */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1447
  Table *pNewTable;    /* A table being constructed by CREATE TABLE */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1448
  Trigger *pNewTrigger;     /* Trigger under construct by a CREATE TRIGGER */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1449
  TriggerStack *trigStack;  /* Trigger actions being coded */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1450
  const char *zAuthContext; /* The 6th parameter to db->xAuth callbacks */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1451
#ifndef SQLITE_OMIT_VIRTUALTABLE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1452
  Token sArg;                /* Complete text of a module argument */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1453
  u8 declareVtab;            /* True if inside sqlite3_declare_vtab() */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1454
  Table *pVirtualLock;       /* Require virtual table lock on this table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1455
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1456
#if defined(SQLITE_TEST) || SQLITE_MAX_EXPR_DEPTH>0
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1457
  int nHeight;            /* Expression tree height of current sub-select */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1458
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1459
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1460
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1461
#ifdef SQLITE_OMIT_VIRTUALTABLE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1462
  #define IN_DECLARE_VTAB 0
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1463
#else
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1464
  #define IN_DECLARE_VTAB (pParse->declareVtab)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1465
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1466
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1467
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1468
** An instance of the following structure can be declared on a stack and used
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1469
** to save the Parse.zAuthContext value so that it can be restored later.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1470
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1471
struct AuthContext {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1472
  const char *zAuthContext;   /* Put saved Parse.zAuthContext here */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1473
  Parse *pParse;              /* The Parse structure */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1474
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1475
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1476
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1477
** Bitfield flags for P2 value in OP_Insert and OP_Delete
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1478
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1479
#define OPFLAG_NCHANGE   1    /* Set to update db->nChange */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1480
#define OPFLAG_LASTROWID 2    /* Set to update db->lastRowid */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1481
#define OPFLAG_ISUPDATE  4    /* This OP_Insert is an sql UPDATE */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1482
#define OPFLAG_APPEND    8    /* This is likely to be an append */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1483
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1484
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1485
 * Each trigger present in the database schema is stored as an instance of
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1486
 * struct Trigger. 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1487
 *
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1488
 * Pointers to instances of struct Trigger are stored in two ways.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1489
 * 1. In the "trigHash" hash table (part of the sqlite3* that represents the 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1490
 *    database). This allows Trigger structures to be retrieved by name.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1491
 * 2. All triggers associated with a single table form a linked list, using the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1492
 *    pNext member of struct Trigger. A pointer to the first element of the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1493
 *    linked list is stored as the "pTrigger" member of the associated
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1494
 *    struct Table.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1495
 *
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1496
 * The "step_list" member points to the first element of a linked list
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1497
 * containing the SQL statements specified as the trigger program.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1498
 */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1499
struct Trigger {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1500
  char *name;             /* The name of the trigger                        */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1501
  char *table;            /* The table or view to which the trigger applies */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1502
  u8 op;                  /* One of TK_DELETE, TK_UPDATE, TK_INSERT         */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1503
  u8 tr_tm;               /* One of TRIGGER_BEFORE, TRIGGER_AFTER */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1504
  Expr *pWhen;            /* The WHEN clause of the expresion (may be NULL) */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1505
  IdList *pColumns;       /* If this is an UPDATE OF <column-list> trigger,
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1506
                             the <column-list> is stored here */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1507
  Token nameToken;        /* Token containing zName. Use during parsing only */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1508
  Schema *pSchema;        /* Schema containing the trigger */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1509
  Schema *pTabSchema;     /* Schema containing the table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1510
  TriggerStep *step_list; /* Link list of trigger program steps             */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1511
  Trigger *pNext;         /* Next trigger associated with the table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1512
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1513
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1514
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1515
** A trigger is either a BEFORE or an AFTER trigger.  The following constants
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1516
** determine which. 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1517
**
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1518
** If there are multiple triggers, you might of some BEFORE and some AFTER.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1519
** In that cases, the constants below can be ORed together.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1520
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1521
#define TRIGGER_BEFORE  1
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1522
#define TRIGGER_AFTER   2
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1523
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1524
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1525
 * An instance of struct TriggerStep is used to store a single SQL statement
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1526
 * that is a part of a trigger-program. 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1527
 *
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1528
 * Instances of struct TriggerStep are stored in a singly linked list (linked
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1529
 * using the "pNext" member) referenced by the "step_list" member of the 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1530
 * associated struct Trigger instance. The first element of the linked list is
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1531
 * the first step of the trigger-program.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1532
 * 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1533
 * The "op" member indicates whether this is a "DELETE", "INSERT", "UPDATE" or
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1534
 * "SELECT" statement. The meanings of the other members is determined by the 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1535
 * value of "op" as follows:
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1536
 *
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1537
 * (op == TK_INSERT)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1538
 * orconf    -> stores the ON CONFLICT algorithm
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1539
 * pSelect   -> If this is an INSERT INTO ... SELECT ... statement, then
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1540
 *              this stores a pointer to the SELECT statement. Otherwise NULL.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1541
 * target    -> A token holding the name of the table to insert into.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1542
 * pExprList -> If this is an INSERT INTO ... VALUES ... statement, then
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1543
 *              this stores values to be inserted. Otherwise NULL.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1544
 * pIdList   -> If this is an INSERT INTO ... (<column-names>) VALUES ... 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1545
 *              statement, then this stores the column-names to be
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1546
 *              inserted into.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1547
 *
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1548
 * (op == TK_DELETE)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1549
 * target    -> A token holding the name of the table to delete from.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1550
 * pWhere    -> The WHERE clause of the DELETE statement if one is specified.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1551
 *              Otherwise NULL.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1552
 * 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1553
 * (op == TK_UPDATE)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1554
 * target    -> A token holding the name of the table to update rows of.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1555
 * pWhere    -> The WHERE clause of the UPDATE statement if one is specified.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1556
 *              Otherwise NULL.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1557
 * pExprList -> A list of the columns to update and the expressions to update
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1558
 *              them to. See sqlite3Update() documentation of "pChanges"
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1559
 *              argument.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1560
 * 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1561
 */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1562
struct TriggerStep {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1563
  int op;              /* One of TK_DELETE, TK_UPDATE, TK_INSERT, TK_SELECT */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1564
  int orconf;          /* OE_Rollback etc. */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1565
  Trigger *pTrig;      /* The trigger that this step is a part of */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1566
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1567
  Select *pSelect;     /* Valid for SELECT and sometimes 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1568
                          INSERT steps (when pExprList == 0) */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1569
  Token target;        /* Valid for DELETE, UPDATE, INSERT steps */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1570
  Expr *pWhere;        /* Valid for DELETE, UPDATE steps */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1571
  ExprList *pExprList; /* Valid for UPDATE statements and sometimes 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1572
                           INSERT steps (when pSelect == 0)         */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1573
  IdList *pIdList;     /* Valid for INSERT statements only */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1574
  TriggerStep *pNext;  /* Next in the link-list */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1575
  TriggerStep *pLast;  /* Last element in link-list. Valid for 1st elem only */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1576
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1577
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1578
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1579
 * An instance of struct TriggerStack stores information required during code
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1580
 * generation of a single trigger program. While the trigger program is being
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1581
 * coded, its associated TriggerStack instance is pointed to by the
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1582
 * "pTriggerStack" member of the Parse structure.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1583
 *
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1584
 * The pTab member points to the table that triggers are being coded on. The 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1585
 * newIdx member contains the index of the vdbe cursor that points at the temp
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1586
 * table that stores the new.* references. If new.* references are not valid
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1587
 * for the trigger being coded (for example an ON DELETE trigger), then newIdx
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1588
 * is set to -1. The oldIdx member is analogous to newIdx, for old.* references.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1589
 *
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1590
 * The ON CONFLICT policy to be used for the trigger program steps is stored 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1591
 * as the orconf member. If this is OE_Default, then the ON CONFLICT clause 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1592
 * specified for individual triggers steps is used.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1593
 *
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1594
 * struct TriggerStack has a "pNext" member, to allow linked lists to be
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1595
 * constructed. When coding nested triggers (triggers fired by other triggers)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1596
 * each nested trigger stores its parent trigger's TriggerStack as the "pNext" 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1597
 * pointer. Once the nested trigger has been coded, the pNext value is restored
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1598
 * to the pTriggerStack member of the Parse stucture and coding of the parent
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1599
 * trigger continues.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1600
 *
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1601
 * Before a nested trigger is coded, the linked list pointed to by the 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1602
 * pTriggerStack is scanned to ensure that the trigger is not about to be coded
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1603
 * recursively. If this condition is detected, the nested trigger is not coded.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1604
 */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1605
struct TriggerStack {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1606
  Table *pTab;         /* Table that triggers are currently being coded on */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1607
  int newIdx;          /* Index of vdbe cursor to "new" temp table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1608
  int oldIdx;          /* Index of vdbe cursor to "old" temp table */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1609
  int orconf;          /* Current orconf policy */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1610
  int ignoreJump;      /* where to jump to for a RAISE(IGNORE) */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1611
  Trigger *pTrigger;   /* The trigger currently being coded */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1612
  TriggerStack *pNext; /* Next trigger down on the trigger stack */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1613
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1614
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1615
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1616
** The following structure contains information used by the sqliteFix...
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1617
** routines as they walk the parse tree to make database references
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1618
** explicit.  
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1619
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1620
typedef struct DbFixer DbFixer;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1621
struct DbFixer {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1622
  Parse *pParse;      /* The parsing context.  Error messages written here */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1623
  const char *zDb;    /* Make sure all objects are contained in this database */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1624
  const char *zType;  /* Type of the container - used for error messages */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1625
  const Token *pName; /* Name of the container - used for error messages */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1626
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1627
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1628
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1629
** An objected used to accumulate the text of a string where we
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1630
** do not necessarily know how big the string will be in the end.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1631
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1632
struct StrAccum {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1633
  char *zBase;     /* A base allocation.  Not from malloc. */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1634
  char *zText;     /* The string collected so far */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1635
  int  nChar;      /* Length of the string so far */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1636
  int  nAlloc;     /* Amount of space allocated in zText */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1637
  u8   mallocFailed;   /* Becomes true if any memory allocation fails */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1638
  u8   useMalloc;      /* True if zText is enlargable using realloc */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1639
  u8   tooBig;         /* Becomes true if string size exceeds limits */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1640
};
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1641
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1642
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1643
** A pointer to this structure is used to communicate information
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1644
** from sqlite3Init and OP_ParseSchema into the sqlite3InitCallback.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1645
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1646
typedef struct {
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1647
  sqlite3 *db;        /* The database being initialized */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1648
  int iDb;            /* 0 for main database.  1 for TEMP, 2.. for ATTACHed */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1649
  char **pzErrMsg;    /* Error message stored here */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1650
  int rc;             /* Result code stored here */
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1651
} InitData;
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1652
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1653
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1654
** Assuming zIn points to the first byte of a UTF-8 character,
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1655
** advance zIn to point to the first byte of the next UTF-8 character.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1656
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1657
#define SQLITE_SKIP_UTF8(zIn) {                        \
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1658
  if( (*(zIn++))>=0xc0 ){                              \
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1659
    while( (*zIn & 0xc0)==0x80 ){ zIn++; }             \
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1660
  }                                                    \
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1661
}
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1662
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1663
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1664
** The SQLITE_CORRUPT_BKPT macro can be either a constant (for production
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1665
** builds) or a function call (for debugging).  If it is a function call,
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1666
** it allows the operator to set a breakpoint at the spot where database
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1667
** corruption is first detected.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1668
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1669
#ifdef SQLITE_DEBUG
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1670
  int sqlite3Corrupt(void);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1671
# define SQLITE_CORRUPT_BKPT sqlite3Corrupt()
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1672
# define DEBUGONLY(X)        X
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1673
#else
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1674
# define SQLITE_CORRUPT_BKPT SQLITE_CORRUPT
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1675
# define DEBUGONLY(X)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1676
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1677
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1678
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1679
** Internal function prototypes
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1680
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1681
int sqlite3StrICmp(const char *, const char *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1682
int sqlite3StrNICmp(const char *, const char *, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1683
int sqlite3IsNumber(const char*, int*, u8);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1684
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1685
void *sqlite3MallocZero(unsigned);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1686
void *sqlite3DbMallocZero(sqlite3*, unsigned);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1687
void *sqlite3DbMallocRaw(sqlite3*, unsigned);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1688
char *sqlite3StrDup(const char*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1689
char *sqlite3StrNDup(const char*, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1690
char *sqlite3DbStrDup(sqlite3*,const char*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1691
char *sqlite3DbStrNDup(sqlite3*,const char*, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1692
void *sqlite3DbReallocOrFree(sqlite3 *, void *, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1693
void *sqlite3DbRealloc(sqlite3 *, void *, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1694
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1695
char *sqlite3MPrintf(sqlite3*,const char*, ...);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1696
char *sqlite3VMPrintf(sqlite3*,const char*, va_list);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1697
#if defined(SQLITE_TEST) || defined(SQLITE_DEBUG)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1698
  void sqlite3DebugPrintf(const char*, ...);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1699
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1700
#if defined(SQLITE_TEST)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1701
  void *sqlite3TextToPtr(const char*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1702
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1703
void sqlite3SetString(char **, ...);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1704
void sqlite3ErrorMsg(Parse*, const char*, ...);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1705
void sqlite3ErrorClear(Parse*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1706
void sqlite3Dequote(char*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1707
void sqlite3DequoteExpr(sqlite3*, Expr*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1708
int sqlite3KeywordCode(const unsigned char*, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1709
int sqlite3RunParser(Parse*, const char*, char **);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1710
void sqlite3FinishCoding(Parse*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1711
Expr *sqlite3Expr(sqlite3*, int, Expr*, Expr*, const Token*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1712
Expr *sqlite3PExpr(Parse*, int, Expr*, Expr*, const Token*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1713
Expr *sqlite3RegisterExpr(Parse*,Token*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1714
Expr *sqlite3ExprAnd(sqlite3*,Expr*, Expr*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1715
void sqlite3ExprSpan(Expr*,Token*,Token*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1716
Expr *sqlite3ExprFunction(Parse*,ExprList*, Token*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1717
void sqlite3ExprAssignVarNumber(Parse*, Expr*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1718
void sqlite3ExprDelete(Expr*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1719
ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*,Token*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1720
void sqlite3ExprListDelete(ExprList*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1721
int sqlite3Init(sqlite3*, char**);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1722
int sqlite3InitCallback(void*, int, char**, char**);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1723
void sqlite3Pragma(Parse*,Token*,Token*,Token*,int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1724
void sqlite3ResetInternalSchema(sqlite3*, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1725
void sqlite3BeginParse(Parse*,int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1726
void sqlite3CommitInternalChanges(sqlite3*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1727
Table *sqlite3ResultSetOfSelect(Parse*,char*,Select*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1728
void sqlite3OpenMasterTable(Parse *, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1729
void sqlite3StartTable(Parse*,Token*,Token*,int,int,int,int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1730
void sqlite3AddColumn(Parse*,Token*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1731
void sqlite3AddNotNull(Parse*, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1732
void sqlite3AddPrimaryKey(Parse*, ExprList*, int, int, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1733
void sqlite3AddCheckConstraint(Parse*, Expr*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1734
void sqlite3AddColumnType(Parse*,Token*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1735
void sqlite3AddDefaultValue(Parse*,Expr*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1736
void sqlite3AddCollateType(Parse*, Token*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1737
void sqlite3EndTable(Parse*,Token*,Token*,Select*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1738
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1739
void sqlite3CreateView(Parse*,Token*,Token*,Token*,Select*,int,int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1740
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1741
#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1742
  int sqlite3ViewGetColumnNames(Parse*,Table*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1743
#else
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1744
# define sqlite3ViewGetColumnNames(A,B) 0
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1745
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1746
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1747
void sqlite3DropTable(Parse*, SrcList*, int, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1748
void sqlite3DeleteTable(Table*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1749
void sqlite3Insert(Parse*, SrcList*, ExprList*, Select*, IdList*, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1750
void *sqlite3ArrayAllocate(sqlite3*,void*,int,int,int*,int*,int*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1751
IdList *sqlite3IdListAppend(sqlite3*, IdList*, Token*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1752
int sqlite3IdListIndex(IdList*,const char*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1753
SrcList *sqlite3SrcListAppend(sqlite3*, SrcList*, Token*, Token*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1754
SrcList *sqlite3SrcListAppendFromTerm(Parse*, SrcList*, Token*, Token*, Token*,
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1755
                                      Select*, Expr*, IdList*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1756
void sqlite3SrcListShiftJoinType(SrcList*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1757
void sqlite3SrcListAssignCursors(Parse*, SrcList*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1758
void sqlite3IdListDelete(IdList*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1759
void sqlite3SrcListDelete(SrcList*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1760
void sqlite3CreateIndex(Parse*,Token*,Token*,SrcList*,ExprList*,int,Token*,
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1761
                        Token*, int, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1762
void sqlite3DropIndex(Parse*, SrcList*, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1763
int sqlite3Select(Parse*, Select*, int, int, Select*, int, int*, char *aff);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1764
Select *sqlite3SelectNew(Parse*,ExprList*,SrcList*,Expr*,ExprList*,
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1765
                         Expr*,ExprList*,int,Expr*,Expr*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1766
void sqlite3SelectDelete(Select*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1767
Table *sqlite3SrcListLookup(Parse*, SrcList*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1768
int sqlite3IsReadOnly(Parse*, Table*, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1769
void sqlite3OpenTable(Parse*, int iCur, int iDb, Table*, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1770
void sqlite3DeleteFrom(Parse*, SrcList*, Expr*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1771
void sqlite3Update(Parse*, SrcList*, ExprList*, Expr*, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1772
WhereInfo *sqlite3WhereBegin(Parse*, SrcList*, Expr*, ExprList**);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1773
void sqlite3WhereEnd(WhereInfo*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1774
void sqlite3ExprCodeGetColumn(Vdbe*, Table*, int, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1775
void sqlite3ExprCode(Parse*, Expr*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1776
void sqlite3ExprCodeAndCache(Parse*, Expr*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1777
int sqlite3ExprCodeExprList(Parse*, ExprList*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1778
void sqlite3ExprIfTrue(Parse*, Expr*, int, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1779
void sqlite3ExprIfFalse(Parse*, Expr*, int, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1780
Table *sqlite3FindTable(sqlite3*,const char*, const char*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1781
Table *sqlite3LocateTable(Parse*,const char*, const char*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1782
Index *sqlite3FindIndex(sqlite3*,const char*, const char*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1783
void sqlite3UnlinkAndDeleteTable(sqlite3*,int,const char*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1784
void sqlite3UnlinkAndDeleteIndex(sqlite3*,int,const char*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1785
void sqlite3Vacuum(Parse*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1786
int sqlite3RunVacuum(char**, sqlite3*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1787
char *sqlite3NameFromToken(sqlite3*, Token*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1788
int sqlite3ExprCompare(Expr*, Expr*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1789
int sqlite3ExprResolveNames(NameContext *, Expr *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1790
int sqlite3ExprAnalyzeAggregates(NameContext*, Expr*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1791
int sqlite3ExprAnalyzeAggList(NameContext*,ExprList*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1792
Vdbe *sqlite3GetVdbe(Parse*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1793
Expr *sqlite3CreateIdExpr(Parse *, const char*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1794
void sqlite3Randomness(int, void*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1795
void sqlite3RollbackAll(sqlite3*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1796
void sqlite3CodeVerifySchema(Parse*, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1797
void sqlite3BeginTransaction(Parse*, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1798
void sqlite3CommitTransaction(Parse*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1799
void sqlite3RollbackTransaction(Parse*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1800
int sqlite3ExprIsConstant(Expr*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1801
int sqlite3ExprIsConstantNotJoin(Expr*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1802
int sqlite3ExprIsConstantOrFunction(Expr*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1803
int sqlite3ExprIsInteger(Expr*, int*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1804
int sqlite3IsRowid(const char*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1805
void sqlite3GenerateRowDelete(sqlite3*, Vdbe*, Table*, int, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1806
void sqlite3GenerateRowIndexDelete(Vdbe*, Table*, int, char*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1807
void sqlite3GenerateIndexKey(Vdbe*, Index*, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1808
void sqlite3GenerateConstraintChecks(Parse*,Table*,int,char*,int,int,int,int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1809
void sqlite3CompleteInsertion(Parse*, Table*, int, char*, int, int, int, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1810
void sqlite3OpenTableAndIndices(Parse*, Table*, int, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1811
void sqlite3BeginWriteOperation(Parse*, int, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1812
Expr *sqlite3ExprDup(sqlite3*,Expr*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1813
void sqlite3TokenCopy(sqlite3*,Token*, Token*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1814
ExprList *sqlite3ExprListDup(sqlite3*,ExprList*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1815
SrcList *sqlite3SrcListDup(sqlite3*,SrcList*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1816
IdList *sqlite3IdListDup(sqlite3*,IdList*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1817
Select *sqlite3SelectDup(sqlite3*,Select*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1818
FuncDef *sqlite3FindFunction(sqlite3*,const char*,int,int,u8,int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1819
void sqlite3RegisterBuiltinFunctions(sqlite3*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1820
void sqlite3RegisterDateTimeFunctions(sqlite3*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1821
int sqlite3SafetyOn(sqlite3*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1822
int sqlite3SafetyOff(sqlite3*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1823
int sqlite3SafetyCheck(sqlite3*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1824
void sqlite3ChangeCookie(sqlite3*, Vdbe*, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1825
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1826
#ifndef SQLITE_OMIT_TRIGGER
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1827
  void sqlite3BeginTrigger(Parse*, Token*,Token*,int,int,IdList*,SrcList*,
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1828
                           Expr*,int, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1829
  void sqlite3FinishTrigger(Parse*, TriggerStep*, Token*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1830
  void sqlite3DropTrigger(Parse*, SrcList*, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1831
  void sqlite3DropTriggerPtr(Parse*, Trigger*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1832
  int sqlite3TriggersExist(Parse*, Table*, int, ExprList*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1833
  int sqlite3CodeRowTrigger(Parse*, int, ExprList*, int, Table *, int, int, 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1834
                           int, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1835
  void sqliteViewTriggers(Parse*, Table*, Expr*, int, ExprList*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1836
  void sqlite3DeleteTriggerStep(TriggerStep*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1837
  TriggerStep *sqlite3TriggerSelectStep(sqlite3*,Select*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1838
  TriggerStep *sqlite3TriggerInsertStep(sqlite3*,Token*, IdList*,
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1839
                                        ExprList*,Select*,int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1840
  TriggerStep *sqlite3TriggerUpdateStep(sqlite3*,Token*,ExprList*, Expr*, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1841
  TriggerStep *sqlite3TriggerDeleteStep(sqlite3*,Token*, Expr*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1842
  void sqlite3DeleteTrigger(Trigger*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1843
  void sqlite3UnlinkAndDeleteTrigger(sqlite3*,int,const char*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1844
#else
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1845
# define sqlite3TriggersExist(A,B,C,D,E,F) 0
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1846
# define sqlite3DeleteTrigger(A)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1847
# define sqlite3DropTriggerPtr(A,B)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1848
# define sqlite3UnlinkAndDeleteTrigger(A,B,C)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1849
# define sqlite3CodeRowTrigger(A,B,C,D,E,F,G,H,I) 0
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1850
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1851
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1852
int sqlite3JoinType(Parse*, Token*, Token*, Token*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1853
void sqlite3CreateForeignKey(Parse*, ExprList*, Token*, ExprList*, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1854
void sqlite3DeferForeignKey(Parse*, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1855
#ifndef SQLITE_OMIT_AUTHORIZATION
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1856
  void sqlite3AuthRead(Parse*,Expr*,Schema*,SrcList*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1857
  int sqlite3AuthCheck(Parse*,int, const char*, const char*, const char*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1858
  void sqlite3AuthContextPush(Parse*, AuthContext*, const char*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1859
  void sqlite3AuthContextPop(AuthContext*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1860
#else
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1861
# define sqlite3AuthRead(a,b,c,d)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1862
# define sqlite3AuthCheck(a,b,c,d,e)    SQLITE_OK
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1863
# define sqlite3AuthContextPush(a,b,c)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1864
# define sqlite3AuthContextPop(a)  ((void)(a))
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1865
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1866
void sqlite3Attach(Parse*, Expr*, Expr*, Expr*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1867
void sqlite3Detach(Parse*, Expr*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1868
int sqlite3BtreeFactory(const sqlite3 *db, const char *zFilename,
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1869
                       int omitJournal, int nCache, int flags, Btree **ppBtree);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1870
int sqlite3FixInit(DbFixer*, Parse*, int, const char*, const Token*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1871
int sqlite3FixSrcList(DbFixer*, SrcList*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1872
int sqlite3FixSelect(DbFixer*, Select*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1873
int sqlite3FixExpr(DbFixer*, Expr*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1874
int sqlite3FixExprList(DbFixer*, ExprList*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1875
int sqlite3FixTriggerStep(DbFixer*, TriggerStep*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1876
int sqlite3AtoF(const char *z, double*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1877
char *sqlite3_snprintf(int,char*,const char*,...);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1878
int sqlite3GetInt32(const char *, int*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1879
int sqlite3FitsIn64Bits(const char *, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1880
int sqlite3Utf16ByteLen(const void *pData, int nChar);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1881
int sqlite3Utf8CharLen(const char *pData, int nByte);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1882
int sqlite3Utf8Read(const u8*, const u8*, const u8**);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1883
int sqlite3PutVarint(unsigned char *, u64);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1884
int sqlite3GetVarint(const unsigned char *, u64 *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1885
int sqlite3GetVarint32(const unsigned char *, u32 *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1886
int sqlite3VarintLen(u64 v);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1887
void sqlite3IndexAffinityStr(Vdbe *, Index *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1888
void sqlite3TableAffinityStr(Vdbe *, Table *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1889
char sqlite3CompareAffinity(Expr *pExpr, char aff2);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1890
int sqlite3IndexAffinityOk(Expr *pExpr, char idx_affinity);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1891
char sqlite3ExprAffinity(Expr *pExpr);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1892
int sqlite3Atoi64(const char*, i64*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1893
void sqlite3Error(sqlite3*, int, const char*,...);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1894
void *sqlite3HexToBlob(sqlite3*, const char *z);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1895
int sqlite3TwoPartName(Parse *, Token *, Token *, Token **);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1896
const char *sqlite3ErrStr(int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1897
int sqlite3ReadSchema(Parse *pParse);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1898
CollSeq *sqlite3FindCollSeq(sqlite3*,u8 enc, const char *,int,int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1899
CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char *zName, int nName);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1900
CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1901
Expr *sqlite3ExprSetColl(Parse *pParse, Expr *, Token *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1902
int sqlite3CheckCollSeq(Parse *, CollSeq *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1903
int sqlite3CheckObjectName(Parse *, const char *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1904
void sqlite3VdbeSetChanges(sqlite3 *, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1905
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1906
const void *sqlite3ValueText(sqlite3_value*, u8);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1907
int sqlite3ValueBytes(sqlite3_value*, u8);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1908
void sqlite3ValueSetStr(sqlite3_value*, int, const void *,u8, 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1909
                        void(*)(void*));
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1910
void sqlite3ValueFree(sqlite3_value*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1911
sqlite3_value *sqlite3ValueNew(sqlite3 *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1912
char *sqlite3Utf16to8(sqlite3 *, const void*, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1913
int sqlite3ValueFromExpr(sqlite3 *, Expr *, u8, u8, sqlite3_value **);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1914
void sqlite3ValueApplyAffinity(sqlite3_value *, u8, u8);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1915
#ifndef SQLITE_AMALGAMATION
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1916
extern const unsigned char sqlite3UpperToLower[];
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1917
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1918
void sqlite3RootPageMoved(Db*, int, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1919
void sqlite3Reindex(Parse*, Token*, Token*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1920
void sqlite3AlterFunctions(sqlite3*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1921
void sqlite3AlterRenameTable(Parse*, SrcList*, Token*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1922
int sqlite3GetToken(const unsigned char *, int *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1923
void sqlite3NestedParse(Parse*, const char*, ...);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1924
void sqlite3ExpirePreparedStatements(sqlite3*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1925
void sqlite3CodeSubselect(Parse *, Expr *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1926
int sqlite3SelectResolve(Parse *, Select *, NameContext *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1927
void sqlite3ColumnDefault(Vdbe *, Table *, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1928
void sqlite3AlterFinishAddColumn(Parse *, Token *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1929
void sqlite3AlterBeginAddColumn(Parse *, SrcList *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1930
CollSeq *sqlite3GetCollSeq(sqlite3*, CollSeq *, const char *, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1931
char sqlite3AffinityType(const Token*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1932
void sqlite3Analyze(Parse*, Token*, Token*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1933
int sqlite3InvokeBusyHandler(BusyHandler*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1934
int sqlite3FindDb(sqlite3*, Token*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1935
int sqlite3AnalysisLoad(sqlite3*,int iDB);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1936
void sqlite3DefaultRowEst(Index*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1937
void sqlite3RegisterLikeFunctions(sqlite3*, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1938
int sqlite3IsLikeFunction(sqlite3*,Expr*,int*,char*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1939
void sqlite3AttachFunctions(sqlite3 *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1940
void sqlite3MinimumFileFormat(Parse*, int, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1941
void sqlite3SchemaFree(void *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1942
Schema *sqlite3SchemaGet(sqlite3 *, Btree *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1943
int sqlite3SchemaToIndex(sqlite3 *db, Schema *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1944
KeyInfo *sqlite3IndexKeyinfo(Parse *, Index *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1945
int sqlite3CreateFunc(sqlite3 *, const char *, int, int, void *, 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1946
  void (*)(sqlite3_context*,int,sqlite3_value **),
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1947
  void (*)(sqlite3_context*,int,sqlite3_value **), void (*)(sqlite3_context*));
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1948
int sqlite3ApiExit(sqlite3 *db, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1949
int sqlite3OpenTempDatabase(Parse *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1950
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1951
void sqlite3StrAccumAppend(StrAccum*,const char*,int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1952
char *sqlite3StrAccumFinish(StrAccum*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1953
void sqlite3StrAccumReset(StrAccum*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1954
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1955
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1956
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1957
** The interface to the LEMON-generated parser
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1958
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1959
void *sqlite3ParserAlloc(void*(*)(size_t));
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1960
void sqlite3ParserFree(void*, void(*)(void*));
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1961
void sqlite3Parser(void*, int, Token, Parse*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1962
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1963
#ifndef SQLITE_OMIT_LOAD_EXTENSION
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1964
  void sqlite3CloseExtensions(sqlite3*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1965
  int sqlite3AutoLoadExtensions(sqlite3*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1966
#else
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1967
# define sqlite3CloseExtensions(X)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1968
# define sqlite3AutoLoadExtensions(X)  SQLITE_OK
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1969
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1970
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1971
#ifndef SQLITE_OMIT_SHARED_CACHE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1972
  void sqlite3TableLock(Parse *, int, int, u8, const char *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1973
#else
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1974
  #define sqlite3TableLock(v,w,x,y,z)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1975
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1976
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1977
#ifdef SQLITE_TEST
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1978
  int sqlite3Utf8To8(unsigned char*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1979
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1980
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1981
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1982
** The MallocDisallow() and MallocAllow() routines are like asserts.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1983
** Call them around a section of code that you do not expect to do
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1984
** any memory allocation.
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1985
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1986
#ifdef SQLITE_MEMDEBUG
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1987
  void sqlite3MallocDisallow(void);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1988
  void sqlite3MallocAllow(void);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1989
  void sqlite3MallocBenignFailure(int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1990
  void sqlite3MallocEnterBenignBlock(int isBenign);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1991
  void sqlite3MallocLeaveBenignBlock();
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1992
#else
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1993
# define sqlite3MallocDisallow()
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1994
# define sqlite3MallocAllow()
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1995
# define sqlite3MallocBenignFailure(x)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1996
# define sqlite3MallocEnterBenignBlock(x);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1997
# define sqlite3MallocLeaveBenignBlock();
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1998
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  1999
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2000
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2001
#ifdef SQLITE_OMIT_VIRTUALTABLE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2002
#  define sqlite3VtabClear(X)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2003
#  define sqlite3VtabSync(X,Y) (Y)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2004
#  define sqlite3VtabRollback(X)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2005
#  define sqlite3VtabCommit(X)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2006
#else
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2007
   void sqlite3VtabClear(Table*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2008
   int sqlite3VtabSync(sqlite3 *db, int rc);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2009
   int sqlite3VtabRollback(sqlite3 *db);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2010
   int sqlite3VtabCommit(sqlite3 *db);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2011
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2012
void sqlite3VtabLock(sqlite3_vtab*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2013
void sqlite3VtabUnlock(sqlite3*, sqlite3_vtab*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2014
void sqlite3VtabBeginParse(Parse*, Token*, Token*, Token*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2015
void sqlite3VtabFinishParse(Parse*, Token*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2016
void sqlite3VtabArgInit(Parse*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2017
void sqlite3VtabArgExtend(Parse*, Token*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2018
int sqlite3VtabCallCreate(sqlite3*, int, const char *, char **);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2019
int sqlite3VtabCallConnect(Parse*, Table*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2020
int sqlite3VtabCallDestroy(sqlite3*, int, const char *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2021
int sqlite3VtabBegin(sqlite3 *, sqlite3_vtab *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2022
FuncDef *sqlite3VtabOverloadFunction(sqlite3 *,FuncDef*, int nArg, Expr*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2023
void sqlite3InvalidFunction(sqlite3_context*,int,sqlite3_value**);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2024
int sqlite3Reprepare(Vdbe*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2025
void sqlite3ExprListCheckLength(Parse*, ExprList*, int, const char*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2026
CollSeq *sqlite3BinaryCompareCollSeq(Parse *, Expr *, Expr *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2027
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2028
#define IN_INDEX_ROWID           1
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2029
#define IN_INDEX_EPH             2
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2030
#define IN_INDEX_INDEX           3
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2031
int sqlite3FindInIndex(Parse *, Expr *, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2032
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2033
#ifdef SQLITE_ENABLE_ATOMIC_WRITE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2034
  int sqlite3JournalOpen(sqlite3_vfs *, const char *, sqlite3_file *, int, int);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2035
  int sqlite3JournalSize(sqlite3_vfs *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2036
  int sqlite3JournalCreate(sqlite3_file *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2037
#else
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2038
  #define sqlite3JournalSize(pVfs) ((pVfs)->szOsFile)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2039
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2040
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2041
#if defined(SQLITE_TEST) || SQLITE_MAX_EXPR_DEPTH>0
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2042
  void sqlite3ExprSetHeight(Expr *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2043
  int sqlite3SelectExprHeight(Select *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2044
#else
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2045
  #define sqlite3ExprSetHeight(x)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2046
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2047
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2048
u32 sqlite3Get4byte(const u8*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2049
void sqlite3Put4byte(u8*, u32);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2050
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2051
#ifdef SQLITE_SSE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2052
#include "sseInt.h"
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2053
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2054
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2055
#ifdef SQLITE_DEBUG
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2056
  void sqlite3ParserTrace(FILE*, char *);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2057
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2058
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2059
/*
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2060
** If the SQLITE_ENABLE IOTRACE exists then the global variable
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2061
** sqlite3_io_trace is a pointer to a printf-like routine used to
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2062
** print I/O tracing messages. 
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2063
*/
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2064
#ifdef SQLITE_ENABLE_IOTRACE
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2065
# define IOTRACE(A)  if( sqlite3_io_trace ){ sqlite3_io_trace A; }
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2066
  void sqlite3VdbeIOTraceSql(Vdbe*);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2067
#else
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2068
# define IOTRACE(A)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2069
# define sqlite3VdbeIOTraceSql(X)
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2070
#endif
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2071
SQLITE_EXTERN void (*sqlite3_io_trace)(const char*,...);
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2072
29cda98b007e Initial import of Podcatcher from the Bergamot project
skip
parents:
diff changeset
  2073
#endif