System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 0726747459555e23702f58fa03e11204004a92d5:


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 69 66 64 65 66 20 5f 57 49  */....#ifdef _WI
0130: 4e 33 32 0d 0a 23 64 65 66 69 6e 65 20 53 51 4c  N32..#define SQL
0140: 49 54 45 5f 41 50 49 20 5f 5f 64 65 63 6c 73 70  ITE_API __declsp
0150: 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 0d 0a 23  ec(dllexport)..#
0160: 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65 20 57 49  else..#define WI
0170: 4e 41 50 49 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  NAPI..#endif....
0180: 23 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 56 45  #if /* SQLITE_VE
0190: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20  RSION_NUMBER >= 
01a0: 33 30 31 33 30 30 30 20 26 26 20 2a 2f 20 64 65  3013000 && */ de
01b0: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 53 45  fined(INTEROP_SE
01c0: 53 53 49 4f 4e 5f 45 58 54 45 4e 53 49 4f 4e 29  SSION_EXTENSION)
01d0: 0d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
01e0: 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e 0d  _ENABLE_SESSION.
01f0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
0200: 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f 4e 20 28  ENABLE_SESSION (
0210: 31 29 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 6e  1)..#endif..#ifn
0220: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
0230: 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b  E_PREUPDATE_HOOK
0240: 0d 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ..#define SQLITE
0250: 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54  _ENABLE_PREUPDAT
0260: 45 5f 48 4f 4f 4b 20 28 31 29 0d 0a 23 65 6e 64  E_HOOK (1)..#end
0270: 69 66 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69  if..#endif....#i
0280: 6e 63 6c 75 64 65 20 22 2e 2e 2f 63 6f 72 65 2f  nclude "../core/
0290: 73 71 6c 69 74 65 33 2e 63 22 0d 0a 0d 0a 23 69  sqlite3.c"....#i
02a0: 66 20 21 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  f !SQLITE_OS_WIN
02b0: 0d 0a 23 69 6e 63 6c 75 64 65 20 3c 77 63 68 61  ..#include <wcha
02c0: 72 2e 68 3e 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  r.h>..#endif....
02d0: 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45  #if defined(INTE
02e0: 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 45 58 54 52  ROP_INCLUDE_EXTR
02f0: 41 29 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e  A)..#include "..
0300: 2f 65 78 74 2f 65 78 74 72 61 2e 63 22 0d 0a 23  /ext/extra.c"..#
0310: 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66  endif....#if def
0320: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 49 4e 43  ined(INTEROP_INC
0330: 4c 55 44 45 5f 43 45 52 4f 44 29 0d 0a 23 69 6e  LUDE_CEROD)..#in
0340: 63 6c 75 64 65 20 22 2e 2e 2f 65 78 74 2f 63 65  clude "../ext/ce
0350: 72 6f 64 2e 63 22 0d 0a 23 65 6e 64 69 66 0d 0a  rod.c"..#endif..
0360: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
0370: 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 53 45  TEROP_INCLUDE_SE
0380: 45 29 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e  E)..#include "..
0390: 2f 65 78 74 2f 73 65 65 2e 63 22 0d 0a 23 65 6e  /ext/see.c"..#en
03a0: 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e  dif....#if defin
03b0: 65 64 28 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55  ed(INTEROP_INCLU
03c0: 44 45 5f 5a 49 50 56 46 53 29 0d 0a 23 69 6e 63  DE_ZIPVFS)..#inc
03d0: 6c 75 64 65 20 22 2e 2e 2f 65 78 74 2f 7a 69 70  lude "../ext/zip
03e0: 76 66 73 2e 63 22 0d 0a 23 69 6e 63 6c 75 64 65  vfs.c"..#include
03f0: 20 22 2e 2e 2f 65 78 74 2f 61 6c 67 6f 72 69 74   "../ext/algorit
0400: 68 6d 73 2e 63 22 0d 0a 23 65 6e 64 69 66 0d 0a  hms.c"..#endif..
0410: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
0420: 54 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f  TEROP_EXTENSION_
0430: 46 55 4e 43 54 49 4f 4e 53 29 0d 0a 23 75 6e 64  FUNCTIONS)..#und
0440: 65 66 20 43 4f 4d 50 49 4c 45 5f 53 51 4c 49 54  ef COMPILE_SQLIT
0450: 45 5f 45 58 54 45 4e 53 49 4f 4e 53 5f 41 53 5f  E_EXTENSIONS_AS_
0460: 4c 4f 41 44 41 42 4c 45 5f 4d 4f 44 55 4c 45 0d  LOADABLE_MODULE.
0470: 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 63 6f  .#include "../co
0480: 6e 74 72 69 62 2f 65 78 74 65 6e 73 69 6f 6e 2d  ntrib/extension-
0490: 66 75 6e 63 74 69 6f 6e 73 2e 63 22 0d 0a 65 78  functions.c"..ex
04a0: 74 65 72 6e 20 69 6e 74 20 52 65 67 69 73 74 65  tern int Registe
04b0: 72 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74 69  rExtensionFuncti
04c0: 6f 6e 73 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ons(sqlite3 *db)
04d0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66  ;..#endif....#if
04e0: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 20 26   SQLITE_OS_WIN &
04f0: 26 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f  & defined(INTERO
0500: 50 5f 43 4f 44 45 43 29 20 26 26 20 21 64 65 66  P_CODEC) && !def
0510: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 49 4e 43  ined(INTEROP_INC
0520: 4c 55 44 45 5f 53 45 45 29 0d 0a 23 69 66 64 65  LUDE_SEE)..#ifde
0530: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
0540: 5a 49 50 56 46 53 0d 0a 23 64 65 66 69 6e 65 20  ZIPVFS..#define 
0550: 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 5f 47 45  INTEROP_CODEC_GE
0560: 54 5f 50 41 47 45 52 28 61 2c 62 2c 63 29 20 73  T_PAGER(a,b,c) s
0570: 71 6c 69 74 65 33 50 61 67 65 72 47 65 74 28 61  qlite3PagerGet(a
0580: 2c 62 2c 63 2c 30 29 0d 0a 23 65 6c 69 66 20 53  ,b,c,0)..#elif S
0590: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
05a0: 4d 42 45 52 20 3e 3d 20 33 30 31 30 30 30 30 0d  MBER >= 3010000.
05b0: 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52 4f 50  .#define INTEROP
05c0: 5f 43 4f 44 45 43 5f 47 45 54 5f 50 41 47 45 52  _CODEC_GET_PAGER
05d0: 28 61 2c 62 2c 63 29 20 73 71 6c 69 74 65 33 50  (a,b,c) sqlite3P
05e0: 61 67 65 72 47 65 74 28 61 2c 62 2c 63 2c 30 29  agerGet(a,b,c,0)
05f0: 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65  ..#else..#define
0600: 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 5f 47   INTEROP_CODEC_G
0610: 45 54 5f 50 41 47 45 52 28 61 2c 62 2c 63 29 20  ET_PAGER(a,b,c) 
0620: 73 71 6c 69 74 65 33 50 61 67 65 72 47 65 74 28  sqlite3PagerGet(
0630: 61 2c 62 2c 63 29 0d 0a 23 65 6e 64 69 66 0d 0a  a,b,c)..#endif..
0640: 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 77 69 6e  #include "../win
0650: 2f 63 72 79 70 74 2e 63 22 0d 0a 23 65 6e 64 69  /crypt.c"..#endi
0660: 66 0d 0a 0d 0a 23 69 6e 63 6c 75 64 65 20 22 69  f....#include "i
0670: 6e 74 65 72 6f 70 2e 68 22 0d 0a 0d 0a 23 64 65  nterop.h"....#de
0680: 66 69 6e 65 20 49 4e 54 45 52 4f 50 5f 44 45 42  fine INTEROP_DEB
0690: 55 47 5f 4e 4f 4e 45 20 20 20 20 20 20 20 20 20  UG_NONE         
06a0: 20 20 28 30 78 30 30 30 30 29 0d 0a 23 64 65 66    (0x0000)..#def
06b0: 69 6e 65 20 49 4e 54 45 52 4f 50 5f 44 45 42 55  ine INTEROP_DEBU
06c0: 47 5f 43 4c 4f 53 45 20 20 20 20 20 20 20 20 20  G_CLOSE         
06d0: 20 28 30 78 30 30 30 31 29 0d 0a 23 64 65 66 69   (0x0001)..#defi
06e0: 6e 65 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  ne INTEROP_DEBUG
06f0: 5f 46 49 4e 41 4c 49 5a 45 20 20 20 20 20 20 20  _FINALIZE       
0700: 28 30 78 30 30 30 32 29 0d 0a 23 64 65 66 69 6e  (0x0002)..#defin
0710: 65 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f  e INTEROP_DEBUG_
0720: 42 41 43 4b 55 50 5f 46 49 4e 49 53 48 20 20 28  BACKUP_FINISH  (
0730: 30 78 30 30 30 34 29 0d 0a 23 64 65 66 69 6e 65  0x0004)..#define
0740: 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 4f   INTEROP_DEBUG_O
0750: 50 45 4e 20 20 20 20 20 20 20 20 20 20 20 28 30  PEN           (0
0760: 78 30 30 30 38 29 0d 0a 23 64 65 66 69 6e 65 20  x0008)..#define 
0770: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 4f 50  INTEROP_DEBUG_OP
0780: 45 4e 31 36 20 20 20 20 20 20 20 20 20 28 30 78  EN16         (0x
0790: 30 30 31 30 29 0d 0a 23 64 65 66 69 6e 65 20 49  0010)..#define I
07a0: 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 50 52 45  NTEROP_DEBUG_PRE
07b0: 50 41 52 45 20 20 20 20 20 20 20 20 28 30 78 30  PARE        (0x0
07c0: 30 32 30 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e  020)..#define IN
07d0: 54 45 52 4f 50 5f 44 45 42 55 47 5f 50 52 45 50  TEROP_DEBUG_PREP
07e0: 41 52 45 31 36 20 20 20 20 20 20 28 30 78 30 30  ARE16      (0x00
07f0: 34 30 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54  40)..#define INT
0800: 45 52 4f 50 5f 44 45 42 55 47 5f 52 45 53 45 54  EROP_DEBUG_RESET
0810: 20 20 20 20 20 20 20 20 20 20 28 30 78 30 30 38            (0x008
0820: 30 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54 45  0)..#define INTE
0830: 52 4f 50 5f 44 45 42 55 47 5f 43 48 41 4e 47 45  ROP_DEBUG_CHANGE
0840: 53 20 20 20 20 20 20 20 20 28 30 78 30 31 30 30  S        (0x0100
0850: 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52  )..#define INTER
0860: 4f 50 5f 44 45 42 55 47 5f 42 52 45 41 4b 20 20  OP_DEBUG_BREAK  
0870: 20 20 20 20 20 20 20 20 28 30 78 30 32 30 30 29          (0x0200)
0880: 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52 4f  ..#define INTERO
0890: 50 5f 44 45 42 55 47 5f 42 4c 4f 42 5f 43 4c 4f  P_DEBUG_BLOB_CLO
08a0: 53 45 20 20 20 20 20 28 30 78 30 34 30 30 29 0d  SE     (0x0400).
08b0: 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  ...#if defined(_
08c0: 4d 53 43 5f 56 45 52 29 20 26 26 20 64 65 66 69  MSC_VER) && defi
08d0: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  ned(INTEROP_DEBU
08e0: 47 29 20 26 26 20 5c 0d 0a 20 20 20 20 28 49 4e  G) && \..    (IN
08f0: 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e  TEROP_DEBUG & IN
0900: 54 45 52 4f 50 5f 44 45 42 55 47 5f 42 52 45 41  TEROP_DEBUG_BREA
0910: 4b 29 0d 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  K)..#define sqli
0920: 74 65 33 49 6e 74 65 72 6f 70 42 72 65 61 6b 28  te3InteropBreak(
0930: 61 29 20 7b 20 73 71 6c 69 74 65 33 49 6e 74 65  a) { sqlite3Inte
0940: 72 6f 70 44 65 62 75 67 28 22 25 73 5c 6e 22 2c  ropDebug("%s\n",
0950: 20 28 61 29 29 3b 20 5f 5f 64 65 62 75 67 62 72   (a)); __debugbr
0960: 65 61 6b 28 29 3b 20 7d 0d 0a 23 65 6c 73 65 0d  eak(); }..#else.
0970: 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
0980: 49 6e 74 65 72 6f 70 42 72 65 61 6b 28 61 29 0d  InteropBreak(a).
0990: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 74 79 70 65 64  .#endif....typed
09a0: 65 66 20 76 6f 69 64 20 28 2a 53 51 4c 49 54 45  ef void (*SQLITE
09b0: 55 53 45 52 46 55 4e 43 29 28 73 71 6c 69 74 65  USERFUNC)(sqlite
09c0: 33 5f 63 6f 6e 74 65 78 74 20 2a 2c 20 69 6e 74  3_context *, int
09d0: 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  , sqlite3_value 
09e0: 2a 2a 29 3b 0d 0a 74 79 70 65 64 65 66 20 76 6f  **);..typedef vo
09f0: 69 64 20 28 2a 53 51 4c 49 54 45 46 55 4e 43 46  id (*SQLITEFUNCF
0a00: 49 4e 41 4c 29 28 73 71 6c 69 74 65 33 5f 63 6f  INAL)(sqlite3_co
0a10: 6e 74 65 78 74 20 2a 29 3b 0d 0a 0d 0a 2f 2a 0d  ntext *);..../*.
0a20: 0a 2a 2a 20 41 6e 20 61 72 72 61 79 20 6f 66 20  .** An array of 
0a30: 6e 61 6d 65 73 20 6f 66 20 61 6c 6c 20 63 6f 6d  names of all com
0a40: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
0a50: 73 2e 20 20 54 68 69 73 20 61 72 72 61 79 20 73  s.  This array s
0a60: 68 6f 75 6c 64 0d 0a 2a 2a 20 62 65 20 73 6f 72  hould..** be sor
0a70: 74 65 64 20 41 2d 5a 2e 0d 0a 2a 2a 0d 0a 2a 2a  ted A-Z...**..**
0a80: 20 54 68 69 73 20 61 72 72 61 79 20 6c 6f 6f 6b   This array look
0a90: 73 20 6c 61 72 67 65 2c 20 62 75 74 20 69 6e 20  s large, but in 
0aa0: 61 20 74 79 70 69 63 61 6c 20 69 6e 73 74 61 6c  a typical instal
0ab0: 6c 61 74 69 6f 6e 20 61 63 74 75 61 6c 6c 79 20  lation actually 
0ac0: 75 73 65 73 0d 0a 2a 2a 20 6f 6e 6c 79 20 61 20  uses..** only a 
0ad0: 68 61 6e 64 66 75 6c 20 6f 66 20 63 6f 6d 70 69  handful of compi
0ae0: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 2c  le-time options,
0af0: 20 73 6f 20 6d 6f 73 74 20 74 69 6d 65 73 20 74   so most times t
0b00: 68 69 73 20 61 72 72 61 79 20 69 73 20 75 73 75  his array is usu
0b10: 61 6c 6c 79 0d 0a 2a 2a 20 72 61 74 68 65 72 20  ally..** rather 
0b20: 73 68 6f 72 74 20 61 6e 64 20 75 73 65 73 20 6c  short and uses l
0b30: 69 74 74 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61  ittle memory spa
0b40: 63 65 2e 0d 0a 2a 2f 0d 0a 73 74 61 74 69 63 20  ce...*/..static 
0b50: 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 63 6f 6e  const char * con
0b60: 73 74 20 61 7a 49 6e 74 65 72 6f 70 43 6f 6d 70  st azInteropComp
0b70: 69 6c 65 4f 70 74 5b 5d 20 3d 20 7b 0d 0a 0d 0a  ileOpt[] = {....
0b80: 2f 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  /* These macros 
0b90: 61 72 65 20 70 72 6f 76 69 64 65 64 20 74 6f 20  are provided to 
0ba0: 22 73 74 72 69 6e 67 69 66 79 22 20 74 68 65 20  "stringify" the 
0bb0: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 65 66  value of the def
0bc0: 69 6e 65 0d 0a 2a 2a 20 66 6f 72 20 74 68 6f 73  ine..** for thos
0bd0: 65 20 6f 70 74 69 6f 6e 73 20 69 6e 20 77 68 69  e options in whi
0be0: 63 68 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  ch the value is 
0bf0: 6d 65 61 6e 69 6e 67 66 75 6c 2e 20 2a 2f 0d 0a  meaningful. */..
0c00: 23 69 66 6e 64 65 66 20 43 54 49 4d 45 4f 50 54  #ifndef CTIMEOPT
0c10: 5f 56 41 4c 5f 0d 0a 23 64 65 66 69 6e 65 20 43  _VAL_..#define C
0c20: 54 49 4d 45 4f 50 54 5f 56 41 4c 5f 28 6f 70 74  TIMEOPT_VAL_(opt
0c30: 29 20 23 6f 70 74 0d 0a 23 65 6e 64 69 66 0d 0a  ) #opt..#endif..
0c40: 0d 0a 23 69 66 6e 64 65 66 20 43 54 49 4d 45 4f  ..#ifndef CTIMEO
0c50: 50 54 5f 56 41 4c 0d 0a 23 64 65 66 69 6e 65 20  PT_VAL..#define 
0c60: 43 54 49 4d 45 4f 50 54 5f 56 41 4c 28 6f 70 74  CTIMEOPT_VAL(opt
0c70: 29 20 43 54 49 4d 45 4f 50 54 5f 56 41 4c 5f 28  ) CTIMEOPT_VAL_(
0c80: 6f 70 74 29 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  opt)..#endif....
0c90: 23 69 66 64 65 66 20 49 4e 54 45 52 4f 50 5f 43  #ifdef INTEROP_C
0ca0: 4f 44 45 43 0d 0a 20 20 22 43 4f 44 45 43 22 2c  ODEC..  "CODEC",
0cb0: 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65 66  ..#endif..#ifdef
0cc0: 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 0d 0a   INTEROP_DEBUG..
0cd0: 20 20 22 44 45 42 55 47 3d 22 20 43 54 49 4d 45    "DEBUG=" CTIME
0ce0: 4f 50 54 5f 56 41 4c 28 49 4e 54 45 52 4f 50 5f  OPT_VAL(INTEROP_
0cf0: 44 45 42 55 47 29 2c 0d 0a 23 65 6e 64 69 66 0d  DEBUG),..#endif.
0d00: 0a 23 69 66 64 65 66 20 49 4e 54 45 52 4f 50 5f  .#ifdef INTEROP_
0d10: 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49  EXTENSION_FUNCTI
0d20: 4f 4e 53 0d 0a 20 20 22 45 58 54 45 4e 53 49 4f  ONS..  "EXTENSIO
0d30: 4e 5f 46 55 4e 43 54 49 4f 4e 53 22 2c 0d 0a 23  N_FUNCTIONS",..#
0d40: 65 6e 64 69 66 0d 0a 23 69 66 64 65 66 20 49 4e  endif..#ifdef IN
0d50: 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 43 45  TEROP_INCLUDE_CE
0d60: 52 4f 44 0d 0a 20 20 22 49 4e 43 4c 55 44 45 5f  ROD..  "INCLUDE_
0d70: 43 45 52 4f 44 22 2c 0d 0a 23 65 6e 64 69 66 0d  CEROD",..#endif.
0d80: 0a 23 69 66 64 65 66 20 49 4e 54 45 52 4f 50 5f  .#ifdef INTEROP_
0d90: 49 4e 43 4c 55 44 45 5f 45 58 54 52 41 0d 0a 20  INCLUDE_EXTRA.. 
0da0: 20 22 49 4e 43 4c 55 44 45 5f 45 58 54 52 41 22   "INCLUDE_EXTRA"
0db0: 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65  ,..#endif..#ifde
0dc0: 66 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44  f INTEROP_INCLUD
0dd0: 45 5f 53 45 45 0d 0a 20 20 22 49 4e 43 4c 55 44  E_SEE..  "INCLUD
0de0: 45 5f 53 45 45 22 2c 0d 0a 23 65 6e 64 69 66 0d  E_SEE",..#endif.
0df0: 0a 23 69 66 64 65 66 20 49 4e 54 45 52 4f 50 5f  .#ifdef INTEROP_
0e00: 49 4e 43 4c 55 44 45 5f 5a 49 50 56 46 53 0d 0a  INCLUDE_ZIPVFS..
0e10: 20 20 22 49 4e 43 4c 55 44 45 5f 5a 49 50 56 46    "INCLUDE_ZIPVF
0e20: 53 22 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66  S",..#endif..#if
0e30: 64 65 66 20 49 4e 54 45 52 4f 50 5f 4a 53 4f 4e  def INTEROP_JSON
0e40: 31 5f 45 58 54 45 4e 53 49 4f 4e 0d 0a 20 20 22  1_EXTENSION..  "
0e50: 4a 53 4f 4e 31 5f 45 58 54 45 4e 53 49 4f 4e 22  JSON1_EXTENSION"
0e60: 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65  ,..#endif..#ifde
0e70: 66 20 49 4e 54 45 52 4f 50 5f 4c 45 47 41 43 59  f INTEROP_LEGACY
0e80: 5f 43 4c 4f 53 45 0d 0a 20 20 22 4c 45 47 41 43  _CLOSE..  "LEGAC
0e90: 59 5f 43 4c 4f 53 45 22 2c 0d 0a 23 65 6e 64 69  Y_CLOSE",..#endi
0ea0: 66 0d 0a 23 69 66 64 65 66 20 49 4e 54 45 52 4f  f..#ifdef INTERO
0eb0: 50 5f 4c 4f 47 0d 0a 20 20 22 4c 4f 47 22 2c 0d  P_LOG..  "LOG",.
0ec0: 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
0ed0: 49 4e 54 45 52 4f 50 5f 50 45 52 43 45 4e 54 49  INTEROP_PERCENTI
0ee0: 4c 45 5f 45 58 54 45 4e 53 49 4f 4e 0d 0a 20 20  LE_EXTENSION..  
0ef0: 22 50 45 52 43 45 4e 54 49 4c 45 5f 45 58 54 45  "PERCENTILE_EXTE
0f00: 4e 53 49 4f 4e 22 2c 0d 0a 23 65 6e 64 69 66 0d  NSION",..#endif.
0f10: 0a 23 69 66 64 65 66 20 49 4e 54 45 52 4f 50 5f  .#ifdef INTEROP_
0f20: 52 45 47 45 58 50 5f 45 58 54 45 4e 53 49 4f 4e  REGEXP_EXTENSION
0f30: 0d 0a 20 20 22 52 45 47 45 58 50 5f 45 58 54 45  ..  "REGEXP_EXTE
0f40: 4e 53 49 4f 4e 22 2c 0d 0a 23 65 6e 64 69 66 0d  NSION",..#endif.
0f50: 0a 23 69 66 64 65 66 20 49 4e 54 45 52 4f 50 5f  .#ifdef INTEROP_
0f60: 53 45 53 53 49 4f 4e 5f 45 58 54 45 4e 53 49 4f  SESSION_EXTENSIO
0f70: 4e 0d 0a 20 20 22 53 45 53 53 49 4f 4e 5f 45 58  N..  "SESSION_EX
0f80: 54 45 4e 53 49 4f 4e 22 2c 0d 0a 23 65 6e 64 69  TENSION",..#endi
0f90: 66 0d 0a 23 69 66 64 65 66 20 49 4e 54 45 52 4f  f..#ifdef INTERO
0fa0: 50 5f 53 48 41 31 5f 45 58 54 45 4e 53 49 4f 4e  P_SHA1_EXTENSION
0fb0: 0d 0a 20 20 22 53 48 41 31 5f 45 58 54 45 4e 53  ..  "SHA1_EXTENS
0fc0: 49 4f 4e 22 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23  ION",..#endif..#
0fd0: 69 66 64 65 66 20 49 4e 54 45 52 4f 50 5f 54 45  ifdef INTEROP_TE
0fe0: 53 54 5f 45 58 54 45 4e 53 49 4f 4e 0d 0a 20 20  ST_EXTENSION..  
0ff0: 22 54 45 53 54 5f 45 58 54 45 4e 53 49 4f 4e 22  "TEST_EXTENSION"
1000: 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65  ,..#endif..#ifde
1010: 66 20 49 4e 54 45 52 4f 50 5f 54 4f 54 59 50 45  f INTEROP_TOTYPE
1020: 5f 45 58 54 45 4e 53 49 4f 4e 0d 0a 20 20 22 54  _EXTENSION..  "T
1030: 4f 54 59 50 45 5f 45 58 54 45 4e 53 49 4f 4e 22  OTYPE_EXTENSION"
1040: 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65  ,..#endif..#ifde
1050: 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
1060: 5f 4e 55 4d 42 45 52 0d 0a 20 20 22 56 45 52 53  _NUMBER..  "VERS
1070: 49 4f 4e 5f 4e 55 4d 42 45 52 3d 22 20 43 54 49  ION_NUMBER=" CTI
1080: 4d 45 4f 50 54 5f 56 41 4c 28 53 51 4c 49 54 45  MEOPT_VAL(SQLITE
1090: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 29  _VERSION_NUMBER)
10a0: 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65  ,..#endif..#ifde
10b0: 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41  f INTEROP_VIRTUA
10c0: 4c 5f 54 41 42 4c 45 0d 0a 20 20 22 56 49 52 54  L_TABLE..  "VIRT
10d0: 55 41 4c 5f 54 41 42 4c 45 22 2c 0d 0a 23 65 6e  UAL_TABLE",..#en
10e0: 64 69 66 0d 0a 7d 3b 0d 0a 0d 0a 2f 2a 0d 0a 2a  dif..};..../*..*
10f0: 2a 20 47 69 76 65 6e 20 74 68 65 20 6e 61 6d 65  * Given the name
1100: 20 6f 66 20 61 20 63 6f 6d 70 69 6c 65 2d 74 69   of a compile-ti
1110: 6d 65 20 6f 70 74 69 6f 6e 2c 20 72 65 74 75 72  me option, retur
1120: 6e 20 74 72 75 65 20 69 66 20 74 68 61 74 20 6f  n true if that o
1130: 70 74 69 6f 6e 0d 0a 2a 2a 20 77 61 73 20 75 73  ption..** was us
1140: 65 64 20 61 6e 64 20 66 61 6c 73 65 20 69 66 20  ed and false if 
1150: 6e 6f 74 2e 0d 0a 2a 2a 0d 0a 2a 2a 20 54 68 65  not...**..** The
1160: 20 6e 61 6d 65 20 63 61 6e 20 6f 70 74 69 6f 6e   name can option
1170: 61 6c 6c 79 20 62 65 67 69 6e 20 77 69 74 68 20  ally begin with 
1180: 22 53 51 4c 49 54 45 5f 22 20 6f 72 20 22 49 4e  "SQLITE_" or "IN
1190: 54 45 52 4f 50 5f 22 20 62 75 74 20 74 68 6f 73  TEROP_" but thos
11a0: 65 0d 0a 2a 2a 20 70 72 65 66 69 78 65 73 20 61  e..** prefixes a
11b0: 72 65 20 6e 6f 74 20 72 65 71 75 69 72 65 64 20  re not required 
11c0: 66 6f 72 20 61 20 6d 61 74 63 68 2e 0d 0a 2a 2f  for a match...*/
11d0: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74  ..SQLITE_API int
11e0: 20 57 49 4e 41 50 49 20 69 6e 74 65 72 6f 70 5f   WINAPI interop_
11f0: 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73  compileoption_us
1200: 65 64 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  ed(const char *z
1210: 4f 70 74 4e 61 6d 65 29 7b 0d 0a 20 20 69 6e 74  OptName){..  int
1220: 20 69 2c 20 6e 3b 0d 0a 20 20 69 66 28 20 73 71   i, n;..  if( sq
1230: 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 4f  lite3StrNICmp(zO
1240: 70 74 4e 61 6d 65 2c 20 22 53 51 4c 49 54 45 5f  ptName, "SQLITE_
1250: 22 2c 20 37 29 3d 3d 30 20 29 20 7a 4f 70 74 4e  ", 7)==0 ) zOptN
1260: 61 6d 65 20 2b 3d 20 37 3b 0d 0a 20 20 69 66 28  ame += 7;..  if(
1270: 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
1280: 28 7a 4f 70 74 4e 61 6d 65 2c 20 22 49 4e 54 45  (zOptName, "INTE
1290: 52 4f 50 5f 22 2c 20 38 29 3d 3d 30 20 29 20 7a  ROP_", 8)==0 ) z
12a0: 4f 70 74 4e 61 6d 65 20 2b 3d 20 38 3b 0d 0a 20  OptName += 8;.. 
12b0: 20 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c   n = sqlite3Strl
12c0: 65 6e 33 30 28 7a 4f 70 74 4e 61 6d 65 29 3b 0d  en30(zOptName);.
12d0: 0a 0d 0a 20 20 2f 2a 20 53 69 6e 63 65 20 41 72  ...  /* Since Ar
12e0: 72 61 79 53 69 7a 65 28 61 7a 49 6e 74 65 72 6f  raySize(azIntero
12f0: 70 43 6f 6d 70 69 6c 65 4f 70 74 29 20 69 73 20  pCompileOpt) is 
1300: 6e 6f 72 6d 61 6c 6c 79 20 69 6e 20 73 69 6e 67  normally in sing
1310: 6c 65 20 64 69 67 69 74 73 2c 20 61 0d 0a 20 20  le digits, a..  
1320: 2a 2a 20 6c 69 6e 65 61 72 20 73 65 61 72 63 68  ** linear search
1330: 20 69 73 20 61 64 65 71 75 61 74 65 2e 20 20 4e   is adequate.  N
1340: 6f 20 6e 65 65 64 20 66 6f 72 20 61 20 62 69 6e  o need for a bin
1350: 61 72 79 20 73 65 61 72 63 68 2e 20 2a 2f 0d 0a  ary search. */..
1360: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72    for(i=0; i<Arr
1370: 61 79 53 69 7a 65 28 61 7a 49 6e 74 65 72 6f 70  aySize(azInterop
1380: 43 6f 6d 70 69 6c 65 4f 70 74 29 3b 20 69 2b 2b  CompileOpt); i++
1390: 29 7b 0d 0a 20 20 20 20 69 66 28 20 73 71 6c 69  ){..    if( sqli
13a0: 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 4f 70 74  te3StrNICmp(zOpt
13b0: 4e 61 6d 65 2c 20 61 7a 49 6e 74 65 72 6f 70 43  Name, azInteropC
13c0: 6f 6d 70 69 6c 65 4f 70 74 5b 69 5d 2c 20 6e 29  ompileOpt[i], n)
13d0: 3d 3d 30 0d 0a 20 20 20 20 20 26 26 20 73 71 6c  ==0..     && sql
13e0: 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
13f0: 73 69 67 6e 65 64 20 63 68 61 72 29 61 7a 49 6e  signed char)azIn
1400: 74 65 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 5b  teropCompileOpt[
1410: 69 5d 5b 6e 5d 5d 3d 3d 30 0d 0a 20 20 20 20 29  i][n]]==0..    )
1420: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
1430: 31 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a  1;..    }..  }..
1440: 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 7d 0d 0a    return 0;..}..
1450: 0d 0a 2f 2a 0d 0a 2a 2a 20 52 65 74 75 72 6e 20  ../*..** Return 
1460: 74 68 65 20 4e 2d 74 68 20 63 6f 6d 70 69 6c 65  the N-th compile
1470: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 73 74 72  -time option str
1480: 69 6e 67 2e 20 20 49 66 20 4e 20 69 73 20 6f 75  ing.  If N is ou
1490: 74 20 6f 66 20 72 61 6e 67 65 2c 0d 0a 2a 2a 20  t of range,..** 
14a0: 72 65 74 75 72 6e 20 61 20 4e 55 4c 4c 20 70 6f  return a NULL po
14b0: 69 6e 74 65 72 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49  inter...*/..SQLI
14c0: 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 63 68 61  TE_API const cha
14d0: 72 20 2a 57 49 4e 41 50 49 20 69 6e 74 65 72 6f  r *WINAPI intero
14e0: 70 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  p_compileoption_
14f0: 67 65 74 28 69 6e 74 20 4e 29 7b 0d 0a 20 20 69  get(int N){..  i
1500: 66 28 20 4e 3e 3d 30 20 26 26 20 4e 3c 41 72 72  f( N>=0 && N<Arr
1510: 61 79 53 69 7a 65 28 61 7a 49 6e 74 65 72 6f 70  aySize(azInterop
1520: 43 6f 6d 70 69 6c 65 4f 70 74 29 20 29 7b 0d 0a  CompileOpt) ){..
1530: 20 20 20 20 72 65 74 75 72 6e 20 61 7a 49 6e 74      return azInt
1540: 65 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 5b 4e  eropCompileOpt[N
1550: 5d 3b 0d 0a 20 20 7d 0d 0a 20 20 72 65 74 75 72  ];..  }..  retur
1560: 6e 20 30 3b 0d 0a 7d 0d 0a 0d 0a 23 69 66 20 64  n 0;..}....#if d
1570: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44  efined(INTEROP_D
1580: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
1590: 28 49 4e 54 45 52 4f 50 5f 4c 4f 47 29 0d 0a 53  (INTEROP_LOG)..S
15a0: 51 4c 49 54 45 5f 50 52 49 56 41 54 45 20 76 6f  QLITE_PRIVATE vo
15b0: 69 64 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f  id sqlite3Intero
15c0: 70 44 65 62 75 67 28 63 6f 6e 73 74 20 63 68 61  pDebug(const cha
15d0: 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29  r *zFormat, ...)
15e0: 7b 0d 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b  {..  va_list ap;
15f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1600: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 61           /* Vara
1610: 72 67 20 6c 69 73 74 20 2a 2f 0d 0a 20 20 53 74  rg list */..  St
1620: 72 41 63 63 75 6d 20 61 63 63 3b 20 20 20 20 20  rAccum acc;     
1630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1640: 20 20 2f 2a 20 53 74 72 69 6e 67 20 61 63 63 75    /* String accu
1650: 6d 75 6c 61 74 6f 72 20 2a 2f 0d 0a 20 20 63 68  mulator */..  ch
1660: 61 72 20 7a 4d 73 67 5b 53 51 4c 49 54 45 5f 50  ar zMsg[SQLITE_P
1670: 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 2a 33 5d  RINT_BUF_SIZE*3]
1680: 3b 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 6c 6f  ; /* Complete lo
1690: 67 20 6d 65 73 73 61 67 65 20 2a 2f 0d 0a 20 20  g message */..  
16a0: 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f  va_start(ap, zFo
16b0: 72 6d 61 74 29 3b 0d 0a 23 69 66 20 53 51 4c 49  rmat);..#if SQLI
16c0: 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45  TE_VERSION_NUMBE
16d0: 52 20 3e 3d 20 33 30 30 38 30 31 30 0d 0a 20 20  R >= 3008010..  
16e0: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49  sqlite3StrAccumI
16f0: 6e 69 74 28 26 61 63 63 2c 20 30 2c 20 7a 4d 73  nit(&acc, 0, zMs
1700: 67 2c 20 73 69 7a 65 6f 66 28 7a 4d 73 67 29 2c  g, sizeof(zMsg),
1710: 20 30 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 73   0);..#else..  s
1720: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e  qlite3StrAccumIn
1730: 69 74 28 26 61 63 63 2c 20 7a 4d 73 67 2c 20 73  it(&acc, zMsg, s
1740: 69 7a 65 6f 66 28 7a 4d 73 67 29 2c 20 30 29 3b  izeof(zMsg), 0);
1750: 0d 0a 20 20 61 63 63 2e 75 73 65 4d 61 6c 6c 6f  ..  acc.useMallo
1760: 63 20 3d 20 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a  c = 0;..#endif..
1770: 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49  #if SQLITE_VERSI
1780: 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 31  ON_NUMBER >= 301
1790: 31 30 30 30 0d 0a 20 20 73 71 6c 69 74 65 33 56  1000..  sqlite3V
17a0: 58 50 72 69 6e 74 66 28 26 61 63 63 2c 20 7a 46  XPrintf(&acc, zF
17b0: 6f 72 6d 61 74 2c 20 61 70 29 3b 0d 0a 23 65 6c  ormat, ap);..#el
17c0: 73 65 0d 0a 20 20 73 71 6c 69 74 65 33 56 58 50  se..  sqlite3VXP
17d0: 72 69 6e 74 66 28 26 61 63 63 2c 20 30 2c 20 7a  rintf(&acc, 0, z
17e0: 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0d 0a 23 65  Format, ap);..#e
17f0: 6e 64 69 66 0d 0a 20 20 76 61 5f 65 6e 64 28 61  ndif..  va_end(a
1800: 70 29 3b 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f  p);..#if SQLITE_
1810: 4f 53 5f 57 49 4e 20 26 26 20 53 51 4c 49 54 45  OS_WIN && SQLITE
1820: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20  _VERSION_NUMBER 
1830: 3e 3d 20 33 30 30 37 30 31 33 0d 0a 20 20 73 71  >= 3007013..  sq
1840: 6c 69 74 65 33 5f 77 69 6e 33 32 5f 77 72 69 74  lite3_win32_writ
1850: 65 5f 64 65 62 75 67 28 73 71 6c 69 74 65 33 53  e_debug(sqlite3S
1860: 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 26 61  trAccumFinish(&a
1870: 63 63 29 2c 20 2d 31 29 3b 0d 0a 23 65 6c 69 66  cc), -1);..#elif
1880: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 20 26   SQLITE_OS_WIN &
1890: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
18a0: 5f 57 49 4e 33 32 5f 48 41 53 5f 41 4e 53 49 29  _WIN32_HAS_ANSI)
18b0: 0d 0a 20 20 4f 75 74 70 75 74 44 65 62 75 67 53  ..  OutputDebugS
18c0: 74 72 69 6e 67 41 28 73 71 6c 69 74 65 33 53 74  tringA(sqlite3St
18d0: 72 41 63 63 75 6d 46 69 6e 69 73 68 28 26 61 63  rAccumFinish(&ac
18e0: 63 29 29 3b 0d 0a 23 65 6c 69 66 20 53 51 4c 49  c));..#elif SQLI
18f0: 54 45 5f 4f 53 5f 57 49 4e 20 26 26 20 64 65 66  TE_OS_WIN && def
1900: 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33  ined(SQLITE_WIN3
1910: 32 5f 48 41 53 5f 57 49 44 45 29 0d 0a 20 20 7b  2_HAS_WIDE)..  {
1920: 0d 0a 20 20 20 20 4c 50 57 53 54 52 20 7a 57 69  ..    LPWSTR zWi
1930: 64 65 4d 73 67 20 3d 20 75 74 66 38 54 6f 55 6e  deMsg = utf8ToUn
1940: 69 63 6f 64 65 28 73 71 6c 69 74 65 33 53 74 72  icode(sqlite3Str
1950: 41 63 63 75 6d 46 69 6e 69 73 68 28 26 61 63 63  AccumFinish(&acc
1960: 29 29 3b 0d 0a 20 20 20 20 69 66 28 20 7a 57 69  ));..    if( zWi
1970: 64 65 4d 73 67 20 29 7b 0d 0a 20 20 20 20 20 20  deMsg ){..      
1980: 4f 75 74 70 75 74 44 65 62 75 67 53 74 72 69 6e  OutputDebugStrin
1990: 67 57 28 7a 57 69 64 65 4d 73 67 29 3b 0d 0a 20  gW(zWideMsg);.. 
19a0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
19b0: 65 28 7a 57 69 64 65 4d 73 67 29 3b 0d 0a 20 20  e(zWideMsg);..  
19c0: 20 20 7d 0d 0a 20 20 7d 0d 0a 23 65 6c 73 65 0d    }..  }..#else.
19d0: 0a 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72  .  fprintf(stder
19e0: 72 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  r, "%s", sqlite3
19f0: 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 26  StrAccumFinish(&
1a00: 61 63 63 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  acc));..#endif..
1a10: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66  }..#endif....#if
1a20: 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50   defined(INTEROP
1a30: 5f 4c 4f 47 29 0d 0a 53 51 4c 49 54 45 5f 50 52  _LOG)..SQLITE_PR
1a40: 49 56 41 54 45 20 69 6e 74 20 6c 6f 67 43 6f 6e  IVATE int logCon
1a50: 66 69 67 75 72 65 64 20 3d 20 30 3b 0d 0a 0d 0a  figured = 0;....
1a60: 53 51 4c 49 54 45 5f 50 52 49 56 41 54 45 20 76  SQLITE_PRIVATE v
1a70: 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 74 65 72  oid sqlite3Inter
1a80: 6f 70 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 76 6f  opLogCallback(vo
1a90: 69 64 20 2a 70 41 72 67 2c 20 69 6e 74 20 69 43  id *pArg, int iC
1aa0: 6f 64 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  ode, const char 
1ab0: 2a 7a 4d 73 67 29 7b 0d 0a 20 20 73 71 6c 69 74  *zMsg){..  sqlit
1ac0: 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22  e3InteropDebug("
1ad0: 49 4e 54 45 52 4f 50 5f 4c 4f 47 20 28 25 64 29  INTEROP_LOG (%d)
1ae0: 20 25 73 5c 6e 22 2c 20 69 43 6f 64 65 2c 20 7a   %s\n", iCode, z
1af0: 4d 73 67 29 3b 0d 0a 7d 0d 0a 23 65 6e 64 69 66  Msg);..}..#endif
1b00: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69  ....SQLITE_API i
1b10: 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  nt WINAPI sqlite
1b20: 33 5f 6d 61 6c 6c 6f 63 5f 73 69 7a 65 5f 69 6e  3_malloc_size_in
1b30: 74 65 72 6f 70 28 76 6f 69 64 20 2a 70 29 7b 0d  terop(void *p){.
1b40: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
1b50: 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 70 29 3b 0d  3MallocSize(p);.
1b60: 0a 7d 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65  .}....#if define
1b70: 64 28 49 4e 54 45 52 4f 50 5f 4c 45 47 41 43 59  d(INTEROP_LEGACY
1b80: 5f 43 4c 4f 53 45 29 20 7c 7c 20 53 51 4c 49 54  _CLOSE) || SQLIT
1b90: 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52  E_VERSION_NUMBER
1ba0: 20 3c 20 33 30 30 37 30 31 34 0d 0a 53 51 4c 49   < 3007014..SQLI
1bb0: 54 45 5f 50 52 49 56 41 54 45 20 76 6f 69 64 20  TE_PRIVATE void 
1bc0: 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  * sqlite3DbMallo
1bd0: 63 5a 65 72 6f 5f 69 6e 74 65 72 6f 70 28 73 71  cZero_interop(sq
1be0: 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 20 6e  lite3 *db, int n
1bf0: 29 0d 0a 7b 0d 0a 20 20 76 6f 69 64 20 2a 70 3b  )..{..  void *p;
1c00: 0d 0a 20 20 69 66 20 28 64 62 29 20 7b 0d 0a 20  ..  if (db) {.. 
1c10: 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
1c20: 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78  _enter(db->mutex
1c30: 29 3b 0d 0a 20 20 7d 0d 0a 20 20 70 20 3d 20 73  );..  }..  p = s
1c40: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
1c50: 72 6f 28 64 62 2c 6e 29 3b 0d 0a 20 20 69 66 20  ro(db,n);..  if 
1c60: 28 64 62 29 20 7b 0d 0a 20 20 20 20 73 71 6c 69  (db) {..    sqli
1c70: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
1c80: 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 7d  db->mutex);..  }
1c90: 0d 0a 20 20 72 65 74 75 72 6e 20 70 3b 0d 0a 7d  ..  return p;..}
1ca0: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 50 52 49 56 41  ....SQLITE_PRIVA
1cb0: 54 45 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  TE void sqlite3D
1cc0: 62 46 72 65 65 5f 69 6e 74 65 72 6f 70 28 73 71  bFree_interop(sq
1cd0: 6c 69 74 65 33 20 2a 64 62 2c 20 76 6f 69 64 20  lite3 *db, void 
1ce0: 2a 70 29 0d 0a 7b 0d 0a 20 20 69 66 20 28 64 62  *p)..{..  if (db
1cf0: 29 20 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65 33  ) {..    sqlite3
1d00: 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d  _mutex_enter(db-
1d10: 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 7d 0d 0a 20  >mutex);..  }.. 
1d20: 20 69 66 20 28 70 29 20 7b 0d 0a 20 20 20 20 73   if (p) {..    s
1d30: 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
1d40: 74 54 79 70 65 28 70 2c 20 4d 45 4d 54 59 50 45  tType(p, MEMTYPE
1d50: 5f 44 42 7c 4d 45 4d 54 59 50 45 5f 48 45 41 50  _DB|MEMTYPE_HEAP
1d60: 29 3b 0d 0a 20 20 7d 0d 0a 20 20 73 71 6c 69 74  );..  }..  sqlit
1d70: 65 33 44 62 46 72 65 65 28 64 62 2c 70 29 3b 0d  e3DbFree(db,p);.
1d80: 0a 20 20 69 66 20 28 64 62 29 20 7b 0d 0a 20 20  .  if (db) {..  
1d90: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
1da0: 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29  leave(db->mutex)
1db0: 3b 0d 0a 20 20 7d 0d 0a 7d 0d 0a 23 65 6e 64 69  ;..  }..}..#endi
1dc0: 66 0d 0a 0d 0a 2f 2a 0d 0a 20 20 20 20 54 68 65  f..../*..    The
1dd0: 20 67 6f 61 6c 20 6f 66 20 74 68 69 73 20 76 65   goal of this ve
1de0: 72 73 69 6f 6e 20 6f 66 20 63 6c 6f 73 65 20 69  rsion of close i
1df0: 73 20 64 69 66 66 65 72 65 6e 74 20 74 68 61 6e  s different than
1e00: 20 74 68 61 74 20 6f 66 20 73 71 6c 69 74 65 33   that of sqlite3
1e10: 5f 63 6c 6f 73 65 28 29 2c 20 61 6e 64 20 69 73  _close(), and is
1e20: 20 64 65 73 69 67 6e 65 64 20 74 6f 20 6c 65 6e   designed to len
1e30: 64 20 69 74 73 65 6c 66 20 62 65 74 74 65 72 20  d itself better 
1e40: 74 6f 20 2e 4e 45 54 27 73 20 6e 6f 6e 2d 64 65  to .NET's non-de
1e50: 74 65 72 6d 69 6e 69 73 74 69 63 20 66 69 6e 61  terministic fina
1e60: 6c 69 7a 65 72 73 20 61 6e 64 0d 0a 20 20 20 20  lizers and..    
1e70: 74 68 65 20 47 43 20 74 68 72 65 61 64 2e 20 20  the GC thread.  
1e80: 53 51 4c 69 74 65 20 77 69 6c 6c 20 6e 6f 74 20  SQLite will not 
1e90: 63 6c 6f 73 65 20 61 20 64 61 74 61 62 61 73 65  close a database
1ea0: 20 69 66 20 73 74 61 74 65 6d 65 6e 74 73 20 61   if statements a
1eb0: 72 65 20 6f 70 65 6e 20 6f 6e 20 69 74 20 2d 2d  re open on it --
1ec0: 20 62 75 74 20 66 6f 72 20 6f 75 72 20 70 75 72   but for our pur
1ed0: 70 6f 73 65 73 2c 20 77 65 27 64 20 72 61 74 68  poses, we'd rath
1ee0: 65 72 20 66 69 6e 61 6c 69 7a 65 20 61 6c 6c 20  er finalize all 
1ef0: 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
1f00: 73 0d 0a 20 20 20 20 61 6e 64 20 66 6f 72 63 69  s..    and forci
1f10: 62 6c 79 20 63 6c 6f 73 65 20 74 68 65 20 64 61  bly close the da
1f20: 74 61 62 61 73 65 2e 20 20 54 68 65 20 72 65 61  tabase.  The rea
1f30: 73 6f 6e 20 69 73 20 73 69 6d 70 6c 65 20 2d 2d  son is simple --
1f40: 20 61 20 6c 6f 74 20 6f 66 20 70 65 6f 70 6c 65   a lot of people
1f50: 20 64 6f 6e 27 74 20 44 69 73 70 6f 73 65 28 29   don't Dispose()
1f60: 20 6f 66 20 74 68 65 69 72 20 6f 62 6a 65 63 74   of their object
1f70: 73 20 63 6f 72 72 65 63 74 6c 79 20 61 6e 64 20  s correctly and 
1f80: 6c 65 74 20 74 68 65 20 67 61 72 62 61 67 65 20  let the garbage 
1f90: 63 6f 6c 6c 65 63 74 6f 72 0d 0a 20 20 20 20 64  collector..    d
1fa0: 6f 20 69 74 2e 20 20 54 68 69 73 20 6c 65 61 64  o it.  This lead
1fb0: 73 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20  s to unexpected 
1fc0: 62 65 68 61 76 69 6f 72 20 77 68 65 6e 20 61 20  behavior when a 
1fd0: 75 73 65 72 20 74 68 69 6e 6b 73 20 74 68 65 79  user thinks they
1fe0: 27 76 65 20 63 6c 6f 73 65 64 20 61 20 64 61 74  've closed a dat
1ff0: 61 62 61 73 65 2c 20 62 75 74 20 69 74 27 73 20  abase, but it's 
2000: 73 74 69 6c 6c 20 6f 70 65 6e 20 62 65 63 61 75  still open becau
2010: 73 65 20 6e 6f 74 20 61 6c 6c 20 74 68 65 20 73  se not all the s
2020: 74 61 74 65 6d 65 6e 74 73 20 68 61 76 65 0d 0a  tatements have..
2030: 20 20 20 20 68 69 74 20 74 68 65 20 47 43 20 79      hit the GC y
2040: 65 74 2e 0d 0a 0d 0a 20 20 20 20 53 6f 2c 20 68  et.....    So, h
2050: 65 72 65 20 77 65 20 68 61 76 65 20 61 20 70 72  ere we have a pr
2060: 6f 62 6c 65 6d 20 2e 2e 2e 20 2e 4e 45 54 20 68  oblem ... .NET h
2070: 61 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  as a pointer to 
2080: 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66 20 73 71  any number of sq
2090: 6c 69 74 65 33 5f 73 74 6d 74 20 6f 62 6a 65 63  lite3_stmt objec
20a0: 74 73 2e 20 20 57 65 20 63 61 6e 27 74 20 63 61  ts.  We can't ca
20b0: 6c 6c 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  ll sqlite3_final
20c0: 69 7a 65 28 29 20 6f 6e 20 74 68 65 73 65 20 62  ize() on these b
20d0: 65 63 61 75 73 65 0d 0a 20 20 20 20 74 68 65 69  ecause..    thei
20e0: 72 20 6d 65 6d 6f 72 79 20 69 73 20 66 72 65 65  r memory is free
20f0: 64 20 61 6e 64 20 63 61 6e 20 62 65 20 75 73 65  d and can be use
2100: 64 20 66 6f 72 20 73 6f 6d 65 74 68 69 6e 67 20  d for something 
2110: 65 6c 73 65 2e 20 20 54 68 65 20 47 43 20 74 68  else.  The GC th
2120: 72 65 61 64 20 63 6f 75 6c 64 20 70 6f 74 65 6e  read could poten
2130: 74 69 61 6c 6c 79 20 74 72 79 20 61 6e 64 20 63  tially try and c
2140: 61 6c 6c 20 66 69 6e 61 6c 69 7a 65 20 61 67 61  all finalize aga
2150: 69 6e 20 6f 6e 20 74 68 65 20 73 74 61 74 65 6d  in on the statem
2160: 65 6e 74 20 61 66 74 65 72 0d 0a 20 20 20 20 74  ent after..    t
2170: 68 61 74 20 6d 65 6d 6f 72 79 20 77 61 73 20 64  hat memory was d
2180: 65 61 6c 6c 6f 63 61 74 65 64 2e 20 20 42 41 44  eallocated.  BAD
2190: 2e 20 20 53 6f 2c 20 77 68 61 74 20 77 65 20 6e  .  So, what we n
21a0: 65 65 64 20 74 6f 20 64 6f 20 69 73 20 6d 61 6b  eed to do is mak
21b0: 65 20 61 20 63 6f 70 79 20 6f 66 20 65 61 63 68  e a copy of each
21c0: 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 6e 64 20   statement, and 
21d0: 63 61 6c 6c 20 66 69 6e 61 6c 69 7a 65 28 29 20  call finalize() 
21e0: 6f 6e 20 74 68 65 20 63 6f 70 79 20 2d 2d 20 73  on the copy -- s
21f0: 6f 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69  o that the origi
2200: 6e 61 6c 0d 0a 20 20 20 20 73 74 61 74 65 6d 65  nal..    stateme
2210: 6e 74 27 73 20 6d 65 6d 6f 72 79 20 69 73 20 70  nt's memory is p
2220: 72 65 73 65 72 76 65 64 2c 20 61 6e 64 20 6d 61  reserved, and ma
2230: 72 6b 65 64 20 61 73 20 42 41 44 2c 20 62 75 74  rked as BAD, but
2240: 20 77 65 20 63 61 6e 20 73 74 69 6c 6c 20 6d 61   we can still ma
2250: 6e 61 67 65 20 74 6f 20 66 69 6e 61 6c 69 7a 65  nage to finalize
2260: 20 65 76 65 72 79 74 68 69 6e 67 20 61 6e 64 20   everything and 
2270: 66 6f 72 63 69 62 6c 79 20 63 6c 6f 73 65 20 74  forcibly close t
2280: 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 4c 61  he database.  La
2290: 74 65 72 20 77 68 65 6e 20 74 68 65 0d 0a 20 20  ter when the..  
22a0: 20 20 47 43 20 67 65 74 73 20 61 72 6f 75 6e 64    GC gets around
22b0: 20 74 6f 20 63 61 6c 6c 69 6e 67 20 66 69 6e 61   to calling fina
22c0: 6c 69 7a 65 5f 69 6e 74 65 72 6f 70 28 29 20 6f  lize_interop() o
22d0: 6e 20 74 68 65 20 22 62 61 64 22 20 73 74 61 74  n the "bad" stat
22e0: 65 6d 65 6e 74 2c 20 77 65 20 64 65 74 65 63 74  ement, we detect
22f0: 20 74 68 61 74 20 61 6e 64 20 66 69 6e 69 73 68   that and finish
2300: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
2310: 65 20 70 6f 69 6e 74 65 72 2e 0d 0a 2a 2f 0d 0a  e pointer...*/..
2320: 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57  SQLITE_API int W
2330: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6c  INAPI sqlite3_cl
2340: 6f 73 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  ose_interop(sqli
2350: 74 65 33 20 2a 64 62 29 0d 0a 7b 0d 0a 20 20 69  te3 *db)..{..  i
2360: 6e 74 20 72 65 74 3b 0d 0a 23 69 66 20 21 64 65  nt ret;..#if !de
2370: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 4c 45  fined(INTEROP_LE
2380: 47 41 43 59 5f 43 4c 4f 53 45 29 20 26 26 20 53  GACY_CLOSE) && S
2390: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
23a0: 4d 42 45 52 20 3e 3d 20 33 30 30 37 30 31 34 0d  MBER >= 3007014.
23b0: 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49  ...#if defined(I
23c0: 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26  NTEROP_DEBUG) &&
23d0: 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20   (INTEROP_DEBUG 
23e0: 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f  & INTEROP_DEBUG_
23f0: 43 4c 4f 53 45 29 0d 0a 20 20 73 71 6c 69 74 65  CLOSE)..  sqlite
2400: 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73  3InteropDebug("s
2410: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 5f 69 6e 74  qlite3_close_int
2420: 65 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20  erop(): calling 
2430: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 5f 76 32  sqlite3_close_v2
2440: 28 25 70 29 2e 2e 2e 5c 6e 22 2c 20 64 62 29 3b  (%p)...\n", db);
2450: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65  ..#endif....  re
2460: 74 20 3d 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  t = sqlite3_clos
2470: 65 5f 76 32 28 64 62 29 3b 0d 0a 0d 0a 23 69 66  e_v2(db);....#if
2480: 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50   defined(INTEROP
2490: 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e 54 45  _DEBUG) && (INTE
24a0: 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45  ROP_DEBUG & INTE
24b0: 52 4f 50 5f 44 45 42 55 47 5f 43 4c 4f 53 45 29  ROP_DEBUG_CLOSE)
24c0: 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72  ..  sqlite3Inter
24d0: 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33  opDebug("sqlite3
24e0: 5f 63 6c 6f 73 65 5f 69 6e 74 65 72 6f 70 28 29  _close_interop()
24f0: 3a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 5f  : sqlite3_close_
2500: 76 32 28 25 70 29 20 72 65 74 75 72 6e 65 64 20  v2(%p) returned 
2510: 25 64 2e 5c 6e 22 2c 20 64 62 2c 20 72 65 74 29  %d.\n", db, ret)
2520: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72  ;..#endif....  r
2530: 65 74 75 72 6e 20 72 65 74 3b 0d 0a 23 65 6c 73  eturn ret;..#els
2540: 65 0d 0a 20 20 72 65 74 20 3d 20 73 71 6c 69 74  e..  ret = sqlit
2550: 65 33 5f 63 6c 6f 73 65 28 64 62 29 3b 0d 0a 0d  e3_close(db);...
2560: 0a 20 20 69 66 20 28 72 65 74 20 3d 3d 20 53 51  .  if (ret == SQ
2570: 4c 49 54 45 5f 42 55 53 59 29 0d 0a 20 20 7b 0d  LITE_BUSY)..  {.
2580: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  .    sqlite3_mut
2590: 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74  ex_enter(db->mut
25a0: 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 69 66 20 28  ex);....    if (
25b0: 21 64 62 2d 3e 70 56 64 62 65 29 0d 0a 20 20 20  !db->pVdbe)..   
25c0: 20 7b 0d 0a 20 20 20 20 20 20 73 71 6c 69 74 65   {..      sqlite
25d0: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62  3_mutex_leave(db
25e0: 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 20 20 20  ->mutex);..     
25f0: 20 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 20 20   return ret;..  
2600: 20 20 7d 0d 0a 0d 0a 20 20 20 20 77 68 69 6c 65    }....    while
2610: 20 28 64 62 2d 3e 70 56 64 62 65 29 0d 0a 20 20   (db->pVdbe)..  
2620: 20 20 7b 0d 0a 20 20 20 20 20 20 2f 2a 20 4d 61    {..      /* Ma
2630: 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65  ke a copy of the
2640: 20 66 69 72 73 74 20 70 72 65 70 61 72 65 64 20   first prepared 
2650: 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0d 0a 20 20  statement */..  
2660: 20 20 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56      Vdbe *p = (V
2670: 64 62 65 20 2a 29 73 71 6c 69 74 65 33 44 62 4d  dbe *)sqlite3DbM
2680: 61 6c 6c 6f 63 5a 65 72 6f 5f 69 6e 74 65 72 6f  allocZero_intero
2690: 70 28 64 62 2c 20 73 69 7a 65 6f 66 28 56 64 62  p(db, sizeof(Vdb
26a0: 65 29 29 3b 0d 0a 20 20 20 20 20 20 56 64 62 65  e));..      Vdbe
26b0: 20 2a 70 6f 20 3d 20 64 62 2d 3e 70 56 64 62 65   *po = db->pVdbe
26c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 21  ;....      if (!
26d0: 70 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  p)..      {..   
26e0: 20 20 20 20 20 72 65 74 20 3d 20 53 51 4c 49 54       ret = SQLIT
26f0: 45 5f 4e 4f 4d 45 4d 3b 0d 0a 20 20 20 20 20 20  E_NOMEM;..      
2700: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
2710: 7d 0d 0a 0d 0a 20 20 20 20 20 20 43 6f 70 79 4d  }....      CopyM
2720: 65 6d 6f 72 79 28 70 2c 20 70 6f 2c 20 73 69 7a  emory(p, po, siz
2730: 65 6f 66 28 56 64 62 65 29 29 3b 0d 0a 0d 0a 20  eof(Vdbe));.... 
2740: 20 20 20 20 20 2f 2a 20 50 75 74 20 69 74 20 6f       /* Put it o
2750: 6e 20 74 68 65 20 63 68 61 69 6e 20 73 6f 20 77  n the chain so w
2760: 65 20 63 61 6e 20 66 72 65 65 20 69 74 20 2a 2f  e can free it */
2770: 0d 0a 20 20 20 20 20 20 64 62 2d 3e 70 56 64 62  ..      db->pVdb
2780: 65 20 3d 20 70 3b 0d 0a 20 20 20 20 20 20 72 65  e = p;..      re
2790: 74 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  t = sqlite3_fina
27a0: 6c 69 7a 65 28 28 73 71 6c 69 74 65 33 5f 73 74  lize((sqlite3_st
27b0: 6d 74 20 2a 29 70 29 3b 20 2f 2a 20 54 68 69 73  mt *)p); /* This
27c0: 20 77 69 6c 6c 20 61 6c 73 6f 20 66 72 65 65 20   will also free 
27d0: 74 68 65 20 63 6f 70 79 27 73 20 6d 65 6d 6f 72  the copy's memor
27e0: 79 20 2a 2f 0d 0a 20 20 20 20 20 20 69 66 20 28  y */..      if (
27f0: 72 65 74 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ret)..      {.. 
2800: 20 20 20 20 20 20 20 2f 2a 20 66 69 6e 61 6c 69         /* finali
2810: 7a 65 20 66 61 69 6c 65 64 20 2d 2d 20 73 6f 20  ze failed -- so 
2820: 77 65 20 6d 75 73 74 20 70 75 74 20 62 61 63 6b  we must put back
2830: 20 61 6e 79 74 68 69 6e 67 20 77 65 20 6d 75 6e   anything we mun
2840: 67 65 64 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  ged */..        
2850: 43 6f 70 79 4d 65 6d 6f 72 79 28 70 6f 2c 20 70  CopyMemory(po, p
2860: 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 29 29 3b  , sizeof(Vdbe));
2870: 0d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 56  ..        db->pV
2880: 64 62 65 20 3d 20 70 6f 3b 0d 0a 0d 0a 20 20 20  dbe = po;....   
2890: 20 20 20 20 20 2f 2a 0d 0a 20 20 20 20 20 20 20       /*..       
28a0: 20 2a 2a 20 4e 4f 54 45 3a 20 4f 6b 2c 20 77 65   ** NOTE: Ok, we
28b0: 20 6d 75 73 74 20 66 72 65 65 20 74 68 69 73 20   must free this 
28c0: 62 6c 6f 63 6b 20 74 68 61 74 20 2a 77 65 2a 20  block that *we* 
28d0: 61 6c 6c 6f 63 61 74 65 64 20 28 61 62 6f 76 65  allocated (above
28e0: 29 20 73 69 6e 63 65 0d 0a 20 20 20 20 20 20 20  ) since..       
28f0: 20 2a 2a 20 20 20 20 20 20 20 66 69 6e 61 6c 69   **       finali
2900: 7a 65 20 64 69 64 20 6e 6f 74 20 64 6f 20 73 6f  ze did not do so
2910: 2e 0d 0a 20 20 20 20 20 20 20 20 2a 2f 0d 0a 20  ...        */.. 
2920: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
2930: 46 72 65 65 5f 69 6e 74 65 72 6f 70 28 64 62 2c  Free_interop(db,
2940: 20 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 72   p);..        br
2950: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  eak;..      }.. 
2960: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
2970: 20 7b 0d 0a 20 20 20 20 20 20 20 20 5a 65 72 6f   {..        Zero
2980: 4d 65 6d 6f 72 79 28 70 6f 2c 20 73 69 7a 65 6f  Memory(po, sizeo
2990: 66 28 56 64 62 65 29 29 3b 0d 0a 20 20 20 20 20  f(Vdbe));..     
29a0: 20 20 20 70 6f 2d 3e 6d 61 67 69 63 20 3d 20 56     po->magic = V
29b0: 44 42 45 5f 4d 41 47 49 43 5f 44 45 41 44 3b 0d  DBE_MAGIC_DEAD;.
29c0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
29d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  .    sqlite3_mut
29e0: 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74  ex_leave(db->mut
29f0: 65 78 29 3b 0d 0a 20 20 20 20 72 65 74 20 3d 20  ex);..    ret = 
2a00: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64 62  sqlite3_close(db
2a10: 29 3b 0d 0a 20 20 7d 0d 0a 20 20 72 65 74 75 72  );..  }..  retur
2a20: 6e 20 72 65 74 3b 0d 0a 23 65 6e 64 69 66 0d 0a  n ret;..#endif..
2a30: 7d 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64  }....#if defined
2a40: 28 49 4e 54 45 52 4f 50 5f 4c 4f 47 29 0d 0a 53  (INTEROP_LOG)..S
2a50: 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49  QLITE_API int WI
2a60: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6e  NAPI sqlite3_con
2a70: 66 69 67 5f 6c 6f 67 5f 69 6e 74 65 72 6f 70 28  fig_log_interop(
2a80: 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72 65 74 3b  )..{..  int ret;
2a90: 0d 0a 20 20 69 66 28 20 21 6c 6f 67 43 6f 6e 66  ..  if( !logConf
2aa0: 69 67 75 72 65 64 20 29 7b 0d 0a 20 20 20 20 72  igured ){..    r
2ab0: 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6e  et = sqlite3_con
2ac0: 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49  fig(SQLITE_CONFI
2ad0: 47 5f 4c 4f 47 2c 20 73 71 6c 69 74 65 33 49 6e  G_LOG, sqlite3In
2ae0: 74 65 72 6f 70 4c 6f 67 43 61 6c 6c 62 61 63 6b  teropLogCallback
2af0: 2c 20 30 29 3b 0d 0a 20 20 20 20 69 66 28 20 72  , 0);..    if( r
2b00: 65 74 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  et==SQLITE_OK ){
2b10: 0d 0a 20 20 20 20 20 20 6c 6f 67 43 6f 6e 66 69  ..      logConfi
2b20: 67 75 72 65 64 20 3d 20 31 3b 0d 0a 20 20 20 20  gured = 1;..    
2b30: 7d 65 6c 73 65 7b 0d 0a 20 20 20 20 20 20 73 71  }else{..      sq
2b40: 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75  lite3InteropDebu
2b50: 67 28 22 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  g("sqlite3_confi
2b60: 67 5f 6c 6f 67 5f 69 6e 74 65 72 6f 70 28 29 3a  g_log_interop():
2b70: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28   sqlite3_config(
2b80: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f  SQLITE_CONFIG_LO
2b90: 47 29 20 72 65 74 75 72 6e 65 64 20 25 64 2e 5c  G) returned %d.\
2ba0: 6e 22 2c 20 72 65 74 29 3b 0d 0a 20 20 20 20 7d  n", ret);..    }
2bb0: 0d 0a 20 20 7d 65 6c 73 65 7b 0d 0a 20 20 20 20  ..  }else{..    
2bc0: 72 65 74 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  ret = SQLITE_OK;
2bd0: 0d 0a 20 20 7d 0d 0a 20 20 72 65 74 75 72 6e 20  ..  }..  return 
2be0: 72 65 74 3b 0d 0a 7d 0d 0a 23 65 6e 64 69 66 0d  ret;..}..#endif.
2bf0: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f  ...SQLITE_API co
2c00: 6e 73 74 20 63 68 61 72 20 2a 57 49 4e 41 50 49  nst char *WINAPI
2c10: 20 69 6e 74 65 72 6f 70 5f 6c 69 62 76 65 72 73   interop_libvers
2c20: 69 6f 6e 28 76 6f 69 64 29 0d 0a 7b 0d 0a 20 20  ion(void)..{..  
2c30: 72 65 74 75 72 6e 20 49 4e 54 45 52 4f 50 5f 56  return INTEROP_V
2c40: 45 52 53 49 4f 4e 3b 0d 0a 7d 0d 0a 0d 0a 53 51  ERSION;..}....SQ
2c50: 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 63  LITE_API const c
2c60: 68 61 72 20 2a 57 49 4e 41 50 49 20 69 6e 74 65  har *WINAPI inte
2c70: 72 6f 70 5f 73 6f 75 72 63 65 69 64 28 76 6f 69  rop_sourceid(voi
2c80: 64 29 0d 0a 7b 0d 0a 20 20 72 65 74 75 72 6e 20  d)..{..  return 
2c90: 49 4e 54 45 52 4f 50 5f 53 4f 55 52 43 45 5f 49  INTEROP_SOURCE_I
2ca0: 44 20 22 20 22 20 49 4e 54 45 52 4f 50 5f 53 4f  D " " INTEROP_SO
2cb0: 55 52 43 45 5f 54 49 4d 45 53 54 41 4d 50 3b 0d  URCE_TIMESTAMP;.
2cc0: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
2cd0: 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69   int WINAPI sqli
2ce0: 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70  te3_open_interop
2cf0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 66 69 6c  (const char *fil
2d00: 65 6e 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61  ename, const cha
2d10: 72 20 2a 76 66 73 4e 61 6d 65 2c 20 69 6e 74 20  r *vfsName, int 
2d20: 66 6c 61 67 73 2c 20 69 6e 74 20 65 78 74 46 75  flags, int extFu
2d30: 6e 63 73 2c 20 73 71 6c 69 74 65 33 20 2a 2a 70  ncs, sqlite3 **p
2d40: 70 64 62 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72  pdb)..{..  int r
2d50: 65 74 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e  et;....#if defin
2d60: 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  ed(INTEROP_DEBUG
2d70: 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45  ) && (INTEROP_DE
2d80: 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45  BUG & INTEROP_DE
2d90: 42 55 47 5f 4f 50 45 4e 29 0d 0a 20 20 73 71 6c  BUG_OPEN)..  sql
2da0: 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67  ite3InteropDebug
2db0: 28 22 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69  ("sqlite3_open_i
2dc0: 6e 74 65 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e  nterop(): callin
2dd0: 67 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76  g sqlite3_open_v
2de0: 32 28 5c 22 25 73 5c 22 2c 20 5c 22 25 73 5c 22  2(\"%s\", \"%s\"
2df0: 2c 20 25 64 2c 20 25 64 2c 20 25 70 29 2e 2e 2e  , %d, %d, %p)...
2e00: 5c 6e 22 2c 20 66 69 6c 65 6e 61 6d 65 2c 20 76  \n", filename, v
2e10: 66 73 4e 61 6d 65 2c 20 66 6c 61 67 73 2c 20 65  fsName, flags, e
2e20: 78 74 46 75 6e 63 73 2c 20 70 70 64 62 29 3b 0d  xtFuncs, ppdb);.
2e30: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74  .#endif....  ret
2e40: 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f   = sqlite3_open_
2e50: 76 32 28 66 69 6c 65 6e 61 6d 65 2c 20 70 70 64  v2(filename, ppd
2e60: 62 2c 20 66 6c 61 67 73 2c 20 76 66 73 4e 61 6d  b, flags, vfsNam
2e70: 65 29 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e  e);....#if defin
2e80: 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  ed(INTEROP_DEBUG
2e90: 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45  ) && (INTEROP_DE
2ea0: 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45  BUG & INTEROP_DE
2eb0: 42 55 47 5f 4f 50 45 4e 29 0d 0a 20 20 73 71 6c  BUG_OPEN)..  sql
2ec0: 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67  ite3InteropDebug
2ed0: 28 22 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69  ("sqlite3_open_i
2ee0: 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c 69 74 65  nterop(): sqlite
2ef0: 33 5f 6f 70 65 6e 5f 76 32 28 5c 22 25 73 5c 22  3_open_v2(\"%s\"
2f00: 2c 20 5c 22 25 73 5c 22 2c 20 25 64 2c 20 25 64  , \"%s\", %d, %d
2f10: 2c 20 25 70 29 20 72 65 74 75 72 6e 65 64 20 25  , %p) returned %
2f20: 64 2e 5c 6e 22 2c 20 66 69 6c 65 6e 61 6d 65 2c  d.\n", filename,
2f30: 20 76 66 73 4e 61 6d 65 2c 20 66 6c 61 67 73 2c   vfsName, flags,
2f40: 20 65 78 74 46 75 6e 63 73 2c 20 70 70 64 62 2c   extFuncs, ppdb,
2f50: 20 72 65 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a   ret);..#endif..
2f60: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
2f70: 54 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f  TEROP_EXTENSION_
2f80: 46 55 4e 43 54 49 4f 4e 53 29 0d 0a 20 20 69 66  FUNCTIONS)..  if
2f90: 20 28 28 72 65 74 20 3d 3d 20 53 51 4c 49 54 45   ((ret == SQLITE
2fa0: 5f 4f 4b 29 20 26 26 20 70 70 64 62 20 26 26 20  _OK) && ppdb && 
2fb0: 65 78 74 46 75 6e 63 73 29 0d 0a 20 20 20 20 52  extFuncs)..    R
2fc0: 65 67 69 73 74 65 72 45 78 74 65 6e 73 69 6f 6e  egisterExtension
2fd0: 46 75 6e 63 74 69 6f 6e 73 28 2a 70 70 64 62 29  Functions(*ppdb)
2fe0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72  ;..#endif....  r
2ff0: 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a 0d  eturn ret;..}...
3000: 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20  .SQLITE_API int 
3010: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 6f  WINAPI sqlite3_o
3020: 70 65 6e 31 36 5f 69 6e 74 65 72 6f 70 28 63 6f  pen16_interop(co
3030: 6e 73 74 20 63 68 61 72 20 2a 66 69 6c 65 6e 61  nst char *filena
3040: 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  me, const char *
3050: 76 66 73 4e 61 6d 65 2c 20 69 6e 74 20 66 6c 61  vfsName, int fla
3060: 67 73 2c 20 69 6e 74 20 65 78 74 46 75 6e 63 73  gs, int extFuncs
3070: 2c 20 73 71 6c 69 74 65 33 20 2a 2a 70 70 64 62  , sqlite3 **ppdb
3080: 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72 65 74 3b  )..{..  int ret;
3090: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
30a0: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26  INTEROP_DEBUG) &
30b0: 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  & (INTEROP_DEBUG
30c0: 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47   & INTEROP_DEBUG
30d0: 5f 4f 50 45 4e 31 36 29 0d 0a 20 20 73 71 6c 69  _OPEN16)..  sqli
30e0: 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28  te3InteropDebug(
30f0: 22 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 5f  "sqlite3_open16_
3100: 69 6e 74 65 72 6f 70 28 29 3a 20 63 61 6c 6c 69  interop(): calli
3110: 6e 67 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f  ng sqlite3_open_
3120: 69 6e 74 65 72 6f 70 28 5c 22 25 73 5c 22 2c 20  interop(\"%s\", 
3130: 5c 22 25 73 5c 22 2c 20 25 64 2c 20 25 64 2c 20  \"%s\", %d, %d, 
3140: 25 70 29 2e 2e 2e 5c 6e 22 2c 20 66 69 6c 65 6e  %p)...\n", filen
3150: 61 6d 65 2c 20 76 66 73 4e 61 6d 65 2c 20 66 6c  ame, vfsName, fl
3160: 61 67 73 2c 20 65 78 74 46 75 6e 63 73 2c 20 70  ags, extFuncs, p
3170: 70 64 62 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  pdb);..#endif...
3180: 0a 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33  .  ret = sqlite3
3190: 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28 66 69  _open_interop(fi
31a0: 6c 65 6e 61 6d 65 2c 20 76 66 73 4e 61 6d 65 2c  lename, vfsName,
31b0: 20 66 6c 61 67 73 2c 20 65 78 74 46 75 6e 63 73   flags, extFuncs
31c0: 2c 20 70 70 64 62 29 3b 0d 0a 0d 0a 23 69 66 20  , ppdb);....#if 
31d0: 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f  defined(INTEROP_
31e0: 44 45 42 55 47 29 20 26 26 20 28 49 4e 54 45 52  DEBUG) && (INTER
31f0: 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52  OP_DEBUG & INTER
3200: 4f 50 5f 44 45 42 55 47 5f 4f 50 45 4e 31 36 29  OP_DEBUG_OPEN16)
3210: 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72  ..  sqlite3Inter
3220: 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33  opDebug("sqlite3
3230: 5f 6f 70 65 6e 31 36 5f 69 6e 74 65 72 6f 70 28  _open16_interop(
3240: 29 3a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f  ): sqlite3_open_
3250: 69 6e 74 65 72 6f 70 28 5c 22 25 73 5c 22 2c 20  interop(\"%s\", 
3260: 5c 22 25 73 5c 22 2c 20 25 64 2c 20 25 64 2c 20  \"%s\", %d, %d, 
3270: 25 70 29 20 72 65 74 75 72 6e 65 64 20 25 64 2e  %p) returned %d.
3280: 5c 6e 22 2c 20 66 69 6c 65 6e 61 6d 65 2c 20 76  \n", filename, v
3290: 66 73 4e 61 6d 65 2c 20 66 6c 61 67 73 2c 20 65  fsName, flags, e
32a0: 78 74 46 75 6e 63 73 2c 20 70 70 64 62 2c 20 72  xtFuncs, ppdb, r
32b0: 65 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  et);..#endif....
32c0: 20 20 69 66 20 28 28 72 65 74 20 3d 3d 20 53 51    if ((ret == SQ
32d0: 4c 49 54 45 5f 4f 4b 29 20 26 26 20 70 70 64 62  LITE_OK) && ppdb
32e0: 20 26 26 20 21 44 62 48 61 73 50 72 6f 70 65 72   && !DbHasProper
32f0: 74 79 28 2a 70 70 64 62 2c 20 30 2c 20 44 42 5f  ty(*ppdb, 0, DB_
3300: 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 29 0d 0a  SchemaLoaded))..
3310: 20 20 7b 0d 0a 20 20 20 20 45 4e 43 28 2a 70 70    {..    ENC(*pp
3320: 64 62 29 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  db) = SQLITE_UTF
3330: 31 36 4e 41 54 49 56 45 3b 0d 0a 0d 0a 23 69 66  16NATIVE;....#if
3340: 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f   SQLITE_VERSION_
3350: 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 38 30 30  NUMBER >= 300800
3360: 38 0d 0a 20 20 20 20 2f 2f 0d 0a 20 20 20 20 2f  8..    //..    /
3370: 2f 20 42 55 47 46 49 58 3a 20 53 65 65 20 74 69  / BUGFIX: See ti
3380: 63 6b 65 74 20 5b 37 63 31 35 31 61 32 66 30 65  cket [7c151a2f0e
3390: 32 32 38 30 34 63 5d 2e 0d 0a 20 20 20 20 2f 2f  22804c]...    //
33a0: 0d 0a 20 20 20 20 53 43 48 45 4d 41 5f 45 4e 43  ..    SCHEMA_ENC
33b0: 28 2a 70 70 64 62 29 20 3d 20 53 51 4c 49 54 45  (*ppdb) = SQLITE
33c0: 5f 55 54 46 31 36 4e 41 54 49 56 45 3b 0d 0a 23  _UTF16NATIVE;..#
33d0: 65 6e 64 69 66 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  endif..  }....  
33e0: 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a  return ret;..}..
33f0: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e  ..SQLITE_API con
3400: 73 74 20 63 68 61 72 20 2a 57 49 4e 41 50 49 20  st char *WINAPI 
3410: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 5f 69  sqlite3_errmsg_i
3420: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 20 2a  nterop(sqlite3 *
3430: 64 62 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a  db, int *plen)..
3440: 7b 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  {..  const char 
3450: 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f  *pval = sqlite3_
3460: 65 72 72 6d 73 67 28 64 62 29 3b 0d 0a 20 20 69  errmsg(db);..  i
3470: 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d  f (plen) *plen =
3480: 20 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e 28 70   pval ? strlen(p
3490: 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74  val) : 0;..  ret
34a0: 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a  urn pval;..}....
34b0: 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57  SQLITE_API int W
34c0: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 68  INAPI sqlite3_ch
34d0: 61 6e 67 65 73 5f 69 6e 74 65 72 6f 70 28 73 71  anges_interop(sq
34e0: 6c 69 74 65 33 20 2a 64 62 29 0d 0a 7b 0d 0a 20  lite3 *db)..{.. 
34f0: 20 69 6e 74 20 72 65 73 75 6c 74 3b 0d 0a 0d 0a   int result;....
3500: 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45  #if defined(INTE
3510: 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28 49  ROP_DEBUG) && (I
3520: 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49  NTEROP_DEBUG & I
3530: 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 43 48 41  NTEROP_DEBUG_CHA
3540: 4e 47 45 53 29 0d 0a 20 20 73 71 6c 69 74 65 33  NGES)..  sqlite3
3550: 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71  InteropDebug("sq
3560: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 5f 69 6e  lite3_changes_in
3570: 74 65 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67  terop(): calling
3580: 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73   sqlite3_changes
3590: 28 25 70 29 2e 2e 2e 5c 6e 22 2c 20 64 62 29 3b  (%p)...\n", db);
35a0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 6e  ..#endif....#ifn
35b0: 64 65 66 20 4e 44 45 42 55 47 0d 0a 20 20 69 66  def NDEBUG..  if
35c0: 20 28 21 64 62 29 0d 0a 20 20 20 20 20 20 73 71   (!db)..      sq
35d0: 6c 69 74 65 33 49 6e 74 65 72 6f 70 42 72 65 61  lite3InteropBrea
35e0: 6b 28 22 6e 75 6c 6c 20 64 61 74 61 62 61 73 65  k("null database
35f0: 20 68 61 6e 64 6c 65 20 66 6f 72 20 73 71 6c 69   handle for sqli
3600: 74 65 33 5f 63 68 61 6e 67 65 73 28 29 22 29 3b  te3_changes()");
3610: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65  ..#endif....  re
3620: 73 75 6c 74 20 3d 20 73 71 6c 69 74 65 33 5f 63  sult = sqlite3_c
3630: 68 61 6e 67 65 73 28 64 62 29 3b 0d 0a 0d 0a 23  hanges(db);....#
3640: 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52  if defined(INTER
3650: 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e  OP_DEBUG) && (IN
3660: 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e  TEROP_DEBUG & IN
3670: 54 45 52 4f 50 5f 44 45 42 55 47 5f 43 48 41 4e  TEROP_DEBUG_CHAN
3680: 47 45 53 29 0d 0a 20 20 73 71 6c 69 74 65 33 49  GES)..  sqlite3I
3690: 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c  nteropDebug("sql
36a0: 69 74 65 33 5f 63 68 61 6e 67 65 73 5f 69 6e 74  ite3_changes_int
36b0: 65 72 6f 70 28 29 3a 20 73 71 6c 69 74 65 33 5f  erop(): sqlite3_
36c0: 63 68 61 6e 67 65 73 28 25 70 29 20 72 65 74 75  changes(%p) retu
36d0: 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 64 62 2c  rned %d.\n", db,
36e0: 20 72 65 73 75 6c 74 29 3b 0d 0a 23 65 6e 64 69   result);..#endi
36f0: 66 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 72 65  f....  return re
3700: 73 75 6c 74 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49  sult;..}....SQLI
3710: 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41 50  TE_API int WINAP
3720: 49 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  I sqlite3_prepar
3730: 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  e_interop(sqlite
3740: 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61  3 *db, const cha
3750: 72 20 2a 73 71 6c 2c 20 69 6e 74 20 6e 62 79 74  r *sql, int nbyt
3760: 65 73 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  es, sqlite3_stmt
3770: 20 2a 2a 70 70 73 74 6d 74 2c 20 63 6f 6e 73 74   **ppstmt, const
3780: 20 63 68 61 72 20 2a 2a 70 7a 74 61 69 6c 2c 20   char **pztail, 
3790: 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20  int *plen)..{.. 
37a0: 20 69 6e 74 20 6e 3b 0d 0a 0d 0a 23 69 66 20 64   int n;....#if d
37b0: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44  efined(INTEROP_D
37c0: 45 42 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f  EBUG) && (INTERO
37d0: 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f  P_DEBUG & INTERO
37e0: 50 5f 44 45 42 55 47 5f 50 52 45 50 41 52 45 29  P_DEBUG_PREPARE)
37f0: 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72  ..  sqlite3Inter
3800: 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33  opDebug("sqlite3
3810: 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70  _prepare_interop
3820: 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69  (): calling sqli
3830: 74 65 33 5f 70 72 65 70 61 72 65 28 25 70 2c 20  te3_prepare(%p, 
3840: 5c 22 25 73 5c 22 2c 20 25 64 2c 20 25 70 29 2e  \"%s\", %d, %p).
3850: 2e 2e 5c 6e 22 2c 20 64 62 2c 20 73 71 6c 2c 20  ..\n", db, sql, 
3860: 6e 62 79 74 65 73 2c 20 70 70 73 74 6d 74 29 3b  nbytes, ppstmt);
3870: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20  ..#endif....#if 
3880: 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e  SQLITE_VERSION_N
3890: 55 4d 42 45 52 20 3e 3d 20 33 30 30 33 30 30 39  UMBER >= 3003009
38a0: 0d 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f  ..  n = sqlite3_
38b0: 70 72 65 70 61 72 65 5f 76 32 28 64 62 2c 20 73  prepare_v2(db, s
38c0: 71 6c 2c 20 6e 62 79 74 65 73 2c 20 70 70 73 74  ql, nbytes, ppst
38d0: 6d 74 2c 20 70 7a 74 61 69 6c 29 3b 0d 0a 23 65  mt, pztail);..#e
38e0: 6c 73 65 0d 0a 20 20 6e 20 3d 20 73 71 6c 69 74  lse..  n = sqlit
38f0: 65 33 5f 70 72 65 70 61 72 65 28 64 62 2c 20 73  e3_prepare(db, s
3900: 71 6c 2c 20 6e 62 79 74 65 73 2c 20 70 70 73 74  ql, nbytes, ppst
3910: 6d 74 2c 20 70 7a 74 61 69 6c 29 3b 0d 0a 23 65  mt, pztail);..#e
3920: 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69  ndif....#if defi
3930: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  ned(INTEROP_DEBU
3940: 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44  G) && (INTEROP_D
3950: 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44  EBUG & INTEROP_D
3960: 45 42 55 47 5f 50 52 45 50 41 52 45 29 0d 0a 20  EBUG_PREPARE).. 
3970: 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44   sqlite3InteropD
3980: 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 70 72  ebug("sqlite3_pr
3990: 65 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 29 3a  epare_interop():
39a0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
39b0: 28 25 70 2c 20 5c 22 25 73 5c 22 2c 20 25 64 2c  (%p, \"%s\", %d,
39c0: 20 25 70 29 20 72 65 74 75 72 6e 65 64 20 25 64   %p) returned %d
39d0: 2e 5c 6e 22 2c 20 64 62 2c 20 73 71 6c 2c 20 6e  .\n", db, sql, n
39e0: 62 79 74 65 73 2c 20 70 70 73 74 6d 74 2c 20 6e  bytes, ppstmt, n
39f0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
3a00: 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20  if (plen) *plen 
3a10: 3d 20 28 70 7a 74 61 69 6c 20 26 26 20 2a 70 7a  = (pztail && *pz
3a20: 74 61 69 6c 29 20 3f 20 73 74 72 6c 65 6e 28 2a  tail) ? strlen(*
3a30: 70 7a 74 61 69 6c 29 20 3a 20 30 3b 0d 0a 0d 0a  pztail) : 0;....
3a40: 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 7d 0d 0a    return n;..}..
3a50: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74  ..SQLITE_API int
3a60: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
3a70: 70 72 65 70 61 72 65 31 36 5f 69 6e 74 65 72 6f  prepare16_intero
3a80: 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63  p(sqlite3 *db, c
3a90: 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 2c 20  onst void *sql, 
3aa0: 69 6e 74 20 6e 63 68 61 72 73 2c 20 73 71 6c 69  int nchars, sqli
3ab0: 74 65 33 5f 73 74 6d 74 20 2a 2a 70 70 73 74 6d  te3_stmt **ppstm
3ac0: 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2a  t, const void **
3ad0: 70 7a 74 61 69 6c 2c 20 69 6e 74 20 2a 70 6c 65  pztail, int *ple
3ae0: 6e 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 6e 3b 0d  n)..{..  int n;.
3af0: 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49  ...#if defined(I
3b00: 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26  NTEROP_DEBUG) &&
3b10: 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20   (INTEROP_DEBUG 
3b20: 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f  & INTEROP_DEBUG_
3b30: 50 52 45 50 41 52 45 31 36 29 0d 0a 20 20 73 71  PREPARE16)..  sq
3b40: 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75  lite3InteropDebu
3b50: 67 28 22 73 71 6c 69 74 65 33 5f 70 72 65 70 61  g("sqlite3_prepa
3b60: 72 65 5f 69 6e 74 65 72 6f 70 28 29 3a 20 63 61  re_interop(): ca
3b70: 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72  lling sqlite3_pr
3b80: 65 70 61 72 65 31 36 28 25 70 2c 20 5c 22 25 73  epare16(%p, \"%s
3b90: 5c 22 2c 20 25 64 2c 20 25 70 29 2e 2e 2e 5c 6e  \", %d, %p)...\n
3ba0: 22 2c 20 64 62 2c 20 73 71 6c 2c 20 6e 63 68 61  ", db, sql, ncha
3bb0: 72 73 2c 20 70 70 73 74 6d 74 29 3b 0d 0a 23 65  rs, ppstmt);..#e
3bc0: 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 53 51 4c 49  ndif....#if SQLI
3bd0: 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45  TE_VERSION_NUMBE
3be0: 52 20 3e 3d 20 33 30 30 33 30 30 39 0d 0a 20 20  R >= 3003009..  
3bf0: 6e 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  n = sqlite3_prep
3c00: 61 72 65 31 36 5f 76 32 28 64 62 2c 20 73 71 6c  are16_v2(db, sql
3c10: 2c 20 6e 63 68 61 72 73 20 2a 20 73 69 7a 65 6f  , nchars * sizeo
3c20: 66 28 77 63 68 61 72 5f 74 29 2c 20 70 70 73 74  f(wchar_t), ppst
3c30: 6d 74 2c 20 70 7a 74 61 69 6c 29 3b 0d 0a 23 65  mt, pztail);..#e
3c40: 6c 73 65 0d 0a 20 20 6e 20 3d 20 73 71 6c 69 74  lse..  n = sqlit
3c50: 65 33 5f 70 72 65 70 61 72 65 31 36 28 64 62 2c  e3_prepare16(db,
3c60: 20 73 71 6c 2c 20 6e 63 68 61 72 73 20 2a 20 73   sql, nchars * s
3c70: 69 7a 65 6f 66 28 77 63 68 61 72 5f 74 29 2c 20  izeof(wchar_t), 
3c80: 70 70 73 74 6d 74 2c 20 70 7a 74 61 69 6c 29 3b  ppstmt, pztail);
3c90: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20  ..#endif....#if 
3ca0: 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f  defined(INTEROP_
3cb0: 44 45 42 55 47 29 20 26 26 20 28 49 4e 54 45 52  DEBUG) && (INTER
3cc0: 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52  OP_DEBUG & INTER
3cd0: 4f 50 5f 44 45 42 55 47 5f 50 52 45 50 41 52 45  OP_DEBUG_PREPARE
3ce0: 31 36 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e  16)..  sqlite3In
3cf0: 74 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69  teropDebug("sqli
3d00: 74 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74 65  te3_prepare_inte
3d10: 72 6f 70 28 29 3a 20 73 71 6c 69 74 65 33 5f 70  rop(): sqlite3_p
3d20: 72 65 70 61 72 65 31 36 28 25 70 2c 20 5c 22 25  repare16(%p, \"%
3d30: 73 5c 22 2c 20 25 64 2c 20 25 70 29 20 72 65 74  s\", %d, %p) ret
3d40: 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 64 62  urned %d.\n", db
3d50: 2c 20 73 71 6c 2c 20 6e 63 68 61 72 73 2c 20 70  , sql, nchars, p
3d60: 70 73 74 6d 74 2c 20 6e 29 3b 0d 0a 23 65 6e 64  pstmt, n);..#end
3d70: 69 66 0d 0a 0d 0a 20 20 69 66 20 28 70 6c 65 6e  if....  if (plen
3d80: 29 20 2a 70 6c 65 6e 20 3d 20 28 70 7a 74 61 69  ) *plen = (pztai
3d90: 6c 20 26 26 20 2a 70 7a 74 61 69 6c 29 20 3f 20  l && *pztail) ? 
3da0: 77 63 73 6c 65 6e 28 28 77 63 68 61 72 5f 74 20  wcslen((wchar_t 
3db0: 2a 29 2a 70 7a 74 61 69 6c 29 20 2a 20 73 69 7a  *)*pztail) * siz
3dc0: 65 6f 66 28 77 63 68 61 72 5f 74 29 20 3a 20 30  eof(wchar_t) : 0
3dd0: 3b 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 6e 3b  ;....  return n;
3de0: 0d 0a 7d 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e  ..}....#if defin
3df0: 65 64 28 49 4e 54 45 52 4f 50 5f 56 49 52 54 55  ed(INTEROP_VIRTU
3e00: 41 4c 5f 54 41 42 4c 45 29 20 26 26 20 53 51 4c  AL_TABLE) && SQL
3e10: 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  ITE_VERSION_NUMB
3e20: 45 52 20 3e 3d 20 33 30 30 34 30 30 31 0d 0a 23  ER >= 3004001..#
3e30: 69 66 64 65 66 20 5f 57 49 4e 33 32 0a 5f 5f 64  ifdef _WIN32.__d
3e40: 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72  eclspec(dllexpor
3e50: 74 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 2a  t).#endif.void *
3e60: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 64  sqlite3_create_d
3e70: 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c 65  isposable_module
3e80: 28 0d 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  (..  sqlite3 *db
3e90: 2c 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  ,..  const char 
3ea0: 2a 7a 4e 61 6d 65 2c 0d 0a 20 20 63 6f 6e 73 74  *zName,..  const
3eb0: 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
3ec0: 2a 70 2c 0d 0a 20 20 76 6f 69 64 20 2a 70 43 6c  *p,..  void *pCl
3ed0: 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 76 6f 69  ientData,..  voi
3ee0: 64 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69  d(*xDestroy)(voi
3ef0: 64 2a 29 0d 0a 29 3b 20 2f 2a 20 64 65 66 69 6e  d*)..); /* defin
3f00: 65 64 20 69 6e 20 22 73 72 63 2f 65 78 74 2f 76  ed in "src/ext/v
3f10: 74 73 68 69 6d 2e 63 22 20 28 69 6e 63 6c 75 64  tshim.c" (includ
3f20: 65 64 20 62 65 6c 6f 77 29 20 2a 2f 0d 0a 0d 0a  ed below) */....
3f30: 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69 64 20  SQLITE_API void 
3f40: 2a 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f  *WINAPI sqlite3_
3f50: 63 72 65 61 74 65 5f 64 69 73 70 6f 73 61 62 6c  create_disposabl
3f60: 65 5f 6d 6f 64 75 6c 65 5f 69 6e 74 65 72 6f 70  e_module_interop
3f70: 28 0d 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  (..  sqlite3 *db
3f80: 2c 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  ,..  const char 
3f90: 2a 7a 4e 61 6d 65 2c 0d 0a 20 20 73 71 6c 69 74  *zName,..  sqlit
3fa0: 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
3fb0: 6c 65 2c 0d 0a 20 20 69 6e 74 20 69 56 65 72 73  le,..  int iVers
3fc0: 69 6f 6e 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 43  ion,..  int (*xC
3fd0: 72 65 61 74 65 29 28 73 71 6c 69 74 65 33 2a 2c  reate)(sqlite3*,
3fe0: 20 76 6f 69 64 20 2a 2c 20 69 6e 74 2c 20 63 6f   void *, int, co
3ff0: 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 2a  nst char *const*
4000: 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a  , sqlite3_vtab *
4010: 2a 2c 20 63 68 61 72 2a 2a 29 2c 0d 0a 20 20 69  *, char**),..  i
4020: 6e 74 20 28 2a 78 43 6f 6e 6e 65 63 74 29 28 73  nt (*xConnect)(s
4030: 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 20 2a 2c  qlite3*, void *,
4040: 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
4050: 20 2a 63 6f 6e 73 74 2a 2c 20 73 71 6c 69 74 65   *const*, sqlite
4060: 33 5f 76 74 61 62 20 2a 2a 2c 20 63 68 61 72 2a  3_vtab **, char*
4070: 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 42 65  *),..  int (*xBe
4080: 73 74 49 6e 64 65 78 29 28 73 71 6c 69 74 65 33  stIndex)(sqlite3
4090: 5f 76 74 61 62 20 2a 2c 20 73 71 6c 69 74 65 33  _vtab *, sqlite3
40a0: 5f 69 6e 64 65 78 5f 69 6e 66 6f 2a 29 2c 0d 0a  _index_info*),..
40b0: 20 20 69 6e 74 20 28 2a 78 44 69 73 63 6f 6e 6e    int (*xDisconn
40c0: 65 63 74 29 28 73 71 6c 69 74 65 33 5f 76 74 61  ect)(sqlite3_vta
40d0: 62 20 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78  b *),..  int (*x
40e0: 44 65 73 74 72 6f 79 29 28 73 71 6c 69 74 65 33  Destroy)(sqlite3
40f0: 5f 76 74 61 62 20 2a 29 2c 0d 0a 20 20 69 6e 74  _vtab *),..  int
4100: 20 28 2a 78 4f 70 65 6e 29 28 73 71 6c 69 74 65   (*xOpen)(sqlite
4110: 33 5f 76 74 61 62 20 2a 2c 20 73 71 6c 69 74 65  3_vtab *, sqlite
4120: 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 2a  3_vtab_cursor **
4130: 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 43 6c 6f  ),..  int (*xClo
4140: 73 65 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62  se)(sqlite3_vtab
4150: 5f 63 75 72 73 6f 72 2a 29 2c 0d 0a 20 20 69 6e  _cursor*),..  in
4160: 74 20 28 2a 78 46 69 6c 74 65 72 29 28 73 71 6c  t (*xFilter)(sql
4170: 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
4180: 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
4190: 61 72 20 2a 2c 20 69 6e 74 2c 20 73 71 6c 69 74  ar *, int, sqlit
41a0: 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0d 0a 20  e3_value **),.. 
41b0: 20 69 6e 74 20 28 2a 78 4e 65 78 74 29 28 73 71   int (*xNext)(sq
41c0: 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
41d0: 72 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 45  r*),..  int (*xE
41e0: 6f 66 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62  of)(sqlite3_vtab
41f0: 5f 63 75 72 73 6f 72 2a 29 2c 0d 0a 20 20 69 6e  _cursor*),..  in
4200: 74 20 28 2a 78 43 6f 6c 75 6d 6e 29 28 73 71 6c  t (*xColumn)(sql
4210: 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
4220: 2a 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *, sqlite3_conte
4230: 78 74 2a 2c 20 69 6e 74 29 2c 0d 0a 20 20 69 6e  xt*, int),..  in
4240: 74 20 28 2a 78 52 6f 77 69 64 29 28 73 71 6c 69  t (*xRowid)(sqli
4250: 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 2a  te3_vtab_cursor*
4260: 2c 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20  , sqlite3_int64 
4270: 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 55 70  *),..  int (*xUp
4280: 64 61 74 65 29 28 73 71 6c 69 74 65 33 5f 76 74  date)(sqlite3_vt
4290: 61 62 20 2a 2c 20 69 6e 74 2c 20 73 71 6c 69 74  ab *, int, sqlit
42a0: 65 33 5f 76 61 6c 75 65 20 2a 2a 2c 20 73 71 6c  e3_value **, sql
42b0: 69 74 65 33 5f 69 6e 74 36 34 20 2a 29 2c 0d 0a  ite3_int64 *),..
42c0: 20 20 69 6e 74 20 28 2a 78 42 65 67 69 6e 29 28    int (*xBegin)(
42d0: 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 29 2c  sqlite3_vtab *),
42e0: 0d 0a 20 20 69 6e 74 20 28 2a 78 53 79 6e 63 29  ..  int (*xSync)
42f0: 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 29  (sqlite3_vtab *)
4300: 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d  ,..  int (*xComm
4310: 69 74 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62  it)(sqlite3_vtab
4320: 20 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 52   *),..  int (*xR
4330: 6f 6c 6c 62 61 63 6b 29 28 73 71 6c 69 74 65 33  ollback)(sqlite3
4340: 5f 76 74 61 62 20 2a 29 2c 0d 0a 20 20 69 6e 74  _vtab *),..  int
4350: 20 28 2a 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e   (*xFindFunction
4360: 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a  )(sqlite3_vtab *
4370: 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
4380: 72 20 2a 2c 20 76 6f 69 64 20 28 2a 2a 70 78 46  r *, void (**pxF
4390: 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  unc)(sqlite3_con
43a0: 74 65 78 74 2a 2c 20 69 6e 74 2c 20 73 71 6c 69  text*, int, sqli
43b0: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 2c 20 76 6f  te3_value**), vo
43c0: 69 64 20 2a 2a 70 70 41 72 67 29 2c 0d 0a 20 20  id **ppArg),..  
43d0: 69 6e 74 20 28 2a 78 52 65 6e 61 6d 65 29 28 73  int (*xRename)(s
43e0: 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 2c 20 63  qlite3_vtab *, c
43f0: 6f 6e 73 74 20 63 68 61 72 20 2a 29 2c 0d 0a 20  onst char *),.. 
4400: 20 69 6e 74 20 28 2a 78 53 61 76 65 70 6f 69 6e   int (*xSavepoin
4410: 74 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20  t)(sqlite3_vtab 
4420: 2a 2c 20 69 6e 74 29 2c 0d 0a 20 20 69 6e 74 20  *, int),..  int 
4430: 28 2a 78 52 65 6c 65 61 73 65 29 28 73 71 6c 69  (*xRelease)(sqli
4440: 74 65 33 5f 76 74 61 62 20 2a 2c 20 69 6e 74 29  te3_vtab *, int)
4450: 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 52 6f 6c 6c  ,..  int (*xRoll
4460: 62 61 63 6b 54 6f 29 28 73 71 6c 69 74 65 33 5f  backTo)(sqlite3_
4470: 76 74 61 62 20 2a 2c 20 69 6e 74 29 2c 0d 0a 20  vtab *, int),.. 
4480: 20 76 6f 69 64 20 2a 70 43 6c 69 65 6e 74 44 61   void *pClientDa
4490: 74 61 2c 0d 0a 20 20 76 6f 69 64 28 2a 78 44 65  ta,..  void(*xDe
44a0: 73 74 72 6f 79 4d 6f 64 75 6c 65 29 28 76 6f 69  stroyModule)(voi
44b0: 64 2a 29 0d 0a 29 7b 0d 0a 20 20 69 66 20 28 21  d*)..){..  if (!
44c0: 70 4d 6f 64 75 6c 65 29 20 72 65 74 75 72 6e 20  pModule) return 
44d0: 30 3b 0d 0a 20 20 6d 65 6d 73 65 74 28 70 4d 6f  0;..  memset(pMo
44e0: 64 75 6c 65 2c 20 30 2c 20 73 69 7a 65 6f 66 28  dule, 0, sizeof(
44f0: 2a 70 4d 6f 64 75 6c 65 29 29 3b 0d 0a 20 20 70  *pModule));..  p
4500: 4d 6f 64 75 6c 65 2d 3e 69 56 65 72 73 69 6f 6e  Module->iVersion
4510: 20 3d 20 69 56 65 72 73 69 6f 6e 3b 0d 0a 20 20   = iVersion;..  
4520: 70 4d 6f 64 75 6c 65 2d 3e 78 43 72 65 61 74 65  pModule->xCreate
4530: 20 3d 20 78 43 72 65 61 74 65 3b 0d 0a 20 20 70   = xCreate;..  p
4540: 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6e 6e 65 63 74  Module->xConnect
4550: 20 3d 20 78 43 6f 6e 6e 65 63 74 3b 0d 0a 20 20   = xConnect;..  
4560: 70 4d 6f 64 75 6c 65 2d 3e 78 42 65 73 74 49 6e  pModule->xBestIn
4570: 64 65 78 20 3d 20 78 42 65 73 74 49 6e 64 65 78  dex = xBestIndex
4580: 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 44  ;..  pModule->xD
4590: 69 73 63 6f 6e 6e 65 63 74 20 3d 20 78 44 69 73  isconnect = xDis
45a0: 63 6f 6e 6e 65 63 74 3b 0d 0a 20 20 70 4d 6f 64  connect;..  pMod
45b0: 75 6c 65 2d 3e 78 44 65 73 74 72 6f 79 20 3d 20  ule->xDestroy = 
45c0: 78 44 65 73 74 72 6f 79 3b 0d 0a 20 20 70 4d 6f  xDestroy;..  pMo
45d0: 64 75 6c 65 2d 3e 78 4f 70 65 6e 20 3d 20 78 4f  dule->xOpen = xO
45e0: 70 65 6e 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d  pen;..  pModule-
45f0: 3e 78 43 6c 6f 73 65 20 3d 20 78 43 6c 6f 73 65  >xClose = xClose
4600: 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 46  ;..  pModule->xF
4610: 69 6c 74 65 72 20 3d 20 78 46 69 6c 74 65 72 3b  ilter = xFilter;
4620: 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65  ..  pModule->xNe
4630: 78 74 20 3d 20 78 4e 65 78 74 3b 0d 0a 20 20 70  xt = xNext;..  p
4640: 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 20 3d 20 78  Module->xEof = x
4650: 45 6f 66 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d  Eof;..  pModule-
4660: 3e 78 43 6f 6c 75 6d 6e 20 3d 20 78 43 6f 6c 75  >xColumn = xColu
4670: 6d 6e 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e  mn;..  pModule->
4680: 78 52 6f 77 69 64 20 3d 20 78 52 6f 77 69 64 3b  xRowid = xRowid;
4690: 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70  ..  pModule->xUp
46a0: 64 61 74 65 20 3d 20 78 55 70 64 61 74 65 3b 0d  date = xUpdate;.
46b0: 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 42 65 67  .  pModule->xBeg
46c0: 69 6e 20 3d 20 78 42 65 67 69 6e 3b 0d 0a 20 20  in = xBegin;..  
46d0: 70 4d 6f 64 75 6c 65 2d 3e 78 53 79 6e 63 20 3d  pModule->xSync =
46e0: 20 78 53 79 6e 63 3b 0d 0a 20 20 70 4d 6f 64 75   xSync;..  pModu
46f0: 6c 65 2d 3e 78 43 6f 6d 6d 69 74 20 3d 20 78 43  le->xCommit = xC
4700: 6f 6d 6d 69 74 3b 0d 0a 20 20 70 4d 6f 64 75 6c  ommit;..  pModul
4710: 65 2d 3e 78 52 6f 6c 6c 62 61 63 6b 20 3d 20 78  e->xRollback = x
4720: 52 6f 6c 6c 62 61 63 6b 3b 0d 0a 20 20 70 4d 6f  Rollback;..  pMo
4730: 64 75 6c 65 2d 3e 78 46 69 6e 64 46 75 6e 63 74  dule->xFindFunct
4740: 69 6f 6e 20 3d 20 78 46 69 6e 64 46 75 6e 63 74  ion = xFindFunct
4750: 69 6f 6e 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d  ion;..  pModule-
4760: 3e 78 52 65 6e 61 6d 65 20 3d 20 78 52 65 6e 61  >xRename = xRena
4770: 6d 65 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e  me;..  pModule->
4780: 78 53 61 76 65 70 6f 69 6e 74 20 3d 20 78 53 61  xSavepoint = xSa
4790: 76 65 70 6f 69 6e 74 3b 0d 0a 20 20 70 4d 6f 64  vepoint;..  pMod
47a0: 75 6c 65 2d 3e 78 52 65 6c 65 61 73 65 20 3d 20  ule->xRelease = 
47b0: 78 52 65 6c 65 61 73 65 3b 0d 0a 20 20 70 4d 6f  xRelease;..  pMo
47c0: 64 75 6c 65 2d 3e 78 52 6f 6c 6c 62 61 63 6b 54  dule->xRollbackT
47d0: 6f 20 3d 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 3b  o = xRollbackTo;
47e0: 0d 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74  ..  return sqlit
47f0: 65 33 5f 63 72 65 61 74 65 5f 64 69 73 70 6f 73  e3_create_dispos
4800: 61 62 6c 65 5f 6d 6f 64 75 6c 65 28 64 62 2c 20  able_module(db, 
4810: 7a 4e 61 6d 65 2c 20 70 4d 6f 64 75 6c 65 2c 20  zName, pModule, 
4820: 70 43 6c 69 65 6e 74 44 61 74 61 2c 20 78 44 65  pClientData, xDe
4830: 73 74 72 6f 79 4d 6f 64 75 6c 65 29 3b 0d 0a 7d  stroyModule);..}
4840: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 53 51 4c 49  ..#endif....SQLI
4850: 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41 50  TE_API int WINAP
4860: 49 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64  I sqlite3_bind_d
4870: 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73 71  ouble_interop(sq
4880: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74  lite3_stmt *stmt
4890: 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 64 6f 75 62  , int iCol, doub
48a0: 6c 65 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 20 20 69  le *val)..{..  i
48b0: 66 20 28 21 76 61 6c 29 20 72 65 74 75 72 6e 20  f (!val) return 
48c0: 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 20  SQLITE_ERROR;.. 
48d0: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f   return sqlite3_
48e0: 62 69 6e 64 5f 64 6f 75 62 6c 65 28 73 74 6d 74  bind_double(stmt
48f0: 2c 69 43 6f 6c 2c 2a 76 61 6c 29 3b 0d 0a 7d 0d  ,iCol,*val);..}.
4900: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e  ...SQLITE_API in
4910: 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  t WINAPI sqlite3
4920: 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65  _bind_int64_inte
4930: 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  rop(sqlite3_stmt
4940: 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c   *stmt, int iCol
4950: 2c 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a  , sqlite_int64 *
4960: 76 61 6c 29 0d 0a 7b 0d 0a 20 20 69 66 20 28 21  val)..{..  if (!
4970: 76 61 6c 29 20 72 65 74 75 72 6e 20 53 51 4c 49  val) return SQLI
4980: 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 72 65 74  TE_ERROR;..  ret
4990: 75 72 6e 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  urn sqlite3_bind
49a0: 5f 69 6e 74 36 34 28 73 74 6d 74 2c 69 43 6f 6c  _int64(stmt,iCol
49b0: 2c 2a 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51  ,*val);..}....SQ
49c0: 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 63  LITE_API const c
49d0: 68 61 72 20 2a 20 57 49 4e 41 50 49 20 73 71 6c  har * WINAPI sql
49e0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
49f0: 74 65 72 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70  ter_name_interop
4a00: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73  (sqlite3_stmt *s
4a10: 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69  tmt, int iCol, i
4a20: 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20  nt *plen)..{..  
4a30: 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 76 61 6c  const char *pval
4a40: 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   = sqlite3_bind_
4a50: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 73  parameter_name(s
4a60: 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 69  tmt, iCol);..  i
4a70: 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d  f (plen) *plen =
4a80: 20 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e 28 70   pval ? strlen(p
4a90: 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74  val) : 0;..  ret
4aa0: 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a  urn pval;..}....
4ab0: 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74  SQLITE_API const
4ac0: 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49 20 73   char * WINAPI s
4ad0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
4ae0: 6d 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  me_interop(sqlit
4af0: 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69  e3_stmt *stmt, i
4b00: 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c  nt iCol, int *pl
4b10: 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20  en)..{..  const 
4b20: 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73 71 6c  char *pval = sql
4b30: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
4b40: 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20  (stmt, iCol);.. 
4b50: 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e   if (plen) *plen
4b60: 20 3d 20 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e   = pval ? strlen
4b70: 28 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72  (pval) : 0;..  r
4b80: 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a  eturn pval;..}..
4b90: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e  ..SQLITE_API con
4ba0: 73 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49  st void * WINAPI
4bb0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4bc0: 6e 61 6d 65 31 36 5f 69 6e 74 65 72 6f 70 28 73  name16_interop(s
4bd0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d  qlite3_stmt *stm
4be0: 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74  t, int iCol, int
4bf0: 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f   *plen)..{..  co
4c00: 6e 73 74 20 76 6f 69 64 20 2a 70 76 61 6c 20 3d  nst void *pval =
4c10: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4c20: 6e 61 6d 65 31 36 28 73 74 6d 74 2c 20 69 43 6f  name16(stmt, iCo
4c30: 6c 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29  l);..  if (plen)
4c40: 20 2a 70 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20   *plen = pval ? 
4c50: 77 63 73 6c 65 6e 28 28 77 63 68 61 72 5f 74 20  wcslen((wchar_t 
4c60: 2a 29 70 76 61 6c 29 20 2a 20 73 69 7a 65 6f 66  *)pval) * sizeof
4c70: 28 77 63 68 61 72 5f 74 29 20 3a 20 30 3b 0d 0a  (wchar_t) : 0;..
4c80: 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a    return pval;..
4c90: 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20  }....SQLITE_API 
4ca0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 57 49 4e  const char * WIN
4cb0: 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  API sqlite3_colu
4cc0: 6d 6e 5f 64 65 63 6c 74 79 70 65 5f 69 6e 74 65  mn_decltype_inte
4cd0: 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  rop(sqlite3_stmt
4ce0: 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c   *stmt, int iCol
4cf0: 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d  , int *plen)..{.
4d00: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 70  .  const char *p
4d10: 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  val = sqlite3_co
4d20: 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 28 73 74  lumn_decltype(st
4d30: 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 69 66  mt, iCol);..  if
4d40: 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20   (plen) *plen = 
4d50: 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e 28 70 76  pval ? strlen(pv
4d60: 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75  al) : 0;..  retu
4d70: 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53  rn pval;..}....S
4d80: 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20  QLITE_API const 
4d90: 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71  void * WINAPI sq
4da0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
4db0: 6c 74 79 70 65 31 36 5f 69 6e 74 65 72 6f 70 28  ltype16_interop(
4dc0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74  sqlite3_stmt *st
4dd0: 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e  mt, int iCol, in
4de0: 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63  t *plen)..{..  c
4df0: 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 61 6c 20  onst void *pval 
4e00: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
4e10: 5f 64 65 63 6c 74 79 70 65 31 36 28 73 74 6d 74  _decltype16(stmt
4e20: 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 69 66 20 28  , iCol);..  if (
4e30: 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 70 76  plen) *plen = pv
4e40: 61 6c 20 3f 20 77 63 73 6c 65 6e 28 28 77 63 68  al ? wcslen((wch
4e50: 61 72 5f 74 20 2a 29 70 76 61 6c 29 20 2a 20 73  ar_t *)pval) * s
4e60: 69 7a 65 6f 66 28 77 63 68 61 72 5f 74 29 20 3a  izeof(wchar_t) :
4e70: 20 30 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70 76   0;..  return pv
4e80: 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45  al;..}....SQLITE
4e90: 5f 41 50 49 20 76 6f 69 64 20 57 49 4e 41 50 49  _API void WINAPI
4ea0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4eb0: 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73  double_interop(s
4ec0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d  qlite3_stmt *stm
4ed0: 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 64 6f 75  t, int iCol, dou
4ee0: 62 6c 65 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 20 20  ble *val)..{..  
4ef0: 69 66 20 28 21 76 61 6c 29 20 72 65 74 75 72 6e  if (!val) return
4f00: 3b 0d 0a 20 20 2a 76 61 6c 20 3d 20 73 71 6c 69  ;..  *val = sqli
4f10: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  te3_column_doubl
4f20: 65 28 73 74 6d 74 2c 69 43 6f 6c 29 3b 0d 0a 7d  e(stmt,iCol);..}
4f30: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76  ....SQLITE_API v
4f40: 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74  oid WINAPI sqlit
4f50: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 5f  e3_column_int64_
4f60: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f  interop(sqlite3_
4f70: 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20  stmt *stmt, int 
4f80: 69 43 6f 6c 2c 20 73 71 6c 69 74 65 5f 69 6e 74  iCol, sqlite_int
4f90: 36 34 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 20 20 69  64 *val)..{..  i
4fa0: 66 20 28 21 76 61 6c 29 20 72 65 74 75 72 6e 3b  f (!val) return;
4fb0: 0d 0a 20 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74  ..  *val = sqlit
4fc0: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28  e3_column_int64(
4fd0: 73 74 6d 74 2c 69 43 6f 6c 29 3b 0d 0a 7d 0d 0a  stmt,iCol);..}..
4fe0: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69  ..SQLITE_API voi
4ff0: 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  d WINAPI sqlite3
5000: 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
5010: 69 64 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  id_interop(sqlit
5020: 65 33 20 2a 64 62 2c 20 73 71 6c 69 74 65 5f 69  e3 *db, sqlite_i
5030: 6e 74 36 34 20 2a 72 6f 77 49 64 29 0d 0a 7b 0d  nt64 *rowId)..{.
5040: 0a 20 20 69 66 20 28 21 72 6f 77 49 64 29 20 72  .  if (!rowId) r
5050: 65 74 75 72 6e 3b 0d 0a 20 20 2a 72 6f 77 49 64  eturn;..  *rowId
5060: 20 3d 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f   = sqlite3_last_
5070: 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 64 62 29  insert_rowid(db)
5080: 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  ;..}....SQLITE_A
5090: 50 49 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73  PI void WINAPI s
50a0: 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73  qlite3_memory_us
50b0: 65 64 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  ed_interop(sqlit
50c0: 65 5f 69 6e 74 36 34 20 2a 6e 42 79 74 65 73 29  e_int64 *nBytes)
50d0: 0d 0a 7b 0d 0a 20 20 69 66 20 28 21 6e 42 79 74  ..{..  if (!nByt
50e0: 65 73 29 20 72 65 74 75 72 6e 3b 0d 0a 20 20 2a  es) return;..  *
50f0: 6e 42 79 74 65 73 20 3d 20 73 71 6c 69 74 65 33  nBytes = sqlite3
5100: 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 28 29 3b 0d  _memory_used();.
5110: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
5120: 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c   void WINAPI sql
5130: 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68  ite3_memory_high
5140: 77 61 74 65 72 5f 69 6e 74 65 72 6f 70 28 69 6e  water_interop(in
5150: 74 20 72 65 73 65 74 46 6c 61 67 2c 20 73 71 6c  t resetFlag, sql
5160: 69 74 65 5f 69 6e 74 36 34 20 2a 6e 42 79 74 65  ite_int64 *nByte
5170: 73 29 0d 0a 7b 0d 0a 20 20 69 66 20 28 21 6e 42  s)..{..  if (!nB
5180: 79 74 65 73 29 20 72 65 74 75 72 6e 3b 0d 0a 20  ytes) return;.. 
5190: 20 2a 6e 42 79 74 65 73 20 3d 20 73 71 6c 69 74   *nBytes = sqlit
51a0: 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61  e3_memory_highwa
51b0: 74 65 72 28 72 65 73 65 74 46 6c 61 67 29 3b 0d  ter(resetFlag);.
51c0: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
51d0: 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
51e0: 63 68 61 72 20 2a 20 57 49 4e 41 50 49 20 73 71  char * WINAPI sq
51f0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
5200: 74 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  t_interop(sqlite
5210: 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e  3_stmt *stmt, in
5220: 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65  t iCol, int *ple
5230: 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 75  n)..{..  const u
5240: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70 76  nsigned char *pv
5250: 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  al = sqlite3_col
5260: 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2c 20 69  umn_text(stmt, i
5270: 43 6f 6c 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65  Col);..  if (ple
5280: 6e 29 20 2a 70 6c 65 6e 20 3d 20 73 71 6c 69 74  n) *plen = sqlit
5290: 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28  e3_column_bytes(
52a0: 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20  stmt, iCol);..  
52b0: 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d  return pval;..}.
52c0: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f  ...SQLITE_API co
52d0: 6e 73 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50  nst void * WINAP
52e0: 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  I sqlite3_column
52f0: 5f 74 65 78 74 31 36 5f 69 6e 74 65 72 6f 70 28  _text16_interop(
5300: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74  sqlite3_stmt *st
5310: 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e  mt, int iCol, in
5320: 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63  t *plen)..{..  c
5330: 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 61 6c 20  onst void *pval 
5340: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
5350: 5f 74 65 78 74 31 36 28 73 74 6d 74 2c 20 69 43  _text16(stmt, iC
5360: 6f 6c 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e  ol);..  if (plen
5370: 29 20 2a 70 6c 65 6e 20 3d 20 73 71 6c 69 74 65  ) *plen = sqlite
5380: 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31 36  3_column_bytes16
5390: 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20  (stmt, iCol);.. 
53a0: 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d   return pval;..}
53b0: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69  ....SQLITE_API i
53c0: 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  nt WINAPI sqlite
53d0: 33 5f 66 69 6e 61 6c 69 7a 65 5f 69 6e 74 65 72  3_finalize_inter
53e0: 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  op(sqlite3_stmt 
53f0: 2a 73 74 6d 74 29 0d 0a 7b 0d 0a 20 20 69 6e 74  *stmt)..{..  int
5400: 20 72 65 74 3b 0d 0a 23 69 66 20 21 64 65 66 69   ret;..#if !defi
5410: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 4c 45 47 41  ned(INTEROP_LEGA
5420: 43 59 5f 43 4c 4f 53 45 29 20 26 26 20 53 51 4c  CY_CLOSE) && SQL
5430: 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  ITE_VERSION_NUMB
5440: 45 52 20 3e 3d 20 33 30 30 37 30 31 34 0d 0a 0d  ER >= 3007014...
5450: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54  .#if defined(INT
5460: 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28  EROP_DEBUG) && (
5470: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20  INTEROP_DEBUG & 
5480: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 46 49  INTEROP_DEBUG_FI
5490: 4e 41 4c 49 5a 45 29 0d 0a 20 20 56 64 62 65 20  NALIZE)..  Vdbe 
54a0: 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 73 74 6d  *p = (Vdbe *)stm
54b0: 74 3b 0d 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  t;..  sqlite3 *d
54c0: 62 20 3d 20 70 20 3f 20 70 2d 3e 64 62 20 3a 20  b = p ? p->db : 
54d0: 30 3b 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74  0;..  sqlite3Int
54e0: 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74  eropDebug("sqlit
54f0: 65 33 5f 66 69 6e 61 6c 69 7a 65 5f 69 6e 74 65  e3_finalize_inte
5500: 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73  rop(): calling s
5510: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
5520: 25 70 2c 20 25 70 29 2e 2e 2e 5c 6e 22 2c 20 64  %p, %p)...\n", d
5530: 62 2c 20 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69  b, stmt);..#endi
5540: 66 0d 0a 0d 0a 20 20 72 65 74 20 3d 20 73 71 6c  f....  ret = sql
5550: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 73 74  ite3_finalize(st
5560: 6d 74 29 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69  mt);....#if defi
5570: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  ned(INTEROP_DEBU
5580: 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44  G) && (INTEROP_D
5590: 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44  EBUG & INTEROP_D
55a0: 45 42 55 47 5f 46 49 4e 41 4c 49 5a 45 29 0d 0a  EBUG_FINALIZE)..
55b0: 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70    sqlite3Interop
55c0: 44 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 66  Debug("sqlite3_f
55d0: 69 6e 61 6c 69 7a 65 5f 69 6e 74 65 72 6f 70 28  inalize_interop(
55e0: 29 3a 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  ): sqlite3_final
55f0: 69 7a 65 28 25 70 2c 20 25 70 29 20 72 65 74 75  ize(%p, %p) retu
5600: 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 64 62 2c  rned %d.\n", db,
5610: 20 73 74 6d 74 2c 20 72 65 74 29 3b 0d 0a 23 65   stmt, ret);..#e
5620: 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 75 72 6e  ndif....  return
5630: 20 72 65 74 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20   ret;..#else..  
5640: 56 64 62 65 20 2a 70 3b 0d 0a 20 20 72 65 74 20  Vdbe *p;..  ret 
5650: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0d 0a 0d 0a  = SQLITE_OK;....
5660: 20 20 70 20 3d 20 28 56 64 62 65 20 2a 29 73 74    p = (Vdbe *)st
5670: 6d 74 3b 0d 0a 20 20 69 66 20 28 70 29 0d 0a 20  mt;..  if (p).. 
5680: 20 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 20   {..    sqlite3 
5690: 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 0d 0a 0d 0a  *db = p->db;....
56a0: 20 20 20 20 69 66 20 28 64 62 20 21 3d 20 4e 55      if (db != NU
56b0: 4c 4c 29 0d 0a 20 20 20 20 20 20 73 71 6c 69 74  LL)..      sqlit
56c0: 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64  e3_mutex_enter(d
56d0: 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20 20  b->mutex);....  
56e0: 20 20 69 66 20 28 28 70 2d 3e 6d 61 67 69 63 20    if ((p->magic 
56f0: 3d 3d 20 56 44 42 45 5f 4d 41 47 49 43 5f 44 45  == VDBE_MAGIC_DE
5700: 41 44 29 20 26 26 20 28 64 62 20 3d 3d 20 4e 55  AD) && (db == NU
5710: 4c 4c 29 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  LL))..    {..   
5720: 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
5730: 5f 69 6e 74 65 72 6f 70 28 64 62 2c 20 70 29 3b  _interop(db, p);
5740: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 65 6c 73  ..    }..    els
5750: 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  e..    {..      
5760: 72 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 66 69  ret = sqlite3_fi
5770: 6e 61 6c 69 7a 65 28 73 74 6d 74 29 3b 0d 0a 20  nalize(stmt);.. 
5780: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 66 20 28     }....    if (
5790: 64 62 20 21 3d 20 4e 55 4c 4c 29 0d 0a 20 20 20  db != NULL)..   
57a0: 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
57b0: 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78  _leave(db->mutex
57c0: 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 72 65 74  );..  }....  ret
57d0: 75 72 6e 20 72 65 74 3b 0d 0a 23 65 6e 64 69 66  urn ret;..#endif
57e0: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
57f0: 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c  I int WINAPI sql
5800: 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69  ite3_backup_fini
5810: 73 68 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  sh_interop(sqlit
5820: 65 33 5f 62 61 63 6b 75 70 20 2a 70 29 0d 0a 7b  e3_backup *p)..{
5830: 0d 0a 20 20 69 6e 74 20 72 65 74 3b 0d 0a 0d 0a  ..  int ret;....
5840: 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45  #if defined(INTE
5850: 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28 49  ROP_DEBUG) && (I
5860: 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49  NTEROP_DEBUG & I
5870: 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 42 41 43  NTEROP_DEBUG_BAC
5880: 4b 55 50 5f 46 49 4e 49 53 48 29 0d 0a 20 20 73  KUP_FINISH)..  s
5890: 71 6c 69 74 65 33 2a 20 70 44 65 73 74 44 62 20  qlite3* pDestDb 
58a0: 3d 20 70 20 3f 20 70 2d 3e 70 44 65 73 74 44 62  = p ? p->pDestDb
58b0: 20 3a 20 30 3b 0d 0a 20 20 73 71 6c 69 74 65 33   : 0;..  sqlite3
58c0: 2a 20 70 53 72 63 44 62 20 3d 20 70 20 3f 20 70  * pSrcDb = p ? p
58d0: 2d 3e 70 53 72 63 44 62 20 3a 20 30 3b 0d 0a 20  ->pSrcDb : 0;.. 
58e0: 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44   sqlite3InteropD
58f0: 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 62 61  ebug("sqlite3_ba
5900: 63 6b 75 70 5f 66 69 6e 69 73 68 5f 69 6e 74 65  ckup_finish_inte
5910: 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73  rop(): calling s
5920: 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69  qlite3_backup_fi
5930: 6e 69 73 68 28 25 70 2c 20 25 70 2c 20 25 70 29  nish(%p, %p, %p)
5940: 2e 2e 2e 5c 6e 22 2c 20 70 44 65 73 74 44 62 2c  ...\n", pDestDb,
5950: 20 70 53 72 63 44 62 2c 20 70 29 3b 0d 0a 23 65   pSrcDb, p);..#e
5960: 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 20 3d 20  ndif....  ret = 
5970: 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66  sqlite3_backup_f
5980: 69 6e 69 73 68 28 70 29 3b 0d 0a 0d 0a 23 69 66  inish(p);....#if
5990: 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50   defined(INTEROP
59a0: 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e 54 45  _DEBUG) && (INTE
59b0: 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45  ROP_DEBUG & INTE
59c0: 52 4f 50 5f 44 45 42 55 47 5f 42 41 43 4b 55 50  ROP_DEBUG_BACKUP
59d0: 5f 46 49 4e 49 53 48 29 0d 0a 20 20 73 71 6c 69  _FINISH)..  sqli
59e0: 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28  te3InteropDebug(
59f0: 22 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f  "sqlite3_backup_
5a00: 66 69 6e 69 73 68 5f 69 6e 74 65 72 6f 70 28 29  finish_interop()
5a10: 3a 20 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  : sqlite3_backup
5a20: 5f 66 69 6e 69 73 68 28 25 70 2c 20 25 70 2c 20  _finish(%p, %p, 
5a30: 25 70 29 20 72 65 74 75 72 6e 65 64 20 25 64 2e  %p) returned %d.
5a40: 5c 6e 22 2c 20 70 44 65 73 74 44 62 2c 20 70 53  \n", pDestDb, pS
5a50: 72 63 44 62 2c 20 70 2c 20 72 65 74 29 3b 0d 0a  rcDb, p, ret);..
5a60: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 75  #endif....  retu
5a70: 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a 0d 0a 53 51  rn ret;..}....SQ
5a80: 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e  LITE_API int WIN
5a90: 41 50 49 20 73 71 6c 69 74 65 33 5f 62 6c 6f 62  API sqlite3_blob
5aa0: 5f 63 6c 6f 73 65 5f 69 6e 74 65 72 6f 70 28 73  _close_interop(s
5ab0: 71 6c 69 74 65 33 5f 62 6c 6f 62 20 2a 70 29 0d  qlite3_blob *p).
5ac0: 0a 7b 0d 0a 20 20 69 6e 74 20 72 65 74 3b 0d 0a  .{..  int ret;..
5ad0: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
5ae0: 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20  TEROP_DEBUG) && 
5af0: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26  (INTEROP_DEBUG &
5b00: 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 42   INTEROP_DEBUG_B
5b10: 4c 4f 42 5f 43 4c 4f 53 45 29 0d 0a 20 20 73 71  LOB_CLOSE)..  sq
5b20: 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75  lite3InteropDebu
5b30: 67 28 22 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f  g("sqlite3_blob_
5b40: 63 6c 6f 73 65 5f 69 6e 74 65 72 6f 70 28 29 3a  close_interop():
5b50: 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33   calling sqlite3
5b60: 5f 62 6c 6f 62 5f 63 6c 6f 73 65 28 25 70 29 2e  _blob_close(%p).
5b70: 2e 2e 5c 6e 22 2c 20 70 29 3b 0d 0a 23 65 6e 64  ..\n", p);..#end
5b80: 69 66 0d 0a 0d 0a 20 20 72 65 74 20 3d 20 73 71  if....  ret = sq
5b90: 6c 69 74 65 33 5f 62 6c 6f 62 5f 63 6c 6f 73 65  lite3_blob_close
5ba0: 28 70 29 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69  (p);....#if defi
5bb0: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  ned(INTEROP_DEBU
5bc0: 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44  G) && (INTEROP_D
5bd0: 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44  EBUG & INTEROP_D
5be0: 45 42 55 47 5f 42 4c 4f 42 5f 43 4c 4f 53 45 29  EBUG_BLOB_CLOSE)
5bf0: 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72  ..  sqlite3Inter
5c00: 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33  opDebug("sqlite3
5c10: 5f 62 6c 6f 62 5f 63 6c 6f 73 65 5f 69 6e 74 65  _blob_close_inte
5c20: 72 6f 70 28 29 3a 20 73 71 6c 69 74 65 33 5f 62  rop(): sqlite3_b
5c30: 6c 6f 62 5f 63 6c 6f 73 65 28 25 70 29 20 72 65  lob_close(%p) re
5c40: 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 70  turned %d.\n", p
5c50: 2c 20 72 65 74 29 3b 0d 0a 23 65 6e 64 69 66 0d  , ret);..#endif.
5c60: 0a 0d 0a 20 20 72 65 74 75 72 6e 20 72 65 74 3b  ...  return ret;
5c70: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
5c80: 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c  I int WINAPI sql
5c90: 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65 72  ite3_reset_inter
5ca0: 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  op(sqlite3_stmt 
5cb0: 2a 73 74 6d 74 29 0d 0a 7b 0d 0a 20 20 69 6e 74  *stmt)..{..  int
5cc0: 20 72 65 74 3b 0d 0a 23 69 66 20 21 64 65 66 69   ret;..#if !defi
5cd0: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 4c 45 47 41  ned(INTEROP_LEGA
5ce0: 43 59 5f 43 4c 4f 53 45 29 20 26 26 20 53 51 4c  CY_CLOSE) && SQL
5cf0: 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  ITE_VERSION_NUMB
5d00: 45 52 20 3e 3d 20 33 30 30 37 30 31 34 0d 0a 0d  ER >= 3007014...
5d10: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54  .#if defined(INT
5d20: 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28  EROP_DEBUG) && (
5d30: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20  INTEROP_DEBUG & 
5d40: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 52 45  INTEROP_DEBUG_RE
5d50: 53 45 54 29 0d 0a 20 20 73 71 6c 69 74 65 33 49  SET)..  sqlite3I
5d60: 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c  nteropDebug("sql
5d70: 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65 72  ite3_reset_inter
5d80: 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73 71  op(): calling sq
5d90: 6c 69 74 65 33 5f 72 65 73 65 74 28 25 70 29 2e  lite3_reset(%p).
5da0: 2e 2e 5c 6e 22 2c 20 73 74 6d 74 29 3b 0d 0a 23  ..\n", stmt);..#
5db0: 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 20 3d  endif....  ret =
5dc0: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 73   sqlite3_reset(s
5dd0: 74 6d 74 29 3b 0d 0a 0d 0a 23 69 66 20 64 65 66  tmt);....#if def
5de0: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42  ined(INTEROP_DEB
5df0: 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f  UG) && (INTEROP_
5e00: 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f  DEBUG & INTEROP_
5e10: 44 45 42 55 47 5f 52 45 53 45 54 29 0d 0a 20 20  DEBUG_RESET)..  
5e20: 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65  sqlite3InteropDe
5e30: 62 75 67 28 22 73 71 6c 69 74 65 33 5f 72 65 73  bug("sqlite3_res
5e40: 65 74 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73 71  et_interop(): sq
5e50: 6c 69 74 65 33 5f 72 65 73 65 74 28 25 70 29 20  lite3_reset(%p) 
5e60: 72 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c  returned %d.\n",
5e70: 20 73 74 6d 74 2c 20 72 65 74 29 3b 0d 0a 23 65   stmt, ret);..#e
5e80: 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 75 72 6e  ndif....  return
5e90: 20 72 65 74 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20   ret;..#else..  
5ea0: 69 66 20 28 73 74 6d 74 20 26 26 20 28 28 56 64  if (stmt && ((Vd
5eb0: 62 65 20 2a 29 73 74 6d 74 29 2d 3e 6d 61 67 69  be *)stmt)->magi
5ec0: 63 20 3d 3d 20 56 44 42 45 5f 4d 41 47 49 43 5f  c == VDBE_MAGIC_
5ed0: 44 45 41 44 29 20 72 65 74 75 72 6e 20 53 51 4c  DEAD) return SQL
5ee0: 49 54 45 5f 53 43 48 45 4d 41 3b 0d 0a 20 20 72  ITE_SCHEMA;..  r
5ef0: 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 73  et = sqlite3_res
5f00: 65 74 28 73 74 6d 74 29 3b 0d 0a 20 20 72 65 74  et(stmt);..  ret
5f10: 75 72 6e 20 72 65 74 3b 0d 0a 23 65 6e 64 69 66  urn ret;..#endif
5f20: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
5f30: 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c  I int WINAPI sql
5f40: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
5f50: 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 73 71 6c  tion_interop(sql
5f60: 69 74 65 33 20 2a 70 73 71 6c 2c 20 63 6f 6e 73  ite3 *psql, cons
5f70: 74 20 63 68 61 72 20 2a 7a 46 75 6e 63 74 69 6f  t char *zFunctio
5f80: 6e 4e 61 6d 65 2c 20 69 6e 74 20 6e 41 72 67 2c  nName, int nArg,
5f90: 20 69 6e 74 20 65 54 65 78 74 52 65 70 2c 20 76   int eTextRep, v
5fa0: 6f 69 64 20 2a 70 76 55 73 65 72 2c 20 53 51 4c  oid *pvUser, SQL
5fb0: 49 54 45 55 53 45 52 46 55 4e 43 20 66 75 6e 63  ITEUSERFUNC func
5fc0: 2c 20 53 51 4c 49 54 45 55 53 45 52 46 55 4e 43  , SQLITEUSERFUNC
5fd0: 20 66 75 6e 63 73 74 65 70 2c 20 53 51 4c 49 54   funcstep, SQLIT
5fe0: 45 46 55 4e 43 46 49 4e 41 4c 20 66 75 6e 63 66  EFUNCFINAL funcf
5ff0: 69 6e 61 6c 2c 20 69 6e 74 20 6e 65 65 64 43 6f  inal, int needCo
6000: 6c 6c 53 65 71 29 0d 0a 7b 0d 0a 20 20 69 6e 74  llSeq)..{..  int
6010: 20 6e 3b 0d 0a 0d 0a 20 20 69 66 20 28 65 54 65   n;....  if (eTe
6020: 78 74 52 65 70 20 3d 3d 20 53 51 4c 49 54 45 5f  xtRep == SQLITE_
6030: 55 54 46 31 36 29 0d 0a 20 20 20 20 65 54 65 78  UTF16)..    eTex
6040: 74 52 65 70 20 3d 20 53 51 4c 49 54 45 5f 55 54  tRep = SQLITE_UT
6050: 46 31 36 4e 41 54 49 56 45 3b 0d 0a 0d 0a 20 20  F16NATIVE;....  
6060: 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61  n = sqlite3_crea
6070: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 70 73 71 6c  te_function(psql
6080: 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c  , zFunctionName,
6090: 20 6e 41 72 67 2c 20 65 54 65 78 74 52 65 70 2c   nArg, eTextRep,
60a0: 20 70 76 55 73 65 72 2c 20 66 75 6e 63 2c 20 66   pvUser, func, f
60b0: 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e  uncstep, funcfin
60c0: 61 6c 29 3b 0d 0a 20 20 69 66 20 28 6e 20 3d 3d  al);..  if (n ==
60d0: 20 53 51 4c 49 54 45 5f 4f 4b 29 0d 0a 20 20 7b   SQLITE_OK)..  {
60e0: 0d 0a 20 20 20 20 69 66 20 28 6e 65 65 64 43 6f  ..    if (needCo
60f0: 6c 6c 53 65 71 29 0d 0a 20 20 20 20 7b 0d 0a 20  llSeq)..    {.. 
6100: 20 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46       FuncDef *pF
6110: 75 6e 63 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  unc = sqlite3Fin
6120: 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20  dFunction(..    
6130: 20 20 20 20 20 20 70 73 71 6c 2c 20 7a 46 75 6e        psql, zFun
6140: 63 74 69 6f 6e 4e 61 6d 65 2c 0d 0a 23 69 66 20  ctionName,..#if 
6150: 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e  SQLITE_VERSION_N
6160: 55 4d 42 45 52 20 3c 20 33 30 31 32 30 30 30 0d  UMBER < 3012000.
6170: 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 6c 65  .          strle
6180: 6e 28 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 29  n(zFunctionName)
6190: 2c 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ,..#endif..     
61a0: 20 20 20 20 20 6e 41 72 67 2c 20 65 54 65 78 74       nArg, eText
61b0: 52 65 70 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20  Rep, 0);..      
61c0: 69 66 28 20 70 46 75 6e 63 20 29 0d 0a 20 20 20  if( pFunc )..   
61d0: 20 20 20 7b 0d 0a 23 69 66 20 53 51 4c 49 54 45     {..#if SQLITE
61e0: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20  _VERSION_NUMBER 
61f0: 3e 3d 20 33 30 30 38 30 30 31 0d 0a 20 20 20 20  >= 3008001..    
6200: 20 20 20 20 70 46 75 6e 63 2d 3e 66 75 6e 63 46      pFunc->funcF
6210: 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 46  lags |= SQLITE_F
6220: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 3b 0d 0a 23  UNC_NEEDCOLL;..#
6230: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 70 46  else..        pF
6240: 75 6e 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51  unc->flags |= SQ
6250: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
6260: 4c 4c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  LL;..#endif..   
6270: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d     }..    }..  }
6280: 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0d  ....  return n;.
6290: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
62a0: 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c   void WINAPI sql
62b0: 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c  ite3_value_doubl
62c0: 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  e_interop(sqlite
62d0: 33 5f 76 61 6c 75 65 20 2a 70 76 61 6c 2c 20 64  3_value *pval, d
62e0: 6f 75 62 6c 65 20 2a 76 61 6c 29 0d 0a 7b 0d 0a  ouble *val)..{..
62f0: 20 20 69 66 20 28 21 76 61 6c 29 20 72 65 74 75    if (!val) retu
6300: 72 6e 3b 0d 0a 20 20 2a 76 61 6c 20 3d 20 73 71  rn;..  *val = sq
6310: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62  lite3_value_doub
6320: 6c 65 28 70 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a  le(pval);..}....
6330: 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69 64 20  SQLITE_API void 
6340: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 76  WINAPI sqlite3_v
6350: 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e 74 65 72  alue_int64_inter
6360: 6f 70 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  op(sqlite3_value
6370: 20 2a 70 76 61 6c 2c 20 73 71 6c 69 74 65 5f 69   *pval, sqlite_i
6380: 6e 74 36 34 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 20  nt64 *val)..{.. 
6390: 20 69 66 20 28 21 76 61 6c 29 20 72 65 74 75 72   if (!val) retur
63a0: 6e 3b 0d 0a 20 20 2a 76 61 6c 20 3d 20 73 71 6c  n;..  *val = sql
63b0: 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34  ite3_value_int64
63c0: 28 70 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51  (pval);..}....SQ
63d0: 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 75  LITE_API const u
63e0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 20 57  nsigned char * W
63f0: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 76 61  INAPI sqlite3_va
6400: 6c 75 65 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70  lue_text_interop
6410: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
6420: 76 61 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d  val, int *plen).
6430: 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 75 6e 73 69  .{..  const unsi
6440: 67 6e 65 64 20 63 68 61 72 20 2a 70 76 61 6c 20  gned char *pval 
6450: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
6460: 74 65 78 74 28 76 61 6c 29 3b 0d 0a 20 20 69 66  text(val);..  if
6470: 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20   (plen) *plen = 
6480: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
6490: 74 65 73 28 76 61 6c 29 3b 0d 0a 20 20 72 65 74  tes(val);..  ret
64a0: 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a  urn pval;..}....
64b0: 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74  SQLITE_API const
64c0: 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73   void * WINAPI s
64d0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
64e0: 74 31 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  t16_interop(sqli
64f0: 74 65 33 5f 76 61 6c 75 65 20 2a 76 61 6c 2c 20  te3_value *val, 
6500: 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20  int *plen)..{.. 
6510: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 61   const void *pva
6520: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  l = sqlite3_valu
6530: 65 5f 74 65 78 74 31 36 28 76 61 6c 29 3b 0d 0a  e_text16(val);..
6540: 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65    if (plen) *ple
6550: 6e 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  n = sqlite3_valu
6560: 65 5f 62 79 74 65 73 31 36 28 76 61 6c 29 3b 0d  e_bytes16(val);.
6570: 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d  .  return pval;.
6580: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
6590: 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c   void WINAPI sql
65a0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62  ite3_result_doub
65b0: 6c 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  le_interop(sqlit
65c0: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 63 74 78  e3_context *pctx
65d0: 2c 20 64 6f 75 62 6c 65 20 2a 76 61 6c 29 0d 0a  , double *val)..
65e0: 7b 0d 0a 20 20 69 66 20 28 21 76 61 6c 29 20 72  {..  if (!val) r
65f0: 65 74 75 72 6e 3b 0d 0a 20 20 73 71 6c 69 74 65  eturn;..  sqlite
6600: 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28  3_result_double(
6610: 70 63 74 78 2c 20 2a 76 61 6c 29 3b 0d 0a 7d 0d  pctx, *val);..}.
6620: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76 6f  ...SQLITE_API vo
6630: 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  id WINAPI sqlite
6640: 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69  3_result_int64_i
6650: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 63  nterop(sqlite3_c
6660: 6f 6e 74 65 78 74 20 2a 70 63 74 78 2c 20 73 71  ontext *pctx, sq
6670: 6c 69 74 65 5f 69 6e 74 36 34 20 2a 76 61 6c 29  lite_int64 *val)
6680: 0d 0a 7b 0d 0a 20 20 69 66 20 28 21 76 61 6c 29  ..{..  if (!val)
6690: 20 72 65 74 75 72 6e 3b 0d 0a 20 20 73 71 6c 69   return;..  sqli
66a0: 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34  te3_result_int64
66b0: 28 70 63 74 78 2c 20 2a 76 61 6c 29 3b 0d 0a 7d  (pctx, *val);..}
66c0: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69  ....SQLITE_API i
66d0: 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  nt WINAPI sqlite
66e0: 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f  3_context_collco
66f0: 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 73 71  mpare_interop(sq
6700: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63  lite3_context *c
6710: 74 78 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  tx, const void *
6720: 70 31 2c 20 69 6e 74 20 70 31 6c 65 6e 2c 20 63  p1, int p1len, c
6730: 6f 6e 73 74 20 76 6f 69 64 20 2a 70 32 2c 20 69  onst void *p2, i
6740: 6e 74 20 70 32 6c 65 6e 29 0d 0a 7b 0d 0a 23 69  nt p2len)..{..#i
6750: 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
6760: 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 38 30  _NUMBER >= 30080
6770: 30 37 0d 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70  07..  CollSeq *p
6780: 43 6f 6c 6c 20 3d 20 63 74 78 20 3f 20 73 71 6c  Coll = ctx ? sql
6790: 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53  ite3GetFuncCollS
67a0: 65 71 28 63 74 78 29 20 3a 20 30 3b 0d 0a 23 65  eq(ctx) : 0;..#e
67b0: 6c 73 65 0d 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  lse..  CollSeq *
67c0: 70 43 6f 6c 6c 20 3d 20 63 74 78 20 3f 20 63 74  pColl = ctx ? ct
67d0: 78 2d 3e 70 43 6f 6c 6c 20 3a 20 30 3b 0d 0a 23  x->pColl : 0;..#
67e0: 65 6e 64 69 66 0d 0a 20 20 69 66 20 28 21 63 74  endif..  if (!ct
67f0: 78 20 7c 7c 20 21 63 74 78 2d 3e 70 46 75 6e 63  x || !ctx->pFunc
6800: 29 20 72 65 74 75 72 6e 20 34 3b 20 2f 2a 20 45  ) return 4; /* E
6810: 52 52 4f 52 20 2a 2f 0d 0a 20 20 69 66 20 28 21  RROR */..  if (!
6820: 70 43 6f 6c 6c 20 7c 7c 20 21 70 43 6f 6c 6c 2d  pColl || !pColl-
6830: 3e 78 43 6d 70 29 20 72 65 74 75 72 6e 20 33 3b  >xCmp) return 3;
6840: 20 2f 2a 20 45 52 52 4f 52 20 2a 2f 0d 0a 23 69   /* ERROR */..#i
6850: 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
6860: 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 38 30  _NUMBER >= 30080
6870: 30 31 0d 0a 20 20 69 66 20 28 28 63 74 78 2d 3e  01..  if ((ctx->
6880: 70 46 75 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73  pFunc->funcFlags
6890: 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e   & SQLITE_FUNC_N
68a0: 45 45 44 43 4f 4c 4c 29 20 3d 3d 20 30 29 20 72  EEDCOLL) == 0) r
68b0: 65 74 75 72 6e 20 32 3b 20 2f 2a 20 45 52 52 4f  eturn 2; /* ERRO
68c0: 52 20 2a 2f 0d 0a 23 65 6c 73 65 0d 0a 20 20 69  R */..#else..  i
68d0: 66 20 28 28 63 74 78 2d 3e 70 46 75 6e 63 2d 3e  f ((ctx->pFunc->
68e0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46  flags & SQLITE_F
68f0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 20 3d 3d  UNC_NEEDCOLL) ==
6900: 20 30 29 20 72 65 74 75 72 6e 20 32 3b 20 2f 2a   0) return 2; /*
6910: 20 45 52 52 4f 52 20 2a 2f 0d 0a 23 65 6e 64 69   ERROR */..#endi
6920: 66 0d 0a 20 20 72 65 74 75 72 6e 20 70 43 6f 6c  f..  return pCol
6930: 6c 2d 3e 78 43 6d 70 28 70 43 6f 6c 6c 2d 3e 70  l->xCmp(pColl->p
6940: 55 73 65 72 2c 20 70 31 6c 65 6e 2c 20 70 31 2c  User, p1len, p1,
6950: 20 70 32 6c 65 6e 2c 20 70 32 29 3b 0d 0a 7d 0d   p2len, p2);..}.
6960: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f  ...SQLITE_API co
6970: 6e 73 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50  nst char * WINAP
6980: 49 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  I sqlite3_contex
6990: 74 5f 63 6f 6c 6c 73 65 71 5f 69 6e 74 65 72 6f  t_collseq_intero
69a0: 70 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  p(sqlite3_contex
69b0: 74 20 2a 63 74 78 2c 20 69 6e 74 20 2a 70 74 79  t *ctx, int *pty
69c0: 70 65 2c 20 69 6e 74 20 2a 65 6e 63 2c 20 69 6e  pe, int *enc, in
69d0: 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 23 69 66  t *plen)..{..#if
69e0: 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f   SQLITE_VERSION_
69f0: 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 38 30 30  NUMBER >= 300800
6a00: 37 0d 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43  7..  CollSeq *pC
6a10: 6f 6c 6c 20 3d 20 63 74 78 20 3f 20 73 71 6c 69  oll = ctx ? sqli
6a20: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
6a30: 71 28 63 74 78 29 20 3a 20 30 3b 0d 0a 23 65 6c  q(ctx) : 0;..#el
6a40: 73 65 0d 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70  se..  CollSeq *p
6a50: 43 6f 6c 6c 20 3d 20 63 74 78 20 3f 20 63 74 78  Coll = ctx ? ctx
6a60: 2d 3e 70 43 6f 6c 6c 20 3a 20 30 3b 0d 0a 23 65  ->pColl : 0;..#e
6a70: 6e 64 69 66 0d 0a 20 20 69 66 20 28 70 74 79 70  ndif..  if (ptyp
6a80: 65 29 20 2a 70 74 79 70 65 20 3d 20 30 3b 0d 0a  e) *ptype = 0;..
6a90: 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65    if (plen) *ple
6aa0: 6e 20 3d 20 30 3b 0d 0a 20 20 69 66 20 28 65 6e  n = 0;..  if (en
6ab0: 63 29 20 2a 65 6e 63 20 3d 20 30 3b 0d 0a 0d 0a  c) *enc = 0;....
6ac0: 20 20 69 66 20 28 21 63 74 78 20 7c 7c 20 21 63    if (!ctx || !c
6ad0: 74 78 2d 3e 70 46 75 6e 63 29 20 72 65 74 75 72  tx->pFunc) retur
6ae0: 6e 20 4e 55 4c 4c 3b 0d 0a 23 69 66 20 53 51 4c  n NULL;..#if SQL
6af0: 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  ITE_VERSION_NUMB
6b00: 45 52 20 3e 3d 20 33 30 30 38 30 30 31 0d 0a 20  ER >= 3008001.. 
6b10: 20 69 66 20 28 28 63 74 78 2d 3e 70 46 75 6e 63   if ((ctx->pFunc
6b20: 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26 20 53 51  ->funcFlags & SQ
6b30: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
6b40: 4c 4c 29 20 3d 3d 20 30 29 20 72 65 74 75 72 6e  LL) == 0) return
6b50: 20 4e 55 4c 4c 3b 0d 0a 23 65 6c 73 65 0d 0a 20   NULL;..#else.. 
6b60: 20 69 66 20 28 28 63 74 78 2d 3e 70 46 75 6e 63   if ((ctx->pFunc
6b70: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
6b80: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 20  _FUNC_NEEDCOLL) 
6b90: 3d 3d 20 30 29 20 72 65 74 75 72 6e 20 4e 55 4c  == 0) return NUL
6ba0: 4c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  L;..#endif....  
6bb0: 69 66 20 28 70 43 6f 6c 6c 29 0d 0a 20 20 7b 0d  if (pColl)..  {.
6bc0: 0a 20 20 20 20 69 66 20 28 65 6e 63 29 20 2a 65  .    if (enc) *e
6bd0: 6e 63 20 3d 20 70 43 6f 6c 6c 2d 3e 65 6e 63 3b  nc = pColl->enc;
6be0: 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52  ..#if SQLITE_VER
6bf0: 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3c 20 33 30  SION_NUMBER < 30
6c00: 30 37 30 31 30 0d 0a 20 20 20 20 69 66 20 28 70  07010..    if (p
6c10: 74 79 70 65 29 20 2a 70 74 79 70 65 20 3d 20 70  type) *ptype = p
6c20: 43 6f 6c 6c 2d 3e 74 79 70 65 3b 0d 0a 23 65 6e  Coll->type;..#en
6c30: 64 69 66 0d 0a 20 20 20 20 69 66 20 28 70 6c 65  dif..    if (ple
6c40: 6e 29 20 2a 70 6c 65 6e 20 3d 20 70 43 6f 6c 6c  n) *plen = pColl
6c50: 2d 3e 7a 4e 61 6d 65 20 3f 20 73 74 72 6c 65 6e  ->zName ? strlen
6c60: 28 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 29 20 3a  (pColl->zName) :
6c70: 20 30 3b 0d 0a 0d 0a 20 20 20 20 72 65 74 75 72   0;....    retur
6c80: 6e 20 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 3b 0d  n pColl->zName;.
6c90: 0a 20 20 7d 0d 0a 20 20 72 65 74 75 72 6e 20 4e  .  }..  return N
6ca0: 55 4c 4c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  ULL;..}....SQLIT
6cb0: 45 5f 41 50 49 20 63 6f 6e 73 74 20 63 68 61 72  E_API const char
6cc0: 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65   * WINAPI sqlite
6cd0: 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73  3_column_databas
6ce0: 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73  e_name_interop(s
6cf0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d  qlite3_stmt *stm
6d00: 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74  t, int iCol, int
6d10: 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f   *plen)..{..  co
6d20: 6e 73 74 20 63 68 61 72 20 2a 70 76 61 6c 20 3d  nst char *pval =
6d30: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
6d40: 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 28 73 74  database_name(st
6d50: 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 69 66  mt, iCol);..  if
6d60: 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20   (plen) *plen = 
6d70: 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e 28 70 76  pval ? strlen(pv
6d80: 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75  al) : 0;..  retu
6d90: 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53  rn pval;..}....S
6da0: 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20  QLITE_API const 
6db0: 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71  void * WINAPI sq
6dc0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74  lite3_column_dat
6dd0: 61 62 61 73 65 5f 6e 61 6d 65 31 36 5f 69 6e 74  abase_name16_int
6de0: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
6df0: 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f  t *stmt, int iCo
6e00: 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b  l, int *plen)..{
6e10: 0d 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ..  const void *
6e20: 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  pval = sqlite3_c
6e30: 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e  olumn_database_n
6e40: 61 6d 65 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c  ame16(stmt, iCol
6e50: 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20  );..  if (plen) 
6e60: 2a 70 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20 77  *plen = pval ? w
6e70: 63 73 6c 65 6e 28 28 77 63 68 61 72 5f 74 20 2a  cslen((wchar_t *
6e80: 29 70 76 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28  )pval) * sizeof(
6e90: 77 63 68 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 20  wchar_t) : 0;.. 
6ea0: 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d   return pval;..}
6eb0: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63  ....SQLITE_API c
6ec0: 6f 6e 73 74 20 63 68 61 72 20 2a 20 57 49 4e 41  onst char * WINA
6ed0: 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  PI sqlite3_colum
6ee0: 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74  n_table_name_int
6ef0: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
6f00: 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f  t *stmt, int iCo
6f10: 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b  l, int *plen)..{
6f20: 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ..  const char *
6f30: 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  pval = sqlite3_c
6f40: 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
6f50: 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20  (stmt, iCol);.. 
6f60: 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e   if (plen) *plen
6f70: 20 3d 20 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e   = pval ? strlen
6f80: 28 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72  (pval) : 0;..  r
6f90: 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a  eturn pval;..}..
6fa0: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e  ..SQLITE_API con
6fb0: 73 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49  st void * WINAPI
6fc0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
6fd0: 74 61 62 6c 65 5f 6e 61 6d 65 31 36 5f 69 6e 74  table_name16_int
6fe0: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
6ff0: 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f  t *stmt, int iCo
7000: 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b  l, int *plen)..{
7010: 0d 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ..  const void *
7020: 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  pval = sqlite3_c
7030: 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
7040: 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d  16(stmt, iCol);.
7050: 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c  .  if (plen) *pl
7060: 65 6e 20 3d 20 70 76 61 6c 20 3f 20 77 63 73 6c  en = pval ? wcsl
7070: 65 6e 28 28 77 63 68 61 72 5f 74 20 2a 29 70 76  en((wchar_t *)pv
7080: 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77 63 68  al) * sizeof(wch
7090: 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 20 20 72 65  ar_t) : 0;..  re
70a0: 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d  turn pval;..}...
70b0: 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73  .SQLITE_API cons
70c0: 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49 20  t char * WINAPI 
70d0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
70e0: 72 69 67 69 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72  rigin_name_inter
70f0: 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  op(sqlite3_stmt 
7100: 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c  *stmt, int iCol,
7110: 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a   int *plen)..{..
7120: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 76    const char *pv
7130: 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  al = sqlite3_col
7140: 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 28  umn_origin_name(
7150: 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20  stmt, iCol);..  
7160: 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20  if (plen) *plen 
7170: 3d 20 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e 28  = pval ? strlen(
7180: 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65  pval) : 0;..  re
7190: 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d  turn pval;..}...
71a0: 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73  .SQLITE_API cons
71b0: 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20  t void * WINAPI 
71c0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
71d0: 72 69 67 69 6e 5f 6e 61 6d 65 31 36 5f 69 6e 74  rigin_name16_int
71e0: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
71f0: 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f  t *stmt, int iCo
7200: 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b  l, int *plen)..{
7210: 0d 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ..  const void *
7220: 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  pval = sqlite3_c
7230: 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d  olumn_origin_nam
7240: 65 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b  e16(stmt, iCol);
7250: 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70  ..  if (plen) *p
7260: 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20 77 63 73  len = pval ? wcs
7270: 6c 65 6e 28 28 77 63 68 61 72 5f 74 20 2a 29 70  len((wchar_t *)p
7280: 76 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77 63  val) * sizeof(wc
7290: 68 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 20 20 72  har_t) : 0;..  r
72a0: 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a  eturn pval;..}..
72b0: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74  ..SQLITE_API int
72c0: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
72d0: 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74  table_column_met
72e0: 61 64 61 74 61 5f 69 6e 74 65 72 6f 70 28 73 71  adata_interop(sq
72f0: 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74  lite3 *db, const
7300: 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d 65 2c 20   char *zDbName, 
7310: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 62  const char *zTab
7320: 6c 65 4e 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68  leName, const ch
7330: 61 72 20 2a 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 2c  ar *zColumnName,
7340: 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 2a 70 7a   char const **pz
7350: 44 61 74 61 54 79 70 65 2c 20 63 68 61 72 20 63  DataType, char c
7360: 6f 6e 73 74 20 2a 2a 70 7a 43 6f 6c 6c 53 65 71  onst **pzCollSeq
7370: 2c 20 69 6e 74 20 2a 70 4e 6f 74 4e 75 6c 6c 2c  , int *pNotNull,
7380: 20 69 6e 74 20 2a 70 50 72 69 6d 61 72 79 4b 65   int *pPrimaryKe
7390: 79 2c 20 69 6e 74 20 2a 70 41 75 74 6f 69 6e 63  y, int *pAutoinc
73a0: 2c 20 69 6e 74 20 2a 70 64 74 4c 65 6e 2c 20 69  , int *pdtLen, i
73b0: 6e 74 20 2a 70 63 73 4c 65 6e 29 0d 0a 7b 0d 0a  nt *pcsLen)..{..
73c0: 20 20 69 6e 74 20 6e 3b 0d 0a 0d 0a 20 20 6e 20    int n;....  n 
73d0: 3d 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f  = sqlite3_table_
73e0: 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28  column_metadata(
73f0: 64 62 2c 20 7a 44 62 4e 61 6d 65 2c 20 7a 54 61  db, zDbName, zTa
7400: 62 6c 65 4e 61 6d 65 2c 20 7a 43 6f 6c 75 6d 6e  bleName, zColumn
7410: 4e 61 6d 65 2c 20 70 7a 44 61 74 61 54 79 70 65  Name, pzDataType
7420: 2c 20 70 7a 43 6f 6c 6c 53 65 71 2c 20 70 4e 6f  , pzCollSeq, pNo
7430: 74 4e 75 6c 6c 2c 20 70 50 72 69 6d 61 72 79 4b  tNull, pPrimaryK
7440: 65 79 2c 20 70 41 75 74 6f 69 6e 63 29 3b 0d 0a  ey, pAutoinc);..
7450: 0d 0a 20 20 69 66 20 28 70 64 74 4c 65 6e 29 20  ..  if (pdtLen) 
7460: 2a 70 64 74 4c 65 6e 20 3d 20 28 70 7a 44 61 74  *pdtLen = (pzDat
7470: 61 54 79 70 65 20 26 26 20 2a 70 7a 44 61 74 61  aType && *pzData
7480: 54 79 70 65 29 20 3f 20 73 74 72 6c 65 6e 28 2a  Type) ? strlen(*
7490: 70 7a 44 61 74 61 54 79 70 65 29 20 3a 20 30 3b  pzDataType) : 0;
74a0: 0d 0a 20 20 69 66 20 28 70 63 73 4c 65 6e 29 20  ..  if (pcsLen) 
74b0: 2a 70 63 73 4c 65 6e 20 3d 20 28 70 7a 43 6f 6c  *pcsLen = (pzCol
74c0: 6c 53 65 71 20 26 26 20 2a 70 7a 43 6f 6c 6c 53  lSeq && *pzCollS
74d0: 65 71 29 20 3f 20 73 74 72 6c 65 6e 28 2a 70 7a  eq) ? strlen(*pz
74e0: 43 6f 6c 6c 53 65 71 29 20 3a 20 30 3b 0d 0a 0d  CollSeq) : 0;...
74f0: 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 7d 0d  .  return n;..}.
7500: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e  ...SQLITE_API in
7510: 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  t WINAPI sqlite3
7520: 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69 6e  _index_column_in
7530: 66 6f 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  fo_interop(sqlit
7540: 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68  e3 *db, const ch
7550: 61 72 20 2a 7a 44 62 2c 20 63 6f 6e 73 74 20 63  ar *zDb, const c
7560: 68 61 72 20 2a 7a 49 6e 64 65 78 4e 61 6d 65 2c  har *zIndexName,
7570: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f   const char *zCo
7580: 6c 75 6d 6e 4e 61 6d 65 2c 20 69 6e 74 20 2a 73  lumnName, int *s
7590: 6f 72 74 4f 72 64 65 72 2c 20 69 6e 74 20 2a 6f  ortOrder, int *o
75a0: 6e 45 72 72 6f 72 2c 20 63 6f 6e 73 74 20 63 68  nError, const ch
75b0: 61 72 20 2a 2a 70 7a 43 6f 6c 6c 2c 20 69 6e 74  ar **pzColl, int
75c0: 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 49 6e   *plen)..{..  In
75d0: 64 65 78 20 2a 70 49 64 78 3b 0d 0a 20 20 54 61  dex *pIdx;..  Ta
75e0: 62 6c 65 20 2a 70 54 61 62 3b 0d 0a 20 20 69 6e  ble *pTab;..  in
75f0: 74 20 6e 3b 0d 0a 0d 0a 20 20 69 66 20 28 21 64  t n;....  if (!d
7600: 62 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  b) return SQLITE
7610: 5f 45 52 52 4f 52 3b 0d 0a 20 20 73 71 6c 69 74  _ERROR;..  sqlit
7620: 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64  e3_mutex_enter(d
7630: 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 73 71  b->mutex);..  sq
7640: 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65 72 41  lite3BtreeEnterA
7650: 6c 6c 28 64 62 29 3b 0d 0a 0d 0a 20 20 70 49 64  ll(db);....  pId
7660: 78 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 49  x = sqlite3FindI
7670: 6e 64 65 78 28 64 62 2c 20 7a 49 6e 64 65 78 4e  ndex(db, zIndexN
7680: 61 6d 65 2c 20 7a 44 62 29 3b 0d 0a 0d 0a 20 20  ame, zDb);....  
7690: 73 71 6c 69 74 65 33 42 74 72 65 65 4c 65 61 76  sqlite3BtreeLeav
76a0: 65 41 6c 6c 28 64 62 29 3b 0d 0a 20 20 73 71 6c  eAll(db);..  sql
76b0: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
76c0: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a  (db->mutex);....
76d0: 20 20 69 66 20 28 21 70 49 64 78 29 20 72 65 74    if (!pIdx) ret
76e0: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
76f0: 3b 0d 0a 0d 0a 20 20 70 54 61 62 20 3d 20 70 49  ;....  pTab = pI
7700: 64 78 2d 3e 70 54 61 62 6c 65 3b 0d 0a 20 20 66  dx->pTable;..  f
7710: 6f 72 20 28 6e 20 3d 20 30 3b 20 6e 20 3c 20 70  or (n = 0; n < p
7720: 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 3b 20 6e 2b  Idx->nColumn; n+
7730: 2b 29 0d 0a 20 20 7b 0d 0a 20 20 20 20 69 6e 74  +)..  {..    int
7740: 20 63 6e 75 6d 20 3d 20 70 49 64 78 2d 3e 61 69   cnum = pIdx->ai
7750: 43 6f 6c 75 6d 6e 5b 6e 5d 3b 0d 0a 20 20 20 20  Column[n];..    
7760: 69 66 20 28 73 71 6c 69 74 65 33 53 74 72 49 43  if (sqlite3StrIC
7770: 6d 70 28 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e  mp(pTab->aCol[cn
7780: 75 6d 5d 2e 7a 4e 61 6d 65 2c 20 7a 43 6f 6c 75  um].zName, zColu
7790: 6d 6e 4e 61 6d 65 29 20 3d 3d 20 30 29 0d 0a 20  mnName) == 0).. 
77a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28     {..      if (
77b0: 20 73 6f 72 74 4f 72 64 65 72 20 29 20 2a 73 6f   sortOrder ) *so
77c0: 72 74 4f 72 64 65 72 20 3d 20 70 49 64 78 2d 3e  rtOrder = pIdx->
77d0: 61 53 6f 72 74 4f 72 64 65 72 5b 6e 5d 3b 0d 0a  aSortOrder[n];..
77e0: 20 20 20 20 20 20 69 66 20 28 20 70 7a 43 6f 6c        if ( pzCol
77f0: 6c 20 29 20 2a 70 7a 43 6f 6c 6c 20 3d 20 70 49  l ) *pzColl = pI
7800: 64 78 2d 3e 61 7a 43 6f 6c 6c 5b 6e 5d 3b 0d 0a  dx->azColl[n];..
7810: 20 20 20 20 20 20 69 66 20 28 20 70 6c 65 6e 20        if ( plen 
7820: 29 20 2a 70 6c 65 6e 20 3d 20 73 74 72 6c 65 6e  ) *plen = strlen
7830: 28 2a 70 7a 43 6f 6c 6c 29 3b 0d 0a 20 20 20 20  (*pzColl);..    
7840: 20 20 69 66 20 28 20 6f 6e 45 72 72 6f 72 20 29    if ( onError )
7850: 20 2a 6f 6e 45 72 72 6f 72 20 3d 20 70 49 64 78   *onError = pIdx
7860: 2d 3e 6f 6e 45 72 72 6f 72 3b 0d 0a 0d 0a 20 20  ->onError;....  
7870: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
7880: 45 5f 4f 4b 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20  E_OK;..    }..  
7890: 7d 0d 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49  }..  return SQLI
78a0: 54 45 5f 45 52 52 4f 52 3b 0d 0a 7d 0d 0a 0d 0a  TE_ERROR;..}....
78b0: 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57  SQLITE_API int W
78c0: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 74 61  INAPI sqlite3_ta
78d0: 62 6c 65 5f 63 75 72 73 6f 72 5f 69 6e 74 65 72  ble_cursor_inter
78e0: 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  op(sqlite3_stmt 
78f0: 2a 70 73 74 6d 74 2c 20 69 6e 74 20 69 44 62 2c  *pstmt, int iDb,
7900: 20 50 67 6e 6f 20 74 61 62 6c 65 52 6f 6f 74 50   Pgno tableRootP
7910: 61 67 65 29 0d 0a 7b 0d 0a 20 20 56 64 62 65 20  age)..{..  Vdbe 
7920: 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70 73 74  *p = (Vdbe *)pst
7930: 6d 74 3b 0d 0a 20 20 73 71 6c 69 74 65 33 20 2a  mt;..  sqlite3 *
7940: 64 62 20 3d 20 28 70 20 3d 3d 20 4e 55 4c 4c 29  db = (p == NULL)
7950: 20 3f 20 4e 55 4c 4c 20 3a 20 70 2d 3e 64 62 3b   ? NULL : p->db;
7960: 0d 0a 20 20 69 6e 74 20 6e 3b 0d 0a 20 20 69 6e  ..  int n;..  in
7970: 74 20 72 65 74 20 3d 20 2d 31 3b 20 2f 2a 20 4e  t ret = -1; /* N
7980: 4f 54 20 46 4f 55 4e 44 20 2a 2f 0d 0a 0d 0a 20  OT FOUND */.... 
7990: 20 69 66 20 28 21 70 20 7c 7c 20 21 64 62 29 20   if (!p || !db) 
79a0: 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 20 20 73  return ret;..  s
79b0: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
79c0: 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a  er(db->mutex);..
79d0: 20 20 66 6f 72 20 28 6e 20 3d 20 30 3b 20 6e 20    for (n = 0; n 
79e0: 3c 20 70 2d 3e 6e 43 75 72 73 6f 72 20 26 26 20  < p->nCursor && 
79f0: 70 2d 3e 61 70 43 73 72 5b 6e 5d 20 21 3d 20 4e  p->apCsr[n] != N
7a00: 55 4c 4c 3b 20 6e 2b 2b 29 0d 0a 20 20 7b 0d 0a  ULL; n++)..  {..
7a10: 20 20 20 20 69 66 20 28 70 2d 3e 61 70 43 73 72      if (p->apCsr
7a20: 5b 6e 5d 2d 3e 69 73 54 61 62 6c 65 20 3d 3d 20  [n]->isTable == 
7a30: 30 29 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20  0) continue;..  
7a40: 20 20 69 66 20 28 70 2d 3e 61 70 43 73 72 5b 6e    if (p->apCsr[n
7a50: 5d 2d 3e 69 44 62 20 21 3d 20 69 44 62 29 20 63  ]->iDb != iDb) c
7a60: 6f 6e 74 69 6e 75 65 3b 0d 0a 23 69 66 20 53 51  ontinue;..#if SQ
7a70: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
7a80: 42 45 52 20 3e 3d 20 33 30 31 30 30 30 30 0d 0a  BER >= 3010000..
7a90: 20 20 20 20 69 66 20 28 70 2d 3e 61 70 43 73 72      if (p->apCsr
7aa0: 5b 6e 5d 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2d  [n]->uc.pCursor-
7ab0: 3e 70 67 6e 6f 52 6f 6f 74 20 3d 3d 20 74 61 62  >pgnoRoot == tab
7ac0: 6c 65 52 6f 6f 74 50 61 67 65 29 0d 0a 23 65 6c  leRootPage)..#el
7ad0: 73 65 0d 0a 20 20 20 20 69 66 20 28 70 2d 3e 61  se..    if (p->a
7ae0: 70 43 73 72 5b 6e 5d 2d 3e 70 43 75 72 73 6f 72  pCsr[n]->pCursor
7af0: 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 3d 20 74 61  ->pgnoRoot == ta
7b00: 62 6c 65 52 6f 6f 74 50 61 67 65 29 0d 0a 23 65  bleRootPage)..#e
7b10: 6e 64 69 66 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ndif..    {..   
7b20: 20 20 20 72 65 74 20 3d 20 6e 3b 0d 0a 20 20 20     ret = n;..   
7b30: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 7d     break;..    }
7b40: 0d 0a 20 20 7d 0d 0a 20 20 73 71 6c 69 74 65 33  ..  }..  sqlite3
7b50: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d  _mutex_leave(db-
7b60: 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20 20 72 65  >mutex);....  re
7b70: 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a 0d 0a  turn ret;..}....
7b80: 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57  SQLITE_API int W
7b90: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 75  INAPI sqlite3_cu
7ba0: 72 73 6f 72 5f 72 6f 77 69 64 5f 69 6e 74 65 72  rsor_rowid_inter
7bb0: 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  op(sqlite3_stmt 
7bc0: 2a 70 73 74 6d 74 2c 20 69 6e 74 20 63 75 72 73  *pstmt, int curs
7bd0: 6f 72 2c 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  or, sqlite_int64
7be0: 20 2a 70 72 6f 77 69 64 29 0d 0a 7b 0d 0a 20 20   *prowid)..{..  
7bf0: 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65 20  Vdbe *p = (Vdbe 
7c00: 2a 29 70 73 74 6d 74 3b 0d 0a 20 20 73 71 6c 69  *)pstmt;..  sqli
7c10: 74 65 33 20 2a 64 62 20 3d 20 28 70 20 3d 3d 20  te3 *db = (p == 
7c20: 4e 55 4c 4c 29 20 3f 20 4e 55 4c 4c 20 3a 20 70  NULL) ? NULL : p
7c30: 2d 3e 64 62 3b 0d 0a 20 20 56 64 62 65 43 75 72  ->db;..  VdbeCur
7c40: 73 6f 72 20 2a 70 43 3b 0d 0a 23 69 66 20 53 51  sor *pC;..#if SQ
7c50: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
7c60: 42 45 52 20 3e 3d 20 33 30 31 31 30 30 30 0d 0a  BER >= 3011000..
7c70: 20 20 69 6e 74 20 70 32 20 3d 20 30 3b 0d 0a 23    int p2 = 0;..#
7c80: 65 6e 64 69 66 0d 0a 20 20 69 6e 74 20 72 65 74  endif..  int ret
7c90: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0d 0a 0d   = SQLITE_OK;...
7ca0: 0a 20 20 69 66 20 28 21 70 20 7c 7c 20 21 64 62  .  if (!p || !db
7cb0: 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ) return SQLITE_
7cc0: 45 52 52 4f 52 3b 0d 0a 20 20 73 71 6c 69 74 65  ERROR;..  sqlite
7cd0: 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62  3_mutex_enter(db
7ce0: 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 77 68 69  ->mutex);..  whi
7cf0: 6c 65 20 28 31 29 0d 0a 20 20 7b 0d 0a 20 20 20  le (1)..  {..   
7d00: 20 69 66 20 28 63 75 72 73 6f 72 20 3c 20 30 20   if (cursor < 0 
7d10: 7c 7c 20 63 75 72 73 6f 72 20 3e 3d 20 70 2d 3e  || cursor >= p->
7d20: 6e 43 75 72 73 6f 72 29 0d 0a 20 20 20 20 7b 0d  nCursor)..    {.
7d30: 0a 20 20 20 20 20 20 72 65 74 20 3d 20 53 51 4c  .      ret = SQL
7d40: 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 20 20  ITE_ERROR;..    
7d50: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 7d 0d    break;..    }.
7d60: 0a 20 20 20 20 69 66 20 28 70 2d 3e 61 70 43 73  .    if (p->apCs
7d70: 72 5b 63 75 72 73 6f 72 5d 20 3d 3d 20 4e 55 4c  r[cursor] == NUL
7d80: 4c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  L)..    {..     
7d90: 20 72 65 74 20 3d 20 53 51 4c 49 54 45 5f 45 52   ret = SQLITE_ER
7da0: 52 4f 52 3b 0d 0a 20 20 20 20 20 20 62 72 65 61  ROR;..      brea
7db0: 6b 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  k;..    }....   
7dc0: 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 63   pC = p->apCsr[c
7dd0: 75 72 73 6f 72 5d 3b 0d 0a 0d 0a 23 69 66 20 53  ursor];....#if S
7de0: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
7df0: 4d 42 45 52 20 3e 3d 20 33 30 31 31 30 30 30 0d  MBER >= 3011000.
7e00: 0a 20 20 20 20 72 65 74 20 3d 20 73 71 6c 69 74  .    ret = sqlit
7e10: 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
7e20: 74 6f 28 26 70 43 2c 20 26 70 32 29 3b 0d 0a 23  to(&pC, &p2);..#
7e30: 65 6c 73 65 0d 0a 20 20 20 20 72 65 74 20 3d 20  else..    ret = 
7e40: 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
7e50: 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0d 0a 23 65  rMoveto(pC);..#e
7e60: 6e 64 69 66 0d 0a 20 20 20 20 69 66 28 72 65 74  ndif..    if(ret
7e70: 29 0d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0d  )..      break;.
7e80: 0a 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45  ...#if SQLITE_VE
7e90: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3c 20 33  RSION_NUMBER < 3
7ea0: 30 30 38 30 30 37 0d 0a 20 20 20 20 69 66 28 70  008007..    if(p
7eb0: 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 29  C->rowidIsValid)
7ec0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
7ed0: 66 20 28 70 72 6f 77 69 64 29 20 2a 70 72 6f 77  f (prowid) *prow
7ee0: 69 64 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77  id = pC->lastRow
7ef0: 69 64 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  id;..    }..    
7f00: 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a 23 69  else..#endif..#i
7f10: 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
7f20: 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 31 30 30  _NUMBER >= 30100
7f30: 30 30 0d 0a 20 20 20 20 69 66 28 70 43 2d 3e 65  00..    if(pC->e
7f40: 43 75 72 54 79 70 65 20 21 3d 20 43 55 52 54 59  CurType != CURTY
7f50: 50 45 5f 42 54 52 45 45 29 0d 0a 23 65 6c 73 65  PE_BTREE)..#else
7f60: 0d 0a 20 20 20 20 69 66 28 70 43 2d 3e 70 73 65  ..    if(pC->pse
7f70: 75 64 6f 54 61 62 6c 65 52 65 67 20 3e 20 30 29  udoTableReg > 0)
7f80: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7b 0d  ..#endif..    {.
7f90: 0a 20 20 20 20 20 20 72 65 74 20 3d 20 53 51 4c  .      ret = SQL
7fa0: 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 20 20  ITE_ERROR;..    
7fb0: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 7d 0d    break;..    }.
7fc0: 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53  .#if SQLITE_VERS
7fd0: 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30  ION_NUMBER >= 30
7fe0: 31 30 30 30 30 0d 0a 20 20 20 20 65 6c 73 65 20  10000..    else 
7ff0: 69 66 28 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c  if(pC->nullRow |
8000: 7c 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  | pC->uc.pCursor
8010: 3d 3d 30 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ==0)..#else..   
8020: 20 65 6c 73 65 20 69 66 28 70 43 2d 3e 6e 75 6c   else if(pC->nul
8030: 6c 52 6f 77 20 7c 7c 20 70 43 2d 3e 70 43 75 72  lRow || pC->pCur
8040: 73 6f 72 3d 3d 30 29 0d 0a 23 65 6e 64 69 66 0d  sor==0)..#endif.
8050: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
8060: 74 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  t = SQLITE_ERROR
8070: 3b 0d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0d  ;..      break;.
8080: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 65 6c 73 65  .    }..    else
8090: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 53 51 4c  ..    {..#if SQL
80a0: 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  ITE_VERSION_NUMB
80b0: 45 52 20 3e 3d 20 33 30 31 30 30 30 30 0d 0a 20  ER >= 3010000.. 
80c0: 20 20 20 20 20 69 66 20 28 70 43 2d 3e 75 63 2e       if (pC->uc.
80d0: 70 43 75 72 73 6f 72 20 3d 3d 20 4e 55 4c 4c 29  pCursor == NULL)
80e0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 69  ..#else..      i
80f0: 66 20 28 70 43 2d 3e 70 43 75 72 73 6f 72 20 3d  f (pC->pCursor =
8100: 3d 20 4e 55 4c 4c 29 0d 0a 23 65 6e 64 69 66 0d  = NULL)..#endif.
8110: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
8120: 20 20 72 65 74 20 3d 20 53 51 4c 49 54 45 5f 45    ret = SQLITE_E
8130: 52 52 4f 52 3b 0d 0a 20 20 20 20 20 20 20 20 62  RROR;..        b
8140: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  reak;..      }..
8150: 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49  #if SQLITE_VERSI
8160: 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 31  ON_NUMBER >= 301
8170: 34 30 30 30 0d 0a 20 20 20 20 20 20 73 71 6c 69  4000..      sqli
8180: 74 65 33 42 74 72 65 65 45 6e 74 65 72 43 75 72  te3BtreeEnterCur
8190: 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  sor(pC->uc.pCurs
81a0: 6f 72 29 3b 0d 0a 20 20 20 20 20 20 2a 70 72 6f  or);..      *pro
81b0: 77 69 64 20 3d 20 73 71 6c 69 74 65 33 42 74 72  wid = sqlite3Btr
81c0: 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d  eeIntegerKey(pC-
81d0: 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0d 0a 20  >uc.pCursor);.. 
81e0: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
81f0: 65 4c 65 61 76 65 43 75 72 73 6f 72 28 70 43 2d  eLeaveCursor(pC-
8200: 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0d 0a 23  >uc.pCursor);..#
8210: 65 6c 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53  elif SQLITE_VERS
8220: 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30  ION_NUMBER >= 30
8230: 31 30 30 30 30 0d 0a 20 20 20 20 20 20 73 71 6c  10000..      sql
8240: 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
8250: 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
8260: 20 70 72 6f 77 69 64 29 3b 0d 0a 23 65 6c 73 65   prowid);..#else
8270: 0d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ..      sqlite3B
8280: 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e  treeKeySize(pC->
8290: 70 43 75 72 73 6f 72 2c 20 70 72 6f 77 69 64 29  pCursor, prowid)
82a0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
82b0: 20 69 66 20 28 70 72 6f 77 69 64 29 20 2a 70 72   if (prowid) *pr
82c0: 6f 77 69 64 20 3d 20 2a 70 72 6f 77 69 64 3b 0d  owid = *prowid;.
82d0: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 62 72 65 61  .    }..    brea
82e0: 6b 3b 0d 0a 20 20 7d 0d 0a 20 20 73 71 6c 69 74  k;..  }..  sqlit
82f0: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64  e3_mutex_leave(d
8300: 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20 20  b->mutex);....  
8310: 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a  return ret;..}..
8320: 0d 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
8330: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8340: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8350: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8360: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8370: 2f 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64  /....#if defined
8380: 28 53 51 4c 49 54 45 5f 43 4f 52 45 29 0d 0a 23  (SQLITE_CORE)..#
8390: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 52  undef SQLITE_COR
83a0: 45 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66  E..#endif....#if
83b0: 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50   defined(INTEROP
83c0: 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 29 20  _VIRTUAL_TABLE) 
83d0: 26 26 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  && SQLITE_VERSIO
83e0: 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 34  N_NUMBER >= 3004
83f0: 30 30 31 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e  001..#include ".
8400: 2e 2f 65 78 74 2f 76 74 73 68 69 6d 2e 63 22 0d  ./ext/vtshim.c".
8410: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64  .#endif....#if d
8420: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 46  efined(INTEROP_F
8430: 54 53 35 5f 45 58 54 45 4e 53 49 4f 4e 29 0d 0a  TS5_EXTENSION)..
8440: 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 65 78 74  #include "../ext
8450: 2f 66 74 73 35 2e 63 22 0d 0a 23 65 6e 64 69 66  /fts5.c"..#endif
8460: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
8470: 49 4e 54 45 52 4f 50 5f 4a 53 4f 4e 31 5f 45 58  INTEROP_JSON1_EX
8480: 54 45 4e 53 49 4f 4e 29 0d 0a 23 69 6e 63 6c 75  TENSION)..#inclu
8490: 64 65 20 22 2e 2e 2f 65 78 74 2f 6a 73 6f 6e 31  de "../ext/json1
84a0: 2e 63 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23  .c"..#endif....#
84b0: 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52  if defined(INTER
84c0: 4f 50 5f 50 45 52 43 45 4e 54 49 4c 45 5f 45 58  OP_PERCENTILE_EX
84d0: 54 45 4e 53 49 4f 4e 29 0d 0a 23 69 6e 63 6c 75  TENSION)..#inclu
84e0: 64 65 20 22 2e 2e 2f 65 78 74 2f 70 65 72 63 65  de "../ext/perce
84f0: 6e 74 69 6c 65 2e 63 22 0d 0a 23 65 6e 64 69 66  ntile.c"..#endif
8500: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
8510: 49 4e 54 45 52 4f 50 5f 52 45 47 45 58 50 5f 45  INTEROP_REGEXP_E
8520: 58 54 45 4e 53 49 4f 4e 29 0d 0a 23 69 6e 63 6c  XTENSION)..#incl
8530: 75 64 65 20 22 2e 2e 2f 65 78 74 2f 72 65 67 65  ude "../ext/rege
8540: 78 70 2e 63 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d  xp.c"..#endif...
8550: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54  .#if defined(INT
8560: 45 52 4f 50 5f 53 48 41 31 5f 45 58 54 45 4e 53  EROP_SHA1_EXTENS
8570: 49 4f 4e 29 0d 0a 23 69 6e 63 6c 75 64 65 20 22  ION)..#include "
8580: 2e 2e 2f 65 78 74 2f 73 68 61 31 2e 63 22 0d 0a  ../ext/sha1.c"..
8590: 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65  #endif....#if de
85a0: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 54 4f  fined(INTEROP_TO
85b0: 54 59 50 45 5f 45 58 54 45 4e 53 49 4f 4e 29 0d  TYPE_EXTENSION).
85c0: 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 65 78  .#include "../ex
85d0: 74 2f 74 6f 74 79 70 65 2e 63 22 0d 0a 23 65 6e  t/totype.c"..#en
85e0: 64 69 66 0d 0a 0d 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a  dif..../********
85f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8600: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8610: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8620: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8630: 2a 2a 2a 2a 2a 2f 0d 0a 0d 0a 2f 2a 0d 0a 2a 2a  *****/..../*..**
8640: 20 54 68 65 20 49 4e 54 45 52 4f 50 5f 54 45 53   The INTEROP_TES
8650: 54 5f 45 58 54 45 4e 53 49 4f 4e 20 62 6c 6f 63  T_EXTENSION bloc
8660: 6b 20 6d 75 73 74 20 62 65 20 61 74 20 74 68 65  k must be at the
8670: 20 65 6e 64 20 6f 66 20 74 68 69 73 20 73 6f 75   end of this sou
8680: 72 63 65 20 66 69 6c 65 0d 0a 2a 2a 20 62 65 63  rce file..** bec
8690: 61 75 73 65 20 69 74 20 69 6e 63 6c 75 64 65 73  ause it includes
86a0: 20 74 68 65 20 22 73 71 6c 69 74 65 33 65 78 74   the "sqlite3ext
86b0: 2e 68 22 20 66 69 6c 65 2c 20 77 68 69 63 68 20  .h" file, which 
86c0: 64 65 66 69 6e 65 73 20 74 68 65 20 73 71 6c 69  defines the sqli
86d0: 74 65 33 0d 0a 2a 2a 20 70 75 62 6c 69 63 20 41  te3..** public A
86e0: 50 49 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65  PI function name
86f0: 73 20 74 6f 20 62 65 20 6d 61 63 72 6f 73 20 61  s to be macros a
8700: 6e 64 20 74 68 61 74 20 77 6f 75 6c 64 20 63 61  nd that would ca
8710: 75 73 65 20 74 68 65 20 63 6f 64 65 0d 0a 2a 2a  use the code..**
8720: 20 61 62 6f 76 65 20 74 68 69 73 20 70 6f 69 6e   above this poin
8730: 74 20 74 6f 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t to malfunction
8740: 2e 0d 0a 2a 2f 0d 0a 23 69 66 20 64 65 66 69 6e  ...*/..#if defin
8750: 65 64 28 49 4e 54 45 52 4f 50 5f 54 45 53 54 5f  ed(INTEROP_TEST_
8760: 45 58 54 45 4e 53 49 4f 4e 29 0d 0a 23 69 66 20  EXTENSION)..#if 
8770: 21 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 0d 0a  !SQLITE_OS_WIN..
8780: 23 69 6e 63 6c 75 64 65 20 3c 75 6e 69 73 74 64  #include <unistd
8790: 2e 68 3e 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23  .h>..#endif....#
87a0: 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 63 6f 72 65  include "../core
87b0: 2f 73 71 6c 69 74 65 33 65 78 74 2e 68 22 0d 0a  /sqlite3ext.h"..
87c0: 53 51 4c 49 54 45 5f 45 58 54 45 4e 53 49 4f 4e  SQLITE_EXTENSION
87d0: 5f 49 4e 49 54 31 0d 0a 0d 0a 2f 2a 0d 0a 2a 2a  _INIT1..../*..**
87e0: 20 54 68 65 20 69 6e 74 65 72 6f 70 45 72 72 6f   The interopErro
87f0: 72 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  r() SQL function
8800: 20 74 72 65 61 74 73 20 69 74 73 20 66 69 72 73   treats its firs
8810: 74 20 61 72 67 75 6d 65 6e 74 20 61 73 20 61 6e  t argument as an
8820: 20 69 6e 74 65 67 65 72 0d 0a 2a 2a 20 65 72 72   integer..** err
8830: 6f 72 20 63 6f 64 65 20 74 6f 20 72 65 74 75 72  or code to retur
8840: 6e 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49 54 45 5f 50  n...*/..SQLITE_P
8850: 52 49 56 41 54 45 20 76 6f 69 64 20 69 6e 74 65  RIVATE void inte
8860: 72 6f 70 45 72 72 6f 72 46 75 6e 63 28 0d 0a 20  ropErrorFunc(.. 
8870: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
8880: 20 2a 63 6f 6e 74 65 78 74 2c 0d 0a 20 20 69 6e   *context,..  in
8890: 74 20 61 72 67 63 2c 0d 0a 20 20 73 71 6c 69 74  t argc,..  sqlit
88a0: 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0d  e3_value **argv.
88b0: 0a 29 7b 0d 0a 20 20 69 6e 74 20 72 63 3b 0d 0a  .){..  int rc;..
88c0: 20 20 69 66 28 20 61 72 67 63 21 3d 31 20 29 7b    if( argc!=1 ){
88d0: 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65  ..    sqlite3_re
88e0: 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65  sult_error(conte
88f0: 78 74 2c 20 22 6e 65 65 64 20 65 78 61 63 74 6c  xt, "need exactl
8900: 79 20 6f 6e 65 20 61 72 67 75 6d 65 6e 74 22 2c  y one argument",
8910: 20 2d 31 29 3b 0d 0a 20 20 20 20 72 65 74 75 72   -1);..    retur
8920: 6e 3b 0d 0a 20 20 7d 0d 0a 20 20 72 63 20 3d 20  n;..  }..  rc = 
8930: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e  sqlite3_value_in
8940: 74 28 61 72 67 76 5b 30 5d 29 3b 0d 0a 20 20 73  t(argv[0]);..  s
8950: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72  qlite3_result_er
8960: 72 6f 72 5f 63 6f 64 65 28 63 6f 6e 74 65 78 74  ror_code(context
8970: 2c 20 72 63 29 3b 0d 0a 7d 0d 0a 0d 0a 2f 2a 0d  , rc);..}..../*.
8980: 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 6f 70 54  .** The interopT
8990: 65 73 74 28 29 20 53 51 4c 20 66 75 6e 63 74 69  est() SQL functi
89a0: 6f 6e 20 72 65 74 75 72 6e 73 20 69 74 73 20 66  on returns its f
89b0: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 6f 72  irst argument or
89c0: 20 72 61 69 73 65 73 20 61 6e 0d 0a 2a 2a 20 65   raises an..** e
89d0: 72 72 6f 72 20 69 66 20 74 68 65 72 65 20 61 72  rror if there ar
89e0: 65 20 6e 6f 74 20 65 6e 6f 75 67 68 20 61 72 67  e not enough arg
89f0: 75 6d 65 6e 74 73 2e 0d 0a 2a 2f 0d 0a 53 51 4c  uments...*/..SQL
8a00: 49 54 45 5f 50 52 49 56 41 54 45 20 76 6f 69 64  ITE_PRIVATE void
8a10: 20 69 6e 74 65 72 6f 70 54 65 73 74 46 75 6e 63   interopTestFunc
8a20: 28 0d 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  (..  sqlite3_con
8a30: 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 0d 0a  text *context,..
8a40: 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 73    int argc,..  s
8a50: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
8a60: 72 67 76 0d 0a 29 7b 0d 0a 20 20 63 6f 6e 73 74  rgv..){..  const
8a70: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
8a80: 7a 3b 0d 0a 20 20 69 66 28 20 61 72 67 63 21 3d  z;..  if( argc!=
8a90: 31 20 29 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65  1 ){..    sqlite
8aa0: 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63  3_result_error(c
8ab0: 6f 6e 74 65 78 74 2c 20 22 6e 65 65 64 20 65 78  ontext, "need ex
8ac0: 61 63 74 6c 79 20 6f 6e 65 20 61 72 67 75 6d 65  actly one argume
8ad0: 6e 74 22 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 72  nt", -1);..    r
8ae0: 65 74 75 72 6e 3b 0d 0a 20 20 7d 0d 0a 20 20 7a  eturn;..  }..  z
8af0: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
8b00: 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29 3b 0d  _text(argv[0]);.
8b10: 0a 20 20 69 66 28 20 7a 20 29 7b 0d 0a 20 20 20  .  if( z ){..   
8b20: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
8b30: 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 28 63  text(context, (c
8b40: 68 61 72 2a 29 7a 2c 20 2d 31 2c 20 53 51 4c 49  har*)z, -1, SQLI
8b50: 54 45 5f 53 54 41 54 49 43 29 3b 0d 0a 20 20 7d  TE_STATIC);..  }
8b60: 65 6c 73 65 7b 0d 0a 20 20 20 20 73 71 6c 69 74  else{..    sqlit
8b70: 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63  e3_result_null(c
8b80: 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 7d 0d 0a 7d  ontext);..  }..}
8b90: 0d 0a 0d 0a 2f 2a 0d 0a 2a 2a 20 54 68 65 20 69  ..../*..** The i
8ba0: 6e 74 65 72 6f 70 53 6c 65 65 70 28 29 20 53 51  nteropSleep() SQ
8bb0: 4c 20 66 75 6e 63 74 69 6f 6e 20 77 61 69 74 73  L function waits
8bc0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6e   the specified n
8bd0: 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65  umber of millise
8be0: 63 6f 6e 64 73 0d 0a 2a 2a 20 6f 72 20 72 61 69  conds..** or rai
8bf0: 73 65 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20  ses an error if 
8c00: 74 68 65 72 65 20 61 72 65 20 6e 6f 74 20 65 6e  there are not en
8c10: 6f 75 67 68 20 61 72 67 75 6d 65 6e 74 73 2e 0d  ough arguments..
8c20: 0a 2a 2f 0d 0a 53 51 4c 49 54 45 5f 50 52 49 56  .*/..SQLITE_PRIV
8c30: 41 54 45 20 76 6f 69 64 20 69 6e 74 65 72 6f 70  ATE void interop
8c40: 53 6c 65 65 70 46 75 6e 63 28 0d 0a 20 20 73 71  SleepFunc(..  sq
8c50: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63  lite3_context *c
8c60: 6f 6e 74 65 78 74 2c 0d 0a 20 20 69 6e 74 20 61  ontext,..  int a
8c70: 72 67 63 2c 0d 0a 20 20 73 71 6c 69 74 65 33 5f  rgc,..  sqlite3_
8c80: 76 61 6c 75 65 20 2a 2a 61 72 67 76 0d 0a 29 7b  value **argv..){
8c90: 0d 0a 20 20 69 6e 74 20 6d 3b 0d 0a 20 20 69 66  ..  int m;..  if
8ca0: 28 20 61 72 67 63 21 3d 31 20 29 7b 0d 0a 20 20  ( argc!=1 ){..  
8cb0: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
8cc0: 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20  _error(context, 
8cd0: 22 6e 65 65 64 20 65 78 61 63 74 6c 79 20 6f 6e  "need exactly on
8ce0: 65 20 61 72 67 75 6d 65 6e 74 22 2c 20 2d 31 29  e argument", -1)
8cf0: 3b 0d 0a 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a  ;..    return;..
8d00: 20 20 7d 0d 0a 20 20 6d 20 3d 20 73 71 6c 69 74    }..  m = sqlit
8d10: 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 61 72 67  e3_value_int(arg
8d20: 76 5b 30 5d 29 3b 0d 0a 23 69 66 20 53 51 4c 49  v[0]);..#if SQLI
8d30: 54 45 5f 4f 53 5f 57 49 4e 0d 0a 23 69 66 20 53  TE_OS_WIN..#if S
8d40: 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 43 45 0d 0a  QLITE_OS_WINCE..
8d50: 20 20 53 6c 65 65 70 28 6d 29 3b 0d 0a 20 20 73    Sleep(m);..  s
8d60: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e  qlite3_result_in
8d70: 74 28 63 6f 6e 74 65 78 74 2c 20 57 41 49 54 5f  t(context, WAIT_
8d80: 4f 42 4a 45 43 54 5f 30 29 3b 0d 0a 23 65 6c 73  OBJECT_0);..#els
8d90: 65 0d 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73  e..  sqlite3_res
8da0: 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c  ult_int(context,
8db0: 20 53 6c 65 65 70 45 78 28 6d 2c 20 54 52 55 45   SleepEx(m, TRUE
8dc0: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 23 65 6c  ));..#endif..#el
8dd0: 73 65 0d 0a 20 20 69 66 28 20 6d 3e 30 20 29 7b  se..  if( m>0 ){
8de0: 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65  ..    sqlite3_re
8df0: 73 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74 65  sult_int64(conte
8e00: 78 74 2c 20 73 6c 65 65 70 28 28 75 6e 73 69 67  xt, sleep((unsig
8e10: 6e 65 64 29 6d 29 29 3b 0d 0a 20 20 7d 65 6c 73  ned)m));..  }els
8e20: 65 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  e{..    sqlite3_
8e30: 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74  result_null(cont
8e40: 65 78 74 29 3b 0d 0a 20 20 7d 0d 0a 23 65 6e 64  ext);..  }..#end
8e50: 69 66 0d 0a 7d 0d 0a 0d 0a 2f 2a 20 53 51 4c 69  if..}..../* SQLi
8e60: 74 65 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20  te invokes this 
8e70: 72 6f 75 74 69 6e 65 20 6f 6e 63 65 20 77 68 65  routine once whe
8e80: 6e 20 69 74 20 6c 6f 61 64 73 20 74 68 65 20 65  n it loads the e
8e90: 78 74 65 6e 73 69 6f 6e 2e 0d 0a 2a 2a 20 43 72  xtension...** Cr
8ea0: 65 61 74 65 20 6e 65 77 20 66 75 6e 63 74 69 6f  eate new functio
8eb0: 6e 73 2c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ns, collating se
8ec0: 71 75 65 6e 63 65 73 2c 20 61 6e 64 20 76 69 72  quences, and vir
8ed0: 74 75 61 6c 20 74 61 62 6c 65 0d 0a 2a 2a 20 6d  tual table..** m
8ee0: 6f 64 75 6c 65 73 20 68 65 72 65 2e 20 20 54 68  odules here.  Th
8ef0: 69 73 20 69 73 20 75 73 75 61 6c 6c 79 20 74 68  is is usually th
8f00: 65 20 6f 6e 6c 79 20 65 78 70 6f 72 74 65 64 20  e only exported 
8f10: 73 79 6d 62 6f 6c 20 69 6e 0d 0a 2a 2a 20 74 68  symbol in..** th
8f20: 65 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79  e shared library
8f30: 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49 54 45 5f 41 50  ...*/..SQLITE_AP
8f40: 49 20 69 6e 74 20 69 6e 74 65 72 6f 70 5f 74 65  I int interop_te
8f50: 73 74 5f 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69  st_extension_ini
8f60: 74 28 0d 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  t(..  sqlite3 *d
8f70: 62 2c 0d 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45  b,..  char **pzE
8f80: 72 72 4d 73 67 2c 0d 0a 20 20 63 6f 6e 73 74 20  rrMsg,..  const 
8f90: 73 71 6c 69 74 65 33 5f 61 70 69 5f 72 6f 75 74  sqlite3_api_rout
8fa0: 69 6e 65 73 20 2a 70 41 70 69 0d 0a 29 7b 0d 0a  ines *pApi..){..
8fb0: 20 20 69 6e 74 20 72 63 3b 0d 0a 20 20 53 51 4c    int rc;..  SQL
8fc0: 49 54 45 5f 45 58 54 45 4e 53 49 4f 4e 5f 49 4e  ITE_EXTENSION_IN
8fd0: 49 54 32 28 70 41 70 69 29 0d 0a 20 20 72 63 20  IT2(pApi)..  rc 
8fe0: 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  = sqlite3_create
8ff0: 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 69  _function(db, "i
9000: 6e 74 65 72 6f 70 45 72 72 6f 72 22 2c 20 2d 31  nteropError", -1
9010: 2c 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20 30 2c  , SQLITE_ANY, 0,
9020: 0d 0a 20 20 20 20 20 20 69 6e 74 65 72 6f 70 45  ..      interopE
9030: 72 72 6f 72 46 75 6e 63 2c 20 30 2c 20 30 29 3b  rrorFunc, 0, 0);
9040: 0d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ..  if( rc==SQLI
9050: 54 45 5f 4f 4b 20 29 7b 0d 0a 20 20 20 20 72 63  TE_OK ){..    rc
9060: 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
9070: 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22  e_function(db, "
9080: 69 6e 74 65 72 6f 70 54 65 73 74 22 2c 20 2d 31  interopTest", -1
9090: 2c 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20 30 2c  , SQLITE_ANY, 0,
90a0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6f  ..        intero
90b0: 70 54 65 73 74 46 75 6e 63 2c 20 30 2c 20 30 29  pTestFunc, 0, 0)
90c0: 3b 0d 0a 20 20 7d 0d 0a 20 20 69 66 28 20 72 63  ;..  }..  if( rc
90d0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0d 0a  ==SQLITE_OK ){..
90e0: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
90f0: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
9100: 28 64 62 2c 20 22 69 6e 74 65 72 6f 70 53 6c 65  (db, "interopSle
9110: 65 70 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f 41  ep", 1, SQLITE_A
9120: 4e 59 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20  NY, 0,..        
9130: 69 6e 74 65 72 6f 70 53 6c 65 65 70 46 75 6e 63  interopSleepFunc
9140: 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 7d 0d 0a 20  , 0, 0);..  }.. 
9150: 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 7d 0d 0a   return rc;..}..
9160: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
9170: 5f 4f 53 5f 57 49 4e 20 2a 2f 0d 0a              _OS_WIN */..