System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 35bf0ba34435fbc72e2f172aabc8ad320ea69fee:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 23 64 65 66 69 6e 65 20 53 51  */....#define SQ
0130: 4c 49 54 45 5f 41 50 49 20 5f 5f 64 65 63 6c 73  LITE_API __decls
0140: 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 0d 0a  pec(dllexport)..
0150: 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 63  ..#include "../c
0160: 6f 72 65 2f 73 71 6c 69 74 65 33 2e 63 22 0d 0a  ore/sqlite3.c"..
0170: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
0180: 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
0190: 42 4c 45 29 20 26 26 20 53 51 4c 49 54 45 5f 56  BLE) && SQLITE_V
01a0: 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d  ERSION_NUMBER >=
01b0: 20 33 30 30 34 30 30 31 0d 0a 23 69 6e 63 6c 75   3004001..#inclu
01c0: 64 65 20 22 2e 2e 2f 65 78 74 2f 76 74 73 68 69  de "../ext/vtshi
01d0: 6d 2e 63 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  m.c"..#endif....
01e0: 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45  #if defined(INTE
01f0: 52 4f 50 5f 50 45 52 43 45 4e 54 49 4c 45 5f 45  ROP_PERCENTILE_E
0200: 58 54 45 4e 53 49 4f 4e 29 0d 0a 23 69 6e 63 6c  XTENSION)..#incl
0210: 75 64 65 20 22 2e 2e 2f 65 78 74 2f 70 65 72 63  ude "../ext/perc
0220: 65 6e 74 69 6c 65 2e 63 22 0d 0a 23 65 6e 64 69  entile.c"..#endi
0230: 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64  f....#if defined
0240: 28 49 4e 54 45 52 4f 50 5f 54 4f 54 59 50 45 5f  (INTEROP_TOTYPE_
0250: 45 58 54 45 4e 53 49 4f 4e 29 0d 0a 23 69 6e 63  EXTENSION)..#inc
0260: 6c 75 64 65 20 22 2e 2e 2f 65 78 74 2f 74 6f 74  lude "../ext/tot
0270: 79 70 65 2e 63 22 0d 0a 23 65 6e 64 69 66 0d 0a  ype.c"..#endif..
0280: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
0290: 54 45 52 4f 50 5f 52 45 47 45 58 50 5f 45 58 54  TEROP_REGEXP_EXT
02a0: 45 4e 53 49 4f 4e 29 0d 0a 23 69 6e 63 6c 75 64  ENSION)..#includ
02b0: 65 20 22 2e 2e 2f 65 78 74 2f 72 65 67 65 78 70  e "../ext/regexp
02c0: 2e 63 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23  .c"..#endif....#
02d0: 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52  if defined(INTER
02e0: 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e  OP_EXTENSION_FUN
02f0: 43 54 49 4f 4e 53 29 0d 0a 23 69 6e 63 6c 75 64  CTIONS)..#includ
0300: 65 20 22 2e 2e 2f 63 6f 6e 74 72 69 62 2f 65 78  e "../contrib/ex
0310: 74 65 6e 73 69 6f 6e 2d 66 75 6e 63 74 69 6f 6e  tension-function
0320: 73 2e 63 22 0d 0a 65 78 74 65 72 6e 20 69 6e 74  s.c"..extern int
0330: 20 52 65 67 69 73 74 65 72 45 78 74 65 6e 73 69   RegisterExtensi
0340: 6f 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  onFunctions(sqli
0350: 74 65 33 20 2a 64 62 29 3b 0d 0a 23 65 6e 64 69  te3 *db);..#endi
0360: 66 0d 0a 0d 0a 23 69 66 64 65 66 20 53 51 4c 49  f....#ifdef SQLI
0370: 54 45 5f 4f 53 5f 57 49 4e 0d 0a 23 69 66 20 64  TE_OS_WIN..#if d
0380: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 43  efined(INTEROP_C
0390: 4f 44 45 43 29 0d 0a 23 69 6e 63 6c 75 64 65 20  ODEC)..#include 
03a0: 22 63 72 79 70 74 2e 63 22 0d 0a 23 65 6e 64 69  "crypt.c"..#endi
03b0: 66 0d 0a 0d 0a 23 69 6e 63 6c 75 64 65 20 22 69  f....#include "i
03c0: 6e 74 65 72 6f 70 2e 68 22 0d 0a 0d 0a 23 64 65  nterop.h"....#de
03d0: 66 69 6e 65 20 49 4e 54 45 52 4f 50 5f 44 45 42  fine INTEROP_DEB
03e0: 55 47 5f 4e 4f 4e 45 20 20 20 20 20 20 20 20 20  UG_NONE         
03f0: 20 20 28 30 78 30 30 30 30 29 0d 0a 23 64 65 66    (0x0000)..#def
0400: 69 6e 65 20 49 4e 54 45 52 4f 50 5f 44 45 42 55  ine INTEROP_DEBU
0410: 47 5f 43 4c 4f 53 45 20 20 20 20 20 20 20 20 20  G_CLOSE         
0420: 20 28 30 78 30 30 30 31 29 0d 0a 23 64 65 66 69   (0x0001)..#defi
0430: 6e 65 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  ne INTEROP_DEBUG
0440: 5f 46 49 4e 41 4c 49 5a 45 20 20 20 20 20 20 20  _FINALIZE       
0450: 28 30 78 30 30 30 32 29 0d 0a 23 64 65 66 69 6e  (0x0002)..#defin
0460: 65 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f  e INTEROP_DEBUG_
0470: 42 41 43 4b 55 50 5f 46 49 4e 49 53 48 20 20 28  BACKUP_FINISH  (
0480: 30 78 30 30 30 34 29 0d 0a 23 64 65 66 69 6e 65  0x0004)..#define
0490: 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 4f   INTEROP_DEBUG_O
04a0: 50 45 4e 20 20 20 20 20 20 20 20 20 20 20 28 30  PEN           (0
04b0: 78 30 30 30 38 29 0d 0a 23 64 65 66 69 6e 65 20  x0008)..#define 
04c0: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 4f 50  INTEROP_DEBUG_OP
04d0: 45 4e 31 36 20 20 20 20 20 20 20 20 20 28 30 78  EN16         (0x
04e0: 30 30 31 30 29 0d 0a 23 64 65 66 69 6e 65 20 49  0010)..#define I
04f0: 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 50 52 45  NTEROP_DEBUG_PRE
0500: 50 41 52 45 20 20 20 20 20 20 20 20 28 30 78 30  PARE        (0x0
0510: 30 32 30 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e  020)..#define IN
0520: 54 45 52 4f 50 5f 44 45 42 55 47 5f 50 52 45 50  TEROP_DEBUG_PREP
0530: 41 52 45 31 36 20 20 20 20 20 20 28 30 78 30 30  ARE16      (0x00
0540: 34 30 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54  40)..#define INT
0550: 45 52 4f 50 5f 44 45 42 55 47 5f 52 45 53 45 54  EROP_DEBUG_RESET
0560: 20 20 20 20 20 20 20 20 20 20 28 30 78 30 30 38            (0x008
0570: 30 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54 45  0)..#define INTE
0580: 52 4f 50 5f 44 45 42 55 47 5f 43 48 41 4e 47 45  ROP_DEBUG_CHANGE
0590: 53 20 20 20 20 20 20 20 20 28 30 78 30 31 30 30  S        (0x0100
05a0: 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52  )..#define INTER
05b0: 4f 50 5f 44 45 42 55 47 5f 42 52 45 41 4b 20 20  OP_DEBUG_BREAK  
05c0: 20 20 20 20 20 20 20 20 28 30 78 30 32 30 30 29          (0x0200)
05d0: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
05e0: 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 64 65 66  _MSC_VER) && def
05f0: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42  ined(INTEROP_DEB
0600: 55 47 29 20 26 26 20 5c 0d 0a 20 20 20 20 28 49  UG) && \..    (I
0610: 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49  NTEROP_DEBUG & I
0620: 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 42 52 45  NTEROP_DEBUG_BRE
0630: 41 4b 29 0d 0a 23 64 65 66 69 6e 65 20 73 71 6c  AK)..#define sql
0640: 69 74 65 33 49 6e 74 65 72 6f 70 42 72 65 61 6b  ite3InteropBreak
0650: 28 61 29 20 7b 20 73 71 6c 69 74 65 33 49 6e 74  (a) { sqlite3Int
0660: 65 72 6f 70 44 65 62 75 67 28 22 25 73 5c 6e 22  eropDebug("%s\n"
0670: 2c 20 28 61 29 29 3b 20 5f 5f 64 65 62 75 67 62  , (a)); __debugb
0680: 72 65 61 6b 28 29 3b 20 7d 0d 0a 23 65 6c 73 65  reak(); }..#else
0690: 0d 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ..#define sqlite
06a0: 33 49 6e 74 65 72 6f 70 42 72 65 61 6b 28 61 29  3InteropBreak(a)
06b0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 74 79 70 65  ..#endif....type
06c0: 64 65 66 20 76 6f 69 64 20 28 2a 53 51 4c 49 54  def void (*SQLIT
06d0: 45 55 53 45 52 46 55 4e 43 29 28 73 71 6c 69 74  EUSERFUNC)(sqlit
06e0: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 2c 20 69 6e  e3_context *, in
06f0: 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  t, sqlite3_value
0700: 20 2a 2a 29 3b 0d 0a 74 79 70 65 64 65 66 20 76   **);..typedef v
0710: 6f 69 64 20 28 2a 53 51 4c 49 54 45 46 55 4e 43  oid (*SQLITEFUNC
0720: 46 49 4e 41 4c 29 28 73 71 6c 69 74 65 33 5f 63  FINAL)(sqlite3_c
0730: 6f 6e 74 65 78 74 20 2a 29 3b 0d 0a 0d 0a 2f 2a  ontext *);..../*
0740: 0d 0a 2a 2a 20 41 6e 20 61 72 72 61 79 20 6f 66  ..** An array of
0750: 20 6e 61 6d 65 73 20 6f 66 20 61 6c 6c 20 63 6f   names of all co
0760: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
0770: 6e 73 2e 20 20 54 68 69 73 20 61 72 72 61 79 20  ns.  This array 
0780: 73 68 6f 75 6c 64 0d 0a 2a 2a 20 62 65 20 73 6f  should..** be so
0790: 72 74 65 64 20 41 2d 5a 2e 0d 0a 2a 2a 0d 0a 2a  rted A-Z...**..*
07a0: 2a 20 54 68 69 73 20 61 72 72 61 79 20 6c 6f 6f  * This array loo
07b0: 6b 73 20 6c 61 72 67 65 2c 20 62 75 74 20 69 6e  ks large, but in
07c0: 20 61 20 74 79 70 69 63 61 6c 20 69 6e 73 74 61   a typical insta
07d0: 6c 6c 61 74 69 6f 6e 20 61 63 74 75 61 6c 6c 79  llation actually
07e0: 20 75 73 65 73 0d 0a 2a 2a 20 6f 6e 6c 79 20 61   uses..** only a
07f0: 20 68 61 6e 64 66 75 6c 20 6f 66 20 63 6f 6d 70   handful of comp
0800: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
0810: 2c 20 73 6f 20 6d 6f 73 74 20 74 69 6d 65 73 20  , so most times 
0820: 74 68 69 73 20 61 72 72 61 79 20 69 73 20 75 73  this array is us
0830: 75 61 6c 6c 79 0d 0a 2a 2a 20 72 61 74 68 65 72  ually..** rather
0840: 20 73 68 6f 72 74 20 61 6e 64 20 75 73 65 73 20   short and uses 
0850: 6c 69 74 74 6c 65 20 6d 65 6d 6f 72 79 20 73 70  little memory sp
0860: 61 63 65 2e 0d 0a 2a 2f 0d 0a 73 74 61 74 69 63  ace...*/..static
0870: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 63 6f   const char * co
0880: 6e 73 74 20 61 7a 49 6e 74 65 72 6f 70 43 6f 6d  nst azInteropCom
0890: 70 69 6c 65 4f 70 74 5b 5d 20 3d 20 7b 0d 0a 0d  pileOpt[] = {...
08a0: 0a 2f 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  ./* These macros
08b0: 20 61 72 65 20 70 72 6f 76 69 64 65 64 20 74 6f   are provided to
08c0: 20 22 73 74 72 69 6e 67 69 66 79 22 20 74 68 65   "stringify" the
08d0: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 65   value of the de
08e0: 66 69 6e 65 0d 0a 2a 2a 20 66 6f 72 20 74 68 6f  fine..** for tho
08f0: 73 65 20 6f 70 74 69 6f 6e 73 20 69 6e 20 77 68  se options in wh
0900: 69 63 68 20 74 68 65 20 76 61 6c 75 65 20 69 73  ich the value is
0910: 20 6d 65 61 6e 69 6e 67 66 75 6c 2e 20 2a 2f 0d   meaningful. */.
0920: 0a 23 69 66 6e 64 65 66 20 43 54 49 4d 45 4f 50  .#ifndef CTIMEOP
0930: 54 5f 56 41 4c 5f 0d 0a 23 64 65 66 69 6e 65 20  T_VAL_..#define 
0940: 43 54 49 4d 45 4f 50 54 5f 56 41 4c 5f 28 6f 70  CTIMEOPT_VAL_(op
0950: 74 29 20 23 6f 70 74 0d 0a 23 65 6e 64 69 66 0d  t) #opt..#endif.
0960: 0a 0d 0a 23 69 66 6e 64 65 66 20 43 54 49 4d 45  ...#ifndef CTIME
0970: 4f 50 54 5f 56 41 4c 0d 0a 23 64 65 66 69 6e 65  OPT_VAL..#define
0980: 20 43 54 49 4d 45 4f 50 54 5f 56 41 4c 28 6f 70   CTIMEOPT_VAL(op
0990: 74 29 20 43 54 49 4d 45 4f 50 54 5f 56 41 4c 5f  t) CTIMEOPT_VAL_
09a0: 28 6f 70 74 29 0d 0a 23 65 6e 64 69 66 0d 0a 0d  (opt)..#endif...
09b0: 0a 23 69 66 64 65 66 20 49 4e 54 45 52 4f 50 5f  .#ifdef INTEROP_
09c0: 43 4f 44 45 43 0d 0a 20 20 22 43 4f 44 45 43 22  CODEC..  "CODEC"
09d0: 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65  ,..#endif..#ifde
09e0: 66 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 0d  f INTEROP_DEBUG.
09f0: 0a 20 20 22 44 45 42 55 47 3d 22 20 43 54 49 4d  .  "DEBUG=" CTIM
0a00: 45 4f 50 54 5f 56 41 4c 28 49 4e 54 45 52 4f 50  EOPT_VAL(INTEROP
0a10: 5f 44 45 42 55 47 29 2c 0d 0a 23 65 6e 64 69 66  _DEBUG),..#endif
0a20: 0d 0a 23 69 66 64 65 66 20 49 4e 54 45 52 4f 50  ..#ifdef INTEROP
0a30: 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54  _EXTENSION_FUNCT
0a40: 49 4f 4e 53 0d 0a 20 20 22 45 58 54 45 4e 53 49  IONS..  "EXTENSI
0a50: 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53 22 2c 0d 0a  ON_FUNCTIONS",..
0a60: 23 65 6e 64 69 66 0d 0a 23 69 66 64 65 66 20 49  #endif..#ifdef I
0a70: 4e 54 45 52 4f 50 5f 4c 45 47 41 43 59 5f 43 4c  NTEROP_LEGACY_CL
0a80: 4f 53 45 0d 0a 20 20 22 4c 45 47 41 43 59 5f 43  OSE..  "LEGACY_C
0a90: 4c 4f 53 45 22 2c 0d 0a 23 65 6e 64 69 66 0d 0a  LOSE",..#endif..
0aa0: 23 69 66 64 65 66 20 49 4e 54 45 52 4f 50 5f 4c  #ifdef INTEROP_L
0ab0: 4f 47 0d 0a 20 20 22 4c 4f 47 22 2c 0d 0a 23 65  OG..  "LOG",..#e
0ac0: 6e 64 69 66 0d 0a 23 69 66 64 65 66 20 49 4e 54  ndif..#ifdef INT
0ad0: 45 52 4f 50 5f 50 45 52 43 45 4e 54 49 4c 45 5f  EROP_PERCENTILE_
0ae0: 45 58 54 45 4e 53 49 4f 4e 0d 0a 20 20 22 50 45  EXTENSION..  "PE
0af0: 52 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e 53 49  RCENTILE_EXTENSI
0b00: 4f 4e 22 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23 69  ON",..#endif..#i
0b10: 66 64 65 66 20 49 4e 54 45 52 4f 50 5f 52 45 47  fdef INTEROP_REG
0b20: 45 58 50 5f 45 58 54 45 4e 53 49 4f 4e 0d 0a 20  EXP_EXTENSION.. 
0b30: 20 22 52 45 47 45 58 50 5f 45 58 54 45 4e 53 49   "REGEXP_EXTENSI
0b40: 4f 4e 22 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23 69  ON",..#endif..#i
0b50: 66 64 65 66 20 49 4e 54 45 52 4f 50 5f 54 45 53  fdef INTEROP_TES
0b60: 54 5f 45 58 54 45 4e 53 49 4f 4e 0d 0a 20 20 22  T_EXTENSION..  "
0b70: 54 45 53 54 5f 45 58 54 45 4e 53 49 4f 4e 22 2c  TEST_EXTENSION",
0b80: 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65 66  ..#endif..#ifdef
0b90: 20 49 4e 54 45 52 4f 50 5f 54 4f 54 59 50 45 5f   INTEROP_TOTYPE_
0ba0: 45 58 54 45 4e 53 49 4f 4e 0d 0a 20 20 22 54 4f  EXTENSION..  "TO
0bb0: 54 59 50 45 5f 45 58 54 45 4e 53 49 4f 4e 22 2c  TYPE_EXTENSION",
0bc0: 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65 66  ..#endif..#ifdef
0bd0: 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f   SQLITE_VERSION_
0be0: 4e 55 4d 42 45 52 0d 0a 20 20 22 56 45 52 53 49  NUMBER..  "VERSI
0bf0: 4f 4e 5f 4e 55 4d 42 45 52 3d 22 20 43 54 49 4d  ON_NUMBER=" CTIM
0c00: 45 4f 50 54 5f 56 41 4c 28 53 51 4c 49 54 45 5f  EOPT_VAL(SQLITE_
0c10: 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 29 2c  VERSION_NUMBER),
0c20: 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65 66  ..#endif..#ifdef
0c30: 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c   INTEROP_VIRTUAL
0c40: 5f 54 41 42 4c 45 0d 0a 20 20 22 56 49 52 54 55  _TABLE..  "VIRTU
0c50: 41 4c 5f 54 41 42 4c 45 22 2c 0d 0a 23 65 6e 64  AL_TABLE",..#end
0c60: 69 66 0d 0a 7d 3b 0d 0a 0d 0a 2f 2a 0d 0a 2a 2a  if..};..../*..**
0c70: 20 47 69 76 65 6e 20 74 68 65 20 6e 61 6d 65 20   Given the name 
0c80: 6f 66 20 61 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  of a compile-tim
0c90: 65 20 6f 70 74 69 6f 6e 2c 20 72 65 74 75 72 6e  e option, return
0ca0: 20 74 72 75 65 20 69 66 20 74 68 61 74 20 6f 70   true if that op
0cb0: 74 69 6f 6e 0d 0a 2a 2a 20 77 61 73 20 75 73 65  tion..** was use
0cc0: 64 20 61 6e 64 20 66 61 6c 73 65 20 69 66 20 6e  d and false if n
0cd0: 6f 74 2e 0d 0a 2a 2a 0d 0a 2a 2a 20 54 68 65 20  ot...**..** The 
0ce0: 6e 61 6d 65 20 63 61 6e 20 6f 70 74 69 6f 6e 61  name can optiona
0cf0: 6c 6c 79 20 62 65 67 69 6e 20 77 69 74 68 20 22  lly begin with "
0d00: 53 51 4c 49 54 45 5f 22 20 6f 72 20 22 49 4e 54  SQLITE_" or "INT
0d10: 45 52 4f 50 5f 22 20 62 75 74 20 74 68 6f 73 65  EROP_" but those
0d20: 0d 0a 2a 2a 20 70 72 65 66 69 78 65 73 20 61 72  ..** prefixes ar
0d30: 65 20 6e 6f 74 20 72 65 71 75 69 72 65 64 20 66  e not required f
0d40: 6f 72 20 61 20 6d 61 74 63 68 2e 0d 0a 2a 2f 0d  or a match...*/.
0d50: 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20  .SQLITE_API int 
0d60: 57 49 4e 41 50 49 20 69 6e 74 65 72 6f 70 5f 63  WINAPI interop_c
0d70: 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65  ompileoption_use
0d80: 64 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f  d(const char *zO
0d90: 70 74 4e 61 6d 65 29 7b 0d 0a 20 20 69 6e 74 20  ptName){..  int 
0da0: 69 2c 20 6e 3b 0d 0a 20 20 69 66 28 20 73 71 6c  i, n;..  if( sql
0db0: 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 4f 70  ite3StrNICmp(zOp
0dc0: 74 4e 61 6d 65 2c 20 22 53 51 4c 49 54 45 5f 22  tName, "SQLITE_"
0dd0: 2c 20 37 29 3d 3d 30 20 29 20 7a 4f 70 74 4e 61  , 7)==0 ) zOptNa
0de0: 6d 65 20 2b 3d 20 37 3b 0d 0a 20 20 69 66 28 20  me += 7;..  if( 
0df0: 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28  sqlite3StrNICmp(
0e00: 7a 4f 70 74 4e 61 6d 65 2c 20 22 49 4e 54 45 52  zOptName, "INTER
0e10: 4f 50 5f 22 2c 20 38 29 3d 3d 30 20 29 20 7a 4f  OP_", 8)==0 ) zO
0e20: 70 74 4e 61 6d 65 20 2b 3d 20 38 3b 0d 0a 20 20  ptName += 8;..  
0e30: 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  n = sqlite3Strle
0e40: 6e 33 30 28 7a 4f 70 74 4e 61 6d 65 29 3b 0d 0a  n30(zOptName);..
0e50: 0d 0a 20 20 2f 2a 20 53 69 6e 63 65 20 41 72 72  ..  /* Since Arr
0e60: 61 79 53 69 7a 65 28 61 7a 49 6e 74 65 72 6f 70  aySize(azInterop
0e70: 43 6f 6d 70 69 6c 65 4f 70 74 29 20 69 73 20 6e  CompileOpt) is n
0e80: 6f 72 6d 61 6c 6c 79 20 69 6e 20 73 69 6e 67 6c  ormally in singl
0e90: 65 20 64 69 67 69 74 73 2c 20 61 0d 0a 20 20 2a  e digits, a..  *
0ea0: 2a 20 6c 69 6e 65 61 72 20 73 65 61 72 63 68 20  * linear search 
0eb0: 69 73 20 61 64 65 71 75 61 74 65 2e 20 20 4e 6f  is adequate.  No
0ec0: 20 6e 65 65 64 20 66 6f 72 20 61 20 62 69 6e 61   need for a bina
0ed0: 72 79 20 73 65 61 72 63 68 2e 20 2a 2f 0d 0a 20  ry search. */.. 
0ee0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61   for(i=0; i<Arra
0ef0: 79 53 69 7a 65 28 61 7a 49 6e 74 65 72 6f 70 43  ySize(azInteropC
0f00: 6f 6d 70 69 6c 65 4f 70 74 29 3b 20 69 2b 2b 29  ompileOpt); i++)
0f10: 7b 0d 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  {..    if( sqlit
0f20: 65 33 53 74 72 4e 49 43 6d 70 28 7a 4f 70 74 4e  e3StrNICmp(zOptN
0f30: 61 6d 65 2c 20 61 7a 49 6e 74 65 72 6f 70 43 6f  ame, azInteropCo
0f40: 6d 70 69 6c 65 4f 70 74 5b 69 5d 2c 20 6e 29 3d  mpileOpt[i], n)=
0f50: 3d 30 0d 0a 20 20 20 20 20 26 26 20 73 71 6c 69  =0..     && sqli
0f60: 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
0f70: 69 67 6e 65 64 20 63 68 61 72 29 61 7a 49 6e 74  igned char)azInt
0f80: 65 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 5b 69  eropCompileOpt[i
0f90: 5d 5b 6e 5d 5d 3d 3d 30 0d 0a 20 20 20 20 29 7b  ][n]]==0..    ){
0fa0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31  ..      return 1
0fb0: 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 20  ;..    }..  }.. 
0fc0: 20 72 65 74 75 72 6e 20 30 3b 0d 0a 7d 0d 0a 0d   return 0;..}...
0fd0: 0a 2f 2a 0d 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ./*..** Return t
0fe0: 68 65 20 4e 2d 74 68 20 63 6f 6d 70 69 6c 65 2d  he N-th compile-
0ff0: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 73 74 72 69  time option stri
1000: 6e 67 2e 20 20 49 66 20 4e 20 69 73 20 6f 75 74  ng.  If N is out
1010: 20 6f 66 20 72 61 6e 67 65 2c 0d 0a 2a 2a 20 72   of range,..** r
1020: 65 74 75 72 6e 20 61 20 4e 55 4c 4c 20 70 6f 69  eturn a NULL poi
1030: 6e 74 65 72 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49 54  nter...*/..SQLIT
1040: 45 5f 41 50 49 20 63 6f 6e 73 74 20 63 68 61 72  E_API const char
1050: 20 2a 57 49 4e 41 50 49 20 69 6e 74 65 72 6f 70   *WINAPI interop
1060: 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67  _compileoption_g
1070: 65 74 28 69 6e 74 20 4e 29 7b 0d 0a 20 20 69 66  et(int N){..  if
1080: 28 20 4e 3e 3d 30 20 26 26 20 4e 3c 41 72 72 61  ( N>=0 && N<Arra
1090: 79 53 69 7a 65 28 61 7a 49 6e 74 65 72 6f 70 43  ySize(azInteropC
10a0: 6f 6d 70 69 6c 65 4f 70 74 29 20 29 7b 0d 0a 20  ompileOpt) ){.. 
10b0: 20 20 20 72 65 74 75 72 6e 20 61 7a 49 6e 74 65     return azInte
10c0: 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 5b 4e 5d  ropCompileOpt[N]
10d0: 3b 0d 0a 20 20 7d 0d 0a 20 20 72 65 74 75 72 6e  ;..  }..  return
10e0: 20 30 3b 0d 0a 7d 0d 0a 0d 0a 23 69 66 20 64 65   0;..}....#if de
10f0: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45  fined(INTEROP_DE
1100: 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
1110: 49 4e 54 45 52 4f 50 5f 4c 4f 47 29 0d 0a 53 51  INTEROP_LOG)..SQ
1120: 4c 49 54 45 5f 50 52 49 56 41 54 45 20 76 6f 69  LITE_PRIVATE voi
1130: 64 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70  d sqlite3Interop
1140: 44 65 62 75 67 28 63 6f 6e 73 74 20 63 68 61 72  Debug(const char
1150: 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b   *zFormat, ...){
1160: 0d 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 20  ..  va_list ap; 
1170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1180: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 61 72          /* Varar
1190: 67 20 6c 69 73 74 20 2a 2f 0d 0a 20 20 53 74 72  g list */..  Str
11a0: 41 63 63 75 6d 20 61 63 63 3b 20 20 20 20 20 20  Accum acc;      
11b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c0: 20 2f 2a 20 53 74 72 69 6e 67 20 61 63 63 75 6d   /* String accum
11d0: 75 6c 61 74 6f 72 20 2a 2f 0d 0a 20 20 63 68 61  ulator */..  cha
11e0: 72 20 7a 4d 73 67 5b 53 51 4c 49 54 45 5f 50 52  r zMsg[SQLITE_PR
11f0: 49 4e 54 5f 42 55 46 5f 53 49 5a 45 2a 33 5d 3b  INT_BUF_SIZE*3];
1200: 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 6c 6f 67   /* Complete log
1210: 20 6d 65 73 73 61 67 65 20 2a 2f 0d 0a 20 20 76   message */..  v
1220: 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72  a_start(ap, zFor
1230: 6d 61 74 29 3b 0d 0a 20 20 73 71 6c 69 74 65 33  mat);..  sqlite3
1240: 53 74 72 41 63 63 75 6d 49 6e 69 74 28 26 61 63  StrAccumInit(&ac
1250: 63 2c 20 7a 4d 73 67 2c 20 73 69 7a 65 6f 66 28  c, zMsg, sizeof(
1260: 7a 4d 73 67 29 2c 20 30 29 3b 0d 0a 20 20 61 63  zMsg), 0);..  ac
1270: 63 2e 75 73 65 4d 61 6c 6c 6f 63 20 3d 20 30 3b  c.useMalloc = 0;
1280: 0d 0a 20 20 73 71 6c 69 74 65 33 56 58 50 72 69  ..  sqlite3VXPri
1290: 6e 74 66 28 26 61 63 63 2c 20 30 2c 20 7a 46 6f  ntf(&acc, 0, zFo
12a0: 72 6d 61 74 2c 20 61 70 29 3b 0d 0a 20 20 76 61  rmat, ap);..  va
12b0: 5f 65 6e 64 28 61 70 29 3b 0d 0a 23 69 66 20 53  _end(ap);..#if S
12c0: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
12d0: 4d 42 45 52 20 3e 3d 20 33 30 30 37 30 31 33 0d  MBER >= 3007013.
12e0: 0a 20 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32  .  sqlite3_win32
12f0: 5f 77 72 69 74 65 5f 64 65 62 75 67 28 73 71 6c  _write_debug(sql
1300: 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69  ite3StrAccumFini
1310: 73 68 28 26 61 63 63 29 2c 20 2d 31 29 3b 0d 0a  sh(&acc), -1);..
1320: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 53 51  #elif defined(SQ
1330: 4c 49 54 45 5f 57 49 4e 33 32 5f 48 41 53 5f 41  LITE_WIN32_HAS_A
1340: 4e 53 49 29 0d 0a 20 20 4f 75 74 70 75 74 44 65  NSI)..  OutputDe
1350: 62 75 67 53 74 72 69 6e 67 41 28 73 71 6c 69 74  bugStringA(sqlit
1360: 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68  e3StrAccumFinish
1370: 28 26 61 63 63 29 29 3b 0d 0a 23 65 6c 69 66 20  (&acc));..#elif 
1380: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57  defined(SQLITE_W
1390: 49 4e 33 32 5f 48 41 53 5f 57 49 44 45 29 0d 0a  IN32_HAS_WIDE)..
13a0: 20 20 7b 0d 0a 20 20 20 20 4c 50 57 53 54 52 20    {..    LPWSTR 
13b0: 7a 57 69 64 65 4d 73 67 20 3d 20 75 74 66 38 54  zWideMsg = utf8T
13c0: 6f 55 6e 69 63 6f 64 65 28 73 71 6c 69 74 65 33  oUnicode(sqlite3
13d0: 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 26  StrAccumFinish(&
13e0: 61 63 63 29 29 3b 0d 0a 20 20 20 20 69 66 28 20  acc));..    if( 
13f0: 7a 57 69 64 65 4d 73 67 20 29 7b 0d 0a 20 20 20  zWideMsg ){..   
1400: 20 20 20 4f 75 74 70 75 74 44 65 62 75 67 53 74     OutputDebugSt
1410: 72 69 6e 67 57 28 7a 57 69 64 65 4d 73 67 29 3b  ringW(zWideMsg);
1420: 0d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ..      sqlite3_
1430: 66 72 65 65 28 7a 57 69 64 65 4d 73 67 29 3b 0d  free(zWideMsg);.
1440: 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 23 65 6c  .    }..  }..#el
1450: 73 65 0d 0a 20 20 66 70 72 69 6e 74 66 28 73 74  se..  fprintf(st
1460: 64 65 72 72 2c 20 22 25 73 22 2c 20 73 71 6c 69  derr, "%s", sqli
1470: 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73  te3StrAccumFinis
1480: 68 28 26 61 63 63 29 29 3b 0d 0a 23 65 6e 64 69  h(&acc));..#endi
1490: 66 0d 0a 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  f..}..#endif....
14a0: 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45  #if defined(INTE
14b0: 52 4f 50 5f 4c 4f 47 29 0d 0a 53 51 4c 49 54 45  ROP_LOG)..SQLITE
14c0: 5f 50 52 49 56 41 54 45 20 69 6e 74 20 6c 6f 67  _PRIVATE int log
14d0: 43 6f 6e 66 69 67 75 72 65 64 20 3d 20 30 3b 0d  Configured = 0;.
14e0: 0a 0d 0a 53 51 4c 49 54 45 5f 50 52 49 56 41 54  ...SQLITE_PRIVAT
14f0: 45 20 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  E void sqlite3In
1500: 74 65 72 6f 70 4c 6f 67 43 61 6c 6c 62 61 63 6b  teropLogCallback
1510: 28 76 6f 69 64 20 2a 70 41 72 67 2c 20 69 6e 74  (void *pArg, int
1520: 20 69 43 6f 64 65 2c 20 63 6f 6e 73 74 20 63 68   iCode, const ch
1530: 61 72 20 2a 7a 4d 73 67 29 7b 0d 0a 20 20 73 71  ar *zMsg){..  sq
1540: 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75  lite3InteropDebu
1550: 67 28 22 49 4e 54 45 52 4f 50 5f 4c 4f 47 20 28  g("INTEROP_LOG (
1560: 25 64 29 20 25 73 5c 6e 22 2c 20 69 43 6f 64 65  %d) %s\n", iCode
1570: 2c 20 7a 4d 73 67 29 3b 0d 0a 7d 0d 0a 23 65 6e  , zMsg);..}..#en
1580: 64 69 66 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  dif....SQLITE_AP
1590: 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c  I int WINAPI sql
15a0: 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 73 69 7a 65  ite3_malloc_size
15b0: 5f 69 6e 74 65 72 6f 70 28 76 6f 69 64 20 2a 70  _interop(void *p
15c0: 29 7b 0d 0a 20 20 72 65 74 75 72 6e 20 73 71 6c  ){..  return sql
15d0: 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 70  ite3MallocSize(p
15e0: 29 3b 0d 0a 7d 0d 0a 0d 0a 23 69 66 20 64 65 66  );..}....#if def
15f0: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 4c 45 47  ined(INTEROP_LEG
1600: 41 43 59 5f 43 4c 4f 53 45 29 20 7c 7c 20 53 51  ACY_CLOSE) || SQ
1610: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
1620: 42 45 52 20 3c 20 33 30 30 37 30 31 34 0d 0a 53  BER < 3007014..S
1630: 51 4c 49 54 45 5f 50 52 49 56 41 54 45 20 76 6f  QLITE_PRIVATE vo
1640: 69 64 20 2a 20 73 71 6c 69 74 65 33 44 62 4d 61  id * sqlite3DbMa
1650: 6c 6c 6f 63 5a 65 72 6f 5f 69 6e 74 65 72 6f 70  llocZero_interop
1660: 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e  (sqlite3 *db, in
1670: 74 20 6e 29 0d 0a 7b 0d 0a 20 20 76 6f 69 64 20  t n)..{..  void 
1680: 2a 70 3b 0d 0a 20 20 69 66 20 28 64 62 29 20 7b  *p;..  if (db) {
1690: 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75  ..    sqlite3_mu
16a0: 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75  tex_enter(db->mu
16b0: 74 65 78 29 3b 0d 0a 20 20 7d 0d 0a 20 20 70 20  tex);..  }..  p 
16c0: 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
16d0: 63 5a 65 72 6f 28 64 62 2c 6e 29 3b 0d 0a 20 20  cZero(db,n);..  
16e0: 69 66 20 28 64 62 29 20 7b 0d 0a 20 20 20 20 73  if (db) {..    s
16f0: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
1700: 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a  ve(db->mutex);..
1710: 20 20 7d 0d 0a 20 20 72 65 74 75 72 6e 20 70 3b    }..  return p;
1720: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 50 52  ..}....SQLITE_PR
1730: 49 56 41 54 45 20 76 6f 69 64 20 73 71 6c 69 74  IVATE void sqlit
1740: 65 33 44 62 46 72 65 65 5f 69 6e 74 65 72 6f 70  e3DbFree_interop
1750: 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 76 6f  (sqlite3 *db, vo
1760: 69 64 20 2a 70 29 0d 0a 7b 0d 0a 20 20 69 66 20  id *p)..{..  if 
1770: 28 64 62 29 20 7b 0d 0a 20 20 20 20 73 71 6c 69  (db) {..    sqli
1780: 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28  te3_mutex_enter(
1790: 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 7d  db->mutex);..  }
17a0: 0d 0a 20 20 69 66 20 28 70 29 20 7b 0d 0a 20 20  ..  if (p) {..  
17b0: 20 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75    sqlite3Memdebu
17c0: 67 53 65 74 54 79 70 65 28 70 2c 20 4d 45 4d 54  gSetType(p, MEMT
17d0: 59 50 45 5f 44 42 7c 4d 45 4d 54 59 50 45 5f 48  YPE_DB|MEMTYPE_H
17e0: 45 41 50 29 3b 0d 0a 20 20 7d 0d 0a 20 20 73 71  EAP);..  }..  sq
17f0: 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 70  lite3DbFree(db,p
1800: 29 3b 0d 0a 20 20 69 66 20 28 64 62 29 20 7b 0d  );..  if (db) {.
1810: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  .    sqlite3_mut
1820: 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74  ex_leave(db->mut
1830: 65 78 29 3b 0d 0a 20 20 7d 0d 0a 7d 0d 0a 23 65  ex);..  }..}..#e
1840: 6e 64 69 66 0d 0a 0d 0a 2f 2a 0d 0a 20 20 20 20  ndif..../*..    
1850: 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68 69 73  The goal of this
1860: 20 76 65 72 73 69 6f 6e 20 6f 66 20 63 6c 6f 73   version of clos
1870: 65 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 74  e is different t
1880: 68 61 6e 20 74 68 61 74 20 6f 66 20 73 71 6c 69  han that of sqli
1890: 74 65 33 5f 63 6c 6f 73 65 28 29 2c 20 61 6e 64  te3_close(), and
18a0: 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20   is designed to 
18b0: 6c 65 6e 64 20 69 74 73 65 6c 66 20 62 65 74 74  lend itself bett
18c0: 65 72 20 74 6f 20 2e 4e 45 54 27 73 20 6e 6f 6e  er to .NET's non
18d0: 2d 64 65 74 65 72 6d 69 6e 69 73 74 69 63 20 66  -deterministic f
18e0: 69 6e 61 6c 69 7a 65 72 73 20 61 6e 64 0d 0a 20  inalizers and.. 
18f0: 20 20 20 74 68 65 20 47 43 20 74 68 72 65 61 64     the GC thread
1900: 2e 20 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 6e  .  SQLite will n
1910: 6f 74 20 63 6c 6f 73 65 20 61 20 64 61 74 61 62  ot close a datab
1920: 61 73 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74  ase if statement
1930: 73 20 61 72 65 20 6f 70 65 6e 20 6f 6e 20 69 74  s are open on it
1940: 20 2d 2d 20 62 75 74 20 66 6f 72 20 6f 75 72 20   -- but for our 
1950: 70 75 72 70 6f 73 65 73 2c 20 77 65 27 64 20 72  purposes, we'd r
1960: 61 74 68 65 72 20 66 69 6e 61 6c 69 7a 65 20 61  ather finalize a
1970: 6c 6c 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  ll active statem
1980: 65 6e 74 73 0d 0a 20 20 20 20 61 6e 64 20 66 6f  ents..    and fo
1990: 72 63 69 62 6c 79 20 63 6c 6f 73 65 20 74 68 65  rcibly close the
19a0: 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20   database.  The 
19b0: 72 65 61 73 6f 6e 20 69 73 20 73 69 6d 70 6c 65  reason is simple
19c0: 20 2d 2d 20 61 20 6c 6f 74 20 6f 66 20 70 65 6f   -- a lot of peo
19d0: 70 6c 65 20 64 6f 6e 27 74 20 44 69 73 70 6f 73  ple don't Dispos
19e0: 65 28 29 20 6f 66 20 74 68 65 69 72 20 6f 62 6a  e() of their obj
19f0: 65 63 74 73 20 63 6f 72 72 65 63 74 6c 79 20 61  ects correctly a
1a00: 6e 64 20 6c 65 74 20 74 68 65 20 67 61 72 62 61  nd let the garba
1a10: 67 65 20 63 6f 6c 6c 65 63 74 6f 72 0d 0a 20 20  ge collector..  
1a20: 20 20 64 6f 20 69 74 2e 20 20 54 68 69 73 20 6c    do it.  This l
1a30: 65 61 64 73 20 74 6f 20 75 6e 65 78 70 65 63 74  eads to unexpect
1a40: 65 64 20 62 65 68 61 76 69 6f 72 20 77 68 65 6e  ed behavior when
1a50: 20 61 20 75 73 65 72 20 74 68 69 6e 6b 73 20 74   a user thinks t
1a60: 68 65 79 27 76 65 20 63 6c 6f 73 65 64 20 61 20  hey've closed a 
1a70: 64 61 74 61 62 61 73 65 2c 20 62 75 74 20 69 74  database, but it
1a80: 27 73 20 73 74 69 6c 6c 20 6f 70 65 6e 20 62 65  's still open be
1a90: 63 61 75 73 65 20 6e 6f 74 20 61 6c 6c 20 74 68  cause not all th
1aa0: 65 20 73 74 61 74 65 6d 65 6e 74 73 20 68 61 76  e statements hav
1ab0: 65 0d 0a 20 20 20 20 68 69 74 20 74 68 65 20 47  e..    hit the G
1ac0: 43 20 79 65 74 2e 0d 0a 0d 0a 20 20 20 20 53 6f  C yet.....    So
1ad0: 2c 20 68 65 72 65 20 77 65 20 68 61 76 65 20 61  , here we have a
1ae0: 20 70 72 6f 62 6c 65 6d 20 2e 2e 2e 20 2e 4e 45   problem ... .NE
1af0: 54 20 68 61 73 20 61 20 70 6f 69 6e 74 65 72 20  T has a pointer 
1b00: 74 6f 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66  to any number of
1b10: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 6f 62   sqlite3_stmt ob
1b20: 6a 65 63 74 73 2e 20 20 57 65 20 63 61 6e 27 74  jects.  We can't
1b30: 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 66 69   call sqlite3_fi
1b40: 6e 61 6c 69 7a 65 28 29 20 6f 6e 20 74 68 65 73  nalize() on thes
1b50: 65 20 62 65 63 61 75 73 65 0d 0a 20 20 20 20 74  e because..    t
1b60: 68 65 69 72 20 6d 65 6d 6f 72 79 20 69 73 20 66  heir memory is f
1b70: 72 65 65 64 20 61 6e 64 20 63 61 6e 20 62 65 20  reed and can be 
1b80: 75 73 65 64 20 66 6f 72 20 73 6f 6d 65 74 68 69  used for somethi
1b90: 6e 67 20 65 6c 73 65 2e 20 20 54 68 65 20 47 43  ng else.  The GC
1ba0: 20 74 68 72 65 61 64 20 63 6f 75 6c 64 20 70 6f   thread could po
1bb0: 74 65 6e 74 69 61 6c 6c 79 20 74 72 79 20 61 6e  tentially try an
1bc0: 64 20 63 61 6c 6c 20 66 69 6e 61 6c 69 7a 65 20  d call finalize 
1bd0: 61 67 61 69 6e 20 6f 6e 20 74 68 65 20 73 74 61  again on the sta
1be0: 74 65 6d 65 6e 74 20 61 66 74 65 72 0d 0a 20 20  tement after..  
1bf0: 20 20 74 68 61 74 20 6d 65 6d 6f 72 79 20 77 61    that memory wa
1c00: 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2e 20 20  s deallocated.  
1c10: 42 41 44 2e 20 20 53 6f 2c 20 77 68 61 74 20 77  BAD.  So, what w
1c20: 65 20 6e 65 65 64 20 74 6f 20 64 6f 20 69 73 20  e need to do is 
1c30: 6d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 65  make a copy of e
1c40: 61 63 68 20 73 74 61 74 65 6d 65 6e 74 2c 20 61  ach statement, a
1c50: 6e 64 20 63 61 6c 6c 20 66 69 6e 61 6c 69 7a 65  nd call finalize
1c60: 28 29 20 6f 6e 20 74 68 65 20 63 6f 70 79 20 2d  () on the copy -
1c70: 2d 20 73 6f 20 74 68 61 74 20 74 68 65 20 6f 72  - so that the or
1c80: 69 67 69 6e 61 6c 0d 0a 20 20 20 20 73 74 61 74  iginal..    stat
1c90: 65 6d 65 6e 74 27 73 20 6d 65 6d 6f 72 79 20 69  ement's memory i
1ca0: 73 20 70 72 65 73 65 72 76 65 64 2c 20 61 6e 64  s preserved, and
1cb0: 20 6d 61 72 6b 65 64 20 61 73 20 42 41 44 2c 20   marked as BAD, 
1cc0: 62 75 74 20 77 65 20 63 61 6e 20 73 74 69 6c 6c  but we can still
1cd0: 20 6d 61 6e 61 67 65 20 74 6f 20 66 69 6e 61 6c   manage to final
1ce0: 69 7a 65 20 65 76 65 72 79 74 68 69 6e 67 20 61  ize everything a
1cf0: 6e 64 20 66 6f 72 63 69 62 6c 79 20 63 6c 6f 73  nd forcibly clos
1d00: 65 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  e the database. 
1d10: 20 4c 61 74 65 72 20 77 68 65 6e 20 74 68 65 0d   Later when the.
1d20: 0a 20 20 20 20 47 43 20 67 65 74 73 20 61 72 6f  .    GC gets aro
1d30: 75 6e 64 20 74 6f 20 63 61 6c 6c 69 6e 67 20 66  und to calling f
1d40: 69 6e 61 6c 69 7a 65 5f 69 6e 74 65 72 6f 70 28  inalize_interop(
1d50: 29 20 6f 6e 20 74 68 65 20 22 62 61 64 22 20 73  ) on the "bad" s
1d60: 74 61 74 65 6d 65 6e 74 2c 20 77 65 20 64 65 74  tatement, we det
1d70: 65 63 74 20 74 68 61 74 20 61 6e 64 20 66 69 6e  ect that and fin
1d80: 69 73 68 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  ish deallocating
1d90: 20 74 68 65 20 70 6f 69 6e 74 65 72 2e 0d 0a 2a   the pointer...*
1da0: 2f 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e  /..SQLITE_API in
1db0: 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  t WINAPI sqlite3
1dc0: 5f 63 6c 6f 73 65 5f 69 6e 74 65 72 6f 70 28 73  _close_interop(s
1dd0: 71 6c 69 74 65 33 20 2a 64 62 29 0d 0a 7b 0d 0a  qlite3 *db)..{..
1de0: 20 20 69 6e 74 20 72 65 74 3b 0d 0a 23 69 66 20    int ret;..#if 
1df0: 21 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50  !defined(INTEROP
1e00: 5f 4c 45 47 41 43 59 5f 43 4c 4f 53 45 29 20 26  _LEGACY_CLOSE) &
1e10: 26 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  & SQLITE_VERSION
1e20: 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 37 30  _NUMBER >= 30070
1e30: 31 34 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65  14....#if define
1e40: 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29  d(INTEROP_DEBUG)
1e50: 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42   && (INTEROP_DEB
1e60: 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42  UG & INTEROP_DEB
1e70: 55 47 5f 43 4c 4f 53 45 29 0d 0a 20 20 73 71 6c  UG_CLOSE)..  sql
1e80: 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67  ite3InteropDebug
1e90: 28 22 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 5f  ("sqlite3_close_
1ea0: 69 6e 74 65 72 6f 70 28 29 3a 20 63 61 6c 6c 69  interop(): calli
1eb0: 6e 67 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  ng sqlite3_close
1ec0: 5f 76 32 28 25 70 29 2e 2e 2e 5c 6e 22 2c 20 64  _v2(%p)...\n", d
1ed0: 62 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  b);..#endif.... 
1ee0: 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 63   ret = sqlite3_c
1ef0: 6c 6f 73 65 5f 76 32 28 64 62 29 3b 0d 0a 0d 0a  lose_v2(db);....
1f00: 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45  #if defined(INTE
1f10: 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28 49  ROP_DEBUG) && (I
1f20: 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49  NTEROP_DEBUG & I
1f30: 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 43 4c 4f  NTEROP_DEBUG_CLO
1f40: 53 45 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e  SE)..  sqlite3In
1f50: 74 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69  teropDebug("sqli
1f60: 74 65 33 5f 63 6c 6f 73 65 5f 69 6e 74 65 72 6f  te3_close_intero
1f70: 70 28 29 3a 20 73 71 6c 69 74 65 33 5f 63 6c 6f  p(): sqlite3_clo
1f80: 73 65 5f 76 32 28 25 70 29 20 72 65 74 75 72 6e  se_v2(%p) return
1f90: 65 64 20 25 64 2e 5c 6e 22 2c 20 64 62 2c 20 72  ed %d.\n", db, r
1fa0: 65 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  et);..#endif....
1fb0: 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 23    return ret;..#
1fc0: 65 6c 73 65 0d 0a 20 20 72 65 74 20 3d 20 73 71  else..  ret = sq
1fd0: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64 62 29 3b  lite3_close(db);
1fe0: 0d 0a 0d 0a 20 20 69 66 20 28 72 65 74 20 3d 3d  ....  if (ret ==
1ff0: 20 53 51 4c 49 54 45 5f 42 55 53 59 29 0d 0a 20   SQLITE_BUSY).. 
2000: 20 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   {..    sqlite3_
2010: 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e  mutex_enter(db->
2020: 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 69  mutex);....    i
2030: 66 20 28 21 64 62 2d 3e 70 56 64 62 65 29 0d 0a  f (!db->pVdbe)..
2040: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 73 71 6c      {..      sql
2050: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
2060: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20  (db->mutex);..  
2070: 20 20 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0d      return ret;.
2080: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 77 68  .    }....    wh
2090: 69 6c 65 20 28 64 62 2d 3e 70 56 64 62 65 29 0d  ile (db->pVdbe).
20a0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 2f 2a  .    {..      /*
20b0: 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20   Make a copy of 
20c0: 74 68 65 20 66 69 72 73 74 20 70 72 65 70 61 72  the first prepar
20d0: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0d  ed statement */.
20e0: 0a 20 20 20 20 20 20 56 64 62 65 20 2a 70 20 3d  .      Vdbe *p =
20f0: 20 28 56 64 62 65 20 2a 29 73 71 6c 69 74 65 33   (Vdbe *)sqlite3
2100: 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 5f 69 6e 74  DbMallocZero_int
2110: 65 72 6f 70 28 64 62 2c 20 73 69 7a 65 6f 66 28  erop(db, sizeof(
2120: 56 64 62 65 29 29 3b 0d 0a 20 20 20 20 20 20 56  Vdbe));..      V
2130: 64 62 65 20 2a 70 6f 20 3d 20 64 62 2d 3e 70 56  dbe *po = db->pV
2140: 64 62 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  dbe;....      if
2150: 20 28 21 70 29 0d 0a 20 20 20 20 20 20 7b 0d 0a   (!p)..      {..
2160: 20 20 20 20 20 20 20 20 72 65 74 20 3d 20 53 51          ret = SQ
2170: 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0d 0a 20 20 20  LITE_NOMEM;..   
2180: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
2190: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 43 6f     }....      Co
21a0: 70 79 4d 65 6d 6f 72 79 28 70 2c 20 70 6f 2c 20  pyMemory(p, po, 
21b0: 73 69 7a 65 6f 66 28 56 64 62 65 29 29 3b 0d 0a  sizeof(Vdbe));..
21c0: 0d 0a 20 20 20 20 20 20 2f 2a 20 50 75 74 20 69  ..      /* Put i
21d0: 74 20 6f 6e 20 74 68 65 20 63 68 61 69 6e 20 73  t on the chain s
21e0: 6f 20 77 65 20 63 61 6e 20 66 72 65 65 20 69 74  o we can free it
21f0: 20 2a 2f 0d 0a 20 20 20 20 20 20 64 62 2d 3e 70   */..      db->p
2200: 56 64 62 65 20 3d 20 70 3b 0d 0a 20 20 20 20 20  Vdbe = p;..     
2210: 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 66   ret = sqlite3_f
2220: 69 6e 61 6c 69 7a 65 28 28 73 71 6c 69 74 65 33  inalize((sqlite3
2230: 5f 73 74 6d 74 20 2a 29 70 29 3b 20 2f 2a 20 54  _stmt *)p); /* T
2240: 68 69 73 20 77 69 6c 6c 20 61 6c 73 6f 20 66 72  his will also fr
2250: 65 65 20 74 68 65 20 63 6f 70 79 27 73 20 6d 65  ee the copy's me
2260: 6d 6f 72 79 20 2a 2f 0d 0a 20 20 20 20 20 20 69  mory */..      i
2270: 66 20 28 72 65 74 29 0d 0a 20 20 20 20 20 20 7b  f (ret)..      {
2280: 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 66 69 6e  ..        /* fin
2290: 61 6c 69 7a 65 20 66 61 69 6c 65 64 20 2d 2d 20  alize failed -- 
22a0: 73 6f 20 77 65 20 6d 75 73 74 20 70 75 74 20 62  so we must put b
22b0: 61 63 6b 20 61 6e 79 74 68 69 6e 67 20 77 65 20  ack anything we 
22c0: 6d 75 6e 67 65 64 20 2a 2f 0d 0a 20 20 20 20 20  munged */..     
22d0: 20 20 20 43 6f 70 79 4d 65 6d 6f 72 79 28 70 6f     CopyMemory(po
22e0: 2c 20 70 2c 20 73 69 7a 65 6f 66 28 56 64 62 65  , p, sizeof(Vdbe
22f0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 64 62 2d  ));..        db-
2300: 3e 70 56 64 62 65 20 3d 20 70 6f 3b 0d 0a 0d 0a  >pVdbe = po;....
2310: 20 20 20 20 20 20 20 20 2f 2a 0d 0a 20 20 20 20          /*..    
2320: 20 20 20 20 2a 2a 20 4e 4f 54 45 3a 20 4f 6b 2c      ** NOTE: Ok,
2330: 20 77 65 20 6d 75 73 74 20 66 72 65 65 20 74 68   we must free th
2340: 69 73 20 62 6c 6f 63 6b 20 74 68 61 74 20 2a 77  is block that *w
2350: 65 2a 20 61 6c 6c 6f 63 61 74 65 64 20 28 61 62  e* allocated (ab
2360: 6f 76 65 29 20 73 69 6e 63 65 0d 0a 20 20 20 20  ove) since..    
2370: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 66 69 6e      **       fin
2380: 61 6c 69 7a 65 20 64 69 64 20 6e 6f 74 20 64 6f  alize did not do
2390: 20 73 6f 2e 0d 0a 20 20 20 20 20 20 20 20 2a 2f   so...        */
23a0: 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ..        sqlite
23b0: 33 44 62 46 72 65 65 5f 69 6e 74 65 72 6f 70 28  3DbFree_interop(
23c0: 64 62 2c 20 70 29 3b 0d 0a 20 20 20 20 20 20 20  db, p);..       
23d0: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d   break;..      }
23e0: 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20  ..      else..  
23f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 5a      {..        Z
2400: 65 72 6f 4d 65 6d 6f 72 79 28 70 6f 2c 20 73 69  eroMemory(po, si
2410: 7a 65 6f 66 28 56 64 62 65 29 29 3b 0d 0a 20 20  zeof(Vdbe));..  
2420: 20 20 20 20 20 20 70 6f 2d 3e 6d 61 67 69 63 20        po->magic 
2430: 3d 20 56 44 42 45 5f 4d 41 47 49 43 5f 44 45 41  = VDBE_MAGIC_DEA
2440: 44 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  D;..      }..   
2450: 20 7d 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   }..    sqlite3_
2460: 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e  mutex_leave(db->
2470: 6d 75 74 65 78 29 3b 0d 0a 20 20 20 20 72 65 74  mutex);..    ret
2480: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65   = sqlite3_close
2490: 28 64 62 29 3b 0d 0a 20 20 7d 0d 0a 20 20 72 65  (db);..  }..  re
24a0: 74 75 72 6e 20 72 65 74 3b 0d 0a 23 65 6e 64 69  turn ret;..#endi
24b0: 66 0d 0a 7d 0d 0a 0d 0a 23 69 66 20 64 65 66 69  f..}....#if defi
24c0: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 4c 4f 47 29  ned(INTEROP_LOG)
24d0: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74  ..SQLITE_API int
24e0: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
24f0: 63 6f 6e 66 69 67 5f 6c 6f 67 5f 69 6e 74 65 72  config_log_inter
2500: 6f 70 28 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72  op()..{..  int r
2510: 65 74 3b 0d 0a 20 20 69 66 28 20 21 6c 6f 67 43  et;..  if( !logC
2520: 6f 6e 66 69 67 75 72 65 64 20 29 7b 0d 0a 20 20  onfigured ){..  
2530: 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33 5f    ret = sqlite3_
2540: 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f  config(SQLITE_CO
2550: 4e 46 49 47 5f 4c 4f 47 2c 20 73 71 6c 69 74 65  NFIG_LOG, sqlite
2560: 33 49 6e 74 65 72 6f 70 4c 6f 67 43 61 6c 6c 62  3InteropLogCallb
2570: 61 63 6b 2c 20 30 29 3b 0d 0a 20 20 20 20 69 66  ack, 0);..    if
2580: 28 20 72 65 74 3d 3d 53 51 4c 49 54 45 5f 4f 4b  ( ret==SQLITE_OK
2590: 20 29 7b 0d 0a 20 20 20 20 20 20 6c 6f 67 43 6f   ){..      logCo
25a0: 6e 66 69 67 75 72 65 64 20 3d 20 31 3b 0d 0a 20  nfigured = 1;.. 
25b0: 20 20 20 7d 65 6c 73 65 7b 0d 0a 20 20 20 20 20     }else{..     
25c0: 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44   sqlite3InteropD
25d0: 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 63 6f  ebug("sqlite3_co
25e0: 6e 66 69 67 5f 6c 6f 67 5f 69 6e 74 65 72 6f 70  nfig_log_interop
25f0: 28 29 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66  (): sqlite3_conf
2600: 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  ig(SQLITE_CONFIG
2610: 5f 4c 4f 47 29 20 72 65 74 75 72 6e 65 64 20 25  _LOG) returned %
2620: 64 2e 5c 6e 22 2c 20 72 65 74 29 3b 0d 0a 20 20  d.\n", ret);..  
2630: 20 20 7d 0d 0a 20 20 7d 65 6c 73 65 7b 0d 0a 20    }..  }else{.. 
2640: 20 20 20 72 65 74 20 3d 20 53 51 4c 49 54 45 5f     ret = SQLITE_
2650: 4f 4b 3b 0d 0a 20 20 7d 0d 0a 20 20 72 65 74 75  OK;..  }..  retu
2660: 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a 23 65 6e 64  rn ret;..}..#end
2670: 69 66 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  if....SQLITE_API
2680: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 57 49 4e   const char *WIN
2690: 41 50 49 20 69 6e 74 65 72 6f 70 5f 6c 69 62 76  API interop_libv
26a0: 65 72 73 69 6f 6e 28 76 6f 69 64 29 0d 0a 7b 0d  ersion(void)..{.
26b0: 0a 20 20 72 65 74 75 72 6e 20 49 4e 54 45 52 4f  .  return INTERO
26c0: 50 5f 56 45 52 53 49 4f 4e 3b 0d 0a 7d 0d 0a 0d  P_VERSION;..}...
26d0: 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73  .SQLITE_API cons
26e0: 74 20 63 68 61 72 20 2a 57 49 4e 41 50 49 20 69  t char *WINAPI i
26f0: 6e 74 65 72 6f 70 5f 73 6f 75 72 63 65 69 64 28  nterop_sourceid(
2700: 76 6f 69 64 29 0d 0a 7b 0d 0a 20 20 72 65 74 75  void)..{..  retu
2710: 72 6e 20 49 4e 54 45 52 4f 50 5f 53 4f 55 52 43  rn INTEROP_SOURC
2720: 45 5f 49 44 20 22 20 22 20 49 4e 54 45 52 4f 50  E_ID " " INTEROP
2730: 5f 53 4f 55 52 43 45 5f 54 49 4d 45 53 54 41 4d  _SOURCE_TIMESTAM
2740: 50 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f  P;..}....SQLITE_
2750: 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73  API int WINAPI s
2760: 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65  qlite3_open_inte
2770: 72 6f 70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  rop(const char *
2780: 66 69 6c 65 6e 61 6d 65 2c 20 69 6e 74 20 66 6c  filename, int fl
2790: 61 67 73 2c 20 73 71 6c 69 74 65 33 20 2a 2a 70  ags, sqlite3 **p
27a0: 70 64 62 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72  pdb)..{..  int r
27b0: 65 74 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e  et;....#if defin
27c0: 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  ed(INTEROP_DEBUG
27d0: 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45  ) && (INTEROP_DE
27e0: 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45  BUG & INTEROP_DE
27f0: 42 55 47 5f 4f 50 45 4e 29 0d 0a 20 20 73 71 6c  BUG_OPEN)..  sql
2800: 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67  ite3InteropDebug
2810: 28 22 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69  ("sqlite3_open_i
2820: 6e 74 65 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e  nterop(): callin
2830: 67 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76  g sqlite3_open_v
2840: 32 28 5c 22 25 73 5c 22 2c 20 25 64 2c 20 25 70  2(\"%s\", %d, %p
2850: 29 2e 2e 2e 5c 6e 22 2c 20 66 69 6c 65 6e 61 6d  )...\n", filenam
2860: 65 2c 20 66 6c 61 67 73 2c 20 70 70 64 62 29 3b  e, flags, ppdb);
2870: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65  ..#endif....  re
2880: 74 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  t = sqlite3_open
2890: 5f 76 32 28 66 69 6c 65 6e 61 6d 65 2c 20 70 70  _v2(filename, pp
28a0: 64 62 2c 20 66 6c 61 67 73 2c 20 4e 55 4c 4c 29  db, flags, NULL)
28b0: 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64  ;....#if defined
28c0: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20  (INTEROP_DEBUG) 
28d0: 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  && (INTEROP_DEBU
28e0: 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55  G & INTEROP_DEBU
28f0: 47 5f 4f 50 45 4e 29 0d 0a 20 20 73 71 6c 69 74  G_OPEN)..  sqlit
2900: 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22  e3InteropDebug("
2910: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74  sqlite3_open_int
2920: 65 72 6f 70 28 29 3a 20 73 71 6c 69 74 65 33 5f  erop(): sqlite3_
2930: 6f 70 65 6e 5f 76 32 28 5c 22 25 73 5c 22 2c 20  open_v2(\"%s\", 
2940: 25 64 2c 20 25 70 29 20 72 65 74 75 72 6e 65 64  %d, %p) returned
2950: 20 25 64 2e 5c 6e 22 2c 20 66 69 6c 65 6e 61 6d   %d.\n", filenam
2960: 65 2c 20 66 6c 61 67 73 2c 20 70 70 64 62 2c 20  e, flags, ppdb, 
2970: 72 65 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  ret);..#endif...
2980: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54  .#if defined(INT
2990: 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f 46  EROP_EXTENSION_F
29a0: 55 4e 43 54 49 4f 4e 53 29 0d 0a 20 20 69 66 20  UNCTIONS)..  if 
29b0: 28 28 72 65 74 20 3d 3d 20 53 51 4c 49 54 45 5f  ((ret == SQLITE_
29c0: 4f 4b 29 20 26 26 20 70 70 64 62 29 0d 0a 20 20  OK) && ppdb)..  
29d0: 20 20 52 65 67 69 73 74 65 72 45 78 74 65 6e 73    RegisterExtens
29e0: 69 6f 6e 46 75 6e 63 74 69 6f 6e 73 28 2a 70 70  ionFunctions(*pp
29f0: 64 62 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  db);..#endif....
2a00: 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d    return ret;..}
2a10: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69  ....SQLITE_API i
2a20: 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  nt WINAPI sqlite
2a30: 33 5f 6f 70 65 6e 31 36 5f 69 6e 74 65 72 6f 70  3_open16_interop
2a40: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 66 69 6c  (const char *fil
2a50: 65 6e 61 6d 65 2c 20 69 6e 74 20 66 6c 61 67 73  ename, int flags
2a60: 2c 20 73 71 6c 69 74 65 33 20 2a 2a 70 70 64 62  , sqlite3 **ppdb
2a70: 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72 65 74 3b  )..{..  int ret;
2a80: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
2a90: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26  INTEROP_DEBUG) &
2aa0: 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  & (INTEROP_DEBUG
2ab0: 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47   & INTEROP_DEBUG
2ac0: 5f 4f 50 45 4e 31 36 29 0d 0a 20 20 73 71 6c 69  _OPEN16)..  sqli
2ad0: 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28  te3InteropDebug(
2ae0: 22 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 5f  "sqlite3_open16_
2af0: 69 6e 74 65 72 6f 70 28 29 3a 20 63 61 6c 6c 69  interop(): calli
2b00: 6e 67 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f  ng sqlite3_open_
2b10: 69 6e 74 65 72 6f 70 28 5c 22 25 73 5c 22 2c 20  interop(\"%s\", 
2b20: 25 64 2c 20 25 70 29 2e 2e 2e 5c 6e 22 2c 20 66  %d, %p)...\n", f
2b30: 69 6c 65 6e 61 6d 65 2c 20 66 6c 61 67 73 2c 20  ilename, flags, 
2b40: 70 70 64 62 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ppdb);..#endif..
2b50: 0d 0a 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65  ..  ret = sqlite
2b60: 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28 66  3_open_interop(f
2b70: 69 6c 65 6e 61 6d 65 2c 20 66 6c 61 67 73 2c 20  ilename, flags, 
2b80: 70 70 64 62 29 3b 0d 0a 0d 0a 23 69 66 20 64 65  ppdb);....#if de
2b90: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45  fined(INTEROP_DE
2ba0: 42 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50  BUG) && (INTEROP
2bb0: 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50  _DEBUG & INTEROP
2bc0: 5f 44 45 42 55 47 5f 4f 50 45 4e 31 36 29 0d 0a  _DEBUG_OPEN16)..
2bd0: 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70    sqlite3Interop
2be0: 44 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 6f  Debug("sqlite3_o
2bf0: 70 65 6e 31 36 5f 69 6e 74 65 72 6f 70 28 29 3a  pen16_interop():
2c00: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e   sqlite3_open_in
2c10: 74 65 72 6f 70 28 5c 22 25 73 5c 22 2c 20 25 64  terop(\"%s\", %d
2c20: 2c 20 25 70 29 20 72 65 74 75 72 6e 65 64 20 25  , %p) returned %
2c30: 64 2e 5c 6e 22 2c 20 66 69 6c 65 6e 61 6d 65 2c  d.\n", filename,
2c40: 20 66 6c 61 67 73 2c 20 70 70 64 62 2c 20 72 65   flags, ppdb, re
2c50: 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  t);..#endif.... 
2c60: 20 69 66 20 28 28 72 65 74 20 3d 3d 20 53 51 4c   if ((ret == SQL
2c70: 49 54 45 5f 4f 4b 29 20 26 26 20 70 70 64 62 20  ITE_OK) && ppdb 
2c80: 26 26 20 21 44 62 48 61 73 50 72 6f 70 65 72 74  && !DbHasPropert
2c90: 79 28 2a 70 70 64 62 2c 20 30 2c 20 44 42 5f 53  y(*ppdb, 0, DB_S
2ca0: 63 68 65 6d 61 4c 6f 61 64 65 64 29 29 0d 0a 20  chemaLoaded)).. 
2cb0: 20 20 20 45 4e 43 28 2a 70 70 64 62 29 20 3d 20     ENC(*ppdb) = 
2cc0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
2cd0: 56 45 3b 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20  VE;....  return 
2ce0: 72 65 74 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  ret;..}....SQLIT
2cf0: 45 5f 41 50 49 20 63 6f 6e 73 74 20 63 68 61 72  E_API const char
2d00: 20 2a 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33   *WINAPI sqlite3
2d10: 5f 65 72 72 6d 73 67 5f 69 6e 74 65 72 6f 70 28  _errmsg_interop(
2d20: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74  sqlite3 *db, int
2d30: 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f   *plen)..{..  co
2d40: 6e 73 74 20 63 68 61 72 20 2a 70 76 61 6c 20 3d  nst char *pval =
2d50: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
2d60: 64 62 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e  db);..  if (plen
2d70: 29 20 2a 70 6c 65 6e 20 3d 20 70 76 61 6c 20 3f  ) *plen = pval ?
2d80: 20 73 74 72 6c 65 6e 28 70 76 61 6c 29 20 3a 20   strlen(pval) : 
2d90: 30 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70 76 61  0;..  return pva
2da0: 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f  l;..}....SQLITE_
2db0: 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73  API int WINAPI s
2dc0: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 5f 69  qlite3_changes_i
2dd0: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 20 2a  nterop(sqlite3 *
2de0: 64 62 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72 65  db)..{..  int re
2df0: 73 75 6c 74 3b 0d 0a 0d 0a 23 69 66 20 64 65 66  sult;....#if def
2e00: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42  ined(INTEROP_DEB
2e10: 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f  UG) && (INTEROP_
2e20: 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f  DEBUG & INTEROP_
2e30: 44 45 42 55 47 5f 43 48 41 4e 47 45 53 29 0d 0a  DEBUG_CHANGES)..
2e40: 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70    sqlite3Interop
2e50: 44 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 63  Debug("sqlite3_c
2e60: 68 61 6e 67 65 73 5f 69 6e 74 65 72 6f 70 28 29  hanges_interop()
2e70: 3a 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65  : calling sqlite
2e80: 33 5f 63 68 61 6e 67 65 73 28 25 70 29 2e 2e 2e  3_changes(%p)...
2e90: 5c 6e 22 2c 20 64 62 29 3b 0d 0a 23 65 6e 64 69  \n", db);..#endi
2ea0: 66 0d 0a 0d 0a 23 69 66 6e 64 65 66 20 4e 44 45  f....#ifndef NDE
2eb0: 42 55 47 0d 0a 20 20 69 66 20 28 21 64 62 29 0d  BUG..  if (!db).
2ec0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 49 6e  .      sqlite3In
2ed0: 74 65 72 6f 70 42 72 65 61 6b 28 22 6e 75 6c 6c  teropBreak("null
2ee0: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
2ef0: 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 63 68 61   for sqlite3_cha
2f00: 6e 67 65 73 28 29 22 29 3b 0d 0a 23 65 6e 64 69  nges()");..#endi
2f10: 66 0d 0a 0d 0a 20 20 72 65 73 75 6c 74 20 3d 20  f....  result = 
2f20: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
2f30: 64 62 29 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69  db);....#if defi
2f40: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  ned(INTEROP_DEBU
2f50: 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44  G) && (INTEROP_D
2f60: 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44  EBUG & INTEROP_D
2f70: 45 42 55 47 5f 43 48 41 4e 47 45 53 29 0d 0a 20  EBUG_CHANGES).. 
2f80: 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44   sqlite3InteropD
2f90: 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 63 68  ebug("sqlite3_ch
2fa0: 61 6e 67 65 73 5f 69 6e 74 65 72 6f 70 28 29 3a  anges_interop():
2fb0: 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73   sqlite3_changes
2fc0: 28 25 70 29 20 72 65 74 75 72 6e 65 64 20 25 64  (%p) returned %d
2fd0: 2e 5c 6e 22 2c 20 64 62 2c 20 72 65 73 75 6c 74  .\n", db, result
2fe0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
2ff0: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
3000: 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20  }....SQLITE_API 
3010: 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74  int WINAPI sqlit
3020: 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72  e3_prepare_inter
3030: 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  op(sqlite3 *db, 
3040: 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 2c  const char *sql,
3050: 20 69 6e 74 20 6e 62 79 74 65 73 2c 20 73 71 6c   int nbytes, sql
3060: 69 74 65 33 5f 73 74 6d 74 20 2a 2a 70 70 73 74  ite3_stmt **ppst
3070: 6d 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  mt, const char *
3080: 2a 70 7a 74 61 69 6c 2c 20 69 6e 74 20 2a 70 6c  *pztail, int *pl
3090: 65 6e 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 6e 3b  en)..{..  int n;
30a0: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
30b0: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26  INTEROP_DEBUG) &
30c0: 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  & (INTEROP_DEBUG
30d0: 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47   & INTEROP_DEBUG
30e0: 5f 50 52 45 50 41 52 45 29 0d 0a 20 20 73 71 6c  _PREPARE)..  sql
30f0: 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67  ite3InteropDebug
3100: 28 22 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  ("sqlite3_prepar
3110: 65 5f 69 6e 74 65 72 6f 70 28 29 3a 20 63 61 6c  e_interop(): cal
3120: 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65  ling sqlite3_pre
3130: 70 61 72 65 28 25 70 2c 20 5c 22 25 73 5c 22 2c  pare(%p, \"%s\",
3140: 20 25 64 2c 20 25 70 29 2e 2e 2e 5c 6e 22 2c 20   %d, %p)...\n", 
3150: 64 62 2c 20 73 71 6c 2c 20 6e 62 79 74 65 73 2c  db, sql, nbytes,
3160: 20 70 70 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69   ppstmt);..#endi
3170: 66 0d 0a 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f  f....#if SQLITE_
3180: 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e  VERSION_NUMBER >
3190: 3d 20 33 30 30 33 30 30 39 0d 0a 20 20 6e 20 3d  = 3003009..  n =
31a0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
31b0: 5f 76 32 28 64 62 2c 20 73 71 6c 2c 20 6e 62 79  _v2(db, sql, nby
31c0: 74 65 73 2c 20 70 70 73 74 6d 74 2c 20 70 7a 74  tes, ppstmt, pzt
31d0: 61 69 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  ail);..#else..  
31e0: 6e 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  n = sqlite3_prep
31f0: 61 72 65 28 64 62 2c 20 73 71 6c 2c 20 6e 62 79  are(db, sql, nby
3200: 74 65 73 2c 20 70 70 73 74 6d 74 2c 20 70 7a 74  tes, ppstmt, pzt
3210: 61 69 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  ail);..#endif...
3220: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54  .#if defined(INT
3230: 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28  EROP_DEBUG) && (
3240: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20  INTEROP_DEBUG & 
3250: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 50 52  INTEROP_DEBUG_PR
3260: 45 50 41 52 45 29 0d 0a 20 20 73 71 6c 69 74 65  EPARE)..  sqlite
3270: 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73  3InteropDebug("s
3280: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 69  qlite3_prepare_i
3290: 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c 69 74 65  nterop(): sqlite
32a0: 33 5f 70 72 65 70 61 72 65 28 25 70 2c 20 5c 22  3_prepare(%p, \"
32b0: 25 73 5c 22 2c 20 25 64 2c 20 25 70 29 20 72 65  %s\", %d, %p) re
32c0: 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 64  turned %d.\n", d
32d0: 62 2c 20 73 71 6c 2c 20 6e 62 79 74 65 73 2c 20  b, sql, nbytes, 
32e0: 70 70 73 74 6d 74 2c 20 6e 29 3b 0d 0a 23 65 6e  ppstmt, n);..#en
32f0: 64 69 66 0d 0a 0d 0a 20 20 69 66 20 28 70 6c 65  dif....  if (ple
3300: 6e 29 20 2a 70 6c 65 6e 20 3d 20 28 70 7a 74 61  n) *plen = (pzta
3310: 69 6c 20 26 26 20 2a 70 7a 74 61 69 6c 29 20 3f  il && *pztail) ?
3320: 20 73 74 72 6c 65 6e 28 2a 70 7a 74 61 69 6c 29   strlen(*pztail)
3330: 20 3a 20 30 3b 0d 0a 0d 0a 20 20 72 65 74 75 72   : 0;....  retur
3340: 6e 20 6e 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  n n;..}....SQLIT
3350: 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49  E_API int WINAPI
3360: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
3370: 31 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  16_interop(sqlit
3380: 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 76 6f  e3 *db, const vo
3390: 69 64 20 2a 73 71 6c 2c 20 69 6e 74 20 6e 63 68  id *sql, int nch
33a0: 61 72 73 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d  ars, sqlite3_stm
33b0: 74 20 2a 2a 70 70 73 74 6d 74 2c 20 63 6f 6e 73  t **ppstmt, cons
33c0: 74 20 76 6f 69 64 20 2a 2a 70 7a 74 61 69 6c 2c  t void **pztail,
33d0: 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a   int *plen)..{..
33e0: 20 20 69 6e 74 20 6e 3b 0d 0a 0d 0a 23 69 66 20    int n;....#if 
33f0: 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f  defined(INTEROP_
3400: 44 45 42 55 47 29 20 26 26 20 28 49 4e 54 45 52  DEBUG) && (INTER
3410: 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52  OP_DEBUG & INTER
3420: 4f 50 5f 44 45 42 55 47 5f 50 52 45 50 41 52 45  OP_DEBUG_PREPARE
3430: 31 36 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e  16)..  sqlite3In
3440: 74 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69  teropDebug("sqli
3450: 74 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74 65  te3_prepare_inte
3460: 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73  rop(): calling s
3470: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36  qlite3_prepare16
3480: 28 25 70 2c 20 5c 22 25 73 5c 22 2c 20 25 64 2c  (%p, \"%s\", %d,
3490: 20 25 70 29 2e 2e 2e 5c 6e 22 2c 20 64 62 2c 20   %p)...\n", db, 
34a0: 73 71 6c 2c 20 6e 63 68 61 72 73 2c 20 70 70 73  sql, nchars, pps
34b0: 74 6d 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  tmt);..#endif...
34c0: 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53  .#if SQLITE_VERS
34d0: 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30  ION_NUMBER >= 30
34e0: 30 33 30 30 39 0d 0a 20 20 6e 20 3d 20 73 71 6c  03009..  n = sql
34f0: 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 5f 76  ite3_prepare16_v
3500: 32 28 64 62 2c 20 73 71 6c 2c 20 6e 63 68 61 72  2(db, sql, nchar
3510: 73 20 2a 20 73 69 7a 65 6f 66 28 77 63 68 61 72  s * sizeof(wchar
3520: 5f 74 29 2c 20 70 70 73 74 6d 74 2c 20 70 7a 74  _t), ppstmt, pzt
3530: 61 69 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  ail);..#else..  
3540: 6e 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  n = sqlite3_prep
3550: 61 72 65 31 36 28 64 62 2c 20 73 71 6c 2c 20 6e  are16(db, sql, n
3560: 63 68 61 72 73 20 2a 20 73 69 7a 65 6f 66 28 77  chars * sizeof(w
3570: 63 68 61 72 5f 74 29 2c 20 70 70 73 74 6d 74 2c  char_t), ppstmt,
3580: 20 70 7a 74 61 69 6c 29 3b 0d 0a 23 65 6e 64 69   pztail);..#endi
3590: 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64  f....#if defined
35a0: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20  (INTEROP_DEBUG) 
35b0: 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  && (INTEROP_DEBU
35c0: 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55  G & INTEROP_DEBU
35d0: 47 5f 50 52 45 50 41 52 45 31 36 29 0d 0a 20 20  G_PREPARE16)..  
35e0: 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65  sqlite3InteropDe
35f0: 62 75 67 28 22 73 71 6c 69 74 65 33 5f 70 72 65  bug("sqlite3_pre
3600: 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 29 3a 20  pare_interop(): 
3610: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31  sqlite3_prepare1
3620: 36 28 25 70 2c 20 5c 22 25 73 5c 22 2c 20 25 64  6(%p, \"%s\", %d
3630: 2c 20 25 70 29 20 72 65 74 75 72 6e 65 64 20 25  , %p) returned %
3640: 64 2e 5c 6e 22 2c 20 64 62 2c 20 73 71 6c 2c 20  d.\n", db, sql, 
3650: 6e 63 68 61 72 73 2c 20 70 70 73 74 6d 74 2c 20  nchars, ppstmt, 
3660: 6e 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  n);..#endif.... 
3670: 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e   if (plen) *plen
3680: 20 3d 20 28 70 7a 74 61 69 6c 20 26 26 20 2a 70   = (pztail && *p
3690: 7a 74 61 69 6c 29 20 3f 20 77 63 73 6c 65 6e 28  ztail) ? wcslen(
36a0: 28 77 63 68 61 72 5f 74 20 2a 29 2a 70 7a 74 61  (wchar_t *)*pzta
36b0: 69 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77 63 68  il) * sizeof(wch
36c0: 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 0d 0a 20 20  ar_t) : 0;....  
36d0: 72 65 74 75 72 6e 20 6e 3b 0d 0a 7d 0d 0a 0d 0a  return n;..}....
36e0: 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45  #if defined(INTE
36f0: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
3700: 45 29 20 26 26 20 53 51 4c 49 54 45 5f 56 45 52  E) && SQLITE_VER
3710: 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33  SION_NUMBER >= 3
3720: 30 30 34 30 30 31 0d 0a 53 51 4c 49 54 45 5f 41  004001..SQLITE_A
3730: 50 49 20 76 6f 69 64 20 2a 57 49 4e 41 50 49 20  PI void *WINAPI 
3740: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 64  sqlite3_create_d
3750: 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c 65  isposable_module
3760: 5f 69 6e 74 65 72 6f 70 28 0d 0a 20 20 73 71 6c  _interop(..  sql
3770: 69 74 65 33 20 2a 64 62 2c 0d 0a 20 20 63 6f 6e  ite3 *db,..  con
3780: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 0d  st char *zName,.
3790: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  .  sqlite3_modul
37a0: 65 20 2a 70 4d 6f 64 75 6c 65 2c 0d 0a 20 20 69  e *pModule,..  i
37b0: 6e 74 20 69 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  nt iVersion,..  
37c0: 69 6e 74 20 28 2a 78 43 72 65 61 74 65 29 28 73  int (*xCreate)(s
37d0: 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 20 2a 2c  qlite3*, void *,
37e0: 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
37f0: 20 2a 63 6f 6e 73 74 2a 2c 20 73 71 6c 69 74 65   *const*, sqlite
3800: 33 5f 76 74 61 62 20 2a 2a 2c 20 63 68 61 72 2a  3_vtab **, char*
3810: 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 43 6f  *),..  int (*xCo
3820: 6e 6e 65 63 74 29 28 73 71 6c 69 74 65 33 2a 2c  nnect)(sqlite3*,
3830: 20 76 6f 69 64 20 2a 2c 20 69 6e 74 2c 20 63 6f   void *, int, co
3840: 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 2a  nst char *const*
3850: 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a  , sqlite3_vtab *
3860: 2a 2c 20 63 68 61 72 2a 2a 29 2c 0d 0a 20 20 69  *, char**),..  i
3870: 6e 74 20 28 2a 78 42 65 73 74 49 6e 64 65 78 29  nt (*xBestIndex)
3880: 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 2c  (sqlite3_vtab *,
3890: 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69   sqlite3_index_i
38a0: 6e 66 6f 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a  nfo*),..  int (*
38b0: 78 44 69 73 63 6f 6e 6e 65 63 74 29 28 73 71 6c  xDisconnect)(sql
38c0: 69 74 65 33 5f 76 74 61 62 20 2a 29 2c 0d 0a 20  ite3_vtab *),.. 
38d0: 20 69 6e 74 20 28 2a 78 44 65 73 74 72 6f 79 29   int (*xDestroy)
38e0: 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 29  (sqlite3_vtab *)
38f0: 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 4f 70 65 6e  ,..  int (*xOpen
3900: 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a  )(sqlite3_vtab *
3910: 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  , sqlite3_vtab_c
3920: 75 72 73 6f 72 20 2a 2a 29 2c 0d 0a 20 20 69 6e  ursor **),..  in
3930: 74 20 28 2a 78 43 6c 6f 73 65 29 28 73 71 6c 69  t (*xClose)(sqli
3940: 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 2a  te3_vtab_cursor*
3950: 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 46 69 6c  ),..  int (*xFil
3960: 74 65 72 29 28 73 71 6c 69 74 65 33 5f 76 74 61  ter)(sqlite3_vta
3970: 62 5f 63 75 72 73 6f 72 2a 2c 20 69 6e 74 2c 20  b_cursor*, int, 
3980: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
3990: 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  t, sqlite3_value
39a0: 20 2a 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78   **),..  int (*x
39b0: 4e 65 78 74 29 28 73 71 6c 69 74 65 33 5f 76 74  Next)(sqlite3_vt
39c0: 61 62 5f 63 75 72 73 6f 72 2a 29 2c 0d 0a 20 20  ab_cursor*),..  
39d0: 69 6e 74 20 28 2a 78 45 6f 66 29 28 73 71 6c 69  int (*xEof)(sqli
39e0: 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 2a  te3_vtab_cursor*
39f0: 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6c  ),..  int (*xCol
3a00: 75 6d 6e 29 28 73 71 6c 69 74 65 33 5f 76 74 61  umn)(sqlite3_vta
3a10: 62 5f 63 75 72 73 6f 72 2a 2c 20 73 71 6c 69 74  b_cursor*, sqlit
3a20: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 20 69 6e 74  e3_context*, int
3a30: 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 52 6f 77  ),..  int (*xRow
3a40: 69 64 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62  id)(sqlite3_vtab
3a50: 5f 63 75 72 73 6f 72 2a 2c 20 73 71 6c 69 74 65  _cursor*, sqlite
3a60: 33 5f 69 6e 74 36 34 20 2a 29 2c 0d 0a 20 20 69  3_int64 *),..  i
3a70: 6e 74 20 28 2a 78 55 70 64 61 74 65 29 28 73 71  nt (*xUpdate)(sq
3a80: 6c 69 74 65 33 5f 76 74 61 62 20 2a 2c 20 69 6e  lite3_vtab *, in
3a90: 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  t, sqlite3_value
3aa0: 20 2a 2a 2c 20 73 71 6c 69 74 65 33 5f 69 6e 74   **, sqlite3_int
3ab0: 36 34 20 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a  64 *),..  int (*
3ac0: 78 42 65 67 69 6e 29 28 73 71 6c 69 74 65 33 5f  xBegin)(sqlite3_
3ad0: 76 74 61 62 20 2a 29 2c 0d 0a 20 20 69 6e 74 20  vtab *),..  int 
3ae0: 28 2a 78 53 79 6e 63 29 28 73 71 6c 69 74 65 33  (*xSync)(sqlite3
3af0: 5f 76 74 61 62 20 2a 29 2c 0d 0a 20 20 69 6e 74  _vtab *),..  int
3b00: 20 28 2a 78 43 6f 6d 6d 69 74 29 28 73 71 6c 69   (*xCommit)(sqli
3b10: 74 65 33 5f 76 74 61 62 20 2a 29 2c 0d 0a 20 20  te3_vtab *),..  
3b20: 69 6e 74 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 29  int (*xRollback)
3b30: 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 29  (sqlite3_vtab *)
3b40: 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 46 69 6e 64  ,..  int (*xFind
3b50: 46 75 6e 63 74 69 6f 6e 29 28 73 71 6c 69 74 65  Function)(sqlite
3b60: 33 5f 76 74 61 62 20 2a 2c 20 69 6e 74 2c 20 63  3_vtab *, int, c
3b70: 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 76 6f 69  onst char *, voi
3b80: 64 20 28 2a 2a 70 78 46 75 6e 63 29 28 73 71 6c  d (**pxFunc)(sql
3b90: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 20 69  ite3_context*, i
3ba0: 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  nt, sqlite3_valu
3bb0: 65 2a 2a 29 2c 20 76 6f 69 64 20 2a 2a 70 70 41  e**), void **ppA
3bc0: 72 67 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 52  rg),..  int (*xR
3bd0: 65 6e 61 6d 65 29 28 73 71 6c 69 74 65 33 5f 76  ename)(sqlite3_v
3be0: 74 61 62 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  tab *, const cha
3bf0: 72 20 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78  r *),..  int (*x
3c00: 53 61 76 65 70 6f 69 6e 74 29 28 73 71 6c 69 74  Savepoint)(sqlit
3c10: 65 33 5f 76 74 61 62 20 2a 2c 20 69 6e 74 29 2c  e3_vtab *, int),
3c20: 0d 0a 20 20 69 6e 74 20 28 2a 78 52 65 6c 65 61  ..  int (*xRelea
3c30: 73 65 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62  se)(sqlite3_vtab
3c40: 20 2a 2c 20 69 6e 74 29 2c 0d 0a 20 20 69 6e 74   *, int),..  int
3c50: 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 54 6f 29 28   (*xRollbackTo)(
3c60: 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 2c 20  sqlite3_vtab *, 
3c70: 69 6e 74 29 2c 0d 0a 20 20 76 6f 69 64 20 2a 70  int),..  void *p
3c80: 43 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 76  ClientData,..  v
3c90: 6f 69 64 28 2a 78 44 65 73 74 72 6f 79 4d 6f 64  oid(*xDestroyMod
3ca0: 75 6c 65 29 28 76 6f 69 64 2a 29 0d 0a 29 7b 0d  ule)(void*)..){.
3cb0: 0a 20 20 69 66 20 28 21 70 4d 6f 64 75 6c 65 29  .  if (!pModule)
3cc0: 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20 6d 65   return 0;..  me
3cd0: 6d 73 65 74 28 70 4d 6f 64 75 6c 65 2c 20 30 2c  mset(pModule, 0,
3ce0: 20 73 69 7a 65 6f 66 28 2a 70 4d 6f 64 75 6c 65   sizeof(*pModule
3cf0: 29 29 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e  ));..  pModule->
3d00: 69 56 65 72 73 69 6f 6e 20 3d 20 69 56 65 72 73  iVersion = iVers
3d10: 69 6f 6e 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d  ion;..  pModule-
3d20: 3e 78 43 72 65 61 74 65 20 3d 20 78 43 72 65 61  >xCreate = xCrea
3d30: 74 65 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e  te;..  pModule->
3d40: 78 43 6f 6e 6e 65 63 74 20 3d 20 78 43 6f 6e 6e  xConnect = xConn
3d50: 65 63 74 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d  ect;..  pModule-
3d60: 3e 78 42 65 73 74 49 6e 64 65 78 20 3d 20 78 42  >xBestIndex = xB
3d70: 65 73 74 49 6e 64 65 78 3b 0d 0a 20 20 70 4d 6f  estIndex;..  pMo
3d80: 64 75 6c 65 2d 3e 78 44 69 73 63 6f 6e 6e 65 63  dule->xDisconnec
3d90: 74 20 3d 20 78 44 69 73 63 6f 6e 6e 65 63 74 3b  t = xDisconnect;
3da0: 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 44 65  ..  pModule->xDe
3db0: 73 74 72 6f 79 20 3d 20 78 44 65 73 74 72 6f 79  stroy = xDestroy
3dc0: 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f  ;..  pModule->xO
3dd0: 70 65 6e 20 3d 20 78 4f 70 65 6e 3b 0d 0a 20 20  pen = xOpen;..  
3de0: 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 20  pModule->xClose 
3df0: 3d 20 78 43 6c 6f 73 65 3b 0d 0a 20 20 70 4d 6f  = xClose;..  pMo
3e00: 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 20 3d 20  dule->xFilter = 
3e10: 78 46 69 6c 74 65 72 3b 0d 0a 20 20 70 4d 6f 64  xFilter;..  pMod
3e20: 75 6c 65 2d 3e 78 4e 65 78 74 20 3d 20 78 4e 65  ule->xNext = xNe
3e30: 78 74 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e  xt;..  pModule->
3e40: 78 45 6f 66 20 3d 20 78 45 6f 66 3b 0d 0a 20 20  xEof = xEof;..  
3e50: 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e  pModule->xColumn
3e60: 20 3d 20 78 43 6f 6c 75 6d 6e 3b 0d 0a 20 20 70   = xColumn;..  p
3e70: 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 3d  Module->xRowid =
3e80: 20 78 52 6f 77 69 64 3b 0d 0a 20 20 70 4d 6f 64   xRowid;..  pMod
3e90: 75 6c 65 2d 3e 78 55 70 64 61 74 65 20 3d 20 78  ule->xUpdate = x
3ea0: 55 70 64 61 74 65 3b 0d 0a 20 20 70 4d 6f 64 75  Update;..  pModu
3eb0: 6c 65 2d 3e 78 42 65 67 69 6e 20 3d 20 78 42 65  le->xBegin = xBe
3ec0: 67 69 6e 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d  gin;..  pModule-
3ed0: 3e 78 53 79 6e 63 20 3d 20 78 53 79 6e 63 3b 0d  >xSync = xSync;.
3ee0: 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6d  .  pModule->xCom
3ef0: 6d 69 74 20 3d 20 78 43 6f 6d 6d 69 74 3b 0d 0a  mit = xCommit;..
3f00: 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 6c 6c    pModule->xRoll
3f10: 62 61 63 6b 20 3d 20 78 52 6f 6c 6c 62 61 63 6b  back = xRollback
3f20: 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 46  ;..  pModule->xF
3f30: 69 6e 64 46 75 6e 63 74 69 6f 6e 20 3d 20 78 46  indFunction = xF
3f40: 69 6e 64 46 75 6e 63 74 69 6f 6e 3b 0d 0a 20 20  indFunction;..  
3f50: 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65  pModule->xRename
3f60: 20 3d 20 78 52 65 6e 61 6d 65 3b 0d 0a 20 20 70   = xRename;..  p
3f70: 4d 6f 64 75 6c 65 2d 3e 78 53 61 76 65 70 6f 69  Module->xSavepoi
3f80: 6e 74 20 3d 20 78 53 61 76 65 70 6f 69 6e 74 3b  nt = xSavepoint;
3f90: 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 65  ..  pModule->xRe
3fa0: 6c 65 61 73 65 20 3d 20 78 52 65 6c 65 61 73 65  lease = xRelease
3fb0: 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  ;..  pModule->xR
3fc0: 6f 6c 6c 62 61 63 6b 54 6f 20 3d 20 78 52 6f 6c  ollbackTo = xRol
3fd0: 6c 62 61 63 6b 54 6f 3b 0d 0a 20 20 72 65 74 75  lbackTo;..  retu
3fe0: 72 6e 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  rn sqlite3_creat
3ff0: 65 5f 64 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64  e_disposable_mod
4000: 75 6c 65 28 64 62 2c 20 7a 4e 61 6d 65 2c 20 70  ule(db, zName, p
4010: 4d 6f 64 75 6c 65 2c 20 70 43 6c 69 65 6e 74 44  Module, pClientD
4020: 61 74 61 2c 20 78 44 65 73 74 72 6f 79 4d 6f 64  ata, xDestroyMod
4030: 75 6c 65 29 3b 0d 0a 7d 0d 0a 23 65 6e 64 69 66  ule);..}..#endif
4040: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69  ....SQLITE_API i
4050: 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  nt WINAPI sqlite
4060: 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e  3_bind_double_in
4070: 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74  terop(sqlite3_st
4080: 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43  mt *stmt, int iC
4090: 6f 6c 2c 20 64 6f 75 62 6c 65 20 2a 76 61 6c 29  ol, double *val)
40a0: 0d 0a 7b 0d 0a 20 20 69 66 20 28 21 76 61 6c 29  ..{..  if (!val)
40b0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45   return SQLITE_E
40c0: 52 52 4f 52 3b 0d 0a 20 20 72 65 74 75 72 6e 20  RROR;..  return 
40d0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75  sqlite3_bind_dou
40e0: 62 6c 65 28 73 74 6d 74 2c 69 43 6f 6c 2c 2a 76  ble(stmt,iCol,*v
40f0: 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  al);..}....SQLIT
4100: 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49  E_API int WINAPI
4110: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
4120: 74 36 34 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  t64_interop(sqli
4130: 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20  te3_stmt *stmt, 
4140: 69 6e 74 20 69 43 6f 6c 2c 20 73 71 6c 69 74 65  int iCol, sqlite
4150: 5f 69 6e 74 36 34 20 2a 76 61 6c 29 0d 0a 7b 0d  _int64 *val)..{.
4160: 0a 20 20 69 66 20 28 21 76 61 6c 29 20 72 65 74  .  if (!val) ret
4170: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
4180: 3b 0d 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  ;..  return sqli
4190: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 73  te3_bind_int64(s
41a0: 74 6d 74 2c 69 43 6f 6c 2c 2a 76 61 6c 29 3b 0d  tmt,iCol,*val);.
41b0: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
41c0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 57 49   const char * WI
41d0: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 62 69 6e  NAPI sqlite3_bin
41e0: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
41f0: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
4200: 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74  _stmt *stmt, int
4210: 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e   iCol, int *plen
4220: 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 63 68  )..{..  const ch
4230: 61 72 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74  ar *pval = sqlit
4240: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
4250: 72 5f 6e 61 6d 65 28 73 74 6d 74 2c 20 69 43 6f  r_name(stmt, iCo
4260: 6c 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29  l);..  if (plen)
4270: 20 2a 70 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20   *plen = pval ? 
4280: 73 74 72 6c 65 6e 28 70 76 61 6c 29 20 3a 20 30  strlen(pval) : 0
4290: 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c  ;..  return pval
42a0: 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  ;..}....SQLITE_A
42b0: 50 49 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20  PI const char * 
42c0: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63  WINAPI sqlite3_c
42d0: 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72  olumn_name_inter
42e0: 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  op(sqlite3_stmt 
42f0: 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c  *stmt, int iCol,
4300: 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a   int *plen)..{..
4310: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 76    const char *pv
4320: 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  al = sqlite3_col
4330: 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2c 20 69  umn_name(stmt, i
4340: 43 6f 6c 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65  Col);..  if (ple
4350: 6e 29 20 2a 70 6c 65 6e 20 3d 20 70 76 61 6c 20  n) *plen = pval 
4360: 3f 20 73 74 72 6c 65 6e 28 70 76 61 6c 29 20 3a  ? strlen(pval) :
4370: 20 30 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70 76   0;..  return pv
4380: 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45  al;..}....SQLITE
4390: 5f 41 50 49 20 63 6f 6e 73 74 20 76 6f 69 64 20  _API const void 
43a0: 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  * WINAPI sqlite3
43b0: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 5f 69  _column_name16_i
43c0: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73  nterop(sqlite3_s
43d0: 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69  tmt *stmt, int i
43e0: 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d  Col, int *plen).
43f0: 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  .{..  const void
4400: 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33   *pval = sqlite3
4410: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 28 73  _column_name16(s
4420: 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 69  tmt, iCol);..  i
4430: 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d  f (plen) *plen =
4440: 20 70 76 61 6c 20 3f 20 77 63 73 6c 65 6e 28 28   pval ? wcslen((
4450: 77 63 68 61 72 5f 74 20 2a 29 70 76 61 6c 29 20  wchar_t *)pval) 
4460: 2a 20 73 69 7a 65 6f 66 28 77 63 68 61 72 5f 74  * sizeof(wchar_t
4470: 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72 6e  ) : 0;..  return
4480: 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c   pval;..}....SQL
4490: 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 63 68  ITE_API const ch
44a0: 61 72 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69  ar * WINAPI sqli
44b0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
44c0: 79 70 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  ype_interop(sqli
44d0: 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20  te3_stmt *stmt, 
44e0: 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70  int iCol, int *p
44f0: 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74  len)..{..  const
4500: 20 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73 71   char *pval = sq
4510: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
4520: 6c 74 79 70 65 28 73 74 6d 74 2c 20 69 43 6f 6c  ltype(stmt, iCol
4530: 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20  );..  if (plen) 
4540: 2a 70 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20 73  *plen = pval ? s
4550: 74 72 6c 65 6e 28 70 76 61 6c 29 20 3a 20 30 3b  trlen(pval) : 0;
4560: 0d 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b  ..  return pval;
4570: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
4580: 49 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 20 57  I const void * W
4590: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f  INAPI sqlite3_co
45a0: 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36 5f  lumn_decltype16_
45b0: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f  interop(sqlite3_
45c0: 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20  stmt *stmt, int 
45d0: 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29  iCol, int *plen)
45e0: 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 76 6f 69  ..{..  const voi
45f0: 64 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65  d *pval = sqlite
4600: 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  3_column_decltyp
4610: 65 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b  e16(stmt, iCol);
4620: 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70  ..  if (plen) *p
4630: 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20 77 63 73  len = pval ? wcs
4640: 6c 65 6e 28 28 77 63 68 61 72 5f 74 20 2a 29 70  len((wchar_t *)p
4650: 76 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77 63  val) * sizeof(wc
4660: 68 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 20 20 72  har_t) : 0;..  r
4670: 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a  eturn pval;..}..
4680: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69  ..SQLITE_API voi
4690: 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  d WINAPI sqlite3
46a0: 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 5f 69  _column_double_i
46b0: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73  nterop(sqlite3_s
46c0: 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69  tmt *stmt, int i
46d0: 43 6f 6c 2c 20 64 6f 75 62 6c 65 20 2a 76 61 6c  Col, double *val
46e0: 29 0d 0a 7b 0d 0a 20 20 69 66 20 28 21 76 61 6c  )..{..  if (!val
46f0: 29 20 72 65 74 75 72 6e 3b 0d 0a 20 20 2a 76 61  ) return;..  *va
4700: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  l = sqlite3_colu
4710: 6d 6e 5f 64 6f 75 62 6c 65 28 73 74 6d 74 2c 69  mn_double(stmt,i
4720: 43 6f 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49  Col);..}....SQLI
4730: 54 45 5f 41 50 49 20 76 6f 69 64 20 57 49 4e 41  TE_API void WINA
4740: 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  PI sqlite3_colum
4750: 6e 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  n_int64_interop(
4760: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74  sqlite3_stmt *st
4770: 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 73 71  mt, int iCol, sq
4780: 6c 69 74 65 5f 69 6e 74 36 34 20 2a 76 61 6c 29  lite_int64 *val)
4790: 0d 0a 7b 0d 0a 20 20 69 66 20 28 21 76 61 6c 29  ..{..  if (!val)
47a0: 20 72 65 74 75 72 6e 3b 0d 0a 20 20 2a 76 61 6c   return;..  *val
47b0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
47c0: 6e 5f 69 6e 74 36 34 28 73 74 6d 74 2c 69 43 6f  n_int64(stmt,iCo
47d0: 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45  l);..}....SQLITE
47e0: 5f 41 50 49 20 76 6f 69 64 20 57 49 4e 41 50 49  _API void WINAPI
47f0: 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e   sqlite3_last_in
4800: 73 65 72 74 5f 72 6f 77 69 64 5f 69 6e 74 65 72  sert_rowid_inter
4810: 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  op(sqlite3 *db, 
4820: 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a 72 6f  sqlite_int64 *ro
4830: 77 49 64 29 0d 0a 7b 0d 0a 20 20 69 66 20 28 21  wId)..{..  if (!
4840: 72 6f 77 49 64 29 20 72 65 74 75 72 6e 3b 0d 0a  rowId) return;..
4850: 20 20 2a 72 6f 77 49 64 20 3d 20 73 71 6c 69 74    *rowId = sqlit
4860: 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
4870: 6f 77 69 64 28 64 62 29 3b 0d 0a 7d 0d 0a 0d 0a  owid(db);..}....
4880: 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69 64 20  SQLITE_API void 
4890: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 6d  WINAPI sqlite3_m
48a0: 65 6d 6f 72 79 5f 75 73 65 64 5f 69 6e 74 65 72  emory_used_inter
48b0: 6f 70 28 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  op(sqlite_int64 
48c0: 2a 6e 42 79 74 65 73 29 0d 0a 7b 0d 0a 20 20 69  *nBytes)..{..  i
48d0: 66 20 28 21 6e 42 79 74 65 73 29 20 72 65 74 75  f (!nBytes) retu
48e0: 72 6e 3b 0d 0a 20 20 2a 6e 42 79 74 65 73 20 3d  rn;..  *nBytes =
48f0: 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f   sqlite3_memory_
4900: 75 73 65 64 28 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51  used();..}....SQ
4910: 4c 49 54 45 5f 41 50 49 20 76 6f 69 64 20 57 49  LITE_API void WI
4920: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 6d 65 6d  NAPI sqlite3_mem
4930: 6f 72 79 5f 68 69 67 68 77 61 74 65 72 5f 69 6e  ory_highwater_in
4940: 74 65 72 6f 70 28 69 6e 74 20 72 65 73 65 74 46  terop(int resetF
4950: 6c 61 67 2c 20 73 71 6c 69 74 65 5f 69 6e 74 36  lag, sqlite_int6
4960: 34 20 2a 6e 42 79 74 65 73 29 0d 0a 7b 0d 0a 20  4 *nBytes)..{.. 
4970: 20 69 66 20 28 21 6e 42 79 74 65 73 29 20 72 65   if (!nBytes) re
4980: 74 75 72 6e 3b 0d 0a 20 20 2a 6e 42 79 74 65 73  turn;..  *nBytes
4990: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72   = sqlite3_memor
49a0: 79 5f 68 69 67 68 77 61 74 65 72 28 72 65 73 65  y_highwater(rese
49b0: 74 46 6c 61 67 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51  tFlag);..}....SQ
49c0: 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 75  LITE_API const u
49d0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 20 57  nsigned char * W
49e0: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f  INAPI sqlite3_co
49f0: 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f  lumn_text_intero
4a00: 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  p(sqlite3_stmt *
4a10: 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20  stmt, int iCol, 
4a20: 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20  int *plen)..{.. 
4a30: 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
4a40: 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73 71 6c  char *pval = sql
4a50: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
4a60: 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20  (stmt, iCol);.. 
4a70: 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e   if (plen) *plen
4a80: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
4a90: 6e 5f 62 79 74 65 73 28 73 74 6d 74 2c 20 69 43  n_bytes(stmt, iC
4aa0: 6f 6c 29 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70  ol);..  return p
4ab0: 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  val;..}....SQLIT
4ac0: 45 5f 41 50 49 20 63 6f 6e 73 74 20 76 6f 69 64  E_API const void
4ad0: 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65   * WINAPI sqlite
4ae0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 5f  3_column_text16_
4af0: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f  interop(sqlite3_
4b00: 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20  stmt *stmt, int 
4b10: 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29  iCol, int *plen)
4b20: 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 76 6f 69  ..{..  const voi
4b30: 64 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65  d *pval = sqlite
4b40: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28  3_column_text16(
4b50: 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20  stmt, iCol);..  
4b60: 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20  if (plen) *plen 
4b70: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
4b80: 5f 62 79 74 65 73 31 36 28 73 74 6d 74 2c 20 69  _bytes16(stmt, i
4b90: 43 6f 6c 29 3b 0d 0a 20 20 72 65 74 75 72 6e 20  Col);..  return 
4ba0: 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49  pval;..}....SQLI
4bb0: 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41 50  TE_API int WINAP
4bc0: 49 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  I sqlite3_finali
4bd0: 7a 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  ze_interop(sqlit
4be0: 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 29 0d 0a  e3_stmt *stmt)..
4bf0: 7b 0d 0a 20 20 69 6e 74 20 72 65 74 3b 0d 0a 23  {..  int ret;..#
4c00: 69 66 20 21 64 65 66 69 6e 65 64 28 49 4e 54 45  if !defined(INTE
4c10: 52 4f 50 5f 4c 45 47 41 43 59 5f 43 4c 4f 53 45  ROP_LEGACY_CLOSE
4c20: 29 20 26 26 20 53 51 4c 49 54 45 5f 56 45 52 53  ) && SQLITE_VERS
4c30: 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30  ION_NUMBER >= 30
4c40: 30 37 30 31 34 0d 0a 0d 0a 23 69 66 20 64 65 66  07014....#if def
4c50: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42  ined(INTEROP_DEB
4c60: 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f  UG) && (INTEROP_
4c70: 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f  DEBUG & INTEROP_
4c80: 44 45 42 55 47 5f 46 49 4e 41 4c 49 5a 45 29 0d  DEBUG_FINALIZE).
4c90: 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64  .  Vdbe *p = (Vd
4ca0: 62 65 20 2a 29 73 74 6d 74 3b 0d 0a 20 20 73 71  be *)stmt;..  sq
4cb0: 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 20 3f 20  lite3 *db = p ? 
4cc0: 70 2d 3e 64 62 20 3a 20 30 3b 0d 0a 20 20 73 71  p->db : 0;..  sq
4cd0: 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75  lite3InteropDebu
4ce0: 67 28 22 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  g("sqlite3_final
4cf0: 69 7a 65 5f 69 6e 74 65 72 6f 70 28 29 3a 20 63  ize_interop(): c
4d00: 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f 66  alling sqlite3_f
4d10: 69 6e 61 6c 69 7a 65 28 25 70 2c 20 25 70 29 2e  inalize(%p, %p).
4d20: 2e 2e 5c 6e 22 2c 20 64 62 2c 20 73 74 6d 74 29  ..\n", db, stmt)
4d30: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72  ;..#endif....  r
4d40: 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e  et = sqlite3_fin
4d50: 61 6c 69 7a 65 28 73 74 6d 74 29 3b 0d 0a 0d 0a  alize(stmt);....
4d60: 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45  #if defined(INTE
4d70: 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28 49  ROP_DEBUG) && (I
4d80: 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49  NTEROP_DEBUG & I
4d90: 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 46 49 4e  NTEROP_DEBUG_FIN
4da0: 41 4c 49 5a 45 29 0d 0a 20 20 73 71 6c 69 74 65  ALIZE)..  sqlite
4db0: 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73  3InteropDebug("s
4dc0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 5f  qlite3_finalize_
4dd0: 69 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c 69 74  interop(): sqlit
4de0: 65 33 5f 66 69 6e 61 6c 69 7a 65 28 25 70 2c 20  e3_finalize(%p, 
4df0: 25 70 29 20 72 65 74 75 72 6e 65 64 20 25 64 2e  %p) returned %d.
4e00: 5c 6e 22 2c 20 64 62 2c 20 73 74 6d 74 2c 20 72  \n", db, stmt, r
4e10: 65 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  et);..#endif....
4e20: 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 23    return ret;..#
4e30: 65 6c 73 65 0d 0a 20 20 56 64 62 65 20 2a 70 3b  else..  Vdbe *p;
4e40: 0d 0a 20 20 72 65 74 20 3d 20 53 51 4c 49 54 45  ..  ret = SQLITE
4e50: 5f 4f 4b 3b 0d 0a 0d 0a 20 20 70 20 3d 20 28 56  _OK;....  p = (V
4e60: 64 62 65 20 2a 29 73 74 6d 74 3b 0d 0a 20 20 69  dbe *)stmt;..  i
4e70: 66 20 28 70 29 0d 0a 20 20 7b 0d 0a 20 20 20 20  f (p)..  {..    
4e80: 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d  sqlite3 *db = p-
4e90: 3e 64 62 3b 0d 0a 0d 0a 20 20 20 20 69 66 20 28  >db;....    if (
4ea0: 64 62 20 21 3d 20 4e 55 4c 4c 29 0d 0a 20 20 20  db != NULL)..   
4eb0: 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
4ec0: 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78  _enter(db->mutex
4ed0: 29 3b 0d 0a 0d 0a 20 20 20 20 69 66 20 28 28 70  );....    if ((p
4ee0: 2d 3e 6d 61 67 69 63 20 3d 3d 20 56 44 42 45 5f  ->magic == VDBE_
4ef0: 4d 41 47 49 43 5f 44 45 41 44 29 20 26 26 20 28  MAGIC_DEAD) && (
4f00: 64 62 20 3d 3d 20 4e 55 4c 4c 29 29 0d 0a 20 20  db == NULL))..  
4f10: 20 20 7b 0d 0a 20 20 20 20 20 20 73 71 6c 69 74    {..      sqlit
4f20: 65 33 44 62 46 72 65 65 5f 69 6e 74 65 72 6f 70  e3DbFree_interop
4f30: 28 64 62 2c 20 70 29 3b 0d 0a 20 20 20 20 7d 0d  (db, p);..    }.
4f40: 0a 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 7b  .    else..    {
4f50: 0d 0a 20 20 20 20 20 20 72 65 74 20 3d 20 73 71  ..      ret = sq
4f60: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 73  lite3_finalize(s
4f70: 74 6d 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  tmt);..    }....
4f80: 20 20 20 20 69 66 20 28 64 62 20 21 3d 20 4e 55      if (db != NU
4f90: 4c 4c 29 0d 0a 20 20 20 20 20 20 73 71 6c 69 74  LL)..      sqlit
4fa0: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64  e3_mutex_leave(d
4fb0: 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 7d 0d  b->mutex);..  }.
4fc0: 0a 0d 0a 20 20 72 65 74 75 72 6e 20 72 65 74 3b  ...  return ret;
4fd0: 0d 0a 23 65 6e 64 69 66 0d 0a 7d 0d 0a 0d 0a 53  ..#endif..}....S
4fe0: 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49  QLITE_API int WI
4ff0: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 62 61 63  NAPI sqlite3_bac
5000: 6b 75 70 5f 66 69 6e 69 73 68 5f 69 6e 74 65 72  kup_finish_inter
5010: 6f 70 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  op(sqlite3_backu
5020: 70 20 2a 70 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20  p *p)..{..  int 
5030: 72 65 74 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69  ret;....#if defi
5040: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  ned(INTEROP_DEBU
5050: 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44  G) && (INTEROP_D
5060: 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44  EBUG & INTEROP_D
5070: 45 42 55 47 5f 42 41 43 4b 55 50 5f 46 49 4e 49  EBUG_BACKUP_FINI
5080: 53 48 29 0d 0a 20 20 73 71 6c 69 74 65 33 2a 20  SH)..  sqlite3* 
5090: 70 44 65 73 74 44 62 20 3d 20 70 20 3f 20 70 2d  pDestDb = p ? p-
50a0: 3e 70 44 65 73 74 44 62 20 3a 20 30 3b 0d 0a 20  >pDestDb : 0;.. 
50b0: 20 73 71 6c 69 74 65 33 2a 20 70 53 72 63 44 62   sqlite3* pSrcDb
50c0: 20 3d 20 70 20 3f 20 70 2d 3e 70 53 72 63 44 62   = p ? p->pSrcDb
50d0: 20 3a 20 30 3b 0d 0a 20 20 73 71 6c 69 74 65 33   : 0;..  sqlite3
50e0: 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71  InteropDebug("sq
50f0: 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e  lite3_backup_fin
5100: 69 73 68 5f 69 6e 74 65 72 6f 70 28 29 3a 20 63  ish_interop(): c
5110: 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f 62  alling sqlite3_b
5120: 61 63 6b 75 70 5f 66 69 6e 69 73 68 28 25 70 2c  ackup_finish(%p,
5130: 20 25 70 2c 20 25 70 29 2e 2e 2e 5c 6e 22 2c 20   %p, %p)...\n", 
5140: 70 44 65 73 74 44 62 2c 20 70 53 72 63 44 62 2c  pDestDb, pSrcDb,
5150: 20 70 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a   p);..#endif....
5160: 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33 5f    ret = sqlite3_
5170: 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28 70 29  backup_finish(p)
5180: 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64  ;....#if defined
5190: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20  (INTEROP_DEBUG) 
51a0: 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  && (INTEROP_DEBU
51b0: 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55  G & INTEROP_DEBU
51c0: 47 5f 42 41 43 4b 55 50 5f 46 49 4e 49 53 48 29  G_BACKUP_FINISH)
51d0: 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72  ..  sqlite3Inter
51e0: 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33  opDebug("sqlite3
51f0: 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 5f 69  _backup_finish_i
5200: 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c 69 74 65  nterop(): sqlite
5210: 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28  3_backup_finish(
5220: 25 70 2c 20 25 70 2c 20 25 70 29 20 72 65 74 75  %p, %p, %p) retu
5230: 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 70 44 65  rned %d.\n", pDe
5240: 73 74 44 62 2c 20 70 53 72 63 44 62 2c 20 70 2c  stDb, pSrcDb, p,
5250: 20 72 65 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a   ret);..#endif..
5260: 0d 0a 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0d  ..  return ret;.
5270: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
5280: 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69   int WINAPI sqli
5290: 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65 72 6f  te3_reset_intero
52a0: 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  p(sqlite3_stmt *
52b0: 73 74 6d 74 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20  stmt)..{..  int 
52c0: 72 65 74 3b 0d 0a 23 69 66 20 21 64 65 66 69 6e  ret;..#if !defin
52d0: 65 64 28 49 4e 54 45 52 4f 50 5f 4c 45 47 41 43  ed(INTEROP_LEGAC
52e0: 59 5f 43 4c 4f 53 45 29 20 26 26 20 53 51 4c 49  Y_CLOSE) && SQLI
52f0: 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45  TE_VERSION_NUMBE
5300: 52 20 3e 3d 20 33 30 30 37 30 31 34 0d 0a 0d 0a  R >= 3007014....
5310: 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45  #if defined(INTE
5320: 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28 49  ROP_DEBUG) && (I
5330: 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49  NTEROP_DEBUG & I
5340: 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 52 45 53  NTEROP_DEBUG_RES
5350: 45 54 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e  ET)..  sqlite3In
5360: 74 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69  teropDebug("sqli
5370: 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65 72 6f  te3_reset_intero
5380: 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73 71 6c  p(): calling sql
5390: 69 74 65 33 5f 72 65 73 65 74 28 25 70 29 2e 2e  ite3_reset(%p)..
53a0: 2e 5c 6e 22 2c 20 73 74 6d 74 29 3b 0d 0a 23 65  .\n", stmt);..#e
53b0: 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 20 3d 20  ndif....  ret = 
53c0: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 73 74  sqlite3_reset(st
53d0: 6d 74 29 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69  mt);....#if defi
53e0: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  ned(INTEROP_DEBU
53f0: 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44  G) && (INTEROP_D
5400: 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44  EBUG & INTEROP_D
5410: 45 42 55 47 5f 52 45 53 45 54 29 0d 0a 20 20 73  EBUG_RESET)..  s
5420: 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62  qlite3InteropDeb
5430: 75 67 28 22 73 71 6c 69 74 65 33 5f 72 65 73 65  ug("sqlite3_rese
5440: 74 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c  t_interop(): sql
5450: 69 74 65 33 5f 72 65 73 65 74 28 25 70 29 20 72  ite3_reset(%p) r
5460: 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20  eturned %d.\n", 
5470: 73 74 6d 74 2c 20 72 65 74 29 3b 0d 0a 23 65 6e  stmt, ret);..#en
5480: 64 69 66 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20  dif....  return 
5490: 72 65 74 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 69  ret;..#else..  i
54a0: 66 20 28 73 74 6d 74 20 26 26 20 28 28 56 64 62  f (stmt && ((Vdb
54b0: 65 20 2a 29 73 74 6d 74 29 2d 3e 6d 61 67 69 63  e *)stmt)->magic
54c0: 20 3d 3d 20 56 44 42 45 5f 4d 41 47 49 43 5f 44   == VDBE_MAGIC_D
54d0: 45 41 44 29 20 72 65 74 75 72 6e 20 53 51 4c 49  EAD) return SQLI
54e0: 54 45 5f 53 43 48 45 4d 41 3b 0d 0a 20 20 72 65  TE_SCHEMA;..  re
54f0: 74 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 73 65  t = sqlite3_rese
5500: 74 28 73 74 6d 74 29 3b 0d 0a 20 20 72 65 74 75  t(stmt);..  retu
5510: 72 6e 20 72 65 74 3b 0d 0a 23 65 6e 64 69 66 0d  rn ret;..#endif.
5520: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
5530: 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69   int WINAPI sqli
5540: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
5550: 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  ion_interop(sqli
5560: 74 65 33 20 2a 70 73 71 6c 2c 20 63 6f 6e 73 74  te3 *psql, const
5570: 20 63 68 61 72 20 2a 7a 46 75 6e 63 74 69 6f 6e   char *zFunction
5580: 4e 61 6d 65 2c 20 69 6e 74 20 6e 41 72 67 2c 20  Name, int nArg, 
5590: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 20 76 6f  int eTextRep, vo
55a0: 69 64 20 2a 70 76 55 73 65 72 2c 20 53 51 4c 49  id *pvUser, SQLI
55b0: 54 45 55 53 45 52 46 55 4e 43 20 66 75 6e 63 2c  TEUSERFUNC func,
55c0: 20 53 51 4c 49 54 45 55 53 45 52 46 55 4e 43 20   SQLITEUSERFUNC 
55d0: 66 75 6e 63 73 74 65 70 2c 20 53 51 4c 49 54 45  funcstep, SQLITE
55e0: 46 55 4e 43 46 49 4e 41 4c 20 66 75 6e 63 66 69  FUNCFINAL funcfi
55f0: 6e 61 6c 2c 20 69 6e 74 20 6e 65 65 64 43 6f 6c  nal, int needCol
5600: 6c 53 65 71 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20  lSeq)..{..  int 
5610: 6e 3b 0d 0a 0d 0a 20 20 69 66 20 28 65 54 65 78  n;....  if (eTex
5620: 74 52 65 70 20 3d 3d 20 53 51 4c 49 54 45 5f 55  tRep == SQLITE_U
5630: 54 46 31 36 29 0d 0a 20 20 20 20 65 54 65 78 74  TF16)..    eText
5640: 52 65 70 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  Rep = SQLITE_UTF
5650: 31 36 4e 41 54 49 56 45 3b 0d 0a 0d 0a 20 20 6e  16NATIVE;....  n
5660: 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
5670: 65 5f 66 75 6e 63 74 69 6f 6e 28 70 73 71 6c 2c  e_function(psql,
5680: 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20   zFunctionName, 
5690: 6e 41 72 67 2c 20 65 54 65 78 74 52 65 70 2c 20  nArg, eTextRep, 
56a0: 70 76 55 73 65 72 2c 20 66 75 6e 63 2c 20 66 75  pvUser, func, fu
56b0: 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61  ncstep, funcfina
56c0: 6c 29 3b 0d 0a 20 20 69 66 20 28 6e 20 3d 3d 20  l);..  if (n == 
56d0: 53 51 4c 49 54 45 5f 4f 4b 29 0d 0a 20 20 7b 0d  SQLITE_OK)..  {.
56e0: 0a 20 20 20 20 69 66 20 28 6e 65 65 64 43 6f 6c  .    if (needCol
56f0: 6c 53 65 71 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  lSeq)..    {..  
5700: 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75      FuncDef *pFu
5710: 6e 63 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  nc = sqlite3Find
5720: 46 75 6e 63 74 69 6f 6e 28 70 73 71 6c 2c 20 7a  Function(psql, z
5730: 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 73 74  FunctionName, st
5740: 72 6c 65 6e 28 7a 46 75 6e 63 74 69 6f 6e 4e 61  rlen(zFunctionNa
5750: 6d 65 29 2c 20 6e 41 72 67 2c 20 65 54 65 78 74  me), nArg, eText
5760: 52 65 70 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20  Rep, 0);..      
5770: 69 66 28 20 70 46 75 6e 63 20 29 0d 0a 20 20 20  if( pFunc )..   
5780: 20 20 20 7b 0d 0a 23 69 66 20 53 51 4c 49 54 45     {..#if SQLITE
5790: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20  _VERSION_NUMBER 
57a0: 3e 3d 20 33 30 30 38 30 30 31 0d 0a 20 20 20 20  >= 3008001..    
57b0: 20 20 20 20 70 46 75 6e 63 2d 3e 66 75 6e 63 46      pFunc->funcF
57c0: 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 46  lags |= SQLITE_F
57d0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 3b 0d 0a 23  UNC_NEEDCOLL;..#
57e0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 70 46  else..        pF
57f0: 75 6e 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51  unc->flags |= SQ
5800: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
5810: 4c 4c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  LL;..#endif..   
5820: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d     }..    }..  }
5830: 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0d  ....  return n;.
5840: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
5850: 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c   void WINAPI sql
5860: 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c  ite3_value_doubl
5870: 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  e_interop(sqlite
5880: 33 5f 76 61 6c 75 65 20 2a 70 76 61 6c 2c 20 64  3_value *pval, d
5890: 6f 75 62 6c 65 20 2a 76 61 6c 29 0d 0a 7b 0d 0a  ouble *val)..{..
58a0: 20 20 69 66 20 28 21 76 61 6c 29 20 72 65 74 75    if (!val) retu
58b0: 72 6e 3b 0d 0a 20 20 2a 76 61 6c 20 3d 20 73 71  rn;..  *val = sq
58c0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62  lite3_value_doub
58d0: 6c 65 28 70 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a  le(pval);..}....
58e0: 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69 64 20  SQLITE_API void 
58f0: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 76  WINAPI sqlite3_v
5900: 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e 74 65 72  alue_int64_inter
5910: 6f 70 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  op(sqlite3_value
5920: 20 2a 70 76 61 6c 2c 20 73 71 6c 69 74 65 5f 69   *pval, sqlite_i
5930: 6e 74 36 34 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 20  nt64 *val)..{.. 
5940: 20 69 66 20 28 21 76 61 6c 29 20 72 65 74 75 72   if (!val) retur
5950: 6e 3b 0d 0a 20 20 2a 76 61 6c 20 3d 20 73 71 6c  n;..  *val = sql
5960: 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34  ite3_value_int64
5970: 28 70 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51  (pval);..}....SQ
5980: 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 75  LITE_API const u
5990: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 20 57  nsigned char * W
59a0: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 76 61  INAPI sqlite3_va
59b0: 6c 75 65 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70  lue_text_interop
59c0: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
59d0: 76 61 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d  val, int *plen).
59e0: 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 75 6e 73 69  .{..  const unsi
59f0: 67 6e 65 64 20 63 68 61 72 20 2a 70 76 61 6c 20  gned char *pval 
5a00: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
5a10: 74 65 78 74 28 76 61 6c 29 3b 0d 0a 20 20 69 66  text(val);..  if
5a20: 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20   (plen) *plen = 
5a30: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
5a40: 74 65 73 28 76 61 6c 29 3b 0d 0a 20 20 72 65 74  tes(val);..  ret
5a50: 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a  urn pval;..}....
5a60: 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74  SQLITE_API const
5a70: 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73   void * WINAPI s
5a80: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
5a90: 74 31 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  t16_interop(sqli
5aa0: 74 65 33 5f 76 61 6c 75 65 20 2a 76 61 6c 2c 20  te3_value *val, 
5ab0: 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20  int *plen)..{.. 
5ac0: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 61   const void *pva
5ad0: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  l = sqlite3_valu
5ae0: 65 5f 74 65 78 74 31 36 28 76 61 6c 29 3b 0d 0a  e_text16(val);..
5af0: 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65    if (plen) *ple
5b00: 6e 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  n = sqlite3_valu
5b10: 65 5f 62 79 74 65 73 31 36 28 76 61 6c 29 3b 0d  e_bytes16(val);.
5b20: 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d  .  return pval;.
5b30: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
5b40: 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c   void WINAPI sql
5b50: 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62  ite3_result_doub
5b60: 6c 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  le_interop(sqlit
5b70: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 63 74 78  e3_context *pctx
5b80: 2c 20 64 6f 75 62 6c 65 20 2a 76 61 6c 29 0d 0a  , double *val)..
5b90: 7b 0d 0a 20 20 69 66 20 28 21 76 61 6c 29 20 72  {..  if (!val) r
5ba0: 65 74 75 72 6e 3b 0d 0a 20 20 73 71 6c 69 74 65  eturn;..  sqlite
5bb0: 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28  3_result_double(
5bc0: 70 63 74 78 2c 20 2a 76 61 6c 29 3b 0d 0a 7d 0d  pctx, *val);..}.
5bd0: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76 6f  ...SQLITE_API vo
5be0: 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  id WINAPI sqlite
5bf0: 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69  3_result_int64_i
5c00: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 63  nterop(sqlite3_c
5c10: 6f 6e 74 65 78 74 20 2a 70 63 74 78 2c 20 73 71  ontext *pctx, sq
5c20: 6c 69 74 65 5f 69 6e 74 36 34 20 2a 76 61 6c 29  lite_int64 *val)
5c30: 0d 0a 7b 0d 0a 20 20 69 66 20 28 21 76 61 6c 29  ..{..  if (!val)
5c40: 20 72 65 74 75 72 6e 3b 0d 0a 20 20 73 71 6c 69   return;..  sqli
5c50: 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34  te3_result_int64
5c60: 28 70 63 74 78 2c 20 2a 76 61 6c 29 3b 0d 0a 7d  (pctx, *val);..}
5c70: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69  ....SQLITE_API i
5c80: 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  nt WINAPI sqlite
5c90: 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f  3_context_collco
5ca0: 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 73 71  mpare_interop(sq
5cb0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63  lite3_context *c
5cc0: 74 78 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  tx, const void *
5cd0: 70 31 2c 20 69 6e 74 20 70 31 6c 65 6e 2c 20 63  p1, int p1len, c
5ce0: 6f 6e 73 74 20 76 6f 69 64 20 2a 70 32 2c 20 69  onst void *p2, i
5cf0: 6e 74 20 70 32 6c 65 6e 29 0d 0a 7b 0d 0a 23 69  nt p2len)..{..#i
5d00: 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
5d10: 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 38 30  _NUMBER >= 30080
5d20: 30 37 0d 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70  07..  CollSeq *p
5d30: 43 6f 6c 6c 20 3d 20 63 74 78 20 3f 20 73 71 6c  Coll = ctx ? sql
5d40: 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53  ite3GetFuncCollS
5d50: 65 71 28 63 74 78 29 20 3a 20 30 3b 0d 0a 23 65  eq(ctx) : 0;..#e
5d60: 6c 73 65 0d 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  lse..  CollSeq *
5d70: 70 43 6f 6c 6c 20 3d 20 63 74 78 20 3f 20 63 74  pColl = ctx ? ct
5d80: 78 2d 3e 70 43 6f 6c 6c 20 3a 20 30 3b 0d 0a 23  x->pColl : 0;..#
5d90: 65 6e 64 69 66 0d 0a 20 20 69 66 20 28 21 63 74  endif..  if (!ct
5da0: 78 20 7c 7c 20 21 63 74 78 2d 3e 70 46 75 6e 63  x || !ctx->pFunc
5db0: 29 20 72 65 74 75 72 6e 20 34 3b 20 2f 2a 20 45  ) return 4; /* E
5dc0: 52 52 4f 52 20 2a 2f 0d 0a 20 20 69 66 20 28 21  RROR */..  if (!
5dd0: 70 43 6f 6c 6c 20 7c 7c 20 21 70 43 6f 6c 6c 2d  pColl || !pColl-
5de0: 3e 78 43 6d 70 29 20 72 65 74 75 72 6e 20 33 3b  >xCmp) return 3;
5df0: 20 2f 2a 20 45 52 52 4f 52 20 2a 2f 0d 0a 23 69   /* ERROR */..#i
5e00: 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
5e10: 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 38 30  _NUMBER >= 30080
5e20: 30 31 0d 0a 20 20 69 66 20 28 28 63 74 78 2d 3e  01..  if ((ctx->
5e30: 70 46 75 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73  pFunc->funcFlags
5e40: 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e   & SQLITE_FUNC_N
5e50: 45 45 44 43 4f 4c 4c 29 20 3d 3d 20 30 29 20 72  EEDCOLL) == 0) r
5e60: 65 74 75 72 6e 20 32 3b 20 2f 2a 20 45 52 52 4f  eturn 2; /* ERRO
5e70: 52 20 2a 2f 0d 0a 23 65 6c 73 65 0d 0a 20 20 69  R */..#else..  i
5e80: 66 20 28 28 63 74 78 2d 3e 70 46 75 6e 63 2d 3e  f ((ctx->pFunc->
5e90: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46  flags & SQLITE_F
5ea0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 20 3d 3d  UNC_NEEDCOLL) ==
5eb0: 20 30 29 20 72 65 74 75 72 6e 20 32 3b 20 2f 2a   0) return 2; /*
5ec0: 20 45 52 52 4f 52 20 2a 2f 0d 0a 23 65 6e 64 69   ERROR */..#endi
5ed0: 66 0d 0a 20 20 72 65 74 75 72 6e 20 70 43 6f 6c  f..  return pCol
5ee0: 6c 2d 3e 78 43 6d 70 28 70 43 6f 6c 6c 2d 3e 70  l->xCmp(pColl->p
5ef0: 55 73 65 72 2c 20 70 31 6c 65 6e 2c 20 70 31 2c  User, p1len, p1,
5f00: 20 70 32 6c 65 6e 2c 20 70 32 29 3b 0d 0a 7d 0d   p2len, p2);..}.
5f10: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f  ...SQLITE_API co
5f20: 6e 73 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50  nst char * WINAP
5f30: 49 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  I sqlite3_contex
5f40: 74 5f 63 6f 6c 6c 73 65 71 5f 69 6e 74 65 72 6f  t_collseq_intero
5f50: 70 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  p(sqlite3_contex
5f60: 74 20 2a 63 74 78 2c 20 69 6e 74 20 2a 70 74 79  t *ctx, int *pty
5f70: 70 65 2c 20 69 6e 74 20 2a 65 6e 63 2c 20 69 6e  pe, int *enc, in
5f80: 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 23 69 66  t *plen)..{..#if
5f90: 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f   SQLITE_VERSION_
5fa0: 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 38 30 30  NUMBER >= 300800
5fb0: 37 0d 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43  7..  CollSeq *pC
5fc0: 6f 6c 6c 20 3d 20 63 74 78 20 3f 20 73 71 6c 69  oll = ctx ? sqli
5fd0: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
5fe0: 71 28 63 74 78 29 20 3a 20 30 3b 0d 0a 23 65 6c  q(ctx) : 0;..#el
5ff0: 73 65 0d 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70  se..  CollSeq *p
6000: 43 6f 6c 6c 20 3d 20 63 74 78 20 3f 20 63 74 78  Coll = ctx ? ctx
6010: 2d 3e 70 43 6f 6c 6c 20 3a 20 30 3b 0d 0a 23 65  ->pColl : 0;..#e
6020: 6e 64 69 66 0d 0a 20 20 69 66 20 28 70 74 79 70  ndif..  if (ptyp
6030: 65 29 20 2a 70 74 79 70 65 20 3d 20 30 3b 0d 0a  e) *ptype = 0;..
6040: 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65    if (plen) *ple
6050: 6e 20 3d 20 30 3b 0d 0a 20 20 69 66 20 28 65 6e  n = 0;..  if (en
6060: 63 29 20 2a 65 6e 63 20 3d 20 30 3b 0d 0a 0d 0a  c) *enc = 0;....
6070: 20 20 69 66 20 28 21 63 74 78 20 7c 7c 20 21 63    if (!ctx || !c
6080: 74 78 2d 3e 70 46 75 6e 63 29 20 72 65 74 75 72  tx->pFunc) retur
6090: 6e 20 4e 55 4c 4c 3b 0d 0a 23 69 66 20 53 51 4c  n NULL;..#if SQL
60a0: 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  ITE_VERSION_NUMB
60b0: 45 52 20 3e 3d 20 33 30 30 38 30 30 31 0d 0a 20  ER >= 3008001.. 
60c0: 20 69 66 20 28 28 63 74 78 2d 3e 70 46 75 6e 63   if ((ctx->pFunc
60d0: 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26 20 53 51  ->funcFlags & SQ
60e0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
60f0: 4c 4c 29 20 3d 3d 20 30 29 20 72 65 74 75 72 6e  LL) == 0) return
6100: 20 4e 55 4c 4c 3b 0d 0a 23 65 6c 73 65 0d 0a 20   NULL;..#else.. 
6110: 20 69 66 20 28 28 63 74 78 2d 3e 70 46 75 6e 63   if ((ctx->pFunc
6120: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
6130: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 20  _FUNC_NEEDCOLL) 
6140: 3d 3d 20 30 29 20 72 65 74 75 72 6e 20 4e 55 4c  == 0) return NUL
6150: 4c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  L;..#endif....  
6160: 69 66 20 28 70 43 6f 6c 6c 29 0d 0a 20 20 7b 0d  if (pColl)..  {.
6170: 0a 20 20 20 20 69 66 20 28 65 6e 63 29 20 2a 65  .    if (enc) *e
6180: 6e 63 20 3d 20 70 43 6f 6c 6c 2d 3e 65 6e 63 3b  nc = pColl->enc;
6190: 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52  ..#if SQLITE_VER
61a0: 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3c 20 33 30  SION_NUMBER < 30
61b0: 30 37 30 31 30 0d 0a 20 20 20 20 69 66 20 28 70  07010..    if (p
61c0: 74 79 70 65 29 20 2a 70 74 79 70 65 20 3d 20 70  type) *ptype = p
61d0: 43 6f 6c 6c 2d 3e 74 79 70 65 3b 0d 0a 23 65 6e  Coll->type;..#en
61e0: 64 69 66 0d 0a 20 20 20 20 69 66 20 28 70 6c 65  dif..    if (ple
61f0: 6e 29 20 2a 70 6c 65 6e 20 3d 20 70 43 6f 6c 6c  n) *plen = pColl
6200: 2d 3e 7a 4e 61 6d 65 20 3f 20 73 74 72 6c 65 6e  ->zName ? strlen
6210: 28 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 29 20 3a  (pColl->zName) :
6220: 20 30 3b 0d 0a 0d 0a 20 20 20 20 72 65 74 75 72   0;....    retur
6230: 6e 20 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 3b 0d  n pColl->zName;.
6240: 0a 20 20 7d 0d 0a 20 20 72 65 74 75 72 6e 20 4e  .  }..  return N
6250: 55 4c 4c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  ULL;..}....SQLIT
6260: 45 5f 41 50 49 20 63 6f 6e 73 74 20 63 68 61 72  E_API const char
6270: 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65   * WINAPI sqlite
6280: 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73  3_column_databas
6290: 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73  e_name_interop(s
62a0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d  qlite3_stmt *stm
62b0: 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74  t, int iCol, int
62c0: 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f   *plen)..{..  co
62d0: 6e 73 74 20 63 68 61 72 20 2a 70 76 61 6c 20 3d  nst char *pval =
62e0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
62f0: 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 28 73 74  database_name(st
6300: 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 69 66  mt, iCol);..  if
6310: 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20   (plen) *plen = 
6320: 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e 28 70 76  pval ? strlen(pv
6330: 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75  al) : 0;..  retu
6340: 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53  rn pval;..}....S
6350: 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20  QLITE_API const 
6360: 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71  void * WINAPI sq
6370: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74  lite3_column_dat
6380: 61 62 61 73 65 5f 6e 61 6d 65 31 36 5f 69 6e 74  abase_name16_int
6390: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
63a0: 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f  t *stmt, int iCo
63b0: 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b  l, int *plen)..{
63c0: 0d 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ..  const void *
63d0: 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  pval = sqlite3_c
63e0: 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e  olumn_database_n
63f0: 61 6d 65 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c  ame16(stmt, iCol
6400: 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20  );..  if (plen) 
6410: 2a 70 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20 77  *plen = pval ? w
6420: 63 73 6c 65 6e 28 28 77 63 68 61 72 5f 74 20 2a  cslen((wchar_t *
6430: 29 70 76 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28  )pval) * sizeof(
6440: 77 63 68 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 20  wchar_t) : 0;.. 
6450: 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d   return pval;..}
6460: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63  ....SQLITE_API c
6470: 6f 6e 73 74 20 63 68 61 72 20 2a 20 57 49 4e 41  onst char * WINA
6480: 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  PI sqlite3_colum
6490: 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74  n_table_name_int
64a0: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
64b0: 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f  t *stmt, int iCo
64c0: 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b  l, int *plen)..{
64d0: 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ..  const char *
64e0: 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  pval = sqlite3_c
64f0: 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
6500: 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20  (stmt, iCol);.. 
6510: 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e   if (plen) *plen
6520: 20 3d 20 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e   = pval ? strlen
6530: 28 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72  (pval) : 0;..  r
6540: 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a  eturn pval;..}..
6550: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e  ..SQLITE_API con
6560: 73 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49  st void * WINAPI
6570: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
6580: 74 61 62 6c 65 5f 6e 61 6d 65 31 36 5f 69 6e 74  table_name16_int
6590: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
65a0: 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f  t *stmt, int iCo
65b0: 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b  l, int *plen)..{
65c0: 0d 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ..  const void *
65d0: 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  pval = sqlite3_c
65e0: 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
65f0: 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d  16(stmt, iCol);.
6600: 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c  .  if (plen) *pl
6610: 65 6e 20 3d 20 70 76 61 6c 20 3f 20 77 63 73 6c  en = pval ? wcsl
6620: 65 6e 28 28 77 63 68 61 72 5f 74 20 2a 29 70 76  en((wchar_t *)pv
6630: 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77 63 68  al) * sizeof(wch
6640: 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 20 20 72 65  ar_t) : 0;..  re
6650: 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d  turn pval;..}...
6660: 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73  .SQLITE_API cons
6670: 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49 20  t char * WINAPI 
6680: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
6690: 72 69 67 69 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72  rigin_name_inter
66a0: 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  op(sqlite3_stmt 
66b0: 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c  *stmt, int iCol,
66c0: 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a   int *plen)..{..
66d0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 76    const char *pv
66e0: 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  al = sqlite3_col
66f0: 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 28  umn_origin_name(
6700: 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20  stmt, iCol);..  
6710: 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20  if (plen) *plen 
6720: 3d 20 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e 28  = pval ? strlen(
6730: 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65  pval) : 0;..  re
6740: 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d  turn pval;..}...
6750: 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73  .SQLITE_API cons
6760: 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20  t void * WINAPI 
6770: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
6780: 72 69 67 69 6e 5f 6e 61 6d 65 31 36 5f 69 6e 74  rigin_name16_int
6790: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
67a0: 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f  t *stmt, int iCo
67b0: 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b  l, int *plen)..{
67c0: 0d 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ..  const void *
67d0: 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  pval = sqlite3_c
67e0: 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d  olumn_origin_nam
67f0: 65 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b  e16(stmt, iCol);
6800: 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70  ..  if (plen) *p
6810: 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20 77 63 73  len = pval ? wcs
6820: 6c 65 6e 28 28 77 63 68 61 72 5f 74 20 2a 29 70  len((wchar_t *)p
6830: 76 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77 63  val) * sizeof(wc
6840: 68 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 20 20 72  har_t) : 0;..  r
6850: 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a  eturn pval;..}..
6860: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74  ..SQLITE_API int
6870: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
6880: 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74  table_column_met
6890: 61 64 61 74 61 5f 69 6e 74 65 72 6f 70 28 73 71  adata_interop(sq
68a0: 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74  lite3 *db, const
68b0: 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d 65 2c 20   char *zDbName, 
68c0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 62  const char *zTab
68d0: 6c 65 4e 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68  leName, const ch
68e0: 61 72 20 2a 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 2c  ar *zColumnName,
68f0: 20 63 68 61 72 20 2a 2a 70 7a 44 61 74 61 54 79   char **pzDataTy
6900: 70 65 2c 20 63 68 61 72 20 2a 2a 70 7a 43 6f 6c  pe, char **pzCol
6910: 6c 53 65 71 2c 20 69 6e 74 20 2a 70 4e 6f 74 4e  lSeq, int *pNotN
6920: 75 6c 6c 2c 20 69 6e 74 20 2a 70 50 72 69 6d 61  ull, int *pPrima
6930: 72 79 4b 65 79 2c 20 69 6e 74 20 2a 70 41 75 74  ryKey, int *pAut
6940: 6f 69 6e 63 2c 20 69 6e 74 20 2a 70 64 74 4c 65  oinc, int *pdtLe
6950: 6e 2c 20 69 6e 74 20 2a 70 63 73 4c 65 6e 29 0d  n, int *pcsLen).
6960: 0a 7b 0d 0a 20 20 69 6e 74 20 6e 3b 0d 0a 0d 0a  .{..  int n;....
6970: 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 74 61    n = sqlite3_ta
6980: 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64  ble_column_metad
6990: 61 74 61 28 64 62 2c 20 7a 44 62 4e 61 6d 65 2c  ata(db, zDbName,
69a0: 20 7a 54 61 62 6c 65 4e 61 6d 65 2c 20 7a 43 6f   zTableName, zCo
69b0: 6c 75 6d 6e 4e 61 6d 65 2c 20 70 7a 44 61 74 61  lumnName, pzData
69c0: 54 79 70 65 2c 20 70 7a 43 6f 6c 6c 53 65 71 2c  Type, pzCollSeq,
69d0: 20 70 4e 6f 74 4e 75 6c 6c 2c 20 70 50 72 69 6d   pNotNull, pPrim
69e0: 61 72 79 4b 65 79 2c 20 70 41 75 74 6f 69 6e 63  aryKey, pAutoinc
69f0: 29 3b 0d 0a 0d 0a 20 20 69 66 20 28 70 64 74 4c  );....  if (pdtL
6a00: 65 6e 29 20 2a 70 64 74 4c 65 6e 20 3d 20 28 70  en) *pdtLen = (p
6a10: 7a 44 61 74 61 54 79 70 65 20 26 26 20 2a 70 7a  zDataType && *pz
6a20: 44 61 74 61 54 79 70 65 29 20 3f 20 73 74 72 6c  DataType) ? strl
6a30: 65 6e 28 2a 70 7a 44 61 74 61 54 79 70 65 29 20  en(*pzDataType) 
6a40: 3a 20 30 3b 0d 0a 20 20 69 66 20 28 70 63 73 4c  : 0;..  if (pcsL
6a50: 65 6e 29 20 2a 70 63 73 4c 65 6e 20 3d 20 28 70  en) *pcsLen = (p
6a60: 7a 43 6f 6c 6c 53 65 71 20 26 26 20 2a 70 7a 43  zCollSeq && *pzC
6a70: 6f 6c 6c 53 65 71 29 20 3f 20 73 74 72 6c 65 6e  ollSeq) ? strlen
6a80: 28 2a 70 7a 43 6f 6c 6c 53 65 71 29 20 3a 20 30  (*pzCollSeq) : 0
6a90: 3b 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 6e 3b  ;....  return n;
6aa0: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
6ab0: 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c  I int WINAPI sql
6ac0: 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d  ite3_index_colum
6ad0: 6e 5f 69 6e 66 6f 5f 69 6e 74 65 72 6f 70 28 73  n_info_interop(s
6ae0: 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73  qlite3 *db, cons
6af0: 74 20 63 68 61 72 20 2a 7a 44 62 2c 20 63 6f 6e  t char *zDb, con
6b00: 73 74 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 4e  st char *zIndexN
6b10: 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  ame, const char 
6b20: 2a 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 69 6e  *zColumnName, in
6b30: 74 20 2a 73 6f 72 74 4f 72 64 65 72 2c 20 69 6e  t *sortOrder, in
6b40: 74 20 2a 6f 6e 45 72 72 6f 72 2c 20 63 68 61 72  t *onError, char
6b50: 20 2a 2a 70 7a 43 6f 6c 6c 2c 20 69 6e 74 20 2a   **pzColl, int *
6b60: 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 49 6e 64 65  plen)..{..  Inde
6b70: 78 20 2a 70 49 64 78 3b 0d 0a 20 20 54 61 62 6c  x *pIdx;..  Tabl
6b80: 65 20 2a 70 54 61 62 3b 0d 0a 20 20 69 6e 74 20  e *pTab;..  int 
6b90: 6e 3b 0d 0a 0d 0a 20 20 69 66 20 28 21 64 62 29  n;....  if (!db)
6ba0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45   return SQLITE_E
6bb0: 52 52 4f 52 3b 0d 0a 20 20 73 71 6c 69 74 65 33  RROR;..  sqlite3
6bc0: 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d  _mutex_enter(db-
6bd0: 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 73 71 6c 69  >mutex);..  sqli
6be0: 74 65 33 42 74 72 65 65 45 6e 74 65 72 41 6c 6c  te3BtreeEnterAll
6bf0: 28 64 62 29 3b 0d 0a 0d 0a 20 20 70 49 64 78 20  (db);....  pIdx 
6c00: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64  = sqlite3FindInd
6c10: 65 78 28 64 62 2c 20 7a 49 6e 64 65 78 4e 61 6d  ex(db, zIndexNam
6c20: 65 2c 20 7a 44 62 29 3b 0d 0a 0d 0a 20 20 73 71  e, zDb);....  sq
6c30: 6c 69 74 65 33 42 74 72 65 65 4c 65 61 76 65 41  lite3BtreeLeaveA
6c40: 6c 6c 28 64 62 29 3b 0d 0a 20 20 73 71 6c 69 74  ll(db);..  sqlit
6c50: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64  e3_mutex_leave(d
6c60: 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20 20  b->mutex);....  
6c70: 69 66 20 28 21 70 49 64 78 29 20 72 65 74 75 72  if (!pIdx) retur
6c80: 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0d  n SQLITE_ERROR;.
6c90: 0a 0d 0a 20 20 70 54 61 62 20 3d 20 70 49 64 78  ...  pTab = pIdx
6ca0: 2d 3e 70 54 61 62 6c 65 3b 0d 0a 20 20 66 6f 72  ->pTable;..  for
6cb0: 20 28 6e 20 3d 20 30 3b 20 6e 20 3c 20 70 49 64   (n = 0; n < pId
6cc0: 78 2d 3e 6e 43 6f 6c 75 6d 6e 3b 20 6e 2b 2b 29  x->nColumn; n++)
6cd0: 0d 0a 20 20 7b 0d 0a 20 20 20 20 69 6e 74 20 63  ..  {..    int c
6ce0: 6e 75 6d 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f  num = pIdx->aiCo
6cf0: 6c 75 6d 6e 5b 6e 5d 3b 0d 0a 20 20 20 20 69 66  lumn[n];..    if
6d00: 20 28 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70   (sqlite3StrICmp
6d10: 28 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e 75 6d  (pTab->aCol[cnum
6d20: 5d 2e 7a 4e 61 6d 65 2c 20 7a 43 6f 6c 75 6d 6e  ].zName, zColumn
6d30: 4e 61 6d 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20  Name) == 0)..   
6d40: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 20 73   {..      if ( s
6d50: 6f 72 74 4f 72 64 65 72 20 29 20 2a 73 6f 72 74  ortOrder ) *sort
6d60: 4f 72 64 65 72 20 3d 20 70 49 64 78 2d 3e 61 53  Order = pIdx->aS
6d70: 6f 72 74 4f 72 64 65 72 5b 6e 5d 3b 0d 0a 20 20  ortOrder[n];..  
6d80: 20 20 20 20 69 66 20 28 20 70 7a 43 6f 6c 6c 20      if ( pzColl 
6d90: 29 20 2a 70 7a 43 6f 6c 6c 20 3d 20 70 49 64 78  ) *pzColl = pIdx
6da0: 2d 3e 61 7a 43 6f 6c 6c 5b 6e 5d 3b 0d 0a 20 20  ->azColl[n];..  
6db0: 20 20 20 20 69 66 20 28 20 70 6c 65 6e 20 29 20      if ( plen ) 
6dc0: 2a 70 6c 65 6e 20 3d 20 73 74 72 6c 65 6e 28 2a  *plen = strlen(*
6dd0: 70 7a 43 6f 6c 6c 29 3b 0d 0a 20 20 20 20 20 20  pzColl);..      
6de0: 69 66 20 28 20 6f 6e 45 72 72 6f 72 20 29 20 2a  if ( onError ) *
6df0: 6f 6e 45 72 72 6f 72 20 3d 20 70 49 64 78 2d 3e  onError = pIdx->
6e00: 6f 6e 45 72 72 6f 72 3b 0d 0a 0d 0a 20 20 20 20  onError;....    
6e10: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
6e20: 4f 4b 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d  OK;..    }..  }.
6e30: 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  .  return SQLITE
6e40: 5f 45 52 52 4f 52 3b 0d 0a 7d 0d 0a 0d 0a 53 51  _ERROR;..}....SQ
6e50: 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e  LITE_API int WIN
6e60: 41 50 49 20 73 71 6c 69 74 65 33 5f 74 61 62 6c  API sqlite3_tabl
6e70: 65 5f 63 75 72 73 6f 72 5f 69 6e 74 65 72 6f 70  e_cursor_interop
6e80: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
6e90: 73 74 6d 74 2c 20 69 6e 74 20 69 44 62 2c 20 50  stmt, int iDb, P
6ea0: 67 6e 6f 20 74 61 62 6c 65 52 6f 6f 74 50 61 67  gno tableRootPag
6eb0: 65 29 0d 0a 7b 0d 0a 20 20 56 64 62 65 20 2a 70  e)..{..  Vdbe *p
6ec0: 20 3d 20 28 56 64 62 65 20 2a 29 70 73 74 6d 74   = (Vdbe *)pstmt
6ed0: 3b 0d 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ;..  sqlite3 *db
6ee0: 20 3d 20 28 70 20 3d 3d 20 4e 55 4c 4c 29 20 3f   = (p == NULL) ?
6ef0: 20 4e 55 4c 4c 20 3a 20 70 2d 3e 64 62 3b 0d 0a   NULL : p->db;..
6f00: 20 20 69 6e 74 20 6e 3b 0d 0a 20 20 69 6e 74 20    int n;..  int 
6f10: 72 65 74 20 3d 20 2d 31 3b 20 2f 2a 20 4e 4f 54  ret = -1; /* NOT
6f20: 20 46 4f 55 4e 44 20 2a 2f 0d 0a 0d 0a 20 20 69   FOUND */....  i
6f30: 66 20 28 21 70 20 7c 7c 20 21 64 62 29 20 72 65  f (!p || !db) re
6f40: 74 75 72 6e 20 72 65 74 3b 0d 0a 20 20 73 71 6c  turn ret;..  sql
6f50: 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72  ite3_mutex_enter
6f60: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20  (db->mutex);..  
6f70: 66 6f 72 20 28 6e 20 3d 20 30 3b 20 6e 20 3c 20  for (n = 0; n < 
6f80: 70 2d 3e 6e 43 75 72 73 6f 72 20 26 26 20 70 2d  p->nCursor && p-
6f90: 3e 61 70 43 73 72 5b 6e 5d 20 21 3d 20 4e 55 4c  >apCsr[n] != NUL
6fa0: 4c 3b 20 6e 2b 2b 29 0d 0a 20 20 7b 0d 0a 20 20  L; n++)..  {..  
6fb0: 20 20 69 66 20 28 70 2d 3e 61 70 43 73 72 5b 6e    if (p->apCsr[n
6fc0: 5d 2d 3e 69 73 54 61 62 6c 65 20 3d 3d 20 46 41  ]->isTable == FA
6fd0: 4c 53 45 29 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a  LSE) continue;..
6fe0: 20 20 20 20 69 66 20 28 70 2d 3e 61 70 43 73 72      if (p->apCsr
6ff0: 5b 6e 5d 2d 3e 69 44 62 20 21 3d 20 69 44 62 29  [n]->iDb != iDb)
7000: 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
7010: 69 66 20 28 70 2d 3e 61 70 43 73 72 5b 6e 5d 2d  if (p->apCsr[n]-
7020: 3e 70 43 75 72 73 6f 72 2d 3e 70 67 6e 6f 52 6f  >pCursor->pgnoRo
7030: 6f 74 20 3d 3d 20 74 61 62 6c 65 52 6f 6f 74 50  ot == tableRootP
7040: 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  age)..    {..   
7050: 20 20 20 72 65 74 20 3d 20 6e 3b 0d 0a 20 20 20     ret = n;..   
7060: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 7d     break;..    }
7070: 0d 0a 20 20 7d 0d 0a 20 20 73 71 6c 69 74 65 33  ..  }..  sqlite3
7080: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d  _mutex_leave(db-
7090: 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20 20 72 65  >mutex);....  re
70a0: 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a 0d 0a  turn ret;..}....
70b0: 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57  SQLITE_API int W
70c0: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 75  INAPI sqlite3_cu
70d0: 72 73 6f 72 5f 72 6f 77 69 64 5f 69 6e 74 65 72  rsor_rowid_inter
70e0: 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  op(sqlite3_stmt 
70f0: 2a 70 73 74 6d 74 2c 20 69 6e 74 20 63 75 72 73  *pstmt, int curs
7100: 6f 72 2c 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  or, sqlite_int64
7110: 20 2a 70 72 6f 77 69 64 29 0d 0a 7b 0d 0a 20 20   *prowid)..{..  
7120: 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65 20  Vdbe *p = (Vdbe 
7130: 2a 29 70 73 74 6d 74 3b 0d 0a 20 20 73 71 6c 69  *)pstmt;..  sqli
7140: 74 65 33 20 2a 64 62 20 3d 20 28 70 20 3d 3d 20  te3 *db = (p == 
7150: 4e 55 4c 4c 29 20 3f 20 4e 55 4c 4c 20 3a 20 70  NULL) ? NULL : p
7160: 2d 3e 64 62 3b 0d 0a 20 20 56 64 62 65 43 75 72  ->db;..  VdbeCur
7170: 73 6f 72 20 2a 70 43 3b 0d 0a 20 20 69 6e 74 20  sor *pC;..  int 
7180: 72 65 74 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  ret = SQLITE_OK;
7190: 0d 0a 0d 0a 20 20 69 66 20 28 21 70 20 7c 7c 20  ....  if (!p || 
71a0: 21 64 62 29 20 72 65 74 75 72 6e 20 53 51 4c 49  !db) return SQLI
71b0: 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 73 71 6c  TE_ERROR;..  sql
71c0: 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72  ite3_mutex_enter
71d0: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20  (db->mutex);..  
71e0: 77 68 69 6c 65 20 28 31 29 0d 0a 20 20 7b 0d 0a  while (1)..  {..
71f0: 20 20 20 20 69 66 20 28 63 75 72 73 6f 72 20 3c      if (cursor <
7200: 20 30 20 7c 7c 20 63 75 72 73 6f 72 20 3e 3d 20   0 || cursor >= 
7210: 70 2d 3e 6e 43 75 72 73 6f 72 29 0d 0a 20 20 20  p->nCursor)..   
7220: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 20 3d 20   {..      ret = 
7230: 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 20  SQLITE_ERROR;.. 
7240: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
7250: 20 7d 0d 0a 20 20 20 20 69 66 20 28 70 2d 3e 61   }..    if (p->a
7260: 70 43 73 72 5b 63 75 72 73 6f 72 5d 20 3d 3d 20  pCsr[cursor] == 
7270: 4e 55 4c 4c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  NULL)..    {..  
7280: 20 20 20 20 72 65 74 20 3d 20 53 51 4c 49 54 45      ret = SQLITE
7290: 5f 45 52 52 4f 52 3b 0d 0a 20 20 20 20 20 20 62  _ERROR;..      b
72a0: 72 65 61 6b 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  reak;..    }....
72b0: 20 20 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73      pC = p->apCs
72c0: 72 5b 63 75 72 73 6f 72 5d 3b 0d 0a 0d 0a 20 20  r[cursor];....  
72d0: 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33 56    ret = sqlite3V
72e0: 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
72f0: 70 43 29 3b 0d 0a 20 20 20 20 69 66 28 72 65 74  pC);..    if(ret
7300: 29 0d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0d  )..      break;.
7310: 0a 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45  ...#if SQLITE_VE
7320: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3c 20 33  RSION_NUMBER < 3
7330: 30 30 38 30 30 37 0d 0a 20 20 20 20 69 66 28 70  008007..    if(p
7340: 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 29  C->rowidIsValid)
7350: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
7360: 66 20 28 70 72 6f 77 69 64 29 20 2a 70 72 6f 77  f (prowid) *prow
7370: 69 64 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77  id = pC->lastRow
7380: 69 64 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  id;..    }..    
7390: 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  else..#endif..  
73a0: 20 20 69 66 28 70 43 2d 3e 70 73 65 75 64 6f 54    if(pC->pseudoT
73b0: 61 62 6c 65 52 65 67 20 3e 20 30 29 0d 0a 20 20  ableReg > 0)..  
73c0: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 20 3d    {..      ret =
73d0: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0d 0a   SQLITE_ERROR;..
73e0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
73f0: 20 20 7d 0d 0a 20 20 20 20 65 6c 73 65 20 69 66    }..    else if
7400: 28 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c 7c 20  (pC->nullRow || 
7410: 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 29 0d  pC->pCursor==0).
7420: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
7430: 74 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  t = SQLITE_ERROR
7440: 3b 0d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0d  ;..      break;.
7450: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 65 6c 73 65  .    }..    else
7460: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
7470: 66 20 28 70 43 2d 3e 70 43 75 72 73 6f 72 20 3d  f (pC->pCursor =
7480: 3d 20 4e 55 4c 4c 29 0d 0a 20 20 20 20 20 20 7b  = NULL)..      {
7490: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 20 3d 20  ..        ret = 
74a0: 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 20  SQLITE_ERROR;.. 
74b0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
74c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 73 71       }..      sq
74d0: 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
74e0: 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70  e(pC->pCursor, p
74f0: 72 6f 77 69 64 29 3b 0d 0a 20 20 20 20 20 20 69  rowid);..      i
7500: 66 20 28 70 72 6f 77 69 64 29 20 2a 70 72 6f 77  f (prowid) *prow
7510: 69 64 20 3d 20 2a 70 72 6f 77 69 64 3b 0d 0a 20  id = *prowid;.. 
7520: 20 20 20 7d 0d 0a 20 20 20 20 62 72 65 61 6b 3b     }..    break;
7530: 0d 0a 20 20 7d 0d 0a 20 20 73 71 6c 69 74 65 33  ..  }..  sqlite3
7540: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d  _mutex_leave(db-
7550: 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20 20 72 65  >mutex);....  re
7560: 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a 23 65  turn ret;..}..#e
7570: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
7580: 53 5f 57 49 4e 20 2a 2f 0d 0a 0d 0a 2f 2a 2a 2a  S_WIN */..../***
7590: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
75a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
75b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
75c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
75d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0d 0a 0d 0a 2f  **********/..../
75e0: 2a 0d 0a 2a 2a 20 54 68 65 20 49 4e 54 45 52 4f  *..** The INTERO
75f0: 50 5f 54 45 53 54 5f 45 58 54 45 4e 53 49 4f 4e  P_TEST_EXTENSION
7600: 20 62 6c 6f 63 6b 20 6d 75 73 74 20 62 65 20 61   block must be a
7610: 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 69  t the end of thi
7620: 73 20 73 6f 75 72 63 65 20 66 69 6c 65 0d 0a 2a  s source file..*
7630: 2a 20 62 65 63 61 75 73 65 20 69 74 20 69 6e 63  * because it inc
7640: 6c 75 64 65 73 20 74 68 65 20 22 73 71 6c 69 74  ludes the "sqlit
7650: 65 33 65 78 74 2e 68 22 20 66 69 6c 65 2c 20 77  e3ext.h" file, w
7660: 68 69 63 68 20 64 65 66 69 6e 65 73 20 74 68 65  hich defines the
7670: 20 73 71 6c 69 74 65 33 0d 0a 2a 2a 20 70 75 62   sqlite3..** pub
7680: 6c 69 63 20 41 50 49 20 66 75 6e 63 74 69 6f 6e  lic API function
7690: 20 6e 61 6d 65 73 20 74 6f 20 62 65 20 6d 61 63   names to be mac
76a0: 72 6f 73 20 61 6e 64 20 74 68 61 74 20 77 6f 75  ros and that wou
76b0: 6c 64 20 63 61 75 73 65 20 74 68 65 20 63 6f 64  ld cause the cod
76c0: 65 0d 0a 2a 2a 20 61 62 6f 76 65 20 74 68 69 73  e..** above this
76d0: 20 70 6f 69 6e 74 20 74 6f 20 6d 61 6c 66 75 6e   point to malfun
76e0: 63 74 69 6f 6e 2e 0d 0a 2a 2f 0d 0a 23 69 66 20  ction...*/..#if 
76f0: 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f  defined(INTEROP_
7700: 54 45 53 54 5f 45 58 54 45 4e 53 49 4f 4e 29 0d  TEST_EXTENSION).
7710: 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 63 6f  .#include "../co
7720: 72 65 2f 73 71 6c 69 74 65 33 65 78 74 2e 68 22  re/sqlite3ext.h"
7730: 0d 0a 53 51 4c 49 54 45 5f 45 58 54 45 4e 53 49  ..SQLITE_EXTENSI
7740: 4f 4e 5f 49 4e 49 54 31 0d 0a 0d 0a 2f 2a 0d 0a  ON_INIT1..../*..
7750: 2a 2a 20 54 68 65 20 69 6e 74 65 72 6f 70 54 65  ** The interopTe
7760: 73 74 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  st() SQL functio
7770: 6e 20 72 65 74 75 72 6e 73 20 69 74 73 20 66 69  n returns its fi
7780: 72 73 74 20 61 72 67 75 6d 65 6e 74 20 6f 72 20  rst argument or 
7790: 72 61 69 73 65 73 20 61 6e 0d 0a 2a 2a 20 65 72  raises an..** er
77a0: 72 6f 72 20 69 66 20 74 68 65 72 65 20 61 72 65  ror if there are
77b0: 20 6e 6f 74 20 65 6e 6f 75 67 68 20 61 72 67 75   not enough argu
77c0: 6d 65 6e 74 73 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49  ments...*/..SQLI
77d0: 54 45 5f 50 52 49 56 41 54 45 20 76 6f 69 64 20  TE_PRIVATE void 
77e0: 69 6e 74 65 72 6f 70 54 65 73 74 46 75 6e 63 28  interopTestFunc(
77f0: 0d 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ..  sqlite3_cont
7800: 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 0d 0a 20  ext *context,.. 
7810: 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 73 71   int argc,..  sq
7820: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72  lite3_value **ar
7830: 67 76 0d 0a 29 7b 0d 0a 20 20 63 6f 6e 73 74 20  gv..){..  const 
7840: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 7a  unsigned char *z
7850: 3b 0d 0a 20 20 69 66 28 20 61 72 67 63 21 3d 31  ;..  if( argc!=1
7860: 20 29 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65 33   ){..    sqlite3
7870: 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f  _result_error(co
7880: 6e 74 65 78 74 2c 20 22 6e 65 65 64 20 65 78 61  ntext, "need exa
7890: 63 74 6c 79 20 6f 6e 65 20 61 72 67 75 6d 65 6e  ctly one argumen
78a0: 74 22 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 72 65  t", -1);..    re
78b0: 74 75 72 6e 3b 0d 0a 20 20 7d 0d 0a 20 20 7a 20  turn;..  }..  z 
78c0: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
78d0: 74 65 78 74 28 61 72 67 76 5b 30 5d 29 3b 0d 0a  text(argv[0]);..
78e0: 20 20 69 66 28 20 7a 20 29 7b 0d 0a 20 20 20 20    if( z ){..    
78f0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74  sqlite3_result_t
7900: 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 28 63 68  ext(context, (ch
7910: 61 72 2a 29 7a 2c 20 2d 31 2c 20 53 51 4c 49 54  ar*)z, -1, SQLIT
7920: 45 5f 53 54 41 54 49 43 29 3b 0d 0a 20 20 7d 65  E_STATIC);..  }e
7930: 6c 73 65 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65  lse{..    sqlite
7940: 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f  3_result_null(co
7950: 6e 74 65 78 74 29 3b 0d 0a 20 20 7d 0d 0a 7d 0d  ntext);..  }..}.
7960: 0a 0d 0a 2f 2a 0d 0a 2a 2a 20 54 68 65 20 69 6e  .../*..** The in
7970: 74 65 72 6f 70 53 6c 65 65 70 28 29 20 53 51 4c  teropSleep() SQL
7980: 20 66 75 6e 63 74 69 6f 6e 20 77 61 69 74 73 20   function waits 
7990: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6e 75  the specified nu
79a0: 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63  mber of millisec
79b0: 6f 6e 64 73 0d 0a 2a 2a 20 6f 72 20 72 61 69 73  onds..** or rais
79c0: 65 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74  es an error if t
79d0: 68 65 72 65 20 61 72 65 20 6e 6f 74 20 65 6e 6f  here are not eno
79e0: 75 67 68 20 61 72 67 75 6d 65 6e 74 73 2e 0d 0a  ugh arguments...
79f0: 2a 2f 0d 0a 53 51 4c 49 54 45 5f 50 52 49 56 41  */..SQLITE_PRIVA
7a00: 54 45 20 76 6f 69 64 20 69 6e 74 65 72 6f 70 53  TE void interopS
7a10: 6c 65 65 70 46 75 6e 63 28 0d 0a 20 20 73 71 6c  leepFunc(..  sql
7a20: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f  ite3_context *co
7a30: 6e 74 65 78 74 2c 0d 0a 20 20 69 6e 74 20 61 72  ntext,..  int ar
7a40: 67 63 2c 0d 0a 20 20 73 71 6c 69 74 65 33 5f 76  gc,..  sqlite3_v
7a50: 61 6c 75 65 20 2a 2a 61 72 67 76 0d 0a 29 7b 0d  alue **argv..){.
7a60: 0a 20 20 69 6e 74 20 6d 3b 0d 0a 20 20 69 66 28  .  int m;..  if(
7a70: 20 61 72 67 63 21 3d 31 20 29 7b 0d 0a 20 20 20   argc!=1 ){..   
7a80: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
7a90: 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 22  error(context, "
7aa0: 6e 65 65 64 20 65 78 61 63 74 6c 79 20 6f 6e 65  need exactly one
7ab0: 20 61 72 67 75 6d 65 6e 74 22 2c 20 2d 31 29 3b   argument", -1);
7ac0: 0d 0a 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20  ..    return;.. 
7ad0: 20 7d 0d 0a 20 20 6d 20 3d 20 73 71 6c 69 74 65   }..  m = sqlite
7ae0: 33 5f 76 61 6c 75 65 5f 69 6e 74 28 61 72 67 76  3_value_int(argv
7af0: 5b 30 5d 29 3b 0d 0a 23 69 66 20 53 51 4c 49 54  [0]);..#if SQLIT
7b00: 45 5f 4f 53 5f 57 49 4e 43 45 0d 0a 20 20 53 6c  E_OS_WINCE..  Sl
7b10: 65 65 70 28 6d 29 3b 0d 0a 20 20 73 71 6c 69 74  eep(m);..  sqlit
7b20: 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f  e3_result_int(co
7b30: 6e 74 65 78 74 2c 20 57 41 49 54 5f 4f 42 4a 45  ntext, WAIT_OBJE
7b40: 43 54 5f 30 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  CT_0);..#else.. 
7b50: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
7b60: 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 53 6c 65  int(context, Sle
7b70: 65 70 45 78 28 6d 2c 20 54 52 55 45 29 29 3b 0d  epEx(m, TRUE));.
7b80: 0a 23 65 6e 64 69 66 0d 0a 7d 0d 0a 0d 0a 2f 2a  .#endif..}..../*
7b90: 20 53 51 4c 69 74 65 20 69 6e 76 6f 6b 65 73 20   SQLite invokes 
7ba0: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 6f 6e 63  this routine onc
7bb0: 65 20 77 68 65 6e 20 69 74 20 6c 6f 61 64 73 20  e when it loads 
7bc0: 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a  the extension...
7bd0: 2a 2a 20 43 72 65 61 74 65 20 6e 65 77 20 66 75  ** Create new fu
7be0: 6e 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69  nctions, collati
7bf0: 6e 67 20 73 65 71 75 65 6e 63 65 73 2c 20 61 6e  ng sequences, an
7c00: 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d  d virtual table.
7c10: 0a 2a 2a 20 6d 6f 64 75 6c 65 73 20 68 65 72 65  .** modules here
7c20: 2e 20 20 54 68 69 73 20 69 73 20 75 73 75 61 6c  .  This is usual
7c30: 6c 79 20 74 68 65 20 6f 6e 6c 79 20 65 78 70 6f  ly the only expo
7c40: 72 74 65 64 20 73 79 6d 62 6f 6c 20 69 6e 0d 0a  rted symbol in..
7c50: 2a 2a 20 74 68 65 20 73 68 61 72 65 64 20 6c 69  ** the shared li
7c60: 62 72 61 72 79 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49  brary...*/..SQLI
7c70: 54 45 5f 41 50 49 20 69 6e 74 20 69 6e 74 65 72  TE_API int inter
7c80: 6f 70 5f 74 65 73 74 5f 65 78 74 65 6e 73 69 6f  op_test_extensio
7c90: 6e 5f 69 6e 69 74 28 0d 0a 20 20 73 71 6c 69 74  n_init(..  sqlit
7ca0: 65 33 20 2a 64 62 2c 0d 0a 20 20 63 68 61 72 20  e3 *db,..  char 
7cb0: 2a 2a 70 7a 45 72 72 4d 73 67 2c 0d 0a 20 20 63  **pzErrMsg,..  c
7cc0: 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 61 70 69  onst sqlite3_api
7cd0: 5f 72 6f 75 74 69 6e 65 73 20 2a 70 41 70 69 0d  _routines *pApi.
7ce0: 0a 29 7b 0d 0a 20 20 69 6e 74 20 72 63 3b 0d 0a  .){..  int rc;..
7cf0: 20 20 53 51 4c 49 54 45 5f 45 58 54 45 4e 53 49    SQLITE_EXTENSI
7d00: 4f 4e 5f 49 4e 49 54 32 28 70 41 70 69 29 0d 0a  ON_INIT2(pApi)..
7d10: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63    rc = sqlite3_c
7d20: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64  reate_function(d
7d30: 62 2c 20 22 69 6e 74 65 72 6f 70 54 65 73 74 22  b, "interopTest"
7d40: 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 41 4e 59  , -1, SQLITE_ANY
7d50: 2c 20 30 2c 0d 0a 20 20 20 20 20 20 69 6e 74 65  , 0,..      inte
7d60: 72 6f 70 54 65 73 74 46 75 6e 63 2c 20 30 2c 20  ropTestFunc, 0, 
7d70: 30 29 3b 0d 0a 20 20 69 66 28 20 72 63 3d 3d 53  0);..  if( rc==S
7d80: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0d 0a 20 20 20  QLITE_OK ){..   
7d90: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72   rc = sqlite3_cr
7da0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62  eate_function(db
7db0: 2c 20 22 69 6e 74 65 72 6f 70 53 6c 65 65 70 22  , "interopSleep"
7dc0: 2c 20 31 2c 20 53 51 4c 49 54 45 5f 41 4e 59 2c  , 1, SQLITE_ANY,
7dd0: 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74   0,..        int
7de0: 65 72 6f 70 53 6c 65 65 70 46 75 6e 63 2c 20 30  eropSleepFunc, 0
7df0: 2c 20 30 29 3b 0d 0a 20 20 7d 0d 0a 20 20 72 65  , 0);..  }..  re
7e00: 74 75 72 6e 20 72 63 3b 0d 0a 7d 0d 0a 23 65 6e  turn rc;..}..#en
7e10: 64 69 66 0d 0a                                   dif..