System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 1f3a2bc3987a8e22a38cdeca6232467b26e9bbcc:


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 44 4f 4e  ret = SQLITE_DON
2bd0: 45 3b 0d 0a 20 20 7d 0d 0a 20 20 72 65 74 75 72  E;..  }..  retur
2be0: 6e 20 72 65 74 3b 0d 0a 7d 0d 0a 23 65 6e 64 69  n ret;..}..#endi
2bf0: 66 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20  f....SQLITE_API 
2c00: 63 6f 6e 73 74 20 63 68 61 72 20 2a 57 49 4e 41  const char *WINA
2c10: 50 49 20 69 6e 74 65 72 6f 70 5f 6c 69 62 76 65  PI interop_libve
2c20: 72 73 69 6f 6e 28 76 6f 69 64 29 0d 0a 7b 0d 0a  rsion(void)..{..
2c30: 20 20 72 65 74 75 72 6e 20 49 4e 54 45 52 4f 50    return INTEROP
2c40: 5f 56 45 52 53 49 4f 4e 3b 0d 0a 7d 0d 0a 0d 0a  _VERSION;..}....
2c50: 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74  SQLITE_API const
2c60: 20 63 68 61 72 20 2a 57 49 4e 41 50 49 20 69 6e   char *WINAPI in
2c70: 74 65 72 6f 70 5f 73 6f 75 72 63 65 69 64 28 76  terop_sourceid(v
2c80: 6f 69 64 29 0d 0a 7b 0d 0a 20 20 72 65 74 75 72  oid)..{..  retur
2c90: 6e 20 49 4e 54 45 52 4f 50 5f 53 4f 55 52 43 45  n INTEROP_SOURCE
2ca0: 5f 49 44 20 22 20 22 20 49 4e 54 45 52 4f 50 5f  _ID " " INTEROP_
2cb0: 53 4f 55 52 43 45 5f 54 49 4d 45 53 54 41 4d 50  SOURCE_TIMESTAMP
2cc0: 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  ;..}....SQLITE_A
2cd0: 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71  PI int WINAPI sq
2ce0: 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72  lite3_open_inter
2cf0: 6f 70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 66  op(const char *f
2d00: 69 6c 65 6e 61 6d 65 2c 20 63 6f 6e 73 74 20 63  ilename, const c
2d10: 68 61 72 20 2a 76 66 73 4e 61 6d 65 2c 20 69 6e  har *vfsName, in
2d20: 74 20 66 6c 61 67 73 2c 20 69 6e 74 20 65 78 74  t flags, int ext
2d30: 46 75 6e 63 73 2c 20 73 71 6c 69 74 65 33 20 2a  Funcs, sqlite3 *
2d40: 2a 70 70 64 62 29 0d 0a 7b 0d 0a 20 20 69 6e 74  *ppdb)..{..  int
2d50: 20 72 65 74 3b 0d 0a 0d 0a 23 69 66 20 64 65 66   ret;....#if def
2d60: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42  ined(INTEROP_DEB
2d70: 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f  UG) && (INTEROP_
2d80: 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f  DEBUG & INTEROP_
2d90: 44 45 42 55 47 5f 4f 50 45 4e 29 0d 0a 20 20 73  DEBUG_OPEN)..  s
2da0: 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62  qlite3InteropDeb
2db0: 75 67 28 22 73 71 6c 69 74 65 33 5f 6f 70 65 6e  ug("sqlite3_open
2dc0: 5f 69 6e 74 65 72 6f 70 28 29 3a 20 63 61 6c 6c  _interop(): call
2dd0: 69 6e 67 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  ing sqlite3_open
2de0: 5f 76 32 28 5c 22 25 73 5c 22 2c 20 5c 22 25 73  _v2(\"%s\", \"%s
2df0: 5c 22 2c 20 25 64 2c 20 25 64 2c 20 25 70 29 2e  \", %d, %d, %p).
2e00: 2e 2e 5c 6e 22 2c 20 66 69 6c 65 6e 61 6d 65 2c  ..\n", filename,
2e10: 20 76 66 73 4e 61 6d 65 2c 20 66 6c 61 67 73 2c   vfsName, flags,
2e20: 20 65 78 74 46 75 6e 63 73 2c 20 70 70 64 62 29   extFuncs, ppdb)
2e30: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72  ;..#endif....  r
2e40: 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70 65  et = sqlite3_ope
2e50: 6e 5f 76 32 28 66 69 6c 65 6e 61 6d 65 2c 20 70  n_v2(filename, p
2e60: 70 64 62 2c 20 66 6c 61 67 73 2c 20 76 66 73 4e  pdb, flags, vfsN
2e70: 61 6d 65 29 3b 0d 0a 0d 0a 23 69 66 20 64 65 66  ame);....#if def
2e80: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42  ined(INTEROP_DEB
2e90: 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f  UG) && (INTEROP_
2ea0: 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f  DEBUG & INTEROP_
2eb0: 44 45 42 55 47 5f 4f 50 45 4e 29 0d 0a 20 20 73  DEBUG_OPEN)..  s
2ec0: 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62  qlite3InteropDeb
2ed0: 75 67 28 22 73 71 6c 69 74 65 33 5f 6f 70 65 6e  ug("sqlite3_open
2ee0: 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c 69  _interop(): sqli
2ef0: 74 65 33 5f 6f 70 65 6e 5f 76 32 28 5c 22 25 73  te3_open_v2(\"%s
2f00: 5c 22 2c 20 5c 22 25 73 5c 22 2c 20 25 64 2c 20  \", \"%s\", %d, 
2f10: 25 64 2c 20 25 70 29 20 72 65 74 75 72 6e 65 64  %d, %p) returned
2f20: 20 25 64 2e 5c 6e 22 2c 20 66 69 6c 65 6e 61 6d   %d.\n", filenam
2f30: 65 2c 20 76 66 73 4e 61 6d 65 2c 20 66 6c 61 67  e, vfsName, flag
2f40: 73 2c 20 65 78 74 46 75 6e 63 73 2c 20 70 70 64  s, extFuncs, ppd
2f50: 62 2c 20 72 65 74 29 3b 0d 0a 23 65 6e 64 69 66  b, ret);..#endif
2f60: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
2f70: 49 4e 54 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f  INTEROP_EXTENSIO
2f80: 4e 5f 46 55 4e 43 54 49 4f 4e 53 29 0d 0a 20 20  N_FUNCTIONS)..  
2f90: 69 66 20 28 28 72 65 74 20 3d 3d 20 53 51 4c 49  if ((ret == SQLI
2fa0: 54 45 5f 4f 4b 29 20 26 26 20 70 70 64 62 20 26  TE_OK) && ppdb &
2fb0: 26 20 65 78 74 46 75 6e 63 73 29 0d 0a 20 20 20  & extFuncs)..   
2fc0: 20 52 65 67 69 73 74 65 72 45 78 74 65 6e 73 69   RegisterExtensi
2fd0: 6f 6e 46 75 6e 63 74 69 6f 6e 73 28 2a 70 70 64  onFunctions(*ppd
2fe0: 62 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  b);..#endif.... 
2ff0: 20 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d   return ret;..}.
3000: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e  ...SQLITE_API in
3010: 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  t WINAPI sqlite3
3020: 5f 6f 70 65 6e 31 36 5f 69 6e 74 65 72 6f 70 28  _open16_interop(
3030: 63 6f 6e 73 74 20 63 68 61 72 20 2a 66 69 6c 65  const char *file
3040: 6e 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  name, const char
3050: 20 2a 76 66 73 4e 61 6d 65 2c 20 69 6e 74 20 66   *vfsName, int f
3060: 6c 61 67 73 2c 20 69 6e 74 20 65 78 74 46 75 6e  lags, int extFun
3070: 63 73 2c 20 73 71 6c 69 74 65 33 20 2a 2a 70 70  cs, sqlite3 **pp
3080: 64 62 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72 65  db)..{..  int re
3090: 74 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65  t;....#if define
30a0: 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29  d(INTEROP_DEBUG)
30b0: 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42   && (INTEROP_DEB
30c0: 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42  UG & INTEROP_DEB
30d0: 55 47 5f 4f 50 45 4e 31 36 29 0d 0a 20 20 73 71  UG_OPEN16)..  sq
30e0: 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75  lite3InteropDebu
30f0: 67 28 22 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31  g("sqlite3_open1
3100: 36 5f 69 6e 74 65 72 6f 70 28 29 3a 20 63 61 6c  6_interop(): cal
3110: 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f 6f 70 65  ling sqlite3_ope
3120: 6e 5f 69 6e 74 65 72 6f 70 28 5c 22 25 73 5c 22  n_interop(\"%s\"
3130: 2c 20 5c 22 25 73 5c 22 2c 20 25 64 2c 20 25 64  , \"%s\", %d, %d
3140: 2c 20 25 70 29 2e 2e 2e 5c 6e 22 2c 20 66 69 6c  , %p)...\n", fil
3150: 65 6e 61 6d 65 2c 20 76 66 73 4e 61 6d 65 2c 20  ename, vfsName, 
3160: 66 6c 61 67 73 2c 20 65 78 74 46 75 6e 63 73 2c  flags, extFuncs,
3170: 20 70 70 64 62 29 3b 0d 0a 23 65 6e 64 69 66 0d   ppdb);..#endif.
3180: 0a 0d 0a 20 20 72 65 74 20 3d 20 73 71 6c 69 74  ...  ret = sqlit
3190: 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28  e3_open_interop(
31a0: 66 69 6c 65 6e 61 6d 65 2c 20 76 66 73 4e 61 6d  filename, vfsNam
31b0: 65 2c 20 66 6c 61 67 73 2c 20 65 78 74 46 75 6e  e, flags, extFun
31c0: 63 73 2c 20 70 70 64 62 29 3b 0d 0a 0d 0a 23 69  cs, ppdb);....#i
31d0: 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f  f defined(INTERO
31e0: 50 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e 54  P_DEBUG) && (INT
31f0: 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54  EROP_DEBUG & INT
3200: 45 52 4f 50 5f 44 45 42 55 47 5f 4f 50 45 4e 31  EROP_DEBUG_OPEN1
3210: 36 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74  6)..  sqlite3Int
3220: 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74  eropDebug("sqlit
3230: 65 33 5f 6f 70 65 6e 31 36 5f 69 6e 74 65 72 6f  e3_open16_intero
3240: 70 28 29 3a 20 73 71 6c 69 74 65 33 5f 6f 70 65  p(): sqlite3_ope
3250: 6e 5f 69 6e 74 65 72 6f 70 28 5c 22 25 73 5c 22  n_interop(\"%s\"
3260: 2c 20 5c 22 25 73 5c 22 2c 20 25 64 2c 20 25 64  , \"%s\", %d, %d
3270: 2c 20 25 70 29 20 72 65 74 75 72 6e 65 64 20 25  , %p) returned %
3280: 64 2e 5c 6e 22 2c 20 66 69 6c 65 6e 61 6d 65 2c  d.\n", filename,
3290: 20 76 66 73 4e 61 6d 65 2c 20 66 6c 61 67 73 2c   vfsName, flags,
32a0: 20 65 78 74 46 75 6e 63 73 2c 20 70 70 64 62 2c   extFuncs, ppdb,
32b0: 20 72 65 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a   ret);..#endif..
32c0: 0d 0a 20 20 69 66 20 28 28 72 65 74 20 3d 3d 20  ..  if ((ret == 
32d0: 53 51 4c 49 54 45 5f 4f 4b 29 20 26 26 20 70 70  SQLITE_OK) && pp
32e0: 64 62 20 26 26 20 21 44 62 48 61 73 50 72 6f 70  db && !DbHasProp
32f0: 65 72 74 79 28 2a 70 70 64 62 2c 20 30 2c 20 44  erty(*ppdb, 0, D
3300: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 29  B_SchemaLoaded))
3310: 0d 0a 20 20 7b 0d 0a 20 20 20 20 45 4e 43 28 2a  ..  {..    ENC(*
3320: 70 70 64 62 29 20 3d 20 53 51 4c 49 54 45 5f 55  ppdb) = SQLITE_U
3330: 54 46 31 36 4e 41 54 49 56 45 3b 0d 0a 0d 0a 23  TF16NATIVE;....#
3340: 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  if SQLITE_VERSIO
3350: 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 38  N_NUMBER >= 3008
3360: 30 30 38 0d 0a 20 20 20 20 2f 2f 0d 0a 20 20 20  008..    //..   
3370: 20 2f 2f 20 42 55 47 46 49 58 3a 20 53 65 65 20   // BUGFIX: See 
3380: 74 69 63 6b 65 74 20 5b 37 63 31 35 31 61 32 66  ticket [7c151a2f
3390: 30 65 32 32 38 30 34 63 5d 2e 0d 0a 20 20 20 20  0e22804c]...    
33a0: 2f 2f 0d 0a 20 20 20 20 53 43 48 45 4d 41 5f 45  //..    SCHEMA_E
33b0: 4e 43 28 2a 70 70 64 62 29 20 3d 20 53 51 4c 49  NC(*ppdb) = SQLI
33c0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3b 0d  TE_UTF16NATIVE;.
33d0: 0a 23 65 6e 64 69 66 0d 0a 20 20 7d 0d 0a 0d 0a  .#endif..  }....
33e0: 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d    return ret;..}
33f0: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63  ....SQLITE_API c
3400: 6f 6e 73 74 20 63 68 61 72 20 2a 57 49 4e 41 50  onst char *WINAP
3410: 49 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  I sqlite3_errmsg
3420: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
3430: 20 2a 64 62 2c 20 69 6e 74 20 2a 70 6c 65 6e 29   *db, int *plen)
3440: 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61  ..{..  const cha
3450: 72 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65  r *pval = sqlite
3460: 33 5f 65 72 72 6d 73 67 28 64 62 29 3b 0d 0a 20  3_errmsg(db);.. 
3470: 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e   if (plen) *plen
3480: 20 3d 20 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e   = pval ? strlen
3490: 28 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72  (pval) : 0;..  r
34a0: 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a  eturn pval;..}..
34b0: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74  ..SQLITE_API int
34c0: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
34d0: 63 68 61 6e 67 65 73 5f 69 6e 74 65 72 6f 70 28  changes_interop(
34e0: 73 71 6c 69 74 65 33 20 2a 64 62 29 0d 0a 7b 0d  sqlite3 *db)..{.
34f0: 0a 20 20 69 6e 74 20 72 65 73 75 6c 74 3b 0d 0a  .  int result;..
3500: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
3510: 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20  TEROP_DEBUG) && 
3520: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26  (INTEROP_DEBUG &
3530: 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 43   INTEROP_DEBUG_C
3540: 48 41 4e 47 45 53 29 0d 0a 20 20 73 71 6c 69 74  HANGES)..  sqlit
3550: 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22  e3InteropDebug("
3560: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 5f  sqlite3_changes_
3570: 69 6e 74 65 72 6f 70 28 29 3a 20 63 61 6c 6c 69  interop(): calli
3580: 6e 67 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  ng sqlite3_chang
3590: 65 73 28 25 70 29 2e 2e 2e 5c 6e 22 2c 20 64 62  es(%p)...\n", db
35a0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69  );..#endif....#i
35b0: 66 6e 64 65 66 20 4e 44 45 42 55 47 0d 0a 20 20  fndef NDEBUG..  
35c0: 69 66 20 28 21 64 62 29 0d 0a 20 20 20 20 20 20  if (!db)..      
35d0: 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 42 72  sqlite3InteropBr
35e0: 65 61 6b 28 22 6e 75 6c 6c 20 64 61 74 61 62 61  eak("null databa
35f0: 73 65 20 68 61 6e 64 6c 65 20 66 6f 72 20 73 71  se handle for sq
3600: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 22  lite3_changes()"
3610: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
3620: 72 65 73 75 6c 74 20 3d 20 73 71 6c 69 74 65 33  result = sqlite3
3630: 5f 63 68 61 6e 67 65 73 28 64 62 29 3b 0d 0a 0d  _changes(db);...
3640: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54  .#if defined(INT
3650: 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28  EROP_DEBUG) && (
3660: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20  INTEROP_DEBUG & 
3670: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 43 48  INTEROP_DEBUG_CH
3680: 41 4e 47 45 53 29 0d 0a 20 20 73 71 6c 69 74 65  ANGES)..  sqlite
3690: 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73  3InteropDebug("s
36a0: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 5f 69  qlite3_changes_i
36b0: 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c 69 74 65  nterop(): sqlite
36c0: 33 5f 63 68 61 6e 67 65 73 28 25 70 29 20 72 65  3_changes(%p) re
36d0: 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 64  turned %d.\n", d
36e0: 62 2c 20 72 65 73 75 6c 74 29 3b 0d 0a 23 65 6e  b, result);..#en
36f0: 64 69 66 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20  dif....  return 
3700: 72 65 73 75 6c 74 3b 0d 0a 7d 0d 0a 0d 0a 53 51  result;..}....SQ
3710: 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e  LITE_API int WIN
3720: 41 50 49 20 73 71 6c 69 74 65 33 5f 70 72 65 70  API sqlite3_prep
3730: 61 72 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  are_interop(sqli
3740: 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63  te3 *db, const c
3750: 68 61 72 20 2a 73 71 6c 2c 20 69 6e 74 20 6e 62  har *sql, int nb
3760: 79 74 65 73 2c 20 73 71 6c 69 74 65 33 5f 73 74  ytes, sqlite3_st
3770: 6d 74 20 2a 2a 70 70 73 74 6d 74 2c 20 63 6f 6e  mt **ppstmt, con
3780: 73 74 20 63 68 61 72 20 2a 2a 70 7a 74 61 69 6c  st char **pztail
3790: 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d  , int *plen)..{.
37a0: 0a 20 20 69 6e 74 20 6e 3b 0d 0a 0d 0a 23 69 66  .  int n;....#if
37b0: 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50   defined(INTEROP
37c0: 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e 54 45  _DEBUG) && (INTE
37d0: 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45  ROP_DEBUG & INTE
37e0: 52 4f 50 5f 44 45 42 55 47 5f 50 52 45 50 41 52  ROP_DEBUG_PREPAR
37f0: 45 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74  E)..  sqlite3Int
3800: 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74  eropDebug("sqlit
3810: 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72  e3_prepare_inter
3820: 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73 71  op(): calling sq
3830: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 25 70  lite3_prepare(%p
3840: 2c 20 5c 22 25 73 5c 22 2c 20 25 64 2c 20 25 70  , \"%s\", %d, %p
3850: 29 2e 2e 2e 5c 6e 22 2c 20 64 62 2c 20 73 71 6c  )...\n", db, sql
3860: 2c 20 6e 62 79 74 65 73 2c 20 70 70 73 74 6d 74  , nbytes, ppstmt
3870: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69  );..#endif....#i
3880: 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
3890: 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 33 30  _NUMBER >= 30030
38a0: 30 39 0d 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65  09..  n = sqlite
38b0: 33 5f 70 72 65 70 61 72 65 5f 76 32 28 64 62 2c  3_prepare_v2(db,
38c0: 20 73 71 6c 2c 20 6e 62 79 74 65 73 2c 20 70 70   sql, nbytes, pp
38d0: 73 74 6d 74 2c 20 70 7a 74 61 69 6c 29 3b 0d 0a  stmt, pztail);..
38e0: 23 65 6c 73 65 0d 0a 20 20 6e 20 3d 20 73 71 6c  #else..  n = sql
38f0: 69 74 65 33 5f 70 72 65 70 61 72 65 28 64 62 2c  ite3_prepare(db,
3900: 20 73 71 6c 2c 20 6e 62 79 74 65 73 2c 20 70 70   sql, nbytes, pp
3910: 73 74 6d 74 2c 20 70 7a 74 61 69 6c 29 3b 0d 0a  stmt, pztail);..
3920: 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65  #endif....#if de
3930: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45  fined(INTEROP_DE
3940: 42 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50  BUG) && (INTEROP
3950: 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50  _DEBUG & INTEROP
3960: 5f 44 45 42 55 47 5f 50 52 45 50 41 52 45 29 0d  _DEBUG_PREPARE).
3970: 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f  .  sqlite3Intero
3980: 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f  pDebug("sqlite3_
3990: 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70 28  prepare_interop(
39a0: 29 3a 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  ): sqlite3_prepa
39b0: 72 65 28 25 70 2c 20 5c 22 25 73 5c 22 2c 20 25  re(%p, \"%s\", %
39c0: 64 2c 20 25 70 29 20 72 65 74 75 72 6e 65 64 20  d, %p) returned 
39d0: 25 64 2e 5c 6e 22 2c 20 64 62 2c 20 73 71 6c 2c  %d.\n", db, sql,
39e0: 20 6e 62 79 74 65 73 2c 20 70 70 73 74 6d 74 2c   nbytes, ppstmt,
39f0: 20 6e 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a   n);..#endif....
3a00: 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65    if (plen) *ple
3a10: 6e 20 3d 20 28 70 7a 74 61 69 6c 20 26 26 20 2a  n = (pztail && *
3a20: 70 7a 74 61 69 6c 29 20 3f 20 73 74 72 6c 65 6e  pztail) ? strlen
3a30: 28 2a 70 7a 74 61 69 6c 29 20 3a 20 30 3b 0d 0a  (*pztail) : 0;..
3a40: 0d 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 7d  ..  return n;..}
3a50: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69  ....SQLITE_API i
3a60: 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  nt WINAPI sqlite
3a70: 33 5f 70 72 65 70 61 72 65 31 36 5f 69 6e 74 65  3_prepare16_inte
3a80: 72 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  rop(sqlite3 *db,
3a90: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c   const void *sql
3aa0: 2c 20 69 6e 74 20 6e 63 68 61 72 73 2c 20 73 71  , int nchars, sq
3ab0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a 70 70 73  lite3_stmt **pps
3ac0: 74 6d 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  tmt, const void 
3ad0: 2a 2a 70 7a 74 61 69 6c 2c 20 69 6e 74 20 2a 70  **pztail, int *p
3ae0: 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 6e  len)..{..  int n
3af0: 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64  ;....#if defined
3b00: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20  (INTEROP_DEBUG) 
3b10: 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  && (INTEROP_DEBU
3b20: 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55  G & INTEROP_DEBU
3b30: 47 5f 50 52 45 50 41 52 45 31 36 29 0d 0a 20 20  G_PREPARE16)..  
3b40: 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65  sqlite3InteropDe
3b50: 62 75 67 28 22 73 71 6c 69 74 65 33 5f 70 72 65  bug("sqlite3_pre
3b60: 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 29 3a 20  pare_interop(): 
3b70: 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f  calling sqlite3_
3b80: 70 72 65 70 61 72 65 31 36 28 25 70 2c 20 5c 22  prepare16(%p, \"
3b90: 25 73 5c 22 2c 20 25 64 2c 20 25 70 29 2e 2e 2e  %s\", %d, %p)...
3ba0: 5c 6e 22 2c 20 64 62 2c 20 73 71 6c 2c 20 6e 63  \n", db, sql, nc
3bb0: 68 61 72 73 2c 20 70 70 73 74 6d 74 29 3b 0d 0a  hars, ppstmt);..
3bc0: 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 53 51  #endif....#if SQ
3bd0: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
3be0: 42 45 52 20 3e 3d 20 33 30 30 33 30 30 39 0d 0a  BER >= 3003009..
3bf0: 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 70 72    n = sqlite3_pr
3c00: 65 70 61 72 65 31 36 5f 76 32 28 64 62 2c 20 73  epare16_v2(db, s
3c10: 71 6c 2c 20 6e 63 68 61 72 73 20 2a 20 73 69 7a  ql, nchars * siz
3c20: 65 6f 66 28 77 63 68 61 72 5f 74 29 2c 20 70 70  eof(wchar_t), pp
3c30: 73 74 6d 74 2c 20 70 7a 74 61 69 6c 29 3b 0d 0a  stmt, pztail);..
3c40: 23 65 6c 73 65 0d 0a 20 20 6e 20 3d 20 73 71 6c  #else..  n = sql
3c50: 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 28 64  ite3_prepare16(d
3c60: 62 2c 20 73 71 6c 2c 20 6e 63 68 61 72 73 20 2a  b, sql, nchars *
3c70: 20 73 69 7a 65 6f 66 28 77 63 68 61 72 5f 74 29   sizeof(wchar_t)
3c80: 2c 20 70 70 73 74 6d 74 2c 20 70 7a 74 61 69 6c  , ppstmt, pztail
3c90: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69  );..#endif....#i
3ca0: 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f  f defined(INTERO
3cb0: 50 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e 54  P_DEBUG) && (INT
3cc0: 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54  EROP_DEBUG & INT
3cd0: 45 52 4f 50 5f 44 45 42 55 47 5f 50 52 45 50 41  EROP_DEBUG_PREPA
3ce0: 52 45 31 36 29 0d 0a 20 20 73 71 6c 69 74 65 33  RE16)..  sqlite3
3cf0: 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71  InteropDebug("sq
3d00: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 69 6e  lite3_prepare_in
3d10: 74 65 72 6f 70 28 29 3a 20 73 71 6c 69 74 65 33  terop(): sqlite3
3d20: 5f 70 72 65 70 61 72 65 31 36 28 25 70 2c 20 5c  _prepare16(%p, \
3d30: 22 25 73 5c 22 2c 20 25 64 2c 20 25 70 29 20 72  "%s\", %d, %p) r
3d40: 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20  eturned %d.\n", 
3d50: 64 62 2c 20 73 71 6c 2c 20 6e 63 68 61 72 73 2c  db, sql, nchars,
3d60: 20 70 70 73 74 6d 74 2c 20 6e 29 3b 0d 0a 23 65   ppstmt, n);..#e
3d70: 6e 64 69 66 0d 0a 0d 0a 20 20 69 66 20 28 70 6c  ndif....  if (pl
3d80: 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 28 70 7a 74  en) *plen = (pzt
3d90: 61 69 6c 20 26 26 20 2a 70 7a 74 61 69 6c 29 20  ail && *pztail) 
3da0: 3f 20 77 63 73 6c 65 6e 28 28 77 63 68 61 72 5f  ? wcslen((wchar_
3db0: 74 20 2a 29 2a 70 7a 74 61 69 6c 29 20 2a 20 73  t *)*pztail) * s
3dc0: 69 7a 65 6f 66 28 77 63 68 61 72 5f 74 29 20 3a  izeof(wchar_t) :
3dd0: 20 30 3b 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20   0;....  return 
3de0: 6e 3b 0d 0a 7d 0d 0a 0d 0a 23 69 66 20 64 65 66  n;..}....#if def
3df0: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 56 49 52  ined(INTEROP_VIR
3e00: 54 55 41 4c 5f 54 41 42 4c 45 29 20 26 26 20 53  TUAL_TABLE) && S
3e10: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
3e20: 4d 42 45 52 20 3e 3d 20 33 30 30 34 30 30 31 0d  MBER >= 3004001.
3e30: 0a 23 69 66 64 65 66 20 5f 57 49 4e 33 32 0a 5f  .#ifdef _WIN32._
3e40: 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70  _declspec(dllexp
3e50: 6f 72 74 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  ort).#endif.void
3e60: 20 2a 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65   *sqlite3_create
3e70: 5f 64 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75  _disposable_modu
3e80: 6c 65 28 0d 0a 20 20 73 71 6c 69 74 65 33 20 2a  le(..  sqlite3 *
3e90: 64 62 2c 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61  db,..  const cha
3ea0: 72 20 2a 7a 4e 61 6d 65 2c 0d 0a 20 20 63 6f 6e  r *zName,..  con
3eb0: 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
3ec0: 65 20 2a 70 2c 0d 0a 20 20 76 6f 69 64 20 2a 70  e *p,..  void *p
3ed0: 43 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 76  ClientData,..  v
3ee0: 6f 69 64 28 2a 78 44 65 73 74 72 6f 79 29 28 76  oid(*xDestroy)(v
3ef0: 6f 69 64 2a 29 0d 0a 29 3b 20 2f 2a 20 64 65 66  oid*)..); /* def
3f00: 69 6e 65 64 20 69 6e 20 22 73 72 63 2f 65 78 74  ined in "src/ext
3f10: 2f 76 74 73 68 69 6d 2e 63 22 20 28 69 6e 63 6c  /vtshim.c" (incl
3f20: 75 64 65 64 20 62 65 6c 6f 77 29 20 2a 2f 0d 0a  uded below) */..
3f30: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69  ..SQLITE_API voi
3f40: 64 20 2a 57 49 4e 41 50 49 20 73 71 6c 69 74 65  d *WINAPI sqlite
3f50: 33 5f 63 72 65 61 74 65 5f 64 69 73 70 6f 73 61  3_create_disposa
3f60: 62 6c 65 5f 6d 6f 64 75 6c 65 5f 69 6e 74 65 72  ble_module_inter
3f70: 6f 70 28 0d 0a 20 20 73 71 6c 69 74 65 33 20 2a  op(..  sqlite3 *
3f80: 64 62 2c 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61  db,..  const cha
3f90: 72 20 2a 7a 4e 61 6d 65 2c 0d 0a 20 20 73 71 6c  r *zName,..  sql
3fa0: 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
3fb0: 64 75 6c 65 2c 0d 0a 20 20 69 6e 74 20 69 56 65  dule,..  int iVe
3fc0: 72 73 69 6f 6e 2c 0d 0a 20 20 69 6e 74 20 28 2a  rsion,..  int (*
3fd0: 78 43 72 65 61 74 65 29 28 73 71 6c 69 74 65 33  xCreate)(sqlite3
3fe0: 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 2c 20  *, void *, int, 
3ff0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73  const char *cons
4000: 74 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62  t*, sqlite3_vtab
4010: 20 2a 2a 2c 20 63 68 61 72 2a 2a 29 2c 0d 0a 20   **, char**),.. 
4020: 20 69 6e 74 20 28 2a 78 43 6f 6e 6e 65 63 74 29   int (*xConnect)
4030: 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 20  (sqlite3*, void 
4040: 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
4050: 61 72 20 2a 63 6f 6e 73 74 2a 2c 20 73 71 6c 69  ar *const*, sqli
4060: 74 65 33 5f 76 74 61 62 20 2a 2a 2c 20 63 68 61  te3_vtab **, cha
4070: 72 2a 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78  r**),..  int (*x
4080: 42 65 73 74 49 6e 64 65 78 29 28 73 71 6c 69 74  BestIndex)(sqlit
4090: 65 33 5f 76 74 61 62 20 2a 2c 20 73 71 6c 69 74  e3_vtab *, sqlit
40a0: 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 2a 29 2c  e3_index_info*),
40b0: 0d 0a 20 20 69 6e 74 20 28 2a 78 44 69 73 63 6f  ..  int (*xDisco
40c0: 6e 6e 65 63 74 29 28 73 71 6c 69 74 65 33 5f 76  nnect)(sqlite3_v
40d0: 74 61 62 20 2a 29 2c 0d 0a 20 20 69 6e 74 20 28  tab *),..  int (
40e0: 2a 78 44 65 73 74 72 6f 79 29 28 73 71 6c 69 74  *xDestroy)(sqlit
40f0: 65 33 5f 76 74 61 62 20 2a 29 2c 0d 0a 20 20 69  e3_vtab *),..  i
4100: 6e 74 20 28 2a 78 4f 70 65 6e 29 28 73 71 6c 69  nt (*xOpen)(sqli
4110: 74 65 33 5f 76 74 61 62 20 2a 2c 20 73 71 6c 69  te3_vtab *, sqli
4120: 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
4130: 2a 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 43  **),..  int (*xC
4140: 6c 6f 73 65 29 28 73 71 6c 69 74 65 33 5f 76 74  lose)(sqlite3_vt
4150: 61 62 5f 63 75 72 73 6f 72 2a 29 2c 0d 0a 20 20  ab_cursor*),..  
4160: 69 6e 74 20 28 2a 78 46 69 6c 74 65 72 29 28 73  int (*xFilter)(s
4170: 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
4180: 6f 72 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  or*, int, const 
4190: 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 73 71 6c  char *, int, sql
41a0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0d  ite3_value **),.
41b0: 0a 20 20 69 6e 74 20 28 2a 78 4e 65 78 74 29 28  .  int (*xNext)(
41c0: 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
41d0: 73 6f 72 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a  sor*),..  int (*
41e0: 78 45 6f 66 29 28 73 71 6c 69 74 65 33 5f 76 74  xEof)(sqlite3_vt
41f0: 61 62 5f 63 75 72 73 6f 72 2a 29 2c 0d 0a 20 20  ab_cursor*),..  
4200: 69 6e 74 20 28 2a 78 43 6f 6c 75 6d 6e 29 28 73  int (*xColumn)(s
4210: 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
4220: 6f 72 2a 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6e  or*, sqlite3_con
4230: 74 65 78 74 2a 2c 20 69 6e 74 29 2c 0d 0a 20 20  text*, int),..  
4240: 69 6e 74 20 28 2a 78 52 6f 77 69 64 29 28 73 71  int (*xRowid)(sq
4250: 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
4260: 72 2a 2c 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  r*, sqlite3_int6
4270: 34 20 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78  4 *),..  int (*x
4280: 55 70 64 61 74 65 29 28 73 71 6c 69 74 65 33 5f  Update)(sqlite3_
4290: 76 74 61 62 20 2a 2c 20 69 6e 74 2c 20 73 71 6c  vtab *, int, sql
42a0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 2c 20 73  ite3_value **, s
42b0: 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 2a 29 2c  qlite3_int64 *),
42c0: 0d 0a 20 20 69 6e 74 20 28 2a 78 42 65 67 69 6e  ..  int (*xBegin
42d0: 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a  )(sqlite3_vtab *
42e0: 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 53 79 6e  ),..  int (*xSyn
42f0: 63 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20  c)(sqlite3_vtab 
4300: 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 43 6f  *),..  int (*xCo
4310: 6d 6d 69 74 29 28 73 71 6c 69 74 65 33 5f 76 74  mmit)(sqlite3_vt
4320: 61 62 20 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a  ab *),..  int (*
4330: 78 52 6f 6c 6c 62 61 63 6b 29 28 73 71 6c 69 74  xRollback)(sqlit
4340: 65 33 5f 76 74 61 62 20 2a 29 2c 0d 0a 20 20 69  e3_vtab *),..  i
4350: 6e 74 20 28 2a 78 46 69 6e 64 46 75 6e 63 74 69  nt (*xFindFuncti
4360: 6f 6e 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62  on)(sqlite3_vtab
4370: 20 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63   *, int, const c
4380: 68 61 72 20 2a 2c 20 76 6f 69 64 20 28 2a 2a 70  har *, void (**p
4390: 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63  xFunc)(sqlite3_c
43a0: 6f 6e 74 65 78 74 2a 2c 20 69 6e 74 2c 20 73 71  ontext*, int, sq
43b0: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 2c 20  lite3_value**), 
43c0: 76 6f 69 64 20 2a 2a 70 70 41 72 67 29 2c 0d 0a  void **ppArg),..
43d0: 20 20 69 6e 74 20 28 2a 78 52 65 6e 61 6d 65 29    int (*xRename)
43e0: 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 2c  (sqlite3_vtab *,
43f0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 2c 0d   const char *),.
4400: 0a 20 20 69 6e 74 20 28 2a 78 53 61 76 65 70 6f  .  int (*xSavepo
4410: 69 6e 74 29 28 73 71 6c 69 74 65 33 5f 76 74 61  int)(sqlite3_vta
4420: 62 20 2a 2c 20 69 6e 74 29 2c 0d 0a 20 20 69 6e  b *, int),..  in
4430: 74 20 28 2a 78 52 65 6c 65 61 73 65 29 28 73 71  t (*xRelease)(sq
4440: 6c 69 74 65 33 5f 76 74 61 62 20 2a 2c 20 69 6e  lite3_vtab *, in
4450: 74 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 52 6f  t),..  int (*xRo
4460: 6c 6c 62 61 63 6b 54 6f 29 28 73 71 6c 69 74 65  llbackTo)(sqlite
4470: 33 5f 76 74 61 62 20 2a 2c 20 69 6e 74 29 2c 0d  3_vtab *, int),.
4480: 0a 20 20 76 6f 69 64 20 2a 70 43 6c 69 65 6e 74  .  void *pClient
4490: 44 61 74 61 2c 0d 0a 20 20 76 6f 69 64 28 2a 78  Data,..  void(*x
44a0: 44 65 73 74 72 6f 79 4d 6f 64 75 6c 65 29 28 76  DestroyModule)(v
44b0: 6f 69 64 2a 29 0d 0a 29 7b 0d 0a 20 20 69 66 20  oid*)..){..  if 
44c0: 28 21 70 4d 6f 64 75 6c 65 29 20 72 65 74 75 72  (!pModule) retur
44d0: 6e 20 30 3b 0d 0a 20 20 6d 65 6d 73 65 74 28 70  n 0;..  memset(p
44e0: 4d 6f 64 75 6c 65 2c 20 30 2c 20 73 69 7a 65 6f  Module, 0, sizeo
44f0: 66 28 2a 70 4d 6f 64 75 6c 65 29 29 3b 0d 0a 20  f(*pModule));.. 
4500: 20 70 4d 6f 64 75 6c 65 2d 3e 69 56 65 72 73 69   pModule->iVersi
4510: 6f 6e 20 3d 20 69 56 65 72 73 69 6f 6e 3b 0d 0a  on = iVersion;..
4520: 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 72 65 61    pModule->xCrea
4530: 74 65 20 3d 20 78 43 72 65 61 74 65 3b 0d 0a 20  te = xCreate;.. 
4540: 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6e 6e 65   pModule->xConne
4550: 63 74 20 3d 20 78 43 6f 6e 6e 65 63 74 3b 0d 0a  ct = xConnect;..
4560: 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 42 65 73 74    pModule->xBest
4570: 49 6e 64 65 78 20 3d 20 78 42 65 73 74 49 6e 64  Index = xBestInd
4580: 65 78 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e  ex;..  pModule->
4590: 78 44 69 73 63 6f 6e 6e 65 63 74 20 3d 20 78 44  xDisconnect = xD
45a0: 69 73 63 6f 6e 6e 65 63 74 3b 0d 0a 20 20 70 4d  isconnect;..  pM
45b0: 6f 64 75 6c 65 2d 3e 78 44 65 73 74 72 6f 79 20  odule->xDestroy 
45c0: 3d 20 78 44 65 73 74 72 6f 79 3b 0d 0a 20 20 70  = xDestroy;..  p
45d0: 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 20 3d 20  Module->xOpen = 
45e0: 78 4f 70 65 6e 3b 0d 0a 20 20 70 4d 6f 64 75 6c  xOpen;..  pModul
45f0: 65 2d 3e 78 43 6c 6f 73 65 20 3d 20 78 43 6c 6f  e->xClose = xClo
4600: 73 65 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e  se;..  pModule->
4610: 78 46 69 6c 74 65 72 20 3d 20 78 46 69 6c 74 65  xFilter = xFilte
4620: 72 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78  r;..  pModule->x
4630: 4e 65 78 74 20 3d 20 78 4e 65 78 74 3b 0d 0a 20  Next = xNext;.. 
4640: 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 20 3d   pModule->xEof =
4650: 20 78 45 6f 66 3b 0d 0a 20 20 70 4d 6f 64 75 6c   xEof;..  pModul
4660: 65 2d 3e 78 43 6f 6c 75 6d 6e 20 3d 20 78 43 6f  e->xColumn = xCo
4670: 6c 75 6d 6e 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65  lumn;..  pModule
4680: 2d 3e 78 52 6f 77 69 64 20 3d 20 78 52 6f 77 69  ->xRowid = xRowi
4690: 64 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78  d;..  pModule->x
46a0: 55 70 64 61 74 65 20 3d 20 78 55 70 64 61 74 65  Update = xUpdate
46b0: 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 42  ;..  pModule->xB
46c0: 65 67 69 6e 20 3d 20 78 42 65 67 69 6e 3b 0d 0a  egin = xBegin;..
46d0: 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 53 79 6e 63    pModule->xSync
46e0: 20 3d 20 78 53 79 6e 63 3b 0d 0a 20 20 70 4d 6f   = xSync;..  pMo
46f0: 64 75 6c 65 2d 3e 78 43 6f 6d 6d 69 74 20 3d 20  dule->xCommit = 
4700: 78 43 6f 6d 6d 69 74 3b 0d 0a 20 20 70 4d 6f 64  xCommit;..  pMod
4710: 75 6c 65 2d 3e 78 52 6f 6c 6c 62 61 63 6b 20 3d  ule->xRollback =
4720: 20 78 52 6f 6c 6c 62 61 63 6b 3b 0d 0a 20 20 70   xRollback;..  p
4730: 4d 6f 64 75 6c 65 2d 3e 78 46 69 6e 64 46 75 6e  Module->xFindFun
4740: 63 74 69 6f 6e 20 3d 20 78 46 69 6e 64 46 75 6e  ction = xFindFun
4750: 63 74 69 6f 6e 3b 0d 0a 20 20 70 4d 6f 64 75 6c  ction;..  pModul
4760: 65 2d 3e 78 52 65 6e 61 6d 65 20 3d 20 78 52 65  e->xRename = xRe
4770: 6e 61 6d 65 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65  name;..  pModule
4780: 2d 3e 78 53 61 76 65 70 6f 69 6e 74 20 3d 20 78  ->xSavepoint = x
4790: 53 61 76 65 70 6f 69 6e 74 3b 0d 0a 20 20 70 4d  Savepoint;..  pM
47a0: 6f 64 75 6c 65 2d 3e 78 52 65 6c 65 61 73 65 20  odule->xRelease 
47b0: 3d 20 78 52 65 6c 65 61 73 65 3b 0d 0a 20 20 70  = xRelease;..  p
47c0: 4d 6f 64 75 6c 65 2d 3e 78 52 6f 6c 6c 62 61 63  Module->xRollbac
47d0: 6b 54 6f 20 3d 20 78 52 6f 6c 6c 62 61 63 6b 54  kTo = xRollbackT
47e0: 6f 3b 0d 0a 20 20 72 65 74 75 72 6e 20 73 71 6c  o;..  return sql
47f0: 69 74 65 33 5f 63 72 65 61 74 65 5f 64 69 73 70  ite3_create_disp
4800: 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c 65 28 64 62  osable_module(db
4810: 2c 20 7a 4e 61 6d 65 2c 20 70 4d 6f 64 75 6c 65  , zName, pModule
4820: 2c 20 70 43 6c 69 65 6e 74 44 61 74 61 2c 20 78  , pClientData, x
4830: 44 65 73 74 72 6f 79 4d 6f 64 75 6c 65 29 3b 0d  DestroyModule);.
4840: 0a 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 53 51  .}..#endif....SQ
4850: 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e  LITE_API int WIN
4860: 41 50 49 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  API sqlite3_bind
4870: 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
4880: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74  sqlite3_stmt *st
4890: 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 64 6f  mt, int iCol, do
48a0: 75 62 6c 65 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 20  uble *val)..{.. 
48b0: 20 69 66 20 28 21 76 61 6c 29 20 72 65 74 75 72   if (!val) retur
48c0: 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0d  n SQLITE_ERROR;.
48d0: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
48e0: 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 73 74  3_bind_double(st
48f0: 6d 74 2c 69 43 6f 6c 2c 2a 76 61 6c 29 3b 0d 0a  mt,iCol,*val);..
4900: 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20  }....SQLITE_API 
4910: 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74  int WINAPI sqlit
4920: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e  e3_bind_int64_in
4930: 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74  terop(sqlite3_st
4940: 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43  mt *stmt, int iC
4950: 6f 6c 2c 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  ol, sqlite_int64
4960: 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 20 20 69 66 20   *val)..{..  if 
4970: 28 21 76 61 6c 29 20 72 65 74 75 72 6e 20 53 51  (!val) return SQ
4980: 4c 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 72  LITE_ERROR;..  r
4990: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 62 69  eturn sqlite3_bi
49a0: 6e 64 5f 69 6e 74 36 34 28 73 74 6d 74 2c 69 43  nd_int64(stmt,iC
49b0: 6f 6c 2c 2a 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a  ol,*val);..}....
49c0: 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74  SQLITE_API const
49d0: 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49 20 73   char * WINAPI s
49e0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
49f0: 6d 65 74 65 72 5f 6e 61 6d 65 5f 69 6e 74 65 72  meter_name_inter
4a00: 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  op(sqlite3_stmt 
4a10: 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c  *stmt, int iCol,
4a20: 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a   int *plen)..{..
4a30: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 76    const char *pv
4a40: 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  al = sqlite3_bin
4a50: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
4a60: 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20  (stmt, iCol);.. 
4a70: 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e   if (plen) *plen
4a80: 20 3d 20 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e   = pval ? strlen
4a90: 28 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72  (pval) : 0;..  r
4aa0: 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a  eturn pval;..}..
4ab0: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e  ..SQLITE_API con
4ac0: 73 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49  st char * WINAPI
4ad0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4ae0: 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c  name_interop(sql
4af0: 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c  ite3_stmt *stmt,
4b00: 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a   int iCol, int *
4b10: 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73  plen)..{..  cons
4b20: 74 20 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73  t char *pval = s
4b30: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
4b40: 6d 65 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d  me(stmt, iCol);.
4b50: 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c  .  if (plen) *pl
4b60: 65 6e 20 3d 20 70 76 61 6c 20 3f 20 73 74 72 6c  en = pval ? strl
4b70: 65 6e 28 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20  en(pval) : 0;.. 
4b80: 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d   return pval;..}
4b90: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63  ....SQLITE_API c
4ba0: 6f 6e 73 74 20 76 6f 69 64 20 2a 20 57 49 4e 41  onst void * WINA
4bb0: 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  PI sqlite3_colum
4bc0: 6e 5f 6e 61 6d 65 31 36 5f 69 6e 74 65 72 6f 70  n_name16_interop
4bd0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73  (sqlite3_stmt *s
4be0: 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69  tmt, int iCol, i
4bf0: 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20  nt *plen)..{..  
4c00: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 61 6c  const void *pval
4c10: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
4c20: 6e 5f 6e 61 6d 65 31 36 28 73 74 6d 74 2c 20 69  n_name16(stmt, i
4c30: 43 6f 6c 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65  Col);..  if (ple
4c40: 6e 29 20 2a 70 6c 65 6e 20 3d 20 70 76 61 6c 20  n) *plen = pval 
4c50: 3f 20 77 63 73 6c 65 6e 28 28 77 63 68 61 72 5f  ? wcslen((wchar_
4c60: 74 20 2a 29 70 76 61 6c 29 20 2a 20 73 69 7a 65  t *)pval) * size
4c70: 6f 66 28 77 63 68 61 72 5f 74 29 20 3a 20 30 3b  of(wchar_t) : 0;
4c80: 0d 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b  ..  return pval;
4c90: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
4ca0: 49 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 57  I const char * W
4cb0: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f  INAPI sqlite3_co
4cc0: 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 5f 69 6e  lumn_decltype_in
4cd0: 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74  terop(sqlite3_st
4ce0: 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43  mt *stmt, int iC
4cf0: 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a  ol, int *plen)..
4d00: 7b 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  {..  const char 
4d10: 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f  *pval = sqlite3_
4d20: 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 28  column_decltype(
4d30: 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20  stmt, iCol);..  
4d40: 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20  if (plen) *plen 
4d50: 3d 20 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e 28  = pval ? strlen(
4d60: 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65  pval) : 0;..  re
4d70: 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d  turn pval;..}...
4d80: 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73  .SQLITE_API cons
4d90: 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20  t void * WINAPI 
4da0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
4db0: 65 63 6c 74 79 70 65 31 36 5f 69 6e 74 65 72 6f  ecltype16_intero
4dc0: 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  p(sqlite3_stmt *
4dd0: 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20  stmt, int iCol, 
4de0: 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20  int *plen)..{.. 
4df0: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 61   const void *pva
4e00: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  l = sqlite3_colu
4e10: 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36 28 73 74  mn_decltype16(st
4e20: 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 69 66  mt, iCol);..  if
4e30: 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20   (plen) *plen = 
4e40: 70 76 61 6c 20 3f 20 77 63 73 6c 65 6e 28 28 77  pval ? wcslen((w
4e50: 63 68 61 72 5f 74 20 2a 29 70 76 61 6c 29 20 2a  char_t *)pval) *
4e60: 20 73 69 7a 65 6f 66 28 77 63 68 61 72 5f 74 29   sizeof(wchar_t)
4e70: 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72 6e 20   : 0;..  return 
4e80: 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49  pval;..}....SQLI
4e90: 54 45 5f 41 50 49 20 76 6f 69 64 20 57 49 4e 41  TE_API void WINA
4ea0: 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  PI sqlite3_colum
4eb0: 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70  n_double_interop
4ec0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73  (sqlite3_stmt *s
4ed0: 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 64  tmt, int iCol, d
4ee0: 6f 75 62 6c 65 20 2a 76 61 6c 29 0d 0a 7b 0d 0a  ouble *val)..{..
4ef0: 20 20 69 66 20 28 21 76 61 6c 29 20 72 65 74 75    if (!val) retu
4f00: 72 6e 3b 0d 0a 20 20 2a 76 61 6c 20 3d 20 73 71  rn;..  *val = sq
4f10: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75  lite3_column_dou
4f20: 62 6c 65 28 73 74 6d 74 2c 69 43 6f 6c 29 3b 0d  ble(stmt,iCol);.
4f30: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
4f40: 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c   void WINAPI sql
4f50: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  ite3_column_int6
4f60: 34 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  4_interop(sqlite
4f70: 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e  3_stmt *stmt, in
4f80: 74 20 69 43 6f 6c 2c 20 73 71 6c 69 74 65 5f 69  t iCol, sqlite_i
4f90: 6e 74 36 34 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 20  nt64 *val)..{.. 
4fa0: 20 69 66 20 28 21 76 61 6c 29 20 72 65 74 75 72   if (!val) retur
4fb0: 6e 3b 0d 0a 20 20 2a 76 61 6c 20 3d 20 73 71 6c  n;..  *val = sql
4fc0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  ite3_column_int6
4fd0: 34 28 73 74 6d 74 2c 69 43 6f 6c 29 3b 0d 0a 7d  4(stmt,iCol);..}
4fe0: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76  ....SQLITE_API v
4ff0: 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74  oid WINAPI sqlit
5000: 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
5010: 6f 77 69 64 5f 69 6e 74 65 72 6f 70 28 73 71 6c  owid_interop(sql
5020: 69 74 65 33 20 2a 64 62 2c 20 73 71 6c 69 74 65  ite3 *db, sqlite
5030: 5f 69 6e 74 36 34 20 2a 72 6f 77 49 64 29 0d 0a  _int64 *rowId)..
5040: 7b 0d 0a 20 20 69 66 20 28 21 72 6f 77 49 64 29  {..  if (!rowId)
5050: 20 72 65 74 75 72 6e 3b 0d 0a 20 20 2a 72 6f 77   return;..  *row
5060: 49 64 20 3d 20 73 71 6c 69 74 65 33 5f 6c 61 73  Id = sqlite3_las
5070: 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 64  t_insert_rowid(d
5080: 62 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45  b);..}....SQLITE
5090: 5f 41 50 49 20 76 6f 69 64 20 57 49 4e 41 50 49  _API void WINAPI
50a0: 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f   sqlite3_memory_
50b0: 75 73 65 64 5f 69 6e 74 65 72 6f 70 28 73 71 6c  used_interop(sql
50c0: 69 74 65 5f 69 6e 74 36 34 20 2a 6e 42 79 74 65  ite_int64 *nByte
50d0: 73 29 0d 0a 7b 0d 0a 20 20 69 66 20 28 21 6e 42  s)..{..  if (!nB
50e0: 79 74 65 73 29 20 72 65 74 75 72 6e 3b 0d 0a 20  ytes) return;.. 
50f0: 20 2a 6e 42 79 74 65 73 20 3d 20 73 71 6c 69 74   *nBytes = sqlit
5100: 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 28 29  e3_memory_used()
5110: 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  ;..}....SQLITE_A
5120: 50 49 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73  PI void WINAPI s
5130: 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69  qlite3_memory_hi
5140: 67 68 77 61 74 65 72 5f 69 6e 74 65 72 6f 70 28  ghwater_interop(
5150: 69 6e 74 20 72 65 73 65 74 46 6c 61 67 2c 20 73  int resetFlag, s
5160: 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a 6e 42 79  qlite_int64 *nBy
5170: 74 65 73 29 0d 0a 7b 0d 0a 20 20 69 66 20 28 21  tes)..{..  if (!
5180: 6e 42 79 74 65 73 29 20 72 65 74 75 72 6e 3b 0d  nBytes) return;.
5190: 0a 20 20 2a 6e 42 79 74 65 73 20 3d 20 73 71 6c  .  *nBytes = sql
51a0: 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68  ite3_memory_high
51b0: 77 61 74 65 72 28 72 65 73 65 74 46 6c 61 67 29  water(resetFlag)
51c0: 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  ;..}....SQLITE_A
51d0: 50 49 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  PI const unsigne
51e0: 64 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49 20  d char * WINAPI 
51f0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
5200: 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  ext_interop(sqli
5210: 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20  te3_stmt *stmt, 
5220: 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70  int iCol, int *p
5230: 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74  len)..{..  const
5240: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
5250: 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  pval = sqlite3_c
5260: 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2c  olumn_text(stmt,
5270: 20 69 43 6f 6c 29 3b 0d 0a 20 20 69 66 20 28 70   iCol);..  if (p
5280: 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 73 71 6c  len) *plen = sql
5290: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
52a0: 73 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a  s(stmt, iCol);..
52b0: 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a    return pval;..
52c0: 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20  }....SQLITE_API 
52d0: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 20 57 49 4e  const void * WIN
52e0: 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  API sqlite3_colu
52f0: 6d 6e 5f 74 65 78 74 31 36 5f 69 6e 74 65 72 6f  mn_text16_intero
5300: 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  p(sqlite3_stmt *
5310: 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20  stmt, int iCol, 
5320: 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20  int *plen)..{.. 
5330: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 61   const void *pva
5340: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  l = sqlite3_colu
5350: 6d 6e 5f 74 65 78 74 31 36 28 73 74 6d 74 2c 20  mn_text16(stmt, 
5360: 69 43 6f 6c 29 3b 0d 0a 20 20 69 66 20 28 70 6c  iCol);..  if (pl
5370: 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 73 71 6c 69  en) *plen = sqli
5380: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
5390: 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d  16(stmt, iCol);.
53a0: 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d  .  return pval;.
53b0: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
53c0: 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69   int WINAPI sqli
53d0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 5f 69 6e 74  te3_finalize_int
53e0: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
53f0: 74 20 2a 73 74 6d 74 29 0d 0a 7b 0d 0a 20 20 69  t *stmt)..{..  i
5400: 6e 74 20 72 65 74 3b 0d 0a 23 69 66 20 21 64 65  nt ret;..#if !de
5410: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 4c 45  fined(INTEROP_LE
5420: 47 41 43 59 5f 43 4c 4f 53 45 29 20 26 26 20 53  GACY_CLOSE) && S
5430: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
5440: 4d 42 45 52 20 3e 3d 20 33 30 30 37 30 31 34 0d  MBER >= 3007014.
5450: 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49  ...#if defined(I
5460: 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26  NTEROP_DEBUG) &&
5470: 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20   (INTEROP_DEBUG 
5480: 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f  & INTEROP_DEBUG_
5490: 46 49 4e 41 4c 49 5a 45 29 0d 0a 20 20 56 64 62  FINALIZE)..  Vdb
54a0: 65 20 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 73  e *p = (Vdbe *)s
54b0: 74 6d 74 3b 0d 0a 20 20 73 71 6c 69 74 65 33 20  tmt;..  sqlite3 
54c0: 2a 64 62 20 3d 20 70 20 3f 20 70 2d 3e 64 62 20  *db = p ? p->db 
54d0: 3a 20 30 3b 0d 0a 20 20 73 71 6c 69 74 65 33 49  : 0;..  sqlite3I
54e0: 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c  nteropDebug("sql
54f0: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 5f 69 6e  ite3_finalize_in
5500: 74 65 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67  terop(): calling
5510: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
5520: 65 28 25 70 2c 20 25 70 29 2e 2e 2e 5c 6e 22 2c  e(%p, %p)...\n",
5530: 20 64 62 2c 20 73 74 6d 74 29 3b 0d 0a 23 65 6e   db, stmt);..#en
5540: 64 69 66 0d 0a 0d 0a 20 20 72 65 74 20 3d 20 73  dif....  ret = s
5550: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
5560: 73 74 6d 74 29 3b 0d 0a 0d 0a 23 69 66 20 64 65  stmt);....#if de
5570: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45  fined(INTEROP_DE
5580: 42 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50  BUG) && (INTEROP
5590: 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50  _DEBUG & INTEROP
55a0: 5f 44 45 42 55 47 5f 46 49 4e 41 4c 49 5a 45 29  _DEBUG_FINALIZE)
55b0: 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72  ..  sqlite3Inter
55c0: 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33  opDebug("sqlite3
55d0: 5f 66 69 6e 61 6c 69 7a 65 5f 69 6e 74 65 72 6f  _finalize_intero
55e0: 70 28 29 3a 20 73 71 6c 69 74 65 33 5f 66 69 6e  p(): sqlite3_fin
55f0: 61 6c 69 7a 65 28 25 70 2c 20 25 70 29 20 72 65  alize(%p, %p) re
5600: 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 64  turned %d.\n", d
5610: 62 2c 20 73 74 6d 74 2c 20 72 65 74 29 3b 0d 0a  b, stmt, ret);..
5620: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 75  #endif....  retu
5630: 72 6e 20 72 65 74 3b 0d 0a 23 65 6c 73 65 0d 0a  rn ret;..#else..
5640: 20 20 56 64 62 65 20 2a 70 3b 0d 0a 20 20 72 65    Vdbe *p;..  re
5650: 74 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0d 0a  t = SQLITE_OK;..
5660: 0d 0a 20 20 70 20 3d 20 28 56 64 62 65 20 2a 29  ..  p = (Vdbe *)
5670: 73 74 6d 74 3b 0d 0a 20 20 69 66 20 28 70 29 0d  stmt;..  if (p).
5680: 0a 20 20 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65  .  {..    sqlite
5690: 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 0d 0a  3 *db = p->db;..
56a0: 0d 0a 20 20 20 20 69 66 20 28 64 62 20 21 3d 20  ..    if (db != 
56b0: 4e 55 4c 4c 29 0d 0a 20 20 20 20 20 20 73 71 6c  NULL)..      sql
56c0: 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72  ite3_mutex_enter
56d0: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a  (db->mutex);....
56e0: 20 20 20 20 69 66 20 28 28 70 2d 3e 6d 61 67 69      if ((p->magi
56f0: 63 20 3d 3d 20 56 44 42 45 5f 4d 41 47 49 43 5f  c == VDBE_MAGIC_
5700: 44 45 41 44 29 20 26 26 20 28 64 62 20 3d 3d 20  DEAD) && (db == 
5710: 4e 55 4c 4c 29 29 0d 0a 20 20 20 20 7b 0d 0a 20  NULL))..    {.. 
5720: 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
5730: 65 65 5f 69 6e 74 65 72 6f 70 28 64 62 2c 20 70  ee_interop(db, p
5740: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 65  );..    }..    e
5750: 6c 73 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  lse..    {..    
5760: 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33 5f    ret = sqlite3_
5770: 66 69 6e 61 6c 69 7a 65 28 73 74 6d 74 29 3b 0d  finalize(stmt);.
5780: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 66  .    }....    if
5790: 20 28 64 62 20 21 3d 20 4e 55 4c 4c 29 0d 0a 20   (db != NULL).. 
57a0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74       sqlite3_mut
57b0: 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74  ex_leave(db->mut
57c0: 65 78 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 72  ex);..  }....  r
57d0: 65 74 75 72 6e 20 72 65 74 3b 0d 0a 23 65 6e 64  eturn ret;..#end
57e0: 69 66 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f  if..}....SQLITE_
57f0: 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73  API int WINAPI s
5800: 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69  qlite3_backup_fi
5810: 6e 69 73 68 5f 69 6e 74 65 72 6f 70 28 73 71 6c  nish_interop(sql
5820: 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 70 29 0d  ite3_backup *p).
5830: 0a 7b 0d 0a 20 20 69 6e 74 20 72 65 74 3b 0d 0a  .{..  int ret;..
5840: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
5850: 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20  TEROP_DEBUG) && 
5860: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26  (INTEROP_DEBUG &
5870: 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 42   INTEROP_DEBUG_B
5880: 41 43 4b 55 50 5f 46 49 4e 49 53 48 29 0d 0a 20  ACKUP_FINISH).. 
5890: 20 73 71 6c 69 74 65 33 2a 20 70 44 65 73 74 44   sqlite3* pDestD
58a0: 62 20 3d 20 70 20 3f 20 70 2d 3e 70 44 65 73 74  b = p ? p->pDest
58b0: 44 62 20 3a 20 30 3b 0d 0a 20 20 73 71 6c 69 74  Db : 0;..  sqlit
58c0: 65 33 2a 20 70 53 72 63 44 62 20 3d 20 70 20 3f  e3* pSrcDb = p ?
58d0: 20 70 2d 3e 70 53 72 63 44 62 20 3a 20 30 3b 0d   p->pSrcDb : 0;.
58e0: 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f  .  sqlite3Intero
58f0: 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f  pDebug("sqlite3_
5900: 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 5f 69 6e  backup_finish_in
5910: 74 65 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67  terop(): calling
5920: 20 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f   sqlite3_backup_
5930: 66 69 6e 69 73 68 28 25 70 2c 20 25 70 2c 20 25  finish(%p, %p, %
5940: 70 29 2e 2e 2e 5c 6e 22 2c 20 70 44 65 73 74 44  p)...\n", pDestD
5950: 62 2c 20 70 53 72 63 44 62 2c 20 70 29 3b 0d 0a  b, pSrcDb, p);..
5960: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 20  #endif....  ret 
5970: 3d 20 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  = sqlite3_backup
5980: 5f 66 69 6e 69 73 68 28 70 29 3b 0d 0a 0d 0a 23  _finish(p);....#
5990: 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52  if defined(INTER
59a0: 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e  OP_DEBUG) && (IN
59b0: 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e  TEROP_DEBUG & IN
59c0: 54 45 52 4f 50 5f 44 45 42 55 47 5f 42 41 43 4b  TEROP_DEBUG_BACK
59d0: 55 50 5f 46 49 4e 49 53 48 29 0d 0a 20 20 73 71  UP_FINISH)..  sq
59e0: 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75  lite3InteropDebu
59f0: 67 28 22 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  g("sqlite3_backu
5a00: 70 5f 66 69 6e 69 73 68 5f 69 6e 74 65 72 6f 70  p_finish_interop
5a10: 28 29 3a 20 73 71 6c 69 74 65 33 5f 62 61 63 6b  (): sqlite3_back
5a20: 75 70 5f 66 69 6e 69 73 68 28 25 70 2c 20 25 70  up_finish(%p, %p
5a30: 2c 20 25 70 29 20 72 65 74 75 72 6e 65 64 20 25  , %p) returned %
5a40: 64 2e 5c 6e 22 2c 20 70 44 65 73 74 44 62 2c 20  d.\n", pDestDb, 
5a50: 70 53 72 63 44 62 2c 20 70 2c 20 72 65 74 29 3b  pSrcDb, p, ret);
5a60: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65  ..#endif....  re
5a70: 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a 0d 0a  turn ret;..}....
5a80: 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57  SQLITE_API int W
5a90: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 62 6c  INAPI sqlite3_bl
5aa0: 6f 62 5f 63 6c 6f 73 65 5f 69 6e 74 65 72 6f 70  ob_close_interop
5ab0: 28 73 71 6c 69 74 65 33 5f 62 6c 6f 62 20 2a 70  (sqlite3_blob *p
5ac0: 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72 65 74 3b  )..{..  int ret;
5ad0: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
5ae0: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26  INTEROP_DEBUG) &
5af0: 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  & (INTEROP_DEBUG
5b00: 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47   & INTEROP_DEBUG
5b10: 5f 42 4c 4f 42 5f 43 4c 4f 53 45 29 0d 0a 20 20  _BLOB_CLOSE)..  
5b20: 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65  sqlite3InteropDe
5b30: 62 75 67 28 22 73 71 6c 69 74 65 33 5f 62 6c 6f  bug("sqlite3_blo
5b40: 62 5f 63 6c 6f 73 65 5f 69 6e 74 65 72 6f 70 28  b_close_interop(
5b50: 29 3a 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74  ): calling sqlit
5b60: 65 33 5f 62 6c 6f 62 5f 63 6c 6f 73 65 28 25 70  e3_blob_close(%p
5b70: 29 2e 2e 2e 5c 6e 22 2c 20 70 29 3b 0d 0a 23 65  )...\n", p);..#e
5b80: 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 20 3d 20  ndif....  ret = 
5b90: 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 63 6c 6f  sqlite3_blob_clo
5ba0: 73 65 28 70 29 3b 0d 0a 0d 0a 23 69 66 20 64 65  se(p);....#if de
5bb0: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45  fined(INTEROP_DE
5bc0: 42 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50  BUG) && (INTEROP
5bd0: 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50  _DEBUG & INTEROP
5be0: 5f 44 45 42 55 47 5f 42 4c 4f 42 5f 43 4c 4f 53  _DEBUG_BLOB_CLOS
5bf0: 45 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74  E)..  sqlite3Int
5c00: 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74  eropDebug("sqlit
5c10: 65 33 5f 62 6c 6f 62 5f 63 6c 6f 73 65 5f 69 6e  e3_blob_close_in
5c20: 74 65 72 6f 70 28 29 3a 20 73 71 6c 69 74 65 33  terop(): sqlite3
5c30: 5f 62 6c 6f 62 5f 63 6c 6f 73 65 28 25 70 29 20  _blob_close(%p) 
5c40: 72 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c  returned %d.\n",
5c50: 20 70 2c 20 72 65 74 29 3b 0d 0a 23 65 6e 64 69   p, ret);..#endi
5c60: 66 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 72 65  f....  return re
5c70: 74 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f  t;..}....SQLITE_
5c80: 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73  API int WINAPI s
5c90: 71 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74  qlite3_reset_int
5ca0: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
5cb0: 74 20 2a 73 74 6d 74 29 0d 0a 7b 0d 0a 20 20 69  t *stmt)..{..  i
5cc0: 6e 74 20 72 65 74 3b 0d 0a 23 69 66 20 21 64 65  nt ret;..#if !de
5cd0: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 4c 45  fined(INTEROP_LE
5ce0: 47 41 43 59 5f 43 4c 4f 53 45 29 20 26 26 20 53  GACY_CLOSE) && S
5cf0: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
5d00: 4d 42 45 52 20 3e 3d 20 33 30 30 37 30 31 34 0d  MBER >= 3007014.
5d10: 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49  ...#if defined(I
5d20: 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26  NTEROP_DEBUG) &&
5d30: 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20   (INTEROP_DEBUG 
5d40: 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f  & INTEROP_DEBUG_
5d50: 52 45 53 45 54 29 0d 0a 20 20 73 71 6c 69 74 65  RESET)..  sqlite
5d60: 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73  3InteropDebug("s
5d70: 71 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74  qlite3_reset_int
5d80: 65 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20  erop(): calling 
5d90: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 25 70  sqlite3_reset(%p
5da0: 29 2e 2e 2e 5c 6e 22 2c 20 73 74 6d 74 29 3b 0d  )...\n", stmt);.
5db0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74  .#endif....  ret
5dc0: 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74   = sqlite3_reset
5dd0: 28 73 74 6d 74 29 3b 0d 0a 0d 0a 23 69 66 20 64  (stmt);....#if d
5de0: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44  efined(INTEROP_D
5df0: 45 42 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f  EBUG) && (INTERO
5e00: 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f  P_DEBUG & INTERO
5e10: 50 5f 44 45 42 55 47 5f 52 45 53 45 54 29 0d 0a  P_DEBUG_RESET)..
5e20: 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70    sqlite3Interop
5e30: 44 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 72  Debug("sqlite3_r
5e40: 65 73 65 74 5f 69 6e 74 65 72 6f 70 28 29 3a 20  eset_interop(): 
5e50: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 25 70  sqlite3_reset(%p
5e60: 29 20 72 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e  ) returned %d.\n
5e70: 22 2c 20 73 74 6d 74 2c 20 72 65 74 29 3b 0d 0a  ", stmt, ret);..
5e80: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 75  #endif....  retu
5e90: 72 6e 20 72 65 74 3b 0d 0a 23 65 6c 73 65 0d 0a  rn ret;..#else..
5ea0: 20 20 69 66 20 28 73 74 6d 74 20 26 26 20 28 28    if (stmt && ((
5eb0: 56 64 62 65 20 2a 29 73 74 6d 74 29 2d 3e 6d 61  Vdbe *)stmt)->ma
5ec0: 67 69 63 20 3d 3d 20 56 44 42 45 5f 4d 41 47 49  gic == VDBE_MAGI
5ed0: 43 5f 44 45 41 44 29 20 72 65 74 75 72 6e 20 53  C_DEAD) return S
5ee0: 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0d 0a 20  QLITE_SCHEMA;.. 
5ef0: 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 72   ret = sqlite3_r
5f00: 65 73 65 74 28 73 74 6d 74 29 3b 0d 0a 20 20 72  eset(stmt);..  r
5f10: 65 74 75 72 6e 20 72 65 74 3b 0d 0a 23 65 6e 64  eturn ret;..#end
5f20: 69 66 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f  if..}....SQLITE_
5f30: 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73  API int WINAPI s
5f40: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
5f50: 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 73  nction_interop(s
5f60: 71 6c 69 74 65 33 20 2a 70 73 71 6c 2c 20 63 6f  qlite3 *psql, co
5f70: 6e 73 74 20 63 68 61 72 20 2a 7a 46 75 6e 63 74  nst char *zFunct
5f80: 69 6f 6e 4e 61 6d 65 2c 20 69 6e 74 20 6e 41 72  ionName, int nAr
5f90: 67 2c 20 69 6e 74 20 65 54 65 78 74 52 65 70 2c  g, int eTextRep,
5fa0: 20 76 6f 69 64 20 2a 70 76 55 73 65 72 2c 20 53   void *pvUser, S
5fb0: 51 4c 49 54 45 55 53 45 52 46 55 4e 43 20 66 75  QLITEUSERFUNC fu
5fc0: 6e 63 2c 20 53 51 4c 49 54 45 55 53 45 52 46 55  nc, SQLITEUSERFU
5fd0: 4e 43 20 66 75 6e 63 73 74 65 70 2c 20 53 51 4c  NC funcstep, SQL
5fe0: 49 54 45 46 55 4e 43 46 49 4e 41 4c 20 66 75 6e  ITEFUNCFINAL fun
5ff0: 63 66 69 6e 61 6c 2c 20 69 6e 74 20 6e 65 65 64  cfinal, int need
6000: 43 6f 6c 6c 53 65 71 29 0d 0a 7b 0d 0a 20 20 69  CollSeq)..{..  i
6010: 6e 74 20 6e 3b 0d 0a 0d 0a 20 20 69 66 20 28 65  nt n;....  if (e
6020: 54 65 78 74 52 65 70 20 3d 3d 20 53 51 4c 49 54  TextRep == SQLIT
6030: 45 5f 55 54 46 31 36 29 0d 0a 20 20 20 20 65 54  E_UTF16)..    eT
6040: 65 78 74 52 65 70 20 3d 20 53 51 4c 49 54 45 5f  extRep = SQLITE_
6050: 55 54 46 31 36 4e 41 54 49 56 45 3b 0d 0a 0d 0a  UTF16NATIVE;....
6060: 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63 72    n = sqlite3_cr
6070: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 70 73  eate_function(ps
6080: 71 6c 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d  ql, zFunctionNam
6090: 65 2c 20 6e 41 72 67 2c 20 65 54 65 78 74 52 65  e, nArg, eTextRe
60a0: 70 2c 20 70 76 55 73 65 72 2c 20 66 75 6e 63 2c  p, pvUser, func,
60b0: 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66   funcstep, funcf
60c0: 69 6e 61 6c 29 3b 0d 0a 20 20 69 66 20 28 6e 20  inal);..  if (n 
60d0: 3d 3d 20 53 51 4c 49 54 45 5f 4f 4b 29 0d 0a 20  == SQLITE_OK).. 
60e0: 20 7b 0d 0a 20 20 20 20 69 66 20 28 6e 65 65 64   {..    if (need
60f0: 43 6f 6c 6c 53 65 71 29 0d 0a 20 20 20 20 7b 0d  CollSeq)..    {.
6100: 0a 20 20 20 20 20 20 46 75 6e 63 44 65 66 20 2a  .      FuncDef *
6110: 70 46 75 6e 63 20 3d 20 73 71 6c 69 74 65 33 46  pFunc = sqlite3F
6120: 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  indFunction(..  
6130: 20 20 20 20 20 20 20 20 70 73 71 6c 2c 20 7a 46          psql, zF
6140: 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 0d 0a 23 69  unctionName,..#i
6150: 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
6160: 5f 4e 55 4d 42 45 52 20 3c 20 33 30 31 32 30 30  _NUMBER < 301200
6170: 30 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72  0..          str
6180: 6c 65 6e 28 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d  len(zFunctionNam
6190: 65 29 2c 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  e),..#endif..   
61a0: 20 20 20 20 20 20 20 6e 41 72 67 2c 20 65 54 65         nArg, eTe
61b0: 78 74 52 65 70 2c 20 30 29 3b 0d 0a 20 20 20 20  xtRep, 0);..    
61c0: 20 20 69 66 28 20 70 46 75 6e 63 20 29 0d 0a 20    if( pFunc ).. 
61d0: 20 20 20 20 20 7b 0d 0a 23 69 66 20 53 51 4c 49       {..#if SQLI
61e0: 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45  TE_VERSION_NUMBE
61f0: 52 20 3e 3d 20 33 30 30 38 30 30 31 0d 0a 20 20  R >= 3008001..  
6200: 20 20 20 20 20 20 70 46 75 6e 63 2d 3e 66 75 6e        pFunc->fun
6210: 63 46 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45  cFlags |= SQLITE
6220: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 3b 0d  _FUNC_NEEDCOLL;.
6230: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
6240: 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 7c 3d 20  pFunc->flags |= 
6250: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
6260: 43 4f 4c 4c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  COLL;..#endif.. 
6270: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
6280: 20 7d 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 6e   }....  return n
6290: 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  ;..}....SQLITE_A
62a0: 50 49 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73  PI void WINAPI s
62b0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75  qlite3_value_dou
62c0: 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  ble_interop(sqli
62d0: 74 65 33 5f 76 61 6c 75 65 20 2a 70 76 61 6c 2c  te3_value *pval,
62e0: 20 64 6f 75 62 6c 65 20 2a 76 61 6c 29 0d 0a 7b   double *val)..{
62f0: 0d 0a 20 20 69 66 20 28 21 76 61 6c 29 20 72 65  ..  if (!val) re
6300: 74 75 72 6e 3b 0d 0a 20 20 2a 76 61 6c 20 3d 20  turn;..  *val = 
6310: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f  sqlite3_value_do
6320: 75 62 6c 65 28 70 76 61 6c 29 3b 0d 0a 7d 0d 0a  uble(pval);..}..
6330: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69  ..SQLITE_API voi
6340: 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  d WINAPI sqlite3
6350: 5f 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e 74  _value_int64_int
6360: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 76 61 6c  erop(sqlite3_val
6370: 75 65 20 2a 70 76 61 6c 2c 20 73 71 6c 69 74 65  ue *pval, sqlite
6380: 5f 69 6e 74 36 34 20 2a 76 61 6c 29 0d 0a 7b 0d  _int64 *val)..{.
6390: 0a 20 20 69 66 20 28 21 76 61 6c 29 20 72 65 74  .  if (!val) ret
63a0: 75 72 6e 3b 0d 0a 20 20 2a 76 61 6c 20 3d 20 73  urn;..  *val = s
63b0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74  qlite3_value_int
63c0: 36 34 28 70 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a  64(pval);..}....
63d0: 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74  SQLITE_API const
63e0: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
63f0: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
6400: 76 61 6c 75 65 5f 74 65 78 74 5f 69 6e 74 65 72  value_text_inter
6410: 6f 70 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  op(sqlite3_value
6420: 20 2a 76 61 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e   *val, int *plen
6430: 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 75 6e  )..{..  const un
6440: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70 76 61  signed char *pva
6450: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  l = sqlite3_valu
6460: 65 5f 74 65 78 74 28 76 61 6c 29 3b 0d 0a 20 20  e_text(val);..  
6470: 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20  if (plen) *plen 
6480: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
6490: 62 79 74 65 73 28 76 61 6c 29 3b 0d 0a 20 20 72  bytes(val);..  r
64a0: 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a  eturn pval;..}..
64b0: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e  ..SQLITE_API con
64c0: 73 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49  st void * WINAPI
64d0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
64e0: 65 78 74 31 36 5f 69 6e 74 65 72 6f 70 28 73 71  ext16_interop(sq
64f0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 76 61 6c  lite3_value *val
6500: 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d  , int *plen)..{.
6510: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  .  const void *p
6520: 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61  val = sqlite3_va
6530: 6c 75 65 5f 74 65 78 74 31 36 28 76 61 6c 29 3b  lue_text16(val);
6540: 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70  ..  if (plen) *p
6550: 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 5f 76 61  len = sqlite3_va
6560: 6c 75 65 5f 62 79 74 65 73 31 36 28 76 61 6c 29  lue_bytes16(val)
6570: 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c  ;..  return pval
6580: 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  ;..}....SQLITE_A
6590: 50 49 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73  PI void WINAPI s
65a0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f  qlite3_result_do
65b0: 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c  uble_interop(sql
65c0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 63  ite3_context *pc
65d0: 74 78 2c 20 64 6f 75 62 6c 65 20 2a 76 61 6c 29  tx, double *val)
65e0: 0d 0a 7b 0d 0a 20 20 69 66 20 28 21 76 61 6c 29  ..{..  if (!val)
65f0: 20 72 65 74 75 72 6e 3b 0d 0a 20 20 73 71 6c 69   return;..  sqli
6600: 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c  te3_result_doubl
6610: 65 28 70 63 74 78 2c 20 2a 76 61 6c 29 3b 0d 0a  e(pctx, *val);..
6620: 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20  }....SQLITE_API 
6630: 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69  void WINAPI sqli
6640: 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34  te3_result_int64
6650: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
6660: 5f 63 6f 6e 74 65 78 74 20 2a 70 63 74 78 2c 20  _context *pctx, 
6670: 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a 76 61  sqlite_int64 *va
6680: 6c 29 0d 0a 7b 0d 0a 20 20 69 66 20 28 21 76 61  l)..{..  if (!va
6690: 6c 29 20 72 65 74 75 72 6e 3b 0d 0a 20 20 73 71  l) return;..  sq
66a0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
66b0: 36 34 28 70 63 74 78 2c 20 2a 76 61 6c 29 3b 0d  64(pctx, *val);.
66c0: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
66d0: 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69   int WINAPI sqli
66e0: 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c  te3_context_coll
66f0: 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70 28  compare_interop(
6700: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
6710: 2a 63 74 78 2c 20 63 6f 6e 73 74 20 76 6f 69 64  *ctx, const void
6720: 20 2a 70 31 2c 20 69 6e 74 20 70 31 6c 65 6e 2c   *p1, int p1len,
6730: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 32 2c   const void *p2,
6740: 20 69 6e 74 20 70 32 6c 65 6e 29 0d 0a 7b 0d 0a   int p2len)..{..
6750: 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49  #if SQLITE_VERSI
6760: 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30  ON_NUMBER >= 300
6770: 38 30 30 37 0d 0a 20 20 43 6f 6c 6c 53 65 71 20  8007..  CollSeq 
6780: 2a 70 43 6f 6c 6c 20 3d 20 63 74 78 20 3f 20 73  *pColl = ctx ? s
6790: 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c  qlite3GetFuncCol
67a0: 6c 53 65 71 28 63 74 78 29 20 3a 20 30 3b 0d 0a  lSeq(ctx) : 0;..
67b0: 23 65 6c 73 65 0d 0a 20 20 43 6f 6c 6c 53 65 71  #else..  CollSeq
67c0: 20 2a 70 43 6f 6c 6c 20 3d 20 63 74 78 20 3f 20   *pColl = ctx ? 
67d0: 63 74 78 2d 3e 70 43 6f 6c 6c 20 3a 20 30 3b 0d  ctx->pColl : 0;.
67e0: 0a 23 65 6e 64 69 66 0d 0a 20 20 69 66 20 28 21  .#endif..  if (!
67f0: 63 74 78 20 7c 7c 20 21 63 74 78 2d 3e 70 46 75  ctx || !ctx->pFu
6800: 6e 63 29 20 72 65 74 75 72 6e 20 34 3b 20 2f 2a  nc) return 4; /*
6810: 20 45 52 52 4f 52 20 2a 2f 0d 0a 20 20 69 66 20   ERROR */..  if 
6820: 28 21 70 43 6f 6c 6c 20 7c 7c 20 21 70 43 6f 6c  (!pColl || !pCol
6830: 6c 2d 3e 78 43 6d 70 29 20 72 65 74 75 72 6e 20  l->xCmp) return 
6840: 33 3b 20 2f 2a 20 45 52 52 4f 52 20 2a 2f 0d 0a  3; /* ERROR */..
6850: 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49  #if SQLITE_VERSI
6860: 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30  ON_NUMBER >= 300
6870: 38 30 30 31 0d 0a 20 20 69 66 20 28 28 63 74 78  8001..  if ((ctx
6880: 2d 3e 70 46 75 6e 63 2d 3e 66 75 6e 63 46 6c 61  ->pFunc->funcFla
6890: 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43  gs & SQLITE_FUNC
68a0: 5f 4e 45 45 44 43 4f 4c 4c 29 20 3d 3d 20 30 29  _NEEDCOLL) == 0)
68b0: 20 72 65 74 75 72 6e 20 32 3b 20 2f 2a 20 45 52   return 2; /* ER
68c0: 52 4f 52 20 2a 2f 0d 0a 23 65 6c 73 65 0d 0a 20  ROR */..#else.. 
68d0: 20 69 66 20 28 28 63 74 78 2d 3e 70 46 75 6e 63   if ((ctx->pFunc
68e0: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
68f0: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 20  _FUNC_NEEDCOLL) 
6900: 3d 3d 20 30 29 20 72 65 74 75 72 6e 20 32 3b 20  == 0) return 2; 
6910: 2f 2a 20 45 52 52 4f 52 20 2a 2f 0d 0a 23 65 6e  /* ERROR */..#en
6920: 64 69 66 0d 0a 20 20 72 65 74 75 72 6e 20 70 43  dif..  return pC
6930: 6f 6c 6c 2d 3e 78 43 6d 70 28 70 43 6f 6c 6c 2d  oll->xCmp(pColl-
6940: 3e 70 55 73 65 72 2c 20 70 31 6c 65 6e 2c 20 70  >pUser, p1len, p
6950: 31 2c 20 70 32 6c 65 6e 2c 20 70 32 29 3b 0d 0a  1, p2len, p2);..
6960: 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20  }....SQLITE_API 
6970: 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 57 49 4e  const char * WIN
6980: 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  API sqlite3_cont
6990: 65 78 74 5f 63 6f 6c 6c 73 65 71 5f 69 6e 74 65  ext_collseq_inte
69a0: 72 6f 70 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  rop(sqlite3_cont
69b0: 65 78 74 20 2a 63 74 78 2c 20 69 6e 74 20 2a 70  ext *ctx, int *p
69c0: 74 79 70 65 2c 20 69 6e 74 20 2a 65 6e 63 2c 20  type, int *enc, 
69d0: 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 23  int *plen)..{..#
69e0: 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  if SQLITE_VERSIO
69f0: 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 38  N_NUMBER >= 3008
6a00: 30 30 37 0d 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  007..  CollSeq *
6a10: 70 43 6f 6c 6c 20 3d 20 63 74 78 20 3f 20 73 71  pColl = ctx ? sq
6a20: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
6a30: 53 65 71 28 63 74 78 29 20 3a 20 30 3b 0d 0a 23  Seq(ctx) : 0;..#
6a40: 65 6c 73 65 0d 0a 20 20 43 6f 6c 6c 53 65 71 20  else..  CollSeq 
6a50: 2a 70 43 6f 6c 6c 20 3d 20 63 74 78 20 3f 20 63  *pColl = ctx ? c
6a60: 74 78 2d 3e 70 43 6f 6c 6c 20 3a 20 30 3b 0d 0a  tx->pColl : 0;..
6a70: 23 65 6e 64 69 66 0d 0a 20 20 69 66 20 28 70 74  #endif..  if (pt
6a80: 79 70 65 29 20 2a 70 74 79 70 65 20 3d 20 30 3b  ype) *ptype = 0;
6a90: 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70  ..  if (plen) *p
6aa0: 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 69 66 20 28  len = 0;..  if (
6ab0: 65 6e 63 29 20 2a 65 6e 63 20 3d 20 30 3b 0d 0a  enc) *enc = 0;..
6ac0: 0d 0a 20 20 69 66 20 28 21 63 74 78 20 7c 7c 20  ..  if (!ctx || 
6ad0: 21 63 74 78 2d 3e 70 46 75 6e 63 29 20 72 65 74  !ctx->pFunc) ret
6ae0: 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 23 69 66 20 53  urn NULL;..#if S
6af0: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
6b00: 4d 42 45 52 20 3e 3d 20 33 30 30 38 30 30 31 0d  MBER >= 3008001.
6b10: 0a 20 20 69 66 20 28 28 63 74 78 2d 3e 70 46 75  .  if ((ctx->pFu
6b20: 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26 20  nc->funcFlags & 
6b30: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
6b40: 43 4f 4c 4c 29 20 3d 3d 20 30 29 20 72 65 74 75  COLL) == 0) retu
6b50: 72 6e 20 4e 55 4c 4c 3b 0d 0a 23 65 6c 73 65 0d  rn NULL;..#else.
6b60: 0a 20 20 69 66 20 28 28 63 74 78 2d 3e 70 46 75  .  if ((ctx->pFu
6b70: 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  nc->flags & SQLI
6b80: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
6b90: 29 20 3d 3d 20 30 29 20 72 65 74 75 72 6e 20 4e  ) == 0) return N
6ba0: 55 4c 4c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  ULL;..#endif....
6bb0: 20 20 69 66 20 28 70 43 6f 6c 6c 29 0d 0a 20 20    if (pColl)..  
6bc0: 7b 0d 0a 20 20 20 20 69 66 20 28 65 6e 63 29 20  {..    if (enc) 
6bd0: 2a 65 6e 63 20 3d 20 70 43 6f 6c 6c 2d 3e 65 6e  *enc = pColl->en
6be0: 63 3b 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 56  c;..#if SQLITE_V
6bf0: 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3c 20  ERSION_NUMBER < 
6c00: 33 30 30 37 30 31 30 0d 0a 20 20 20 20 69 66 20  3007010..    if 
6c10: 28 70 74 79 70 65 29 20 2a 70 74 79 70 65 20 3d  (ptype) *ptype =
6c20: 20 70 43 6f 6c 6c 2d 3e 74 79 70 65 3b 0d 0a 23   pColl->type;..#
6c30: 65 6e 64 69 66 0d 0a 20 20 20 20 69 66 20 28 70  endif..    if (p
6c40: 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 70 43 6f  len) *plen = pCo
6c50: 6c 6c 2d 3e 7a 4e 61 6d 65 20 3f 20 73 74 72 6c  ll->zName ? strl
6c60: 65 6e 28 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 29  en(pColl->zName)
6c70: 20 3a 20 30 3b 0d 0a 0d 0a 20 20 20 20 72 65 74   : 0;....    ret
6c80: 75 72 6e 20 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65  urn pColl->zName
6c90: 3b 0d 0a 20 20 7d 0d 0a 20 20 72 65 74 75 72 6e  ;..  }..  return
6ca0: 20 4e 55 4c 4c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c   NULL;..}....SQL
6cb0: 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 63 68  ITE_API const ch
6cc0: 61 72 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69  ar * WINAPI sqli
6cd0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62  te3_column_datab
6ce0: 61 73 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70  ase_name_interop
6cf0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73  (sqlite3_stmt *s
6d00: 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69  tmt, int iCol, i
6d10: 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20  nt *plen)..{..  
6d20: 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 76 61 6c  const char *pval
6d30: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
6d40: 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 28  n_database_name(
6d50: 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20  stmt, iCol);..  
6d60: 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20  if (plen) *plen 
6d70: 3d 20 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e 28  = pval ? strlen(
6d80: 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65  pval) : 0;..  re
6d90: 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d  turn pval;..}...
6da0: 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73  .SQLITE_API cons
6db0: 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20  t void * WINAPI 
6dc0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
6dd0: 61 74 61 62 61 73 65 5f 6e 61 6d 65 31 36 5f 69  atabase_name16_i
6de0: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73  nterop(sqlite3_s
6df0: 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69  tmt *stmt, int i
6e00: 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d  Col, int *plen).
6e10: 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  .{..  const void
6e20: 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33   *pval = sqlite3
6e30: 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65  _column_database
6e40: 5f 6e 61 6d 65 31 36 28 73 74 6d 74 2c 20 69 43  _name16(stmt, iC
6e50: 6f 6c 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e  ol);..  if (plen
6e60: 29 20 2a 70 6c 65 6e 20 3d 20 70 76 61 6c 20 3f  ) *plen = pval ?
6e70: 20 77 63 73 6c 65 6e 28 28 77 63 68 61 72 5f 74   wcslen((wchar_t
6e80: 20 2a 29 70 76 61 6c 29 20 2a 20 73 69 7a 65 6f   *)pval) * sizeo
6e90: 66 28 77 63 68 61 72 5f 74 29 20 3a 20 30 3b 0d  f(wchar_t) : 0;.
6ea0: 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d  .  return pval;.
6eb0: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
6ec0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 57 49   const char * WI
6ed0: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c  NAPI sqlite3_col
6ee0: 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f 69  umn_table_name_i
6ef0: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73  nterop(sqlite3_s
6f00: 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69  tmt *stmt, int i
6f10: 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d  Col, int *plen).
6f20: 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  .{..  const char
6f30: 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33   *pval = sqlite3
6f40: 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61  _column_table_na
6f50: 6d 65 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d  me(stmt, iCol);.
6f60: 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c  .  if (plen) *pl
6f70: 65 6e 20 3d 20 70 76 61 6c 20 3f 20 73 74 72 6c  en = pval ? strl
6f80: 65 6e 28 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20  en(pval) : 0;.. 
6f90: 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d   return pval;..}
6fa0: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63  ....SQLITE_API c
6fb0: 6f 6e 73 74 20 76 6f 69 64 20 2a 20 57 49 4e 41  onst void * WINA
6fc0: 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  PI sqlite3_colum
6fd0: 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31 36 5f 69  n_table_name16_i
6fe0: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73  nterop(sqlite3_s
6ff0: 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69  tmt *stmt, int i
7000: 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d  Col, int *plen).
7010: 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  .{..  const void
7020: 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33   *pval = sqlite3
7030: 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61  _column_table_na
7040: 6d 65 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29  me16(stmt, iCol)
7050: 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a  ;..  if (plen) *
7060: 70 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20 77 63  plen = pval ? wc
7070: 73 6c 65 6e 28 28 77 63 68 61 72 5f 74 20 2a 29  slen((wchar_t *)
7080: 70 76 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77  pval) * sizeof(w
7090: 63 68 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 20 20  char_t) : 0;..  
70a0: 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d  return pval;..}.
70b0: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f  ...SQLITE_API co
70c0: 6e 73 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50  nst char * WINAP
70d0: 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  I sqlite3_column
70e0: 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f 69 6e 74  _origin_name_int
70f0: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
7100: 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f  t *stmt, int iCo
7110: 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b  l, int *plen)..{
7120: 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ..  const char *
7130: 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  pval = sqlite3_c
7140: 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d  olumn_origin_nam
7150: 65 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a  e(stmt, iCol);..
7160: 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65    if (plen) *ple
7170: 6e 20 3d 20 70 76 61 6c 20 3f 20 73 74 72 6c 65  n = pval ? strle
7180: 6e 28 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20  n(pval) : 0;..  
7190: 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d  return pval;..}.
71a0: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f  ...SQLITE_API co
71b0: 6e 73 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50  nst void * WINAP
71c0: 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  I sqlite3_column
71d0: 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 31 36 5f 69  _origin_name16_i
71e0: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73  nterop(sqlite3_s
71f0: 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69  tmt *stmt, int i
7200: 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d  Col, int *plen).
7210: 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  .{..  const void
7220: 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33   *pval = sqlite3
7230: 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e  _column_origin_n
7240: 61 6d 65 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c  ame16(stmt, iCol
7250: 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20  );..  if (plen) 
7260: 2a 70 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20 77  *plen = pval ? w
7270: 63 73 6c 65 6e 28 28 77 63 68 61 72 5f 74 20 2a  cslen((wchar_t *
7280: 29 70 76 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28  )pval) * sizeof(
7290: 77 63 68 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 20  wchar_t) : 0;.. 
72a0: 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d   return pval;..}
72b0: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69  ....SQLITE_API i
72c0: 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  nt WINAPI sqlite
72d0: 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d  3_table_column_m
72e0: 65 74 61 64 61 74 61 5f 69 6e 74 65 72 6f 70 28  etadata_interop(
72f0: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e  sqlite3 *db, con
7300: 73 74 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d 65  st char *zDbName
7310: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54  , const char *zT
7320: 61 62 6c 65 4e 61 6d 65 2c 20 63 6f 6e 73 74 20  ableName, const 
7330: 63 68 61 72 20 2a 7a 43 6f 6c 75 6d 6e 4e 61 6d  char *zColumnNam
7340: 65 2c 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 2a  e, char const **
7350: 70 7a 44 61 74 61 54 79 70 65 2c 20 63 68 61 72  pzDataType, char
7360: 20 63 6f 6e 73 74 20 2a 2a 70 7a 43 6f 6c 6c 53   const **pzCollS
7370: 65 71 2c 20 69 6e 74 20 2a 70 4e 6f 74 4e 75 6c  eq, int *pNotNul
7380: 6c 2c 20 69 6e 74 20 2a 70 50 72 69 6d 61 72 79  l, int *pPrimary
7390: 4b 65 79 2c 20 69 6e 74 20 2a 70 41 75 74 6f 69  Key, int *pAutoi
73a0: 6e 63 2c 20 69 6e 74 20 2a 70 64 74 4c 65 6e 2c  nc, int *pdtLen,
73b0: 20 69 6e 74 20 2a 70 63 73 4c 65 6e 29 0d 0a 7b   int *pcsLen)..{
73c0: 0d 0a 20 20 69 6e 74 20 6e 3b 0d 0a 0d 0a 20 20  ..  int n;....  
73d0: 6e 20 3d 20 73 71 6c 69 74 65 33 5f 74 61 62 6c  n = sqlite3_tabl
73e0: 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74  e_column_metadat
73f0: 61 28 64 62 2c 20 7a 44 62 4e 61 6d 65 2c 20 7a  a(db, zDbName, z
7400: 54 61 62 6c 65 4e 61 6d 65 2c 20 7a 43 6f 6c 75  TableName, zColu
7410: 6d 6e 4e 61 6d 65 2c 20 70 7a 44 61 74 61 54 79  mnName, pzDataTy
7420: 70 65 2c 20 70 7a 43 6f 6c 6c 53 65 71 2c 20 70  pe, pzCollSeq, p
7430: 4e 6f 74 4e 75 6c 6c 2c 20 70 50 72 69 6d 61 72  NotNull, pPrimar
7440: 79 4b 65 79 2c 20 70 41 75 74 6f 69 6e 63 29 3b  yKey, pAutoinc);
7450: 0d 0a 0d 0a 20 20 69 66 20 28 70 64 74 4c 65 6e  ....  if (pdtLen
7460: 29 20 2a 70 64 74 4c 65 6e 20 3d 20 28 70 7a 44  ) *pdtLen = (pzD
7470: 61 74 61 54 79 70 65 20 26 26 20 2a 70 7a 44 61  ataType && *pzDa
7480: 74 61 54 79 70 65 29 20 3f 20 73 74 72 6c 65 6e  taType) ? strlen
7490: 28 2a 70 7a 44 61 74 61 54 79 70 65 29 20 3a 20  (*pzDataType) : 
74a0: 30 3b 0d 0a 20 20 69 66 20 28 70 63 73 4c 65 6e  0;..  if (pcsLen
74b0: 29 20 2a 70 63 73 4c 65 6e 20 3d 20 28 70 7a 43  ) *pcsLen = (pzC
74c0: 6f 6c 6c 53 65 71 20 26 26 20 2a 70 7a 43 6f 6c  ollSeq && *pzCol
74d0: 6c 53 65 71 29 20 3f 20 73 74 72 6c 65 6e 28 2a  lSeq) ? strlen(*
74e0: 70 7a 43 6f 6c 6c 53 65 71 29 20 3a 20 30 3b 0d  pzCollSeq) : 0;.
74f0: 0a 0d 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a  ...  return n;..
7500: 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20  }....SQLITE_API 
7510: 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74  int WINAPI sqlit
7520: 65 33 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f  e3_index_column_
7530: 69 6e 66 6f 5f 69 6e 74 65 72 6f 70 28 73 71 6c  info_interop(sql
7540: 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20  ite3 *db, const 
7550: 63 68 61 72 20 2a 7a 44 62 2c 20 63 6f 6e 73 74  char *zDb, const
7560: 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 4e 61 6d   char *zIndexNam
7570: 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  e, const char *z
7580: 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 69 6e 74 20  ColumnName, int 
7590: 2a 73 6f 72 74 4f 72 64 65 72 2c 20 69 6e 74 20  *sortOrder, int 
75a0: 2a 6f 6e 45 72 72 6f 72 2c 20 63 6f 6e 73 74 20  *onError, const 
75b0: 63 68 61 72 20 2a 2a 70 7a 43 6f 6c 6c 2c 20 69  char **pzColl, i
75c0: 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20  nt *plen)..{..  
75d0: 49 6e 64 65 78 20 2a 70 49 64 78 3b 0d 0a 20 20  Index *pIdx;..  
75e0: 54 61 62 6c 65 20 2a 70 54 61 62 3b 0d 0a 20 20  Table *pTab;..  
75f0: 69 6e 74 20 6e 3b 0d 0a 0d 0a 20 20 69 66 20 28  int n;....  if (
7600: 21 64 62 29 20 72 65 74 75 72 6e 20 53 51 4c 49  !db) return SQLI
7610: 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 73 71 6c  TE_ERROR;..  sql
7620: 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72  ite3_mutex_enter
7630: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20  (db->mutex);..  
7640: 73 71 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65  sqlite3BtreeEnte
7650: 72 41 6c 6c 28 64 62 29 3b 0d 0a 0d 0a 20 20 70  rAll(db);....  p
7660: 49 64 78 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  Idx = sqlite3Fin
7670: 64 49 6e 64 65 78 28 64 62 2c 20 7a 49 6e 64 65  dIndex(db, zInde
7680: 78 4e 61 6d 65 2c 20 7a 44 62 29 3b 0d 0a 0d 0a  xName, zDb);....
7690: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 65    sqlite3BtreeLe
76a0: 61 76 65 41 6c 6c 28 64 62 29 3b 0d 0a 20 20 73  aveAll(db);..  s
76b0: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
76c0: 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a  ve(db->mutex);..
76d0: 0d 0a 20 20 69 66 20 28 21 70 49 64 78 29 20 72  ..  if (!pIdx) r
76e0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
76f0: 4f 52 3b 0d 0a 0d 0a 20 20 70 54 61 62 20 3d 20  OR;....  pTab = 
7700: 70 49 64 78 2d 3e 70 54 61 62 6c 65 3b 0d 0a 20  pIdx->pTable;.. 
7710: 20 66 6f 72 20 28 6e 20 3d 20 30 3b 20 6e 20 3c   for (n = 0; n <
7720: 20 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 3b 20   pIdx->nColumn; 
7730: 6e 2b 2b 29 0d 0a 20 20 7b 0d 0a 20 20 20 20 69  n++)..  {..    i
7740: 6e 74 20 63 6e 75 6d 20 3d 20 70 49 64 78 2d 3e  nt cnum = pIdx->
7750: 61 69 43 6f 6c 75 6d 6e 5b 6e 5d 3b 0d 0a 20 20  aiColumn[n];..  
7760: 20 20 69 66 20 28 73 71 6c 69 74 65 33 53 74 72    if (sqlite3Str
7770: 49 43 6d 70 28 70 54 61 62 2d 3e 61 43 6f 6c 5b  ICmp(pTab->aCol[
7780: 63 6e 75 6d 5d 2e 7a 4e 61 6d 65 2c 20 7a 43 6f  cnum].zName, zCo
7790: 6c 75 6d 6e 4e 61 6d 65 29 20 3d 3d 20 30 29 0d  lumnName) == 0).
77a0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66  .    {..      if
77b0: 20 28 20 73 6f 72 74 4f 72 64 65 72 20 29 20 2a   ( sortOrder ) *
77c0: 73 6f 72 74 4f 72 64 65 72 20 3d 20 70 49 64 78  sortOrder = pIdx
77d0: 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b 6e 5d 3b  ->aSortOrder[n];
77e0: 0d 0a 20 20 20 20 20 20 69 66 20 28 20 70 7a 43  ..      if ( pzC
77f0: 6f 6c 6c 20 29 20 2a 70 7a 43 6f 6c 6c 20 3d 20  oll ) *pzColl = 
7800: 70 49 64 78 2d 3e 61 7a 43 6f 6c 6c 5b 6e 5d 3b  pIdx->azColl[n];
7810: 0d 0a 20 20 20 20 20 20 69 66 20 28 20 70 6c 65  ..      if ( ple
7820: 6e 20 29 20 2a 70 6c 65 6e 20 3d 20 73 74 72 6c  n ) *plen = strl
7830: 65 6e 28 2a 70 7a 43 6f 6c 6c 29 3b 0d 0a 20 20  en(*pzColl);..  
7840: 20 20 20 20 69 66 20 28 20 6f 6e 45 72 72 6f 72      if ( onError
7850: 20 29 20 2a 6f 6e 45 72 72 6f 72 20 3d 20 70 49   ) *onError = pI
7860: 64 78 2d 3e 6f 6e 45 72 72 6f 72 3b 0d 0a 0d 0a  dx->onError;....
7870: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
7880: 49 54 45 5f 4f 4b 3b 0d 0a 20 20 20 20 7d 0d 0a  ITE_OK;..    }..
7890: 20 20 7d 0d 0a 20 20 72 65 74 75 72 6e 20 53 51    }..  return SQ
78a0: 4c 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 7d 0d 0a  LITE_ERROR;..}..
78b0: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74  ..SQLITE_API int
78c0: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
78d0: 74 61 62 6c 65 5f 63 75 72 73 6f 72 5f 69 6e 74  table_cursor_int
78e0: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
78f0: 74 20 2a 70 73 74 6d 74 2c 20 69 6e 74 20 69 44  t *pstmt, int iD
7900: 62 2c 20 50 67 6e 6f 20 74 61 62 6c 65 52 6f 6f  b, Pgno tableRoo
7910: 74 50 61 67 65 29 0d 0a 7b 0d 0a 20 20 56 64 62  tPage)..{..  Vdb
7920: 65 20 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70  e *p = (Vdbe *)p
7930: 73 74 6d 74 3b 0d 0a 20 20 73 71 6c 69 74 65 33  stmt;..  sqlite3
7940: 20 2a 64 62 20 3d 20 28 70 20 3d 3d 20 4e 55 4c   *db = (p == NUL
7950: 4c 29 20 3f 20 4e 55 4c 4c 20 3a 20 70 2d 3e 64  L) ? NULL : p->d
7960: 62 3b 0d 0a 20 20 69 6e 74 20 6e 3b 0d 0a 20 20  b;..  int n;..  
7970: 69 6e 74 20 72 65 74 20 3d 20 2d 31 3b 20 2f 2a  int ret = -1; /*
7980: 20 4e 4f 54 20 46 4f 55 4e 44 20 2a 2f 0d 0a 0d   NOT FOUND */...
7990: 0a 20 20 69 66 20 28 21 70 20 7c 7c 20 21 64 62  .  if (!p || !db
79a0: 29 20 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 20  ) return ret;.. 
79b0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65   sqlite3_mutex_e
79c0: 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b  nter(db->mutex);
79d0: 0d 0a 20 20 66 6f 72 20 28 6e 20 3d 20 30 3b 20  ..  for (n = 0; 
79e0: 6e 20 3c 20 70 2d 3e 6e 43 75 72 73 6f 72 20 26  n < p->nCursor &
79f0: 26 20 70 2d 3e 61 70 43 73 72 5b 6e 5d 20 21 3d  & p->apCsr[n] !=
7a00: 20 4e 55 4c 4c 3b 20 6e 2b 2b 29 0d 0a 20 20 7b   NULL; n++)..  {
7a10: 0d 0a 20 20 20 20 69 66 20 28 70 2d 3e 61 70 43  ..    if (p->apC
7a20: 73 72 5b 6e 5d 2d 3e 69 73 54 61 62 6c 65 20 3d  sr[n]->isTable =
7a30: 3d 20 30 29 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a  = 0) continue;..
7a40: 20 20 20 20 69 66 20 28 70 2d 3e 61 70 43 73 72      if (p->apCsr
7a50: 5b 6e 5d 2d 3e 69 44 62 20 21 3d 20 69 44 62 29  [n]->iDb != iDb)
7a60: 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 23 69 66 20   continue;..#if 
7a70: 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e  SQLITE_VERSION_N
7a80: 55 4d 42 45 52 20 3e 3d 20 33 30 31 30 30 30 30  UMBER >= 3010000
7a90: 0d 0a 20 20 20 20 69 66 20 28 70 2d 3e 61 70 43  ..    if (p->apC
7aa0: 73 72 5b 6e 5d 2d 3e 75 63 2e 70 43 75 72 73 6f  sr[n]->uc.pCurso
7ab0: 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 3d 20 74  r->pgnoRoot == t
7ac0: 61 62 6c 65 52 6f 6f 74 50 61 67 65 29 0d 0a 23  ableRootPage)..#
7ad0: 65 6c 73 65 0d 0a 20 20 20 20 69 66 20 28 70 2d  else..    if (p-
7ae0: 3e 61 70 43 73 72 5b 6e 5d 2d 3e 70 43 75 72 73  >apCsr[n]->pCurs
7af0: 6f 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 3d 20  or->pgnoRoot == 
7b00: 74 61 62 6c 65 52 6f 6f 74 50 61 67 65 29 0d 0a  tableRootPage)..
7b10: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7b 0d 0a 20  #endif..    {.. 
7b20: 20 20 20 20 20 72 65 74 20 3d 20 6e 3b 0d 0a 20       ret = n;.. 
7b30: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
7b40: 20 7d 0d 0a 20 20 7d 0d 0a 20 20 73 71 6c 69 74   }..  }..  sqlit
7b50: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64  e3_mutex_leave(d
7b60: 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20 20  b->mutex);....  
7b70: 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a  return ret;..}..
7b80: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74  ..SQLITE_API int
7b90: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
7ba0: 63 75 72 73 6f 72 5f 72 6f 77 69 64 5f 69 6e 74  cursor_rowid_int
7bb0: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
7bc0: 74 20 2a 70 73 74 6d 74 2c 20 69 6e 74 20 63 75  t *pstmt, int cu
7bd0: 72 73 6f 72 2c 20 73 71 6c 69 74 65 5f 69 6e 74  rsor, sqlite_int
7be0: 36 34 20 2a 70 72 6f 77 69 64 29 0d 0a 7b 0d 0a  64 *prowid)..{..
7bf0: 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62    Vdbe *p = (Vdb
7c00: 65 20 2a 29 70 73 74 6d 74 3b 0d 0a 20 20 73 71  e *)pstmt;..  sq
7c10: 6c 69 74 65 33 20 2a 64 62 20 3d 20 28 70 20 3d  lite3 *db = (p =
7c20: 3d 20 4e 55 4c 4c 29 20 3f 20 4e 55 4c 4c 20 3a  = NULL) ? NULL :
7c30: 20 70 2d 3e 64 62 3b 0d 0a 20 20 56 64 62 65 43   p->db;..  VdbeC
7c40: 75 72 73 6f 72 20 2a 70 43 3b 0d 0a 23 69 66 20  ursor *pC;..#if 
7c50: 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e  SQLITE_VERSION_N
7c60: 55 4d 42 45 52 20 3e 3d 20 33 30 31 31 30 30 30  UMBER >= 3011000
7c70: 0d 0a 20 20 69 6e 74 20 70 32 20 3d 20 30 3b 0d  ..  int p2 = 0;.
7c80: 0a 23 65 6e 64 69 66 0d 0a 20 20 69 6e 74 20 72  .#endif..  int r
7c90: 65 74 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0d  et = SQLITE_OK;.
7ca0: 0a 0d 0a 20 20 69 66 20 28 21 70 20 7c 7c 20 21  ...  if (!p || !
7cb0: 64 62 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54  db) return SQLIT
7cc0: 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 73 71 6c 69  E_ERROR;..  sqli
7cd0: 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28  te3_mutex_enter(
7ce0: 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 77  db->mutex);..  w
7cf0: 68 69 6c 65 20 28 31 29 0d 0a 20 20 7b 0d 0a 20  hile (1)..  {.. 
7d00: 20 20 20 69 66 20 28 63 75 72 73 6f 72 20 3c 20     if (cursor < 
7d10: 30 20 7c 7c 20 63 75 72 73 6f 72 20 3e 3d 20 70  0 || cursor >= p
7d20: 2d 3e 6e 43 75 72 73 6f 72 29 0d 0a 20 20 20 20  ->nCursor)..    
7d30: 7b 0d 0a 20 20 20 20 20 20 72 65 74 20 3d 20 53  {..      ret = S
7d40: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20  QLITE_ERROR;..  
7d50: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
7d60: 7d 0d 0a 20 20 20 20 69 66 20 28 70 2d 3e 61 70  }..    if (p->ap
7d70: 43 73 72 5b 63 75 72 73 6f 72 5d 20 3d 3d 20 4e  Csr[cursor] == N
7d80: 55 4c 4c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ULL)..    {..   
7d90: 20 20 20 72 65 74 20 3d 20 53 51 4c 49 54 45 5f     ret = SQLITE_
7da0: 45 52 52 4f 52 3b 0d 0a 20 20 20 20 20 20 62 72  ERROR;..      br
7db0: 65 61 6b 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  eak;..    }.... 
7dc0: 20 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72     pC = p->apCsr
7dd0: 5b 63 75 72 73 6f 72 5d 3b 0d 0a 0d 0a 23 69 66  [cursor];....#if
7de0: 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f   SQLITE_VERSION_
7df0: 4e 55 4d 42 45 52 20 3e 3d 20 33 30 31 31 30 30  NUMBER >= 301100
7e00: 30 0d 0a 20 20 20 20 72 65 74 20 3d 20 73 71 6c  0..    ret = sql
7e10: 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
7e20: 76 65 74 6f 28 26 70 43 2c 20 26 70 32 29 3b 0d  veto(&pC, &p2);.
7e30: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 72 65 74 20  .#else..    ret 
7e40: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
7e50: 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0d 0a  sorMoveto(pC);..
7e60: 23 65 6e 64 69 66 0d 0a 20 20 20 20 69 66 28 72  #endif..    if(r
7e70: 65 74 29 0d 0a 20 20 20 20 20 20 62 72 65 61 6b  et)..      break
7e80: 3b 0d 0a 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f  ;....#if SQLITE_
7e90: 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3c  VERSION_NUMBER <
7ea0: 20 33 30 30 38 30 30 37 0d 0a 20 20 20 20 69 66   3008007..    if
7eb0: 28 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69  (pC->rowidIsVali
7ec0: 64 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  d)..    {..     
7ed0: 20 69 66 20 28 70 72 6f 77 69 64 29 20 2a 70 72   if (prowid) *pr
7ee0: 6f 77 69 64 20 3d 20 70 43 2d 3e 6c 61 73 74 52  owid = pC->lastR
7ef0: 6f 77 69 64 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20  owid;..    }..  
7f00: 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a    else..#endif..
7f10: 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49  #if SQLITE_VERSI
7f20: 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 31  ON_NUMBER >= 301
7f30: 30 30 30 30 0d 0a 20 20 20 20 69 66 28 70 43 2d  0000..    if(pC-
7f40: 3e 65 43 75 72 54 79 70 65 20 21 3d 20 43 55 52  >eCurType != CUR
7f50: 54 59 50 45 5f 42 54 52 45 45 29 0d 0a 23 65 6c  TYPE_BTREE)..#el
7f60: 73 65 0d 0a 20 20 20 20 69 66 28 70 43 2d 3e 70  se..    if(pC->p
7f70: 73 65 75 64 6f 54 61 62 6c 65 52 65 67 20 3e 20  seudoTableReg > 
7f80: 30 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  0)..#endif..    
7f90: 7b 0d 0a 20 20 20 20 20 20 72 65 74 20 3d 20 53  {..      ret = S
7fa0: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20  QLITE_ERROR;..  
7fb0: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
7fc0: 7d 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45  }..#if SQLITE_VE
7fd0: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20  RSION_NUMBER >= 
7fe0: 33 30 31 30 30 30 30 0d 0a 20 20 20 20 65 6c 73  3010000..    els
7ff0: 65 20 69 66 28 70 43 2d 3e 6e 75 6c 6c 52 6f 77  e if(pC->nullRow
8000: 20 7c 7c 20 70 43 2d 3e 75 63 2e 70 43 75 72 73   || pC->uc.pCurs
8010: 6f 72 3d 3d 30 29 0d 0a 23 65 6c 73 65 0d 0a 20  or==0)..#else.. 
8020: 20 20 20 65 6c 73 65 20 69 66 28 70 43 2d 3e 6e     else if(pC->n
8030: 75 6c 6c 52 6f 77 20 7c 7c 20 70 43 2d 3e 70 43  ullRow || pC->pC
8040: 75 72 73 6f 72 3d 3d 30 29 0d 0a 23 65 6e 64 69  ursor==0)..#endi
8050: 66 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  f..    {..      
8060: 72 65 74 20 3d 20 53 51 4c 49 54 45 5f 45 52 52  ret = SQLITE_ERR
8070: 4f 52 3b 0d 0a 20 20 20 20 20 20 62 72 65 61 6b  OR;..      break
8080: 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 65 6c  ;..    }..    el
8090: 73 65 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 53  se..    {..#if S
80a0: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
80b0: 4d 42 45 52 20 3e 3d 20 33 30 31 30 30 30 30 0d  MBER >= 3010000.
80c0: 0a 20 20 20 20 20 20 69 66 20 28 70 43 2d 3e 75  .      if (pC->u
80d0: 63 2e 70 43 75 72 73 6f 72 20 3d 3d 20 4e 55 4c  c.pCursor == NUL
80e0: 4c 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  L)..#else..     
80f0: 20 69 66 20 28 70 43 2d 3e 70 43 75 72 73 6f 72   if (pC->pCursor
8100: 20 3d 3d 20 4e 55 4c 4c 29 0d 0a 23 65 6e 64 69   == NULL)..#endi
8110: 66 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  f..      {..    
8120: 20 20 20 20 72 65 74 20 3d 20 53 51 4c 49 54 45      ret = SQLITE
8130: 5f 45 52 52 4f 52 3b 0d 0a 20 20 20 20 20 20 20  _ERROR;..       
8140: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d   break;..      }
8150: 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52  ..#if SQLITE_VER
8160: 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33  SION_NUMBER >= 3
8170: 30 31 34 30 30 30 0d 0a 20 20 20 20 20 20 73 71  014000..      sq
8180: 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65 72 43  lite3BtreeEnterC
8190: 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43 75  ursor(pC->uc.pCu
81a0: 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20 2a 70  rsor);..      *p
81b0: 72 6f 77 69 64 20 3d 20 73 71 6c 69 74 65 33 42  rowid = sqlite3B
81c0: 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70  treeIntegerKey(p
81d0: 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0d  C->uc.pCursor);.
81e0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74  .      sqlite3Bt
81f0: 72 65 65 4c 65 61 76 65 43 75 72 73 6f 72 28 70  reeLeaveCursor(p
8200: 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0d  C->uc.pCursor);.
8210: 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 56 45  .#elif SQLITE_VE
8220: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20  RSION_NUMBER >= 
8230: 33 30 31 30 30 30 30 0d 0a 20 20 20 20 20 20 73  3010000..      s
8240: 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
8250: 7a 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ze(pC->uc.pCurso
8260: 72 2c 20 70 72 6f 77 69 64 29 3b 0d 0a 23 65 6c  r, prowid);..#el
8270: 73 65 0d 0a 20 20 20 20 20 20 73 71 6c 69 74 65  se..      sqlite
8280: 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
8290: 2d 3e 70 43 75 72 73 6f 72 2c 20 70 72 6f 77 69  ->pCursor, prowi
82a0: 64 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  d);..#endif..   
82b0: 20 20 20 69 66 20 28 70 72 6f 77 69 64 29 20 2a     if (prowid) *
82c0: 70 72 6f 77 69 64 20 3d 20 2a 70 72 6f 77 69 64  prowid = *prowid
82d0: 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 62 72  ;..    }..    br
82e0: 65 61 6b 3b 0d 0a 20 20 7d 0d 0a 20 20 73 71 6c  eak;..  }..  sql
82f0: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
8300: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a  (db->mutex);....
8310: 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d    return ret;..}
8320: 0d 0a 0d 0a 2f 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: 2a 2a 2f 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e  **/....#if defin
8380: 65 64 28 53 51 4c 49 54 45 5f 43 4f 52 45 29 0d  ed(SQLITE_CORE).
8390: 0a 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 43  .#undef SQLITE_C
83a0: 4f 52 45 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23  ORE..#endif....#
83b0: 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52  if defined(INTER
83c0: 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45  OP_VIRTUAL_TABLE
83d0: 29 20 26 26 20 53 51 4c 49 54 45 5f 56 45 52 53  ) && SQLITE_VERS
83e0: 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30  ION_NUMBER >= 30
83f0: 30 34 30 30 31 0d 0a 23 69 6e 63 6c 75 64 65 20  04001..#include 
8400: 22 2e 2e 2f 65 78 74 2f 76 74 73 68 69 6d 2e 63  "../ext/vtshim.c
8410: 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66  "..#endif....#if
8420: 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50   defined(INTEROP
8430: 5f 46 54 53 35 5f 45 58 54 45 4e 53 49 4f 4e 29  _FTS5_EXTENSION)
8440: 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 65  ..#include "../e
8450: 78 74 2f 66 74 73 35 2e 63 22 0d 0a 23 65 6e 64  xt/fts5.c"..#end
8460: 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65  if....#if define
8470: 64 28 49 4e 54 45 52 4f 50 5f 4a 53 4f 4e 31 5f  d(INTEROP_JSON1_
8480: 45 58 54 45 4e 53 49 4f 4e 29 0d 0a 23 69 6e 63  EXTENSION)..#inc
8490: 6c 75 64 65 20 22 2e 2e 2f 65 78 74 2f 6a 73 6f  lude "../ext/jso
84a0: 6e 31 2e 63 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d  n1.c"..#endif...
84b0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54  .#if defined(INT
84c0: 45 52 4f 50 5f 50 45 52 43 45 4e 54 49 4c 45 5f  EROP_PERCENTILE_
84d0: 45 58 54 45 4e 53 49 4f 4e 29 0d 0a 23 69 6e 63  EXTENSION)..#inc
84e0: 6c 75 64 65 20 22 2e 2e 2f 65 78 74 2f 70 65 72  lude "../ext/per
84f0: 63 65 6e 74 69 6c 65 2e 63 22 0d 0a 23 65 6e 64  centile.c"..#end
8500: 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65  if....#if define
8510: 64 28 49 4e 54 45 52 4f 50 5f 52 45 47 45 58 50  d(INTEROP_REGEXP
8520: 5f 45 58 54 45 4e 53 49 4f 4e 29 0d 0a 23 69 6e  _EXTENSION)..#in
8530: 63 6c 75 64 65 20 22 2e 2e 2f 65 78 74 2f 72 65  clude "../ext/re
8540: 67 65 78 70 2e 63 22 0d 0a 23 65 6e 64 69 66 0d  gexp.c"..#endif.
8550: 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49  ...#if defined(I
8560: 4e 54 45 52 4f 50 5f 53 48 41 31 5f 45 58 54 45  NTEROP_SHA1_EXTE
8570: 4e 53 49 4f 4e 29 0d 0a 23 69 6e 63 6c 75 64 65  NSION)..#include
8580: 20 22 2e 2e 2f 65 78 74 2f 73 68 61 31 2e 63 22   "../ext/sha1.c"
8590: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20  ..#endif....#if 
85a0: 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f  defined(INTEROP_
85b0: 54 4f 54 59 50 45 5f 45 58 54 45 4e 53 49 4f 4e  TOTYPE_EXTENSION
85c0: 29 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f  )..#include "../
85d0: 65 78 74 2f 74 6f 74 79 70 65 2e 63 22 0d 0a 23  ext/totype.c"..#
85e0: 65 6e 64 69 66 0d 0a 0d 0a 2f 2a 2a 2a 2a 2a 2a  endif..../******
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 2a 2a 2f 0d 0a 0d 0a 2f 2a 0d 0a  *******/..../*..
8640: 2a 2a 20 54 68 65 20 49 4e 54 45 52 4f 50 5f 54  ** The INTEROP_T
8650: 45 53 54 5f 45 58 54 45 4e 53 49 4f 4e 20 62 6c  EST_EXTENSION bl
8660: 6f 63 6b 20 6d 75 73 74 20 62 65 20 61 74 20 74  ock must be at t
8670: 68 65 20 65 6e 64 20 6f 66 20 74 68 69 73 20 73  he end of this s
8680: 6f 75 72 63 65 20 66 69 6c 65 0d 0a 2a 2a 20 62  ource file..** b
8690: 65 63 61 75 73 65 20 69 74 20 69 6e 63 6c 75 64  ecause it includ
86a0: 65 73 20 74 68 65 20 22 73 71 6c 69 74 65 33 65  es the "sqlite3e
86b0: 78 74 2e 68 22 20 66 69 6c 65 2c 20 77 68 69 63  xt.h" file, whic
86c0: 68 20 64 65 66 69 6e 65 73 20 74 68 65 20 73 71  h defines the sq
86d0: 6c 69 74 65 33 0d 0a 2a 2a 20 70 75 62 6c 69 63  lite3..** public
86e0: 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 20 6e 61   API function na
86f0: 6d 65 73 20 74 6f 20 62 65 20 6d 61 63 72 6f 73  mes to be macros
8700: 20 61 6e 64 20 74 68 61 74 20 77 6f 75 6c 64 20   and that would 
8710: 63 61 75 73 65 20 74 68 65 20 63 6f 64 65 0d 0a  cause the code..
8720: 2a 2a 20 61 62 6f 76 65 20 74 68 69 73 20 70 6f  ** above this po
8730: 69 6e 74 20 74 6f 20 6d 61 6c 66 75 6e 63 74 69  int to malfuncti
8740: 6f 6e 2e 0d 0a 2a 2f 0d 0a 23 69 66 20 64 65 66  on...*/..#if def
8750: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 54 45 53  ined(INTEROP_TES
8760: 54 5f 45 58 54 45 4e 53 49 4f 4e 29 0d 0a 23 69  T_EXTENSION)..#i
8770: 66 20 21 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  f !SQLITE_OS_WIN
8780: 0d 0a 23 69 6e 63 6c 75 64 65 20 3c 75 6e 69 73  ..#include <unis
8790: 74 64 2e 68 3e 0d 0a 23 65 6e 64 69 66 0d 0a 0d  td.h>..#endif...
87a0: 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 63 6f  .#include "../co
87b0: 72 65 2f 73 71 6c 69 74 65 33 65 78 74 2e 68 22  re/sqlite3ext.h"
87c0: 0d 0a 53 51 4c 49 54 45 5f 45 58 54 45 4e 53 49  ..SQLITE_EXTENSI
87d0: 4f 4e 5f 49 4e 49 54 31 0d 0a 0d 0a 2f 2a 0d 0a  ON_INIT1..../*..
87e0: 2a 2a 20 54 68 65 20 69 6e 74 65 72 6f 70 45 72  ** The interopEr
87f0: 72 6f 72 28 29 20 53 51 4c 20 66 75 6e 63 74 69  ror() SQL functi
8800: 6f 6e 20 74 72 65 61 74 73 20 69 74 73 20 66 69  on treats its fi
8810: 72 73 74 20 61 72 67 75 6d 65 6e 74 20 61 73 20  rst argument as 
8820: 61 6e 20 69 6e 74 65 67 65 72 0d 0a 2a 2a 20 65  an integer..** e
8830: 72 72 6f 72 20 63 6f 64 65 20 74 6f 20 72 65 74  rror code to ret
8840: 75 72 6e 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49 54 45  urn...*/..SQLITE
8850: 5f 50 52 49 56 41 54 45 20 76 6f 69 64 20 69 6e  _PRIVATE void in
8860: 74 65 72 6f 70 45 72 72 6f 72 46 75 6e 63 28 0d  teropErrorFunc(.
8870: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
8880: 78 74 20 2a 63 6f 6e 74 65 78 74 2c 0d 0a 20 20  xt *context,..  
8890: 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 73 71 6c  int argc,..  sql
88a0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67  ite3_value **arg
88b0: 76 0d 0a 29 7b 0d 0a 20 20 69 6e 74 20 72 63 3b  v..){..  int rc;
88c0: 0d 0a 20 20 69 66 28 20 61 72 67 63 21 3d 31 20  ..  if( argc!=1 
88d0: 29 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  ){..    sqlite3_
88e0: 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e  result_error(con
88f0: 74 65 78 74 2c 20 22 6e 65 65 64 20 65 78 61 63  text, "need exac
8900: 74 6c 79 20 6f 6e 65 20 61 72 67 75 6d 65 6e 74  tly one argument
8910: 22 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 72 65 74  ", -1);..    ret
8920: 75 72 6e 3b 0d 0a 20 20 7d 0d 0a 20 20 72 63 20  urn;..  }..  rc 
8930: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
8940: 69 6e 74 28 61 72 67 76 5b 30 5d 29 3b 0d 0a 20  int(argv[0]);.. 
8950: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
8960: 65 72 72 6f 72 5f 63 6f 64 65 28 63 6f 6e 74 65  error_code(conte
8970: 78 74 2c 20 72 63 29 3b 0d 0a 7d 0d 0a 0d 0a 2f  xt, rc);..}..../
8980: 2a 0d 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 6f  *..** The intero
8990: 70 54 65 73 74 28 29 20 53 51 4c 20 66 75 6e 63  pTest() SQL func
89a0: 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 69 74 73  tion returns its
89b0: 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   first argument 
89c0: 6f 72 20 72 61 69 73 65 73 20 61 6e 0d 0a 2a 2a  or raises an..**
89d0: 20 65 72 72 6f 72 20 69 66 20 74 68 65 72 65 20   error if there 
89e0: 61 72 65 20 6e 6f 74 20 65 6e 6f 75 67 68 20 61  are not enough a
89f0: 72 67 75 6d 65 6e 74 73 2e 0d 0a 2a 2f 0d 0a 53  rguments...*/..S
8a00: 51 4c 49 54 45 5f 50 52 49 56 41 54 45 20 76 6f  QLITE_PRIVATE vo
8a10: 69 64 20 69 6e 74 65 72 6f 70 54 65 73 74 46 75  id interopTestFu
8a20: 6e 63 28 0d 0a 20 20 73 71 6c 69 74 65 33 5f 63  nc(..  sqlite3_c
8a30: 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c  ontext *context,
8a40: 0d 0a 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20  ..  int argc,.. 
8a50: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
8a60: 2a 61 72 67 76 0d 0a 29 7b 0d 0a 20 20 63 6f 6e  *argv..){..  con
8a70: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
8a80: 20 2a 7a 3b 0d 0a 20 20 69 66 28 20 61 72 67 63   *z;..  if( argc
8a90: 21 3d 31 20 29 7b 0d 0a 20 20 20 20 73 71 6c 69  !=1 ){..    sqli
8aa0: 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72  te3_result_error
8ab0: 28 63 6f 6e 74 65 78 74 2c 20 22 6e 65 65 64 20  (context, "need 
8ac0: 65 78 61 63 74 6c 79 20 6f 6e 65 20 61 72 67 75  exactly one argu
8ad0: 6d 65 6e 74 22 2c 20 2d 31 29 3b 0d 0a 20 20 20  ment", -1);..   
8ae0: 20 72 65 74 75 72 6e 3b 0d 0a 20 20 7d 0d 0a 20   return;..  }.. 
8af0: 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c   z = sqlite3_val
8b00: 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29  ue_text(argv[0])
8b10: 3b 0d 0a 20 20 69 66 28 20 7a 20 29 7b 0d 0a 20  ;..  if( z ){.. 
8b20: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
8b30: 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20  t_text(context, 
8b40: 28 63 68 61 72 2a 29 7a 2c 20 2d 31 2c 20 53 51  (char*)z, -1, SQ
8b50: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0d 0a 20  LITE_STATIC);.. 
8b60: 20 7d 65 6c 73 65 7b 0d 0a 20 20 20 20 73 71 6c   }else{..    sql
8b70: 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c  ite3_result_null
8b80: 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 7d 0d  (context);..  }.
8b90: 0a 7d 0d 0a 0d 0a 2f 2a 0d 0a 2a 2a 20 54 68 65  .}..../*..** The
8ba0: 20 69 6e 74 65 72 6f 70 53 6c 65 65 70 28 29 20   interopSleep() 
8bb0: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 77 61 69  SQL function wai
8bc0: 74 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ts the specified
8bd0: 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69   number of milli
8be0: 73 65 63 6f 6e 64 73 0d 0a 2a 2a 20 6f 72 20 72  seconds..** or r
8bf0: 61 69 73 65 73 20 61 6e 20 65 72 72 6f 72 20 69  aises an error i
8c00: 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 74 20  f there are not 
8c10: 65 6e 6f 75 67 68 20 61 72 67 75 6d 65 6e 74 73  enough arguments
8c20: 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49 54 45 5f 50 52  ...*/..SQLITE_PR
8c30: 49 56 41 54 45 20 76 6f 69 64 20 69 6e 74 65 72  IVATE void inter
8c40: 6f 70 53 6c 65 65 70 46 75 6e 63 28 0d 0a 20 20  opSleepFunc(..  
8c50: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
8c60: 2a 63 6f 6e 74 65 78 74 2c 0d 0a 20 20 69 6e 74  *context,..  int
8c70: 20 61 72 67 63 2c 0d 0a 20 20 73 71 6c 69 74 65   argc,..  sqlite
8c80: 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0d 0a  3_value **argv..
8c90: 29 7b 0d 0a 20 20 69 6e 74 20 6d 3b 0d 0a 20 20  ){..  int m;..  
8ca0: 69 66 28 20 61 72 67 63 21 3d 31 20 29 7b 0d 0a  if( argc!=1 ){..
8cb0: 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
8cc0: 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74  lt_error(context
8cd0: 2c 20 22 6e 65 65 64 20 65 78 61 63 74 6c 79 20  , "need exactly 
8ce0: 6f 6e 65 20 61 72 67 75 6d 65 6e 74 22 2c 20 2d  one argument", -
8cf0: 31 29 3b 0d 0a 20 20 20 20 72 65 74 75 72 6e 3b  1);..    return;
8d00: 0d 0a 20 20 7d 0d 0a 20 20 6d 20 3d 20 73 71 6c  ..  }..  m = sql
8d10: 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 61  ite3_value_int(a
8d20: 72 67 76 5b 30 5d 29 3b 0d 0a 23 69 66 20 53 51  rgv[0]);..#if SQ
8d30: 4c 49 54 45 5f 4f 53 5f 57 49 4e 0d 0a 23 69 66  LITE_OS_WIN..#if
8d40: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 43 45   SQLITE_OS_WINCE
8d50: 0d 0a 20 20 53 6c 65 65 70 28 6d 29 3b 0d 0a 20  ..  Sleep(m);.. 
8d60: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
8d70: 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 57 41 49  int(context, WAI
8d80: 54 5f 4f 42 4a 45 43 54 5f 30 29 3b 0d 0a 23 65  T_OBJECT_0);..#e
8d90: 6c 73 65 0d 0a 20 20 73 71 6c 69 74 65 33 5f 72  lse..  sqlite3_r
8da0: 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78  esult_int(contex
8db0: 74 2c 20 53 6c 65 65 70 45 78 28 6d 2c 20 54 52  t, SleepEx(m, TR
8dc0: 55 45 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 23  UE));..#endif..#
8dd0: 65 6c 73 65 0d 0a 20 20 69 66 28 20 6d 3e 30 20  else..  if( m>0 
8de0: 29 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  ){..    sqlite3_
8df0: 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e  result_int64(con
8e00: 74 65 78 74 2c 20 73 6c 65 65 70 28 28 75 6e 73  text, sleep((uns
8e10: 69 67 6e 65 64 29 6d 29 29 3b 0d 0a 20 20 7d 65  igned)m));..  }e
8e20: 6c 73 65 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65  lse{..    sqlite
8e30: 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f  3_result_null(co
8e40: 6e 74 65 78 74 29 3b 0d 0a 20 20 7d 0d 0a 23 65  ntext);..  }..#e
8e50: 6e 64 69 66 0d 0a 7d 0d 0a 0d 0a 2f 2a 20 53 51  ndif..}..../* SQ
8e60: 4c 69 74 65 20 69 6e 76 6f 6b 65 73 20 74 68 69  Lite invokes thi
8e70: 73 20 72 6f 75 74 69 6e 65 20 6f 6e 63 65 20 77  s routine once w
8e80: 68 65 6e 20 69 74 20 6c 6f 61 64 73 20 74 68 65  hen it loads the
8e90: 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 2a 2a 20   extension...** 
8ea0: 43 72 65 61 74 65 20 6e 65 77 20 66 75 6e 63 74  Create new funct
8eb0: 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6e 67 20  ions, collating 
8ec0: 73 65 71 75 65 6e 63 65 73 2c 20 61 6e 64 20 76  sequences, and v
8ed0: 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 2a 2a  irtual table..**
8ee0: 20 6d 6f 64 75 6c 65 73 20 68 65 72 65 2e 20 20   modules here.  
8ef0: 54 68 69 73 20 69 73 20 75 73 75 61 6c 6c 79 20  This is usually 
8f00: 74 68 65 20 6f 6e 6c 79 20 65 78 70 6f 72 74 65  the only exporte
8f10: 64 20 73 79 6d 62 6f 6c 20 69 6e 0d 0a 2a 2a 20  d symbol in..** 
8f20: 74 68 65 20 73 68 61 72 65 64 20 6c 69 62 72 61  the shared libra
8f30: 72 79 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49 54 45 5f  ry...*/..SQLITE_
8f40: 41 50 49 20 69 6e 74 20 69 6e 74 65 72 6f 70 5f  API int interop_
8f50: 74 65 73 74 5f 65 78 74 65 6e 73 69 6f 6e 5f 69  test_extension_i
8f60: 6e 69 74 28 0d 0a 20 20 73 71 6c 69 74 65 33 20  nit(..  sqlite3 
8f70: 2a 64 62 2c 0d 0a 20 20 63 68 61 72 20 2a 2a 70  *db,..  char **p
8f80: 7a 45 72 72 4d 73 67 2c 0d 0a 20 20 63 6f 6e 73  zErrMsg,..  cons
8f90: 74 20 73 71 6c 69 74 65 33 5f 61 70 69 5f 72 6f  t sqlite3_api_ro
8fa0: 75 74 69 6e 65 73 20 2a 70 41 70 69 0d 0a 29 7b  utines *pApi..){
8fb0: 0d 0a 20 20 69 6e 74 20 72 63 3b 0d 0a 20 20 53  ..  int rc;..  S
8fc0: 51 4c 49 54 45 5f 45 58 54 45 4e 53 49 4f 4e 5f  QLITE_EXTENSION_
8fd0: 49 4e 49 54 32 28 70 41 70 69 29 0d 0a 20 20 72  INIT2(pApi)..  r
8fe0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61  c = sqlite3_crea
8ff0: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20  te_function(db, 
9000: 22 69 6e 74 65 72 6f 70 45 72 72 6f 72 22 2c 20  "interopError", 
9010: 2d 31 2c 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20  -1, SQLITE_ANY, 
9020: 30 2c 0d 0a 20 20 20 20 20 20 69 6e 74 65 72 6f  0,..      intero
9030: 70 45 72 72 6f 72 46 75 6e 63 2c 20 30 2c 20 30  pErrorFunc, 0, 0
9040: 29 3b 0d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  );..  if( rc==SQ
9050: 4c 49 54 45 5f 4f 4b 20 29 7b 0d 0a 20 20 20 20  LITE_OK ){..    
9060: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65  rc = sqlite3_cre
9070: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c  ate_function(db,
9080: 20 22 69 6e 74 65 72 6f 70 54 65 73 74 22 2c 20   "interopTest", 
9090: 2d 31 2c 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20  -1, SQLITE_ANY, 
90a0: 30 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65  0,..        inte
90b0: 72 6f 70 54 65 73 74 46 75 6e 63 2c 20 30 2c 20  ropTestFunc, 0, 
90c0: 30 29 3b 0d 0a 20 20 7d 0d 0a 20 20 69 66 28 20  0);..  }..  if( 
90d0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
90e0: 0d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ..    rc = sqlit
90f0: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
9100: 6f 6e 28 64 62 2c 20 22 69 6e 74 65 72 6f 70 53  on(db, "interopS
9110: 6c 65 65 70 22 2c 20 31 2c 20 53 51 4c 49 54 45  leep", 1, SQLITE
9120: 5f 41 4e 59 2c 20 30 2c 0d 0a 20 20 20 20 20 20  _ANY, 0,..      
9130: 20 20 69 6e 74 65 72 6f 70 53 6c 65 65 70 46 75    interopSleepFu
9140: 6e 63 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 7d 0d  nc, 0, 0);..  }.
9150: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 7d  .  return rc;..}
9160: 0d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ..#endif /* SQLI
9170: 54 45 5f 4f 53 5f 57 49 4e 20 2a 2f 0d 0a        TE_OS_WIN */..