System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 6af0e2e77fea07dbc2ec6f033906b83dadd17d35:


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: 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f  f defined(INTERO
0290: 50 5f 49 4e 43 4c 55 44 45 5f 53 45 45 29 0d 0a  P_INCLUDE_SEE)..
02a0: 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 65 78 74  #include "../ext
02b0: 2f 73 65 65 2d 70 72 65 66 69 78 2e 74 78 74 22  /see-prefix.txt"
02c0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 6e 63  ..#endif....#inc
02d0: 6c 75 64 65 20 22 2e 2e 2f 63 6f 72 65 2f 73 71  lude "../core/sq
02e0: 6c 69 74 65 33 2e 63 22 0d 0a 0d 0a 23 69 66 20  lite3.c"....#if 
02f0: 21 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 0d 0a  !SQLITE_OS_WIN..
0300: 23 69 6e 63 6c 75 64 65 20 3c 77 63 68 61 72 2e  #include <wchar.
0310: 68 3e 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69  h>..#endif....#i
0320: 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f  f defined(INTERO
0330: 50 5f 49 4e 43 4c 55 44 45 5f 45 58 54 52 41 29  P_INCLUDE_EXTRA)
0340: 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 65  ..#include "../e
0350: 78 74 2f 65 78 74 72 61 2e 63 22 0d 0a 23 65 6e  xt/extra.c"..#en
0360: 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e  dif....#if defin
0370: 65 64 28 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55  ed(INTEROP_INCLU
0380: 44 45 5f 43 45 52 4f 44 29 0d 0a 23 69 6e 63 6c  DE_CEROD)..#incl
0390: 75 64 65 20 22 2e 2e 2f 65 78 74 2f 63 65 72 6f  ude "../ext/cero
03a0: 64 2e 63 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  d.c"..#endif....
03b0: 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45  #if defined(INTE
03c0: 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 53 45 45 29  ROP_INCLUDE_SEE)
03d0: 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 65  ..#include "../e
03e0: 78 74 2f 73 65 65 2e 63 22 0d 0a 23 65 6e 64 69  xt/see.c"..#endi
03f0: 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64  f....#if defined
0400: 28 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45  (INTEROP_INCLUDE
0410: 5f 5a 49 50 56 46 53 29 0d 0a 23 69 6e 63 6c 75  _ZIPVFS)..#inclu
0420: 64 65 20 22 2e 2e 2f 65 78 74 2f 7a 69 70 76 66  de "../ext/zipvf
0430: 73 2e 63 22 0d 0a 23 69 6e 63 6c 75 64 65 20 22  s.c"..#include "
0440: 2e 2e 2f 65 78 74 2f 61 6c 67 6f 72 69 74 68 6d  ../ext/algorithm
0450: 73 2e 63 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  s.c"..#endif....
0460: 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45  #if defined(INTE
0470: 52 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55  ROP_EXTENSION_FU
0480: 4e 43 54 49 4f 4e 53 29 0d 0a 23 75 6e 64 65 66  NCTIONS)..#undef
0490: 20 43 4f 4d 50 49 4c 45 5f 53 51 4c 49 54 45 5f   COMPILE_SQLITE_
04a0: 45 58 54 45 4e 53 49 4f 4e 53 5f 41 53 5f 4c 4f  EXTENSIONS_AS_LO
04b0: 41 44 41 42 4c 45 5f 4d 4f 44 55 4c 45 0d 0a 23  ADABLE_MODULE..#
04c0: 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 63 6f 6e 74  include "../cont
04d0: 72 69 62 2f 65 78 74 65 6e 73 69 6f 6e 2d 66 75  rib/extension-fu
04e0: 6e 63 74 69 6f 6e 73 2e 63 22 0d 0a 65 78 74 65  nctions.c"..exte
04f0: 72 6e 20 69 6e 74 20 52 65 67 69 73 74 65 72 45  rn int RegisterE
0500: 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e  xtensionFunction
0510: 73 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0d  s(sqlite3 *db);.
0520: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 53  .#endif....#if S
0530: 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 20 26 26 20  QLITE_OS_WIN && 
0540: 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f  defined(INTEROP_
0550: 43 4f 44 45 43 29 20 26 26 20 21 64 65 66 69 6e  CODEC) && !defin
0560: 65 64 28 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55  ed(INTEROP_INCLU
0570: 44 45 5f 53 45 45 29 0d 0a 23 69 66 64 65 66 20  DE_SEE)..#ifdef 
0580: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 5a 49  SQLITE_ENABLE_ZI
0590: 50 56 46 53 0d 0a 23 64 65 66 69 6e 65 20 49 4e  PVFS..#define IN
05a0: 54 45 52 4f 50 5f 43 4f 44 45 43 5f 47 45 54 5f  TEROP_CODEC_GET_
05b0: 50 41 47 45 52 28 61 2c 62 2c 63 29 20 73 71 6c  PAGER(a,b,c) sql
05c0: 69 74 65 33 50 61 67 65 72 47 65 74 28 61 2c 62  ite3PagerGet(a,b
05d0: 2c 63 2c 30 29 0d 0a 23 65 6c 69 66 20 53 51 4c  ,c,0)..#elif SQL
05e0: 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  ITE_VERSION_NUMB
05f0: 45 52 20 3e 3d 20 33 30 31 30 30 30 30 0d 0a 23  ER >= 3010000..#
0600: 64 65 66 69 6e 65 20 49 4e 54 45 52 4f 50 5f 43  define INTEROP_C
0610: 4f 44 45 43 5f 47 45 54 5f 50 41 47 45 52 28 61  ODEC_GET_PAGER(a
0620: 2c 62 2c 63 29 20 73 71 6c 69 74 65 33 50 61 67  ,b,c) sqlite3Pag
0630: 65 72 47 65 74 28 61 2c 62 2c 63 2c 30 29 0d 0a  erGet(a,b,c,0)..
0640: 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65 20 49  #else..#define I
0650: 4e 54 45 52 4f 50 5f 43 4f 44 45 43 5f 47 45 54  NTEROP_CODEC_GET
0660: 5f 50 41 47 45 52 28 61 2c 62 2c 63 29 20 73 71  _PAGER(a,b,c) sq
0670: 6c 69 74 65 33 50 61 67 65 72 47 65 74 28 61 2c  lite3PagerGet(a,
0680: 62 2c 63 29 0d 0a 23 65 6e 64 69 66 0d 0a 23 69  b,c)..#endif..#i
0690: 6e 63 6c 75 64 65 20 22 2e 2e 2f 77 69 6e 2f 63  nclude "../win/c
06a0: 72 79 70 74 2e 63 22 0d 0a 23 65 6e 64 69 66 0d  rypt.c"..#endif.
06b0: 0a 0d 0a 23 69 6e 63 6c 75 64 65 20 22 69 6e 74  ...#include "int
06c0: 65 72 6f 70 2e 68 22 0d 0a 0d 0a 23 64 65 66 69  erop.h"....#defi
06d0: 6e 65 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  ne INTEROP_DEBUG
06e0: 5f 4e 4f 4e 45 20 20 20 20 20 20 20 20 20 20 20  _NONE           
06f0: 28 30 78 30 30 30 30 29 0d 0a 23 64 65 66 69 6e  (0x0000)..#defin
0700: 65 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f  e INTEROP_DEBUG_
0710: 43 4c 4f 53 45 20 20 20 20 20 20 20 20 20 20 28  CLOSE          (
0720: 30 78 30 30 30 31 29 0d 0a 23 64 65 66 69 6e 65  0x0001)..#define
0730: 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 46   INTEROP_DEBUG_F
0740: 49 4e 41 4c 49 5a 45 20 20 20 20 20 20 20 28 30  INALIZE       (0
0750: 78 30 30 30 32 29 0d 0a 23 64 65 66 69 6e 65 20  x0002)..#define 
0760: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 42 41  INTEROP_DEBUG_BA
0770: 43 4b 55 50 5f 46 49 4e 49 53 48 20 20 28 30 78  CKUP_FINISH  (0x
0780: 30 30 30 34 29 0d 0a 23 64 65 66 69 6e 65 20 49  0004)..#define I
0790: 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 4f 50 45  NTEROP_DEBUG_OPE
07a0: 4e 20 20 20 20 20 20 20 20 20 20 20 28 30 78 30  N           (0x0
07b0: 30 30 38 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e  008)..#define IN
07c0: 54 45 52 4f 50 5f 44 45 42 55 47 5f 4f 50 45 4e  TEROP_DEBUG_OPEN
07d0: 31 36 20 20 20 20 20 20 20 20 20 28 30 78 30 30  16         (0x00
07e0: 31 30 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54  10)..#define INT
07f0: 45 52 4f 50 5f 44 45 42 55 47 5f 50 52 45 50 41  EROP_DEBUG_PREPA
0800: 52 45 20 20 20 20 20 20 20 20 28 30 78 30 30 32  RE        (0x002
0810: 30 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54 45  0)..#define INTE
0820: 52 4f 50 5f 44 45 42 55 47 5f 50 52 45 50 41 52  ROP_DEBUG_PREPAR
0830: 45 31 36 20 20 20 20 20 20 28 30 78 30 30 34 30  E16      (0x0040
0840: 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52  )..#define INTER
0850: 4f 50 5f 44 45 42 55 47 5f 52 45 53 45 54 20 20  OP_DEBUG_RESET  
0860: 20 20 20 20 20 20 20 20 28 30 78 30 30 38 30 29          (0x0080)
0870: 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52 4f  ..#define INTERO
0880: 50 5f 44 45 42 55 47 5f 43 48 41 4e 47 45 53 20  P_DEBUG_CHANGES 
0890: 20 20 20 20 20 20 20 28 30 78 30 31 30 30 29 0d         (0x0100).
08a0: 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52 4f 50  .#define INTEROP
08b0: 5f 44 45 42 55 47 5f 42 52 45 41 4b 20 20 20 20  _DEBUG_BREAK    
08c0: 20 20 20 20 20 20 28 30 78 30 32 30 30 29 0d 0a        (0x0200)..
08d0: 23 64 65 66 69 6e 65 20 49 4e 54 45 52 4f 50 5f  #define INTEROP_
08e0: 44 45 42 55 47 5f 42 4c 4f 42 5f 43 4c 4f 53 45  DEBUG_BLOB_CLOSE
08f0: 20 20 20 20 20 28 30 78 30 34 30 30 29 0d 0a 0d       (0x0400)...
0900: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 4d 53  .#if defined(_MS
0910: 43 5f 56 45 52 29 20 26 26 20 64 65 66 69 6e 65  C_VER) && define
0920: 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29  d(INTEROP_DEBUG)
0930: 20 26 26 20 5c 0d 0a 20 20 20 20 28 49 4e 54 45   && \..    (INTE
0940: 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45  ROP_DEBUG & INTE
0950: 52 4f 50 5f 44 45 42 55 47 5f 42 52 45 41 4b 29  ROP_DEBUG_BREAK)
0960: 0d 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ..#define sqlite
0970: 33 49 6e 74 65 72 6f 70 42 72 65 61 6b 28 61 29  3InteropBreak(a)
0980: 20 7b 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f   { sqlite3Intero
0990: 70 44 65 62 75 67 28 22 25 73 5c 6e 22 2c 20 28  pDebug("%s\n", (
09a0: 61 29 29 3b 20 5f 5f 64 65 62 75 67 62 72 65 61  a)); __debugbrea
09b0: 6b 28 29 3b 20 7d 0d 0a 23 65 6c 73 65 0d 0a 23  k(); }..#else..#
09c0: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 6e  define sqlite3In
09d0: 74 65 72 6f 70 42 72 65 61 6b 28 61 29 0d 0a 23  teropBreak(a)..#
09e0: 65 6e 64 69 66 0d 0a 0d 0a 74 79 70 65 64 65 66  endif....typedef
09f0: 20 76 6f 69 64 20 28 2a 53 51 4c 49 54 45 55 53   void (*SQLITEUS
0a00: 45 52 46 55 4e 43 29 28 73 71 6c 69 74 65 33 5f  ERFUNC)(sqlite3_
0a10: 63 6f 6e 74 65 78 74 20 2a 2c 20 69 6e 74 2c 20  context *, int, 
0a20: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
0a30: 29 3b 0d 0a 74 79 70 65 64 65 66 20 76 6f 69 64  );..typedef void
0a40: 20 28 2a 53 51 4c 49 54 45 46 55 4e 43 46 49 4e   (*SQLITEFUNCFIN
0a50: 41 4c 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  AL)(sqlite3_cont
0a60: 65 78 74 20 2a 29 3b 0d 0a 0d 0a 2f 2a 0d 0a 2a  ext *);..../*..*
0a70: 2a 20 41 6e 20 61 72 72 61 79 20 6f 66 20 6e 61  * An array of na
0a80: 6d 65 73 20 6f 66 20 61 6c 6c 20 63 6f 6d 70 69  mes of all compi
0a90: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 2e  le-time options.
0aa0: 20 20 54 68 69 73 20 61 72 72 61 79 20 73 68 6f    This array sho
0ab0: 75 6c 64 0d 0a 2a 2a 20 62 65 20 73 6f 72 74 65  uld..** be sorte
0ac0: 64 20 41 2d 5a 2e 0d 0a 2a 2a 0d 0a 2a 2a 20 54  d A-Z...**..** T
0ad0: 68 69 73 20 61 72 72 61 79 20 6c 6f 6f 6b 73 20  his array looks 
0ae0: 6c 61 72 67 65 2c 20 62 75 74 20 69 6e 20 61 20  large, but in a 
0af0: 74 79 70 69 63 61 6c 20 69 6e 73 74 61 6c 6c 61  typical installa
0b00: 74 69 6f 6e 20 61 63 74 75 61 6c 6c 79 20 75 73  tion actually us
0b10: 65 73 0d 0a 2a 2a 20 6f 6e 6c 79 20 61 20 68 61  es..** only a ha
0b20: 6e 64 66 75 6c 20 6f 66 20 63 6f 6d 70 69 6c 65  ndful of compile
0b30: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 2c 20 73  -time options, s
0b40: 6f 20 6d 6f 73 74 20 74 69 6d 65 73 20 74 68 69  o most times thi
0b50: 73 20 61 72 72 61 79 20 69 73 20 75 73 75 61 6c  s array is usual
0b60: 6c 79 0d 0a 2a 2a 20 72 61 74 68 65 72 20 73 68  ly..** rather sh
0b70: 6f 72 74 20 61 6e 64 20 75 73 65 73 20 6c 69 74  ort and uses lit
0b80: 74 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65  tle memory space
0b90: 2e 0d 0a 2a 2f 0d 0a 73 74 61 74 69 63 20 63 6f  ...*/..static co
0ba0: 6e 73 74 20 63 68 61 72 20 2a 20 63 6f 6e 73 74  nst char * const
0bb0: 20 61 7a 49 6e 74 65 72 6f 70 43 6f 6d 70 69 6c   azInteropCompil
0bc0: 65 4f 70 74 5b 5d 20 3d 20 7b 0d 0a 0d 0a 2f 2a  eOpt[] = {..../*
0bd0: 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 61 72   These macros ar
0be0: 65 20 70 72 6f 76 69 64 65 64 20 74 6f 20 22 73  e provided to "s
0bf0: 74 72 69 6e 67 69 66 79 22 20 74 68 65 20 76 61  tringify" the va
0c00: 6c 75 65 20 6f 66 20 74 68 65 20 64 65 66 69 6e  lue of the defin
0c10: 65 0d 0a 2a 2a 20 66 6f 72 20 74 68 6f 73 65 20  e..** for those 
0c20: 6f 70 74 69 6f 6e 73 20 69 6e 20 77 68 69 63 68  options in which
0c30: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 6d 65   the value is me
0c40: 61 6e 69 6e 67 66 75 6c 2e 20 2a 2f 0d 0a 23 69  aningful. */..#i
0c50: 66 6e 64 65 66 20 43 54 49 4d 45 4f 50 54 5f 56  fndef CTIMEOPT_V
0c60: 41 4c 5f 0d 0a 23 64 65 66 69 6e 65 20 43 54 49  AL_..#define CTI
0c70: 4d 45 4f 50 54 5f 56 41 4c 5f 28 6f 70 74 29 20  MEOPT_VAL_(opt) 
0c80: 23 6f 70 74 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  #opt..#endif....
0c90: 23 69 66 6e 64 65 66 20 43 54 49 4d 45 4f 50 54  #ifndef CTIMEOPT
0ca0: 5f 56 41 4c 0d 0a 23 64 65 66 69 6e 65 20 43 54  _VAL..#define CT
0cb0: 49 4d 45 4f 50 54 5f 56 41 4c 28 6f 70 74 29 20  IMEOPT_VAL(opt) 
0cc0: 43 54 49 4d 45 4f 50 54 5f 56 41 4c 5f 28 6f 70  CTIMEOPT_VAL_(op
0cd0: 74 29 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69  t)..#endif....#i
0ce0: 66 64 65 66 20 49 4e 54 45 52 4f 50 5f 43 4f 44  fdef INTEROP_COD
0cf0: 45 43 0d 0a 20 20 22 43 4f 44 45 43 22 2c 0d 0a  EC..  "CODEC",..
0d00: 23 65 6e 64 69 66 0d 0a 23 69 66 64 65 66 20 49  #endif..#ifdef I
0d10: 4e 54 45 52 4f 50 5f 44 45 42 55 47 0d 0a 20 20  NTEROP_DEBUG..  
0d20: 22 44 45 42 55 47 3d 22 20 43 54 49 4d 45 4f 50  "DEBUG=" CTIMEOP
0d30: 54 5f 56 41 4c 28 49 4e 54 45 52 4f 50 5f 44 45  T_VAL(INTEROP_DE
0d40: 42 55 47 29 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23  BUG),..#endif..#
0d50: 69 66 64 65 66 20 49 4e 54 45 52 4f 50 5f 45 58  ifdef INTEROP_EX
0d60: 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e  TENSION_FUNCTION
0d70: 53 0d 0a 20 20 22 45 58 54 45 4e 53 49 4f 4e 5f  S..  "EXTENSION_
0d80: 46 55 4e 43 54 49 4f 4e 53 22 2c 0d 0a 23 65 6e  FUNCTIONS",..#en
0d90: 64 69 66 0d 0a 23 69 66 64 65 66 20 49 4e 54 45  dif..#ifdef INTE
0da0: 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 43 45 52 4f  ROP_INCLUDE_CERO
0db0: 44 0d 0a 20 20 22 49 4e 43 4c 55 44 45 5f 43 45  D..  "INCLUDE_CE
0dc0: 52 4f 44 22 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23  ROD",..#endif..#
0dd0: 69 66 64 65 66 20 49 4e 54 45 52 4f 50 5f 49 4e  ifdef INTEROP_IN
0de0: 43 4c 55 44 45 5f 45 58 54 52 41 0d 0a 20 20 22  CLUDE_EXTRA..  "
0df0: 49 4e 43 4c 55 44 45 5f 45 58 54 52 41 22 2c 0d  INCLUDE_EXTRA",.
0e00: 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
0e10: 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f  INTEROP_INCLUDE_
0e20: 53 45 45 0d 0a 20 20 22 49 4e 43 4c 55 44 45 5f  SEE..  "INCLUDE_
0e30: 53 45 45 22 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23  SEE",..#endif..#
0e40: 69 66 64 65 66 20 49 4e 54 45 52 4f 50 5f 49 4e  ifdef INTEROP_IN
0e50: 43 4c 55 44 45 5f 5a 49 50 56 46 53 0d 0a 20 20  CLUDE_ZIPVFS..  
0e60: 22 49 4e 43 4c 55 44 45 5f 5a 49 50 56 46 53 22  "INCLUDE_ZIPVFS"
0e70: 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65  ,..#endif..#ifde
0e80: 66 20 49 4e 54 45 52 4f 50 5f 4a 53 4f 4e 31 5f  f INTEROP_JSON1_
0e90: 45 58 54 45 4e 53 49 4f 4e 0d 0a 20 20 22 4a 53  EXTENSION..  "JS
0ea0: 4f 4e 31 5f 45 58 54 45 4e 53 49 4f 4e 22 2c 0d  ON1_EXTENSION",.
0eb0: 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
0ec0: 49 4e 54 45 52 4f 50 5f 4c 45 47 41 43 59 5f 43  INTEROP_LEGACY_C
0ed0: 4c 4f 53 45 0d 0a 20 20 22 4c 45 47 41 43 59 5f  LOSE..  "LEGACY_
0ee0: 43 4c 4f 53 45 22 2c 0d 0a 23 65 6e 64 69 66 0d  CLOSE",..#endif.
0ef0: 0a 23 69 66 64 65 66 20 49 4e 54 45 52 4f 50 5f  .#ifdef INTEROP_
0f00: 4c 4f 47 0d 0a 20 20 22 4c 4f 47 22 2c 0d 0a 23  LOG..  "LOG",..#
0f10: 65 6e 64 69 66 0d 0a 23 69 66 64 65 66 20 49 4e  endif..#ifdef IN
0f20: 54 45 52 4f 50 5f 50 45 52 43 45 4e 54 49 4c 45  TEROP_PERCENTILE
0f30: 5f 45 58 54 45 4e 53 49 4f 4e 0d 0a 20 20 22 50  _EXTENSION..  "P
0f40: 45 52 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e 53  ERCENTILE_EXTENS
0f50: 49 4f 4e 22 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23  ION",..#endif..#
0f60: 69 66 64 65 66 20 49 4e 54 45 52 4f 50 5f 52 45  ifdef INTEROP_RE
0f70: 47 45 58 50 5f 45 58 54 45 4e 53 49 4f 4e 0d 0a  GEXP_EXTENSION..
0f80: 20 20 22 52 45 47 45 58 50 5f 45 58 54 45 4e 53    "REGEXP_EXTENS
0f90: 49 4f 4e 22 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23  ION",..#endif..#
0fa0: 69 66 64 65 66 20 49 4e 54 45 52 4f 50 5f 53 45  ifdef INTEROP_SE
0fb0: 53 53 49 4f 4e 5f 45 58 54 45 4e 53 49 4f 4e 0d  SSION_EXTENSION.
0fc0: 0a 20 20 22 53 45 53 53 49 4f 4e 5f 45 58 54 45  .  "SESSION_EXTE
0fd0: 4e 53 49 4f 4e 22 2c 0d 0a 23 65 6e 64 69 66 0d  NSION",..#endif.
0fe0: 0a 23 69 66 64 65 66 20 49 4e 54 45 52 4f 50 5f  .#ifdef INTEROP_
0ff0: 53 48 41 31 5f 45 58 54 45 4e 53 49 4f 4e 0d 0a  SHA1_EXTENSION..
1000: 20 20 22 53 48 41 31 5f 45 58 54 45 4e 53 49 4f    "SHA1_EXTENSIO
1010: 4e 22 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66  N",..#endif..#if
1020: 64 65 66 20 49 4e 54 45 52 4f 50 5f 54 45 53 54  def INTEROP_TEST
1030: 5f 45 58 54 45 4e 53 49 4f 4e 0d 0a 20 20 22 54  _EXTENSION..  "T
1040: 45 53 54 5f 45 58 54 45 4e 53 49 4f 4e 22 2c 0d  EST_EXTENSION",.
1050: 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
1060: 49 4e 54 45 52 4f 50 5f 54 4f 54 59 50 45 5f 45  INTEROP_TOTYPE_E
1070: 58 54 45 4e 53 49 4f 4e 0d 0a 20 20 22 54 4f 54  XTENSION..  "TOT
1080: 59 50 45 5f 45 58 54 45 4e 53 49 4f 4e 22 2c 0d  YPE_EXTENSION",.
1090: 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
10a0: 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e  SQLITE_VERSION_N
10b0: 55 4d 42 45 52 0d 0a 20 20 22 56 45 52 53 49 4f  UMBER..  "VERSIO
10c0: 4e 5f 4e 55 4d 42 45 52 3d 22 20 43 54 49 4d 45  N_NUMBER=" CTIME
10d0: 4f 50 54 5f 56 41 4c 28 53 51 4c 49 54 45 5f 56  OPT_VAL(SQLITE_V
10e0: 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 29 2c 0d  ERSION_NUMBER),.
10f0: 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
1100: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
1110: 54 41 42 4c 45 0d 0a 20 20 22 56 49 52 54 55 41  TABLE..  "VIRTUA
1120: 4c 5f 54 41 42 4c 45 22 2c 0d 0a 23 65 6e 64 69  L_TABLE",..#endi
1130: 66 0d 0a 7d 3b 0d 0a 0d 0a 2f 2a 0d 0a 2a 2a 20  f..};..../*..** 
1140: 47 69 76 65 6e 20 74 68 65 20 6e 61 6d 65 20 6f  Given the name o
1150: 66 20 61 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  f a compile-time
1160: 20 6f 70 74 69 6f 6e 2c 20 72 65 74 75 72 6e 20   option, return 
1170: 74 72 75 65 20 69 66 20 74 68 61 74 20 6f 70 74  true if that opt
1180: 69 6f 6e 0d 0a 2a 2a 20 77 61 73 20 75 73 65 64  ion..** was used
1190: 20 61 6e 64 20 66 61 6c 73 65 20 69 66 20 6e 6f   and false if no
11a0: 74 2e 0d 0a 2a 2a 0d 0a 2a 2a 20 54 68 65 20 6e  t...**..** The n
11b0: 61 6d 65 20 63 61 6e 20 6f 70 74 69 6f 6e 61 6c  ame can optional
11c0: 6c 79 20 62 65 67 69 6e 20 77 69 74 68 20 22 53  ly begin with "S
11d0: 51 4c 49 54 45 5f 22 20 6f 72 20 22 49 4e 54 45  QLITE_" or "INTE
11e0: 52 4f 50 5f 22 20 62 75 74 20 74 68 6f 73 65 0d  ROP_" but those.
11f0: 0a 2a 2a 20 70 72 65 66 69 78 65 73 20 61 72 65  .** prefixes are
1200: 20 6e 6f 74 20 72 65 71 75 69 72 65 64 20 66 6f   not required fo
1210: 72 20 61 20 6d 61 74 63 68 2e 0d 0a 2a 2f 0d 0a  r a match...*/..
1220: 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57  SQLITE_API int W
1230: 49 4e 41 50 49 20 69 6e 74 65 72 6f 70 5f 63 6f  INAPI interop_co
1240: 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64  mpileoption_used
1250: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70  (const char *zOp
1260: 74 4e 61 6d 65 29 7b 0d 0a 20 20 69 6e 74 20 69  tName){..  int i
1270: 2c 20 6e 3b 0d 0a 20 20 69 66 28 20 73 71 6c 69  , n;..  if( sqli
1280: 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 4f 70 74  te3StrNICmp(zOpt
1290: 4e 61 6d 65 2c 20 22 53 51 4c 49 54 45 5f 22 2c  Name, "SQLITE_",
12a0: 20 37 29 3d 3d 30 20 29 20 7a 4f 70 74 4e 61 6d   7)==0 ) zOptNam
12b0: 65 20 2b 3d 20 37 3b 0d 0a 20 20 69 66 28 20 73  e += 7;..  if( s
12c0: 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a  qlite3StrNICmp(z
12d0: 4f 70 74 4e 61 6d 65 2c 20 22 49 4e 54 45 52 4f  OptName, "INTERO
12e0: 50 5f 22 2c 20 38 29 3d 3d 30 20 29 20 7a 4f 70  P_", 8)==0 ) zOp
12f0: 74 4e 61 6d 65 20 2b 3d 20 38 3b 0d 0a 20 20 6e  tName += 8;..  n
1300: 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
1310: 33 30 28 7a 4f 70 74 4e 61 6d 65 29 3b 0d 0a 0d  30(zOptName);...
1320: 0a 20 20 2f 2a 20 53 69 6e 63 65 20 41 72 72 61  .  /* Since Arra
1330: 79 53 69 7a 65 28 61 7a 49 6e 74 65 72 6f 70 43  ySize(azInteropC
1340: 6f 6d 70 69 6c 65 4f 70 74 29 20 69 73 20 6e 6f  ompileOpt) is no
1350: 72 6d 61 6c 6c 79 20 69 6e 20 73 69 6e 67 6c 65  rmally in single
1360: 20 64 69 67 69 74 73 2c 20 61 0d 0a 20 20 2a 2a   digits, a..  **
1370: 20 6c 69 6e 65 61 72 20 73 65 61 72 63 68 20 69   linear search i
1380: 73 20 61 64 65 71 75 61 74 65 2e 20 20 4e 6f 20  s adequate.  No 
1390: 6e 65 65 64 20 66 6f 72 20 61 20 62 69 6e 61 72  need for a binar
13a0: 79 20 73 65 61 72 63 68 2e 20 2a 2f 0d 0a 20 20  y search. */..  
13b0: 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79  for(i=0; i<Array
13c0: 53 69 7a 65 28 61 7a 49 6e 74 65 72 6f 70 43 6f  Size(azInteropCo
13d0: 6d 70 69 6c 65 4f 70 74 29 3b 20 69 2b 2b 29 7b  mpileOpt); i++){
13e0: 0d 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  ..    if( sqlite
13f0: 33 53 74 72 4e 49 43 6d 70 28 7a 4f 70 74 4e 61  3StrNICmp(zOptNa
1400: 6d 65 2c 20 61 7a 49 6e 74 65 72 6f 70 43 6f 6d  me, azInteropCom
1410: 70 69 6c 65 4f 70 74 5b 69 5d 2c 20 6e 29 3d 3d  pileOpt[i], n)==
1420: 30 0d 0a 20 20 20 20 20 26 26 20 73 71 6c 69 74  0..     && sqlit
1430: 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1440: 67 6e 65 64 20 63 68 61 72 29 61 7a 49 6e 74 65  gned char)azInte
1450: 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 5b 69 5d  ropCompileOpt[i]
1460: 5b 6e 5d 5d 3d 3d 30 0d 0a 20 20 20 20 29 7b 0d  [n]]==0..    ){.
1470: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b  .      return 1;
1480: 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 20 20  ..    }..  }..  
1490: 72 65 74 75 72 6e 20 30 3b 0d 0a 7d 0d 0a 0d 0a  return 0;..}....
14a0: 2f 2a 0d 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  /*..** Return th
14b0: 65 20 4e 2d 74 68 20 63 6f 6d 70 69 6c 65 2d 74  e N-th compile-t
14c0: 69 6d 65 20 6f 70 74 69 6f 6e 20 73 74 72 69 6e  ime option strin
14d0: 67 2e 20 20 49 66 20 4e 20 69 73 20 6f 75 74 20  g.  If N is out 
14e0: 6f 66 20 72 61 6e 67 65 2c 0d 0a 2a 2a 20 72 65  of range,..** re
14f0: 74 75 72 6e 20 61 20 4e 55 4c 4c 20 70 6f 69 6e  turn a NULL poin
1500: 74 65 72 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49 54 45  ter...*/..SQLITE
1510: 5f 41 50 49 20 63 6f 6e 73 74 20 63 68 61 72 20  _API const char 
1520: 2a 57 49 4e 41 50 49 20 69 6e 74 65 72 6f 70 5f  *WINAPI interop_
1530: 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
1540: 74 28 69 6e 74 20 4e 29 7b 0d 0a 20 20 69 66 28  t(int N){..  if(
1550: 20 4e 3e 3d 30 20 26 26 20 4e 3c 41 72 72 61 79   N>=0 && N<Array
1560: 53 69 7a 65 28 61 7a 49 6e 74 65 72 6f 70 43 6f  Size(azInteropCo
1570: 6d 70 69 6c 65 4f 70 74 29 20 29 7b 0d 0a 20 20  mpileOpt) ){..  
1580: 20 20 72 65 74 75 72 6e 20 61 7a 49 6e 74 65 72    return azInter
1590: 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 5b 4e 5d 3b  opCompileOpt[N];
15a0: 0d 0a 20 20 7d 0d 0a 20 20 72 65 74 75 72 6e 20  ..  }..  return 
15b0: 30 3b 0d 0a 7d 0d 0a 0d 0a 23 69 66 20 64 65 66  0;..}....#if def
15c0: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42  ined(INTEROP_DEB
15d0: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 49  UG) || defined(I
15e0: 4e 54 45 52 4f 50 5f 4c 4f 47 29 0d 0a 53 51 4c  NTEROP_LOG)..SQL
15f0: 49 54 45 5f 50 52 49 56 41 54 45 20 76 6f 69 64  ITE_PRIVATE void
1600: 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44   sqlite3InteropD
1610: 65 62 75 67 28 63 6f 6e 73 74 20 63 68 61 72 20  ebug(const char 
1620: 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0d  *zFormat, ...){.
1630: 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 20 20  .  va_list ap;  
1640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1650: 20 20 20 20 20 20 20 2f 2a 20 56 61 72 61 72 67         /* Vararg
1660: 20 6c 69 73 74 20 2a 2f 0d 0a 23 69 66 20 53 51   list */..#if SQ
1670: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
1680: 42 45 52 20 3e 3d 20 33 30 32 34 30 30 30 0d 0a  BER >= 3024000..
1690: 20 20 73 71 6c 69 74 65 33 5f 73 74 72 20 61 63    sqlite3_str ac
16a0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
16b0: 20 20 20 20 20 20 2f 2a 20 50 6f 73 74 20 33 2e        /* Post 3.
16c0: 32 34 20 53 74 72 69 6e 67 20 61 63 63 75 6d 75  24 String accumu
16d0: 6c 61 74 6f 72 20 2a 2f 0d 0a 23 65 6c 73 65 0d  lator */..#else.
16e0: 0a 20 20 53 74 72 41 63 63 75 6d 20 61 63 63 3b  .  StrAccum acc;
16f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1700: 20 20 20 20 20 20 20 2f 2a 20 50 72 65 20 33 2e         /* Pre 3.
1710: 32 34 20 73 74 72 69 6e 67 20 61 63 63 75 6d 75  24 string accumu
1720: 6c 61 74 6f 72 20 2a 2f 0d 0a 23 65 6e 64 69 66  lator */..#endif
1730: 0d 0a 20 20 63 68 61 72 20 7a 4d 73 67 5b 53 51  ..  char zMsg[SQ
1740: 4c 49 54 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53  LITE_PRINT_BUF_S
1750: 49 5a 45 2a 33 5d 3b 20 2f 2a 20 43 6f 6d 70 6c  IZE*3]; /* Compl
1760: 65 74 65 20 6c 6f 67 20 6d 65 73 73 61 67 65 20  ete log message 
1770: 2a 2f 0d 0a 20 20 76 61 5f 73 74 61 72 74 28 61  */..  va_start(a
1780: 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0d 0a 23 69  p, zFormat);..#i
1790: 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
17a0: 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 38 30  _NUMBER >= 30080
17b0: 31 30 0d 0a 20 20 73 71 6c 69 74 65 33 53 74 72  10..  sqlite3Str
17c0: 41 63 63 75 6d 49 6e 69 74 28 26 61 63 63 2c 20  AccumInit(&acc, 
17d0: 30 2c 20 7a 4d 73 67 2c 20 73 69 7a 65 6f 66 28  0, zMsg, sizeof(
17e0: 7a 4d 73 67 29 2c 20 30 29 3b 0d 0a 23 65 6c 73  zMsg), 0);..#els
17f0: 65 0d 0a 20 20 73 71 6c 69 74 65 33 53 74 72 41  e..  sqlite3StrA
1800: 63 63 75 6d 49 6e 69 74 28 26 61 63 63 2c 20 7a  ccumInit(&acc, z
1810: 4d 73 67 2c 20 73 69 7a 65 6f 66 28 7a 4d 73 67  Msg, sizeof(zMsg
1820: 29 2c 20 30 29 3b 0d 0a 20 20 61 63 63 2e 75 73  ), 0);..  acc.us
1830: 65 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0d 0a 23 65  eMalloc = 0;..#e
1840: 6e 64 69 66 0d 0a 23 69 66 20 53 51 4c 49 54 45  ndif..#if SQLITE
1850: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20  _VERSION_NUMBER 
1860: 3e 3d 20 33 30 32 34 30 30 30 0d 0a 20 20 73 71  >= 3024000..  sq
1870: 6c 69 74 65 33 5f 73 74 72 5f 76 61 70 70 65 6e  lite3_str_vappen
1880: 64 66 28 26 61 63 63 2c 20 7a 46 6f 72 6d 61 74  df(&acc, zFormat
1890: 2c 20 61 70 29 3b 0d 0a 23 65 6c 69 66 20 53 51  , ap);..#elif SQ
18a0: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
18b0: 42 45 52 20 3e 3d 20 33 30 31 31 30 30 30 0d 0a  BER >= 3011000..
18c0: 20 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74    sqlite3VXPrint
18d0: 66 28 26 61 63 63 2c 20 7a 46 6f 72 6d 61 74 2c  f(&acc, zFormat,
18e0: 20 61 70 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20   ap);..#else..  
18f0: 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28  sqlite3VXPrintf(
1900: 26 61 63 63 2c 20 30 2c 20 7a 46 6f 72 6d 61 74  &acc, 0, zFormat
1910: 2c 20 61 70 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , ap);..#endif..
1920: 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0d 0a 23    va_end(ap);..#
1930: 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  if SQLITE_OS_WIN
1940: 20 26 26 20 53 51 4c 49 54 45 5f 56 45 52 53 49   && SQLITE_VERSI
1950: 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30  ON_NUMBER >= 300
1960: 37 30 31 33 0d 0a 20 20 73 71 6c 69 74 65 33 5f  7013..  sqlite3_
1970: 77 69 6e 33 32 5f 77 72 69 74 65 5f 64 65 62 75  win32_write_debu
1980: 67 28 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  g(sqlite3StrAccu
1990: 6d 46 69 6e 69 73 68 28 26 61 63 63 29 2c 20 2d  mFinish(&acc), -
19a0: 31 29 3b 0d 0a 23 65 6c 69 66 20 53 51 4c 49 54  1);..#elif SQLIT
19b0: 45 5f 4f 53 5f 57 49 4e 20 26 26 20 64 65 66 69  E_OS_WIN && defi
19c0: 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32  ned(SQLITE_WIN32
19d0: 5f 48 41 53 5f 41 4e 53 49 29 0d 0a 20 20 4f 75  _HAS_ANSI)..  Ou
19e0: 74 70 75 74 44 65 62 75 67 53 74 72 69 6e 67 41  tputDebugStringA
19f0: 28 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d  (sqlite3StrAccum
1a00: 46 69 6e 69 73 68 28 26 61 63 63 29 29 3b 0d 0a  Finish(&acc));..
1a10: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f  #elif SQLITE_OS_
1a20: 57 49 4e 20 26 26 20 64 65 66 69 6e 65 64 28 53  WIN && defined(S
1a30: 51 4c 49 54 45 5f 57 49 4e 33 32 5f 48 41 53 5f  QLITE_WIN32_HAS_
1a40: 57 49 44 45 29 0d 0a 20 20 7b 0d 0a 20 20 20 20  WIDE)..  {..    
1a50: 4c 50 57 53 54 52 20 7a 57 69 64 65 4d 73 67 20  LPWSTR zWideMsg 
1a60: 3d 20 75 74 66 38 54 6f 55 6e 69 63 6f 64 65 28  = utf8ToUnicode(
1a70: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46  sqlite3StrAccumF
1a80: 69 6e 69 73 68 28 26 61 63 63 29 29 3b 0d 0a 20  inish(&acc));.. 
1a90: 20 20 20 69 66 28 20 7a 57 69 64 65 4d 73 67 20     if( zWideMsg 
1aa0: 29 7b 0d 0a 20 20 20 20 20 20 4f 75 74 70 75 74  ){..      Output
1ab0: 44 65 62 75 67 53 74 72 69 6e 67 57 28 7a 57 69  DebugStringW(zWi
1ac0: 64 65 4d 73 67 29 3b 0d 0a 20 20 20 20 20 20 73  deMsg);..      s
1ad0: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 57 69 64  qlite3_free(zWid
1ae0: 65 4d 73 67 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20  eMsg);..    }.. 
1af0: 20 7d 0d 0a 23 65 6c 73 65 0d 0a 20 20 66 70 72   }..#else..  fpr
1b00: 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73  intf(stderr, "%s
1b10: 22 2c 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  ", sqlite3StrAcc
1b20: 75 6d 46 69 6e 69 73 68 28 26 61 63 63 29 29 3b  umFinish(&acc));
1b30: 0d 0a 23 65 6e 64 69 66 0d 0a 7d 0d 0a 23 65 6e  ..#endif..}..#en
1b40: 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e  dif....#if defin
1b50: 65 64 28 49 4e 54 45 52 4f 50 5f 4c 4f 47 29 0d  ed(INTEROP_LOG).
1b60: 0a 53 51 4c 49 54 45 5f 50 52 49 56 41 54 45 20  .SQLITE_PRIVATE 
1b70: 69 6e 74 20 6c 6f 67 43 6f 6e 66 69 67 75 72 65  int logConfigure
1b80: 64 20 3d 20 30 3b 0d 0a 0d 0a 53 51 4c 49 54 45  d = 0;....SQLITE
1b90: 5f 50 52 49 56 41 54 45 20 76 6f 69 64 20 73 71  _PRIVATE void sq
1ba0: 6c 69 74 65 33 49 6e 74 65 72 6f 70 4c 6f 67 43  lite3InteropLogC
1bb0: 61 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a 70 41  allback(void *pA
1bc0: 72 67 2c 20 69 6e 74 20 69 43 6f 64 65 2c 20 63  rg, int iCode, c
1bd0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 73 67 29  onst char *zMsg)
1be0: 7b 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65  {..  sqlite3Inte
1bf0: 72 6f 70 44 65 62 75 67 28 22 49 4e 54 45 52 4f  ropDebug("INTERO
1c00: 50 5f 4c 4f 47 20 28 25 64 29 20 25 73 5c 6e 22  P_LOG (%d) %s\n"
1c10: 2c 20 69 43 6f 64 65 2c 20 7a 4d 73 67 29 3b 0d  , iCode, zMsg);.
1c20: 0a 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 53 51  .}..#endif....SQ
1c30: 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e  LITE_API int WIN
1c40: 41 50 49 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  API sqlite3_mall
1c50: 6f 63 5f 73 69 7a 65 5f 69 6e 74 65 72 6f 70 28  oc_size_interop(
1c60: 76 6f 69 64 20 2a 70 29 7b 0d 0a 20 20 72 65 74  void *p){..  ret
1c70: 75 72 6e 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  urn sqlite3Mallo
1c80: 63 53 69 7a 65 28 70 29 3b 0d 0a 7d 0d 0a 0d 0a  cSize(p);..}....
1c90: 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69 64 20  SQLITE_API void 
1ca0: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 6d  WINAPI sqlite3_m
1cb0: 73 69 7a 65 5f 69 6e 74 65 72 6f 70 28 76 6f 69  size_interop(voi
1cc0: 64 20 2a 70 2c 20 73 71 6c 69 74 65 5f 75 69 6e  d *p, sqlite_uin
1cd0: 74 36 34 20 2a 70 4e 29 0d 0a 7b 0d 0a 20 20 69  t64 *pN)..{..  i
1ce0: 66 20 28 21 70 4e 29 20 72 65 74 75 72 6e 3b 0d  f (!pN) return;.
1cf0: 0a 20 20 2a 70 4e 20 3d 20 73 71 6c 69 74 65 33  .  *pN = sqlite3
1d00: 5f 6d 73 69 7a 65 28 70 29 3b 0d 0a 7d 0d 0a 0d  _msize(p);..}...
1d10: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54  .#if defined(INT
1d20: 45 52 4f 50 5f 4c 45 47 41 43 59 5f 43 4c 4f 53  EROP_LEGACY_CLOS
1d30: 45 29 20 7c 7c 20 53 51 4c 49 54 45 5f 56 45 52  E) || SQLITE_VER
1d40: 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3c 20 33 30  SION_NUMBER < 30
1d50: 30 37 30 31 34 0d 0a 53 51 4c 49 54 45 5f 50 52  07014..SQLITE_PR
1d60: 49 56 41 54 45 20 76 6f 69 64 20 2a 20 73 71 6c  IVATE void * sql
1d70: 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
1d80: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
1d90: 20 2a 64 62 2c 20 69 6e 74 20 6e 29 0d 0a 7b 0d   *db, int n)..{.
1da0: 0a 20 20 76 6f 69 64 20 2a 70 3b 0d 0a 20 20 69  .  void *p;..  i
1db0: 66 20 28 64 62 29 20 7b 0d 0a 20 20 20 20 73 71  f (db) {..    sq
1dc0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
1dd0: 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20  r(db->mutex);.. 
1de0: 20 7d 0d 0a 20 20 70 20 3d 20 73 71 6c 69 74 65   }..  p = sqlite
1df0: 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62  3DbMallocZero(db
1e00: 2c 6e 29 3b 0d 0a 20 20 69 66 20 28 64 62 29 20  ,n);..  if (db) 
1e10: 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d  {..    sqlite3_m
1e20: 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d  utex_leave(db->m
1e30: 75 74 65 78 29 3b 0d 0a 20 20 7d 0d 0a 20 20 72  utex);..  }..  r
1e40: 65 74 75 72 6e 20 70 3b 0d 0a 7d 0d 0a 0d 0a 53  eturn p;..}....S
1e50: 51 4c 49 54 45 5f 50 52 49 56 41 54 45 20 76 6f  QLITE_PRIVATE vo
1e60: 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  id sqlite3DbFree
1e70: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
1e80: 20 2a 64 62 2c 20 76 6f 69 64 20 2a 70 29 0d 0a   *db, void *p)..
1e90: 7b 0d 0a 20 20 69 66 20 28 64 62 29 20 7b 0d 0a  {..  if (db) {..
1ea0: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
1eb0: 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65  x_enter(db->mute
1ec0: 78 29 3b 0d 0a 20 20 7d 0d 0a 20 20 69 66 20 28  x);..  }..  if (
1ed0: 70 29 20 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65  p) {..    sqlite
1ee0: 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
1ef0: 28 70 2c 20 4d 45 4d 54 59 50 45 5f 44 42 7c 4d  (p, MEMTYPE_DB|M
1f00: 45 4d 54 59 50 45 5f 48 45 41 50 29 3b 0d 0a 20  EMTYPE_HEAP);.. 
1f10: 20 7d 0d 0a 20 20 73 71 6c 69 74 65 33 44 62 46   }..  sqlite3DbF
1f20: 72 65 65 28 64 62 2c 70 29 3b 0d 0a 20 20 69 66  ree(db,p);..  if
1f30: 20 28 64 62 29 20 7b 0d 0a 20 20 20 20 73 71 6c   (db) {..    sql
1f40: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
1f50: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20  (db->mutex);..  
1f60: 7d 0d 0a 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  }..}..#endif....
1f70: 2f 2a 0d 0a 20 20 20 20 54 68 65 20 67 6f 61 6c  /*..    The goal
1f80: 20 6f 66 20 74 68 69 73 20 76 65 72 73 69 6f 6e   of this version
1f90: 20 6f 66 20 63 6c 6f 73 65 20 69 73 20 64 69 66   of close is dif
1fa0: 66 65 72 65 6e 74 20 74 68 61 6e 20 74 68 61 74  ferent than that
1fb0: 20 6f 66 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73   of sqlite3_clos
1fc0: 65 28 29 2c 20 61 6e 64 20 69 73 20 64 65 73 69  e(), and is desi
1fd0: 67 6e 65 64 20 74 6f 20 6c 65 6e 64 20 69 74 73  gned to lend its
1fe0: 65 6c 66 20 62 65 74 74 65 72 20 74 6f 20 2e 4e  elf better to .N
1ff0: 45 54 27 73 20 6e 6f 6e 2d 64 65 74 65 72 6d 69  ET's non-determi
2000: 6e 69 73 74 69 63 20 66 69 6e 61 6c 69 7a 65 72  nistic finalizer
2010: 73 20 61 6e 64 0d 0a 20 20 20 20 74 68 65 20 47  s and..    the G
2020: 43 20 74 68 72 65 61 64 2e 20 20 53 51 4c 69 74  C thread.  SQLit
2030: 65 20 77 69 6c 6c 20 6e 6f 74 20 63 6c 6f 73 65  e will not close
2040: 20 61 20 64 61 74 61 62 61 73 65 20 69 66 20 73   a database if s
2050: 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 6f 70  tatements are op
2060: 65 6e 20 6f 6e 20 69 74 20 2d 2d 20 62 75 74 20  en on it -- but 
2070: 66 6f 72 20 6f 75 72 20 70 75 72 70 6f 73 65 73  for our purposes
2080: 2c 20 77 65 27 64 20 72 61 74 68 65 72 20 66 69  , we'd rather fi
2090: 6e 61 6c 69 7a 65 20 61 6c 6c 20 61 63 74 69 76  nalize all activ
20a0: 65 20 73 74 61 74 65 6d 65 6e 74 73 0d 0a 20 20  e statements..  
20b0: 20 20 61 6e 64 20 66 6f 72 63 69 62 6c 79 20 63    and forcibly c
20c0: 6c 6f 73 65 20 74 68 65 20 64 61 74 61 62 61 73  lose the databas
20d0: 65 2e 20 20 54 68 65 20 72 65 61 73 6f 6e 20 69  e.  The reason i
20e0: 73 20 73 69 6d 70 6c 65 20 2d 2d 20 61 20 6c 6f  s simple -- a lo
20f0: 74 20 6f 66 20 70 65 6f 70 6c 65 20 64 6f 6e 27  t of people don'
2100: 74 20 44 69 73 70 6f 73 65 28 29 20 6f 66 20 74  t Dispose() of t
2110: 68 65 69 72 20 6f 62 6a 65 63 74 73 20 63 6f 72  heir objects cor
2120: 72 65 63 74 6c 79 20 61 6e 64 20 6c 65 74 20 74  rectly and let t
2130: 68 65 20 67 61 72 62 61 67 65 20 63 6f 6c 6c 65  he garbage colle
2140: 63 74 6f 72 0d 0a 20 20 20 20 64 6f 20 69 74 2e  ctor..    do it.
2150: 20 20 54 68 69 73 20 6c 65 61 64 73 20 74 6f 20    This leads to 
2160: 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61 76  unexpected behav
2170: 69 6f 72 20 77 68 65 6e 20 61 20 75 73 65 72 20  ior when a user 
2180: 74 68 69 6e 6b 73 20 74 68 65 79 27 76 65 20 63  thinks they've c
2190: 6c 6f 73 65 64 20 61 20 64 61 74 61 62 61 73 65  losed a database
21a0: 2c 20 62 75 74 20 69 74 27 73 20 73 74 69 6c 6c  , but it's still
21b0: 20 6f 70 65 6e 20 62 65 63 61 75 73 65 20 6e 6f   open because no
21c0: 74 20 61 6c 6c 20 74 68 65 20 73 74 61 74 65 6d  t all the statem
21d0: 65 6e 74 73 20 68 61 76 65 0d 0a 20 20 20 20 68  ents have..    h
21e0: 69 74 20 74 68 65 20 47 43 20 79 65 74 2e 0d 0a  it the GC yet...
21f0: 0d 0a 20 20 20 20 53 6f 2c 20 68 65 72 65 20 77  ..    So, here w
2200: 65 20 68 61 76 65 20 61 20 70 72 6f 62 6c 65 6d  e have a problem
2210: 20 2e 2e 2e 20 2e 4e 45 54 20 68 61 73 20 61 20   ... .NET has a 
2220: 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 79 20 6e  pointer to any n
2230: 75 6d 62 65 72 20 6f 66 20 73 71 6c 69 74 65 33  umber of sqlite3
2240: 5f 73 74 6d 74 20 6f 62 6a 65 63 74 73 2e 20 20  _stmt objects.  
2250: 57 65 20 63 61 6e 27 74 20 63 61 6c 6c 20 73 71  We can't call sq
2260: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
2270: 20 6f 6e 20 74 68 65 73 65 20 62 65 63 61 75 73   on these becaus
2280: 65 0d 0a 20 20 20 20 74 68 65 69 72 20 6d 65 6d  e..    their mem
2290: 6f 72 79 20 69 73 20 66 72 65 65 64 20 61 6e 64  ory is freed and
22a0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 66 6f 72   can be used for
22b0: 20 73 6f 6d 65 74 68 69 6e 67 20 65 6c 73 65 2e   something else.
22c0: 20 20 54 68 65 20 47 43 20 74 68 72 65 61 64 20    The GC thread 
22d0: 63 6f 75 6c 64 20 70 6f 74 65 6e 74 69 61 6c 6c  could potentiall
22e0: 79 20 74 72 79 20 61 6e 64 20 63 61 6c 6c 20 66  y try and call f
22f0: 69 6e 61 6c 69 7a 65 20 61 67 61 69 6e 20 6f 6e  inalize again on
2300: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 61   the statement a
2310: 66 74 65 72 0d 0a 20 20 20 20 74 68 61 74 20 6d  fter..    that m
2320: 65 6d 6f 72 79 20 77 61 73 20 64 65 61 6c 6c 6f  emory was deallo
2330: 63 61 74 65 64 2e 20 20 42 41 44 2e 20 20 53 6f  cated.  BAD.  So
2340: 2c 20 77 68 61 74 20 77 65 20 6e 65 65 64 20 74  , what we need t
2350: 6f 20 64 6f 20 69 73 20 6d 61 6b 65 20 61 20 63  o do is make a c
2360: 6f 70 79 20 6f 66 20 65 61 63 68 20 73 74 61 74  opy of each stat
2370: 65 6d 65 6e 74 2c 20 61 6e 64 20 63 61 6c 6c 20  ement, and call 
2380: 66 69 6e 61 6c 69 7a 65 28 29 20 6f 6e 20 74 68  finalize() on th
2390: 65 20 63 6f 70 79 20 2d 2d 20 73 6f 20 74 68 61  e copy -- so tha
23a0: 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0d 0a  t the original..
23b0: 20 20 20 20 73 74 61 74 65 6d 65 6e 74 27 73 20      statement's 
23c0: 6d 65 6d 6f 72 79 20 69 73 20 70 72 65 73 65 72  memory is preser
23d0: 76 65 64 2c 20 61 6e 64 20 6d 61 72 6b 65 64 20  ved, and marked 
23e0: 61 73 20 42 41 44 2c 20 62 75 74 20 77 65 20 63  as BAD, but we c
23f0: 61 6e 20 73 74 69 6c 6c 20 6d 61 6e 61 67 65 20  an still manage 
2400: 74 6f 20 66 69 6e 61 6c 69 7a 65 20 65 76 65 72  to finalize ever
2410: 79 74 68 69 6e 67 20 61 6e 64 20 66 6f 72 63 69  ything and forci
2420: 62 6c 79 20 63 6c 6f 73 65 20 74 68 65 20 64 61  bly close the da
2430: 74 61 62 61 73 65 2e 20 20 4c 61 74 65 72 20 77  tabase.  Later w
2440: 68 65 6e 20 74 68 65 0d 0a 20 20 20 20 47 43 20  hen the..    GC 
2450: 67 65 74 73 20 61 72 6f 75 6e 64 20 74 6f 20 63  gets around to c
2460: 61 6c 6c 69 6e 67 20 66 69 6e 61 6c 69 7a 65 5f  alling finalize_
2470: 69 6e 74 65 72 6f 70 28 29 20 6f 6e 20 74 68 65  interop() on the
2480: 20 22 62 61 64 22 20 73 74 61 74 65 6d 65 6e 74   "bad" statement
2490: 2c 20 77 65 20 64 65 74 65 63 74 20 74 68 61 74  , we detect that
24a0: 20 61 6e 64 20 66 69 6e 69 73 68 20 64 65 61 6c   and finish deal
24b0: 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 70 6f 69  locating the poi
24c0: 6e 74 65 72 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49 54  nter...*/..SQLIT
24d0: 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49  E_API int WINAPI
24e0: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 5f 69   sqlite3_close_i
24f0: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 20 2a  nterop(sqlite3 *
2500: 64 62 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72 65  db)..{..  int re
2510: 74 3b 0d 0a 23 69 66 20 21 64 65 66 69 6e 65 64  t;..#if !defined
2520: 28 49 4e 54 45 52 4f 50 5f 4c 45 47 41 43 59 5f  (INTEROP_LEGACY_
2530: 43 4c 4f 53 45 29 20 26 26 20 53 51 4c 49 54 45  CLOSE) && SQLITE
2540: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20  _VERSION_NUMBER 
2550: 3e 3d 20 33 30 30 37 30 31 34 0d 0a 0d 0a 23 69  >= 3007014....#i
2560: 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f  f defined(INTERO
2570: 50 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e 54  P_DEBUG) && (INT
2580: 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54  EROP_DEBUG & INT
2590: 45 52 4f 50 5f 44 45 42 55 47 5f 43 4c 4f 53 45  EROP_DEBUG_CLOSE
25a0: 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65  )..  sqlite3Inte
25b0: 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65  ropDebug("sqlite
25c0: 33 5f 63 6c 6f 73 65 5f 69 6e 74 65 72 6f 70 28  3_close_interop(
25d0: 29 3a 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74  ): calling sqlit
25e0: 65 33 5f 63 6c 6f 73 65 5f 76 32 28 25 70 29 2e  e3_close_v2(%p).
25f0: 2e 2e 5c 6e 22 2c 20 64 62 29 3b 0d 0a 23 65 6e  ..\n", db);..#en
2600: 64 69 66 0d 0a 0d 0a 20 20 72 65 74 20 3d 20 73  dif....  ret = s
2610: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 5f 76 32 28  qlite3_close_v2(
2620: 64 62 29 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69  db);....#if defi
2630: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  ned(INTEROP_DEBU
2640: 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44  G) && (INTEROP_D
2650: 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44  EBUG & INTEROP_D
2660: 45 42 55 47 5f 43 4c 4f 53 45 29 0d 0a 20 20 73  EBUG_CLOSE)..  s
2670: 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62  qlite3InteropDeb
2680: 75 67 28 22 73 71 6c 69 74 65 33 5f 63 6c 6f 73  ug("sqlite3_clos
2690: 65 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c  e_interop(): sql
26a0: 69 74 65 33 5f 63 6c 6f 73 65 5f 76 32 28 25 70  ite3_close_v2(%p
26b0: 29 20 72 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e  ) returned %d.\n
26c0: 22 2c 20 64 62 2c 20 72 65 74 29 3b 0d 0a 23 65  ", db, ret);..#e
26d0: 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 75 72 6e  ndif....  return
26e0: 20 72 65 74 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20   ret;..#else..  
26f0: 72 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 63 6c  ret = sqlite3_cl
2700: 6f 73 65 28 64 62 29 3b 0d 0a 0d 0a 20 20 69 66  ose(db);....  if
2710: 20 28 72 65 74 20 3d 3d 20 53 51 4c 49 54 45 5f   (ret == SQLITE_
2720: 42 55 53 59 29 0d 0a 20 20 7b 0d 0a 20 20 20 20  BUSY)..  {..    
2730: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e  sqlite3_mutex_en
2740: 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d  ter(db->mutex);.
2750: 0a 0d 0a 20 20 20 20 69 66 20 28 21 64 62 2d 3e  ...    if (!db->
2760: 70 56 64 62 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  pVdbe)..    {.. 
2770: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74       sqlite3_mut
2780: 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74  ex_leave(db->mut
2790: 65 78 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  ex);..      retu
27a0: 72 6e 20 72 65 74 3b 0d 0a 20 20 20 20 7d 0d 0a  rn ret;..    }..
27b0: 0d 0a 20 20 20 20 77 68 69 6c 65 20 28 64 62 2d  ..    while (db-
27c0: 3e 70 56 64 62 65 29 0d 0a 20 20 20 20 7b 0d 0a  >pVdbe)..    {..
27d0: 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 61 20        /* Make a 
27e0: 63 6f 70 79 20 6f 66 20 74 68 65 20 66 69 72 73  copy of the firs
27f0: 74 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  t prepared state
2800: 6d 65 6e 74 20 2a 2f 0d 0a 20 20 20 20 20 20 56  ment */..      V
2810: 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65 20 2a  dbe *p = (Vdbe *
2820: 29 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  )sqlite3DbMalloc
2830: 5a 65 72 6f 5f 69 6e 74 65 72 6f 70 28 64 62 2c  Zero_interop(db,
2840: 20 73 69 7a 65 6f 66 28 56 64 62 65 29 29 3b 0d   sizeof(Vdbe));.
2850: 0a 20 20 20 20 20 20 56 64 62 65 20 2a 70 6f 20  .      Vdbe *po 
2860: 3d 20 64 62 2d 3e 70 56 64 62 65 3b 0d 0a 0d 0a  = db->pVdbe;....
2870: 20 20 20 20 20 20 69 66 20 28 21 70 29 0d 0a 20        if (!p).. 
2880: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2890: 72 65 74 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d  ret = SQLITE_NOM
28a0: 45 4d 3b 0d 0a 20 20 20 20 20 20 20 20 62 72 65  EM;..        bre
28b0: 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  ak;..      }....
28c0: 20 20 20 20 20 20 43 6f 70 79 4d 65 6d 6f 72 79        CopyMemory
28d0: 28 70 2c 20 70 6f 2c 20 73 69 7a 65 6f 66 28 56  (p, po, sizeof(V
28e0: 64 62 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  dbe));....      
28f0: 2f 2a 20 50 75 74 20 69 74 20 6f 6e 20 74 68 65  /* Put it on the
2900: 20 63 68 61 69 6e 20 73 6f 20 77 65 20 63 61 6e   chain so we can
2910: 20 66 72 65 65 20 69 74 20 2a 2f 0d 0a 20 20 20   free it */..   
2920: 20 20 20 64 62 2d 3e 70 56 64 62 65 20 3d 20 70     db->pVdbe = p
2930: 3b 0d 0a 20 20 20 20 20 20 72 65 74 20 3d 20 73  ;..      ret = s
2940: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
2950: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29  (sqlite3_stmt *)
2960: 70 29 3b 20 2f 2a 20 54 68 69 73 20 77 69 6c 6c  p); /* This will
2970: 20 61 6c 73 6f 20 66 72 65 65 20 74 68 65 20 63   also free the c
2980: 6f 70 79 27 73 20 6d 65 6d 6f 72 79 20 2a 2f 0d  opy's memory */.
2990: 0a 20 20 20 20 20 20 69 66 20 28 72 65 74 29 0d  .      if (ret).
29a0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
29b0: 20 20 2f 2a 20 66 69 6e 61 6c 69 7a 65 20 66 61    /* finalize fa
29c0: 69 6c 65 64 20 2d 2d 20 73 6f 20 77 65 20 6d 75  iled -- so we mu
29d0: 73 74 20 70 75 74 20 62 61 63 6b 20 61 6e 79 74  st put back anyt
29e0: 68 69 6e 67 20 77 65 20 6d 75 6e 67 65 64 20 2a  hing we munged *
29f0: 2f 0d 0a 20 20 20 20 20 20 20 20 43 6f 70 79 4d  /..        CopyM
2a00: 65 6d 6f 72 79 28 70 6f 2c 20 70 2c 20 73 69 7a  emory(po, p, siz
2a10: 65 6f 66 28 56 64 62 65 29 29 3b 0d 0a 20 20 20  eof(Vdbe));..   
2a20: 20 20 20 20 20 64 62 2d 3e 70 56 64 62 65 20 3d       db->pVdbe =
2a30: 20 70 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   po;....        
2a40: 2f 2a 0d 0a 20 20 20 20 20 20 20 20 2a 2a 20 4e  /*..        ** N
2a50: 4f 54 45 3a 20 4f 6b 2c 20 77 65 20 6d 75 73 74  OTE: Ok, we must
2a60: 20 66 72 65 65 20 74 68 69 73 20 62 6c 6f 63 6b   free this block
2a70: 20 74 68 61 74 20 2a 77 65 2a 20 61 6c 6c 6f 63   that *we* alloc
2a80: 61 74 65 64 20 28 61 62 6f 76 65 29 20 73 69 6e  ated (above) sin
2a90: 63 65 0d 0a 20 20 20 20 20 20 20 20 2a 2a 20 20  ce..        **  
2aa0: 20 20 20 20 20 66 69 6e 61 6c 69 7a 65 20 64 69       finalize di
2ab0: 64 20 6e 6f 74 20 64 6f 20 73 6f 2e 0d 0a 20 20  d not do so...  
2ac0: 20 20 20 20 20 20 2a 2f 0d 0a 20 20 20 20 20 20        */..      
2ad0: 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 5f    sqlite3DbFree_
2ae0: 69 6e 74 65 72 6f 70 28 64 62 2c 20 70 29 3b 0d  interop(db, p);.
2af0: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d  .        break;.
2b00: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
2b10: 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  else..      {.. 
2b20: 20 20 20 20 20 20 20 5a 65 72 6f 4d 65 6d 6f 72         ZeroMemor
2b30: 79 28 70 6f 2c 20 73 69 7a 65 6f 66 28 56 64 62  y(po, sizeof(Vdb
2b40: 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 70 6f  e));..        po
2b50: 2d 3e 6d 61 67 69 63 20 3d 20 56 44 42 45 5f 4d  ->magic = VDBE_M
2b60: 41 47 49 43 5f 44 45 41 44 3b 0d 0a 20 20 20 20  AGIC_DEAD;..    
2b70: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20    }..    }..    
2b80: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65  sqlite3_mutex_le
2b90: 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d  ave(db->mutex);.
2ba0: 0a 20 20 20 20 72 65 74 20 3d 20 73 71 6c 69 74  .    ret = sqlit
2bb0: 65 33 5f 63 6c 6f 73 65 28 64 62 29 3b 0d 0a 20  e3_close(db);.. 
2bc0: 20 7d 0d 0a 20 20 72 65 74 75 72 6e 20 72 65 74   }..  return ret
2bd0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 7d 0d 0a 0d 0a  ;..#endif..}....
2be0: 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45  #if defined(INTE
2bf0: 52 4f 50 5f 4c 4f 47 29 0d 0a 53 51 4c 49 54 45  ROP_LOG)..SQLITE
2c00: 5f 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20  _API int WINAPI 
2c10: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6c  sqlite3_config_l
2c20: 6f 67 5f 69 6e 74 65 72 6f 70 28 29 0d 0a 7b 0d  og_interop()..{.
2c30: 0a 20 20 69 6e 74 20 72 65 74 3b 0d 0a 20 20 69  .  int ret;..  i
2c40: 66 28 20 21 6c 6f 67 43 6f 6e 66 69 67 75 72 65  f( !logConfigure
2c50: 64 20 29 7b 0d 0a 20 20 20 20 72 65 74 20 3d 20  d ){..    ret = 
2c60: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53  sqlite3_config(S
2c70: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47  QLITE_CONFIG_LOG
2c80: 2c 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70  , sqlite3Interop
2c90: 4c 6f 67 43 61 6c 6c 62 61 63 6b 2c 20 30 29 3b  LogCallback, 0);
2ca0: 0d 0a 20 20 20 20 69 66 28 20 72 65 74 3d 3d 53  ..    if( ret==S
2cb0: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0d 0a 20 20 20  QLITE_OK ){..   
2cc0: 20 20 20 6c 6f 67 43 6f 6e 66 69 67 75 72 65 64     logConfigured
2cd0: 20 3d 20 31 3b 0d 0a 20 20 20 20 7d 65 6c 73 65   = 1;..    }else
2ce0: 7b 0d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  {..      sqlite3
2cf0: 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71  InteropDebug("sq
2d00: 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67  lite3_config_log
2d10: 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c 69  _interop(): sqli
2d20: 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54  te3_config(SQLIT
2d30: 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 29 20 72 65  E_CONFIG_LOG) re
2d40: 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 72  turned %d.\n", r
2d50: 65 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d  et);..    }..  }
2d60: 65 6c 73 65 7b 0d 0a 20 20 20 20 72 65 74 20 3d  else{..    ret =
2d70: 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0d 0a 20   SQLITE_DONE;.. 
2d80: 20 7d 0d 0a 20 20 72 65 74 75 72 6e 20 72 65 74   }..  return ret
2d90: 3b 0d 0a 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  ;..}..#endif....
2da0: 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74  SQLITE_API const
2db0: 20 63 68 61 72 20 2a 57 49 4e 41 50 49 20 69 6e   char *WINAPI in
2dc0: 74 65 72 6f 70 5f 6c 69 62 76 65 72 73 69 6f 6e  terop_libversion
2dd0: 28 76 6f 69 64 29 0d 0a 7b 0d 0a 20 20 72 65 74  (void)..{..  ret
2de0: 75 72 6e 20 49 4e 54 45 52 4f 50 5f 56 45 52 53  urn INTEROP_VERS
2df0: 49 4f 4e 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  ION;..}....SQLIT
2e00: 45 5f 41 50 49 20 63 6f 6e 73 74 20 63 68 61 72  E_API const char
2e10: 20 2a 57 49 4e 41 50 49 20 69 6e 74 65 72 6f 70   *WINAPI interop
2e20: 5f 73 6f 75 72 63 65 69 64 28 76 6f 69 64 29 0d  _sourceid(void).
2e30: 0a 7b 0d 0a 20 20 72 65 74 75 72 6e 20 49 4e 54  .{..  return INT
2e40: 45 52 4f 50 5f 53 4f 55 52 43 45 5f 49 44 20 22  EROP_SOURCE_ID "
2e50: 20 22 20 49 4e 54 45 52 4f 50 5f 53 4f 55 52 43   " INTEROP_SOURC
2e60: 45 5f 54 49 4d 45 53 54 41 4d 50 3b 0d 0a 7d 0d  E_TIMESTAMP;..}.
2e70: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e  ...SQLITE_API in
2e80: 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  t WINAPI sqlite3
2e90: 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28 63 6f  _open_interop(co
2ea0: 6e 73 74 20 63 68 61 72 20 2a 66 69 6c 65 6e 61  nst char *filena
2eb0: 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  me, const char *
2ec0: 76 66 73 4e 61 6d 65 2c 20 69 6e 74 20 66 6c 61  vfsName, int fla
2ed0: 67 73 2c 20 69 6e 74 20 65 78 74 46 75 6e 63 73  gs, int extFuncs
2ee0: 2c 20 73 71 6c 69 74 65 33 20 2a 2a 70 70 64 62  , sqlite3 **ppdb
2ef0: 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72 65 74 3b  )..{..  int ret;
2f00: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
2f10: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26  INTEROP_DEBUG) &
2f20: 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  & (INTEROP_DEBUG
2f30: 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47   & INTEROP_DEBUG
2f40: 5f 4f 50 45 4e 29 0d 0a 20 20 73 71 6c 69 74 65  _OPEN)..  sqlite
2f50: 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73  3InteropDebug("s
2f60: 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65  qlite3_open_inte
2f70: 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73  rop(): calling s
2f80: 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 5c  qlite3_open_v2(\
2f90: 22 25 73 5c 22 2c 20 5c 22 25 73 5c 22 2c 20 25  "%s\", \"%s\", %
2fa0: 64 2c 20 25 64 2c 20 25 70 29 2e 2e 2e 5c 6e 22  d, %d, %p)...\n"
2fb0: 2c 20 66 69 6c 65 6e 61 6d 65 2c 20 76 66 73 4e  , filename, vfsN
2fc0: 61 6d 65 2c 20 66 6c 61 67 73 2c 20 65 78 74 46  ame, flags, extF
2fd0: 75 6e 63 73 2c 20 70 70 64 62 29 3b 0d 0a 23 65  uncs, ppdb);..#e
2fe0: 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 20 3d 20  ndif....  ret = 
2ff0: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28  sqlite3_open_v2(
3000: 66 69 6c 65 6e 61 6d 65 2c 20 70 70 64 62 2c 20  filename, ppdb, 
3010: 66 6c 61 67 73 2c 20 76 66 73 4e 61 6d 65 29 3b  flags, vfsName);
3020: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
3030: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26  INTEROP_DEBUG) &
3040: 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  & (INTEROP_DEBUG
3050: 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47   & INTEROP_DEBUG
3060: 5f 4f 50 45 4e 29 0d 0a 20 20 73 71 6c 69 74 65  _OPEN)..  sqlite
3070: 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73  3InteropDebug("s
3080: 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65  qlite3_open_inte
3090: 72 6f 70 28 29 3a 20 73 71 6c 69 74 65 33 5f 6f  rop(): sqlite3_o
30a0: 70 65 6e 5f 76 32 28 5c 22 25 73 5c 22 2c 20 5c  pen_v2(\"%s\", \
30b0: 22 25 73 5c 22 2c 20 25 64 2c 20 25 64 2c 20 25  "%s\", %d, %d, %
30c0: 70 29 20 72 65 74 75 72 6e 65 64 20 25 64 2e 5c  p) returned %d.\
30d0: 6e 22 2c 20 66 69 6c 65 6e 61 6d 65 2c 20 76 66  n", filename, vf
30e0: 73 4e 61 6d 65 2c 20 66 6c 61 67 73 2c 20 65 78  sName, flags, ex
30f0: 74 46 75 6e 63 73 2c 20 70 70 64 62 2c 20 72 65  tFuncs, ppdb, re
3100: 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23  t);..#endif....#
3110: 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52  if defined(INTER
3120: 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e  OP_EXTENSION_FUN
3130: 43 54 49 4f 4e 53 29 0d 0a 20 20 69 66 20 28 28  CTIONS)..  if ((
3140: 72 65 74 20 3d 3d 20 53 51 4c 49 54 45 5f 4f 4b  ret == SQLITE_OK
3150: 29 20 26 26 20 70 70 64 62 20 26 26 20 65 78 74  ) && ppdb && ext
3160: 46 75 6e 63 73 29 0d 0a 20 20 20 20 52 65 67 69  Funcs)..    Regi
3170: 73 74 65 72 45 78 74 65 6e 73 69 6f 6e 46 75 6e  sterExtensionFun
3180: 63 74 69 6f 6e 73 28 2a 70 70 64 62 29 3b 0d 0a  ctions(*ppdb);..
3190: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 75  #endif....  retu
31a0: 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a 0d 0a 53 51  rn ret;..}....SQ
31b0: 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e  LITE_API int WIN
31c0: 41 50 49 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  API sqlite3_open
31d0: 31 36 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 73 74  16_interop(const
31e0: 20 63 68 61 72 20 2a 66 69 6c 65 6e 61 6d 65 2c   char *filename,
31f0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 76 66 73   const char *vfs
3200: 4e 61 6d 65 2c 20 69 6e 74 20 66 6c 61 67 73 2c  Name, int flags,
3210: 20 69 6e 74 20 65 78 74 46 75 6e 63 73 2c 20 73   int extFuncs, s
3220: 71 6c 69 74 65 33 20 2a 2a 70 70 64 62 29 0d 0a  qlite3 **ppdb)..
3230: 7b 0d 0a 20 20 69 6e 74 20 72 65 74 3b 0d 0a 0d  {..  int ret;...
3240: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54  .#if defined(INT
3250: 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28  EROP_DEBUG) && (
3260: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20  INTEROP_DEBUG & 
3270: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 4f 50  INTEROP_DEBUG_OP
3280: 45 4e 31 36 29 0d 0a 20 20 73 71 6c 69 74 65 33  EN16)..  sqlite3
3290: 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71  InteropDebug("sq
32a0: 6c 69 74 65 33 5f 6f 70 65 6e 31 36 5f 69 6e 74  lite3_open16_int
32b0: 65 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20  erop(): calling 
32c0: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74  sqlite3_open_int
32d0: 65 72 6f 70 28 5c 22 25 73 5c 22 2c 20 5c 22 25  erop(\"%s\", \"%
32e0: 73 5c 22 2c 20 25 64 2c 20 25 64 2c 20 25 70 29  s\", %d, %d, %p)
32f0: 2e 2e 2e 5c 6e 22 2c 20 66 69 6c 65 6e 61 6d 65  ...\n", filename
3300: 2c 20 76 66 73 4e 61 6d 65 2c 20 66 6c 61 67 73  , vfsName, flags
3310: 2c 20 65 78 74 46 75 6e 63 73 2c 20 70 70 64 62  , extFuncs, ppdb
3320: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
3330: 72 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70  ret = sqlite3_op
3340: 65 6e 5f 69 6e 74 65 72 6f 70 28 66 69 6c 65 6e  en_interop(filen
3350: 61 6d 65 2c 20 76 66 73 4e 61 6d 65 2c 20 66 6c  ame, vfsName, fl
3360: 61 67 73 2c 20 65 78 74 46 75 6e 63 73 2c 20 70  ags, extFuncs, p
3370: 70 64 62 29 3b 0d 0a 0d 0a 23 69 66 20 64 65 66  pdb);....#if def
3380: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42  ined(INTEROP_DEB
3390: 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f  UG) && (INTEROP_
33a0: 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f  DEBUG & INTEROP_
33b0: 44 45 42 55 47 5f 4f 50 45 4e 31 36 29 0d 0a 20  DEBUG_OPEN16).. 
33c0: 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44   sqlite3InteropD
33d0: 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 6f 70  ebug("sqlite3_op
33e0: 65 6e 31 36 5f 69 6e 74 65 72 6f 70 28 29 3a 20  en16_interop(): 
33f0: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74  sqlite3_open_int
3400: 65 72 6f 70 28 5c 22 25 73 5c 22 2c 20 5c 22 25  erop(\"%s\", \"%
3410: 73 5c 22 2c 20 25 64 2c 20 25 64 2c 20 25 70 29  s\", %d, %d, %p)
3420: 20 72 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22   returned %d.\n"
3430: 2c 20 66 69 6c 65 6e 61 6d 65 2c 20 76 66 73 4e  , filename, vfsN
3440: 61 6d 65 2c 20 66 6c 61 67 73 2c 20 65 78 74 46  ame, flags, extF
3450: 75 6e 63 73 2c 20 70 70 64 62 2c 20 72 65 74 29  uncs, ppdb, ret)
3460: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 69  ;..#endif....  i
3470: 66 20 28 28 72 65 74 20 3d 3d 20 53 51 4c 49 54  f ((ret == SQLIT
3480: 45 5f 4f 4b 29 20 26 26 20 70 70 64 62 20 26 26  E_OK) && ppdb &&
3490: 20 21 44 62 48 61 73 50 72 6f 70 65 72 74 79 28   !DbHasProperty(
34a0: 2a 70 70 64 62 2c 20 30 2c 20 44 42 5f 53 63 68  *ppdb, 0, DB_Sch
34b0: 65 6d 61 4c 6f 61 64 65 64 29 29 0d 0a 20 20 7b  emaLoaded))..  {
34c0: 0d 0a 20 20 20 20 45 4e 43 28 2a 70 70 64 62 29  ..    ENC(*ppdb)
34d0: 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e   = SQLITE_UTF16N
34e0: 41 54 49 56 45 3b 0d 0a 0d 0a 23 69 66 20 53 51  ATIVE;....#if SQ
34f0: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
3500: 42 45 52 20 3e 3d 20 33 30 30 38 30 30 38 0d 0a  BER >= 3008008..
3510: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 2f 2f 20 42      //..    // B
3520: 55 47 46 49 58 3a 20 53 65 65 20 74 69 63 6b 65  UGFIX: See ticke
3530: 74 20 5b 37 63 31 35 31 61 32 66 30 65 32 32 38  t [7c151a2f0e228
3540: 30 34 63 5d 2e 0d 0a 20 20 20 20 2f 2f 0d 0a 20  04c]...    //.. 
3550: 20 20 20 53 43 48 45 4d 41 5f 45 4e 43 28 2a 70     SCHEMA_ENC(*p
3560: 70 64 62 29 20 3d 20 53 51 4c 49 54 45 5f 55 54  pdb) = SQLITE_UT
3570: 46 31 36 4e 41 54 49 56 45 3b 0d 0a 23 65 6e 64  F16NATIVE;..#end
3580: 69 66 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 72 65 74  if..  }....  ret
3590: 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a 0d 0a 53  urn ret;..}....S
35a0: 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20  QLITE_API const 
35b0: 63 68 61 72 20 2a 57 49 4e 41 50 49 20 73 71 6c  char *WINAPI sql
35c0: 69 74 65 33 5f 65 72 72 6d 73 67 5f 69 6e 74 65  ite3_errmsg_inte
35d0: 72 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  rop(sqlite3 *db,
35e0: 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a   int *plen)..{..
35f0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 76    const char *pv
3600: 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72  al = sqlite3_err
3610: 6d 73 67 28 64 62 29 3b 0d 0a 20 20 69 66 20 28  msg(db);..  if (
3620: 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 70 76  plen) *plen = pv
3630: 61 6c 20 3f 20 73 74 72 6c 65 6e 28 70 76 61 6c  al ? strlen(pval
3640: 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72 6e  ) : 0;..  return
3650: 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c   pval;..}....SQL
3660: 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41  ITE_API int WINA
3670: 50 49 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  PI sqlite3_chang
3680: 65 73 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  es_interop(sqlit
3690: 65 33 20 2a 64 62 29 0d 0a 7b 0d 0a 20 20 69 6e  e3 *db)..{..  in
36a0: 74 20 72 65 73 75 6c 74 3b 0d 0a 0d 0a 23 69 66  t result;....#if
36b0: 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50   defined(INTEROP
36c0: 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e 54 45  _DEBUG) && (INTE
36d0: 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45  ROP_DEBUG & INTE
36e0: 52 4f 50 5f 44 45 42 55 47 5f 43 48 41 4e 47 45  ROP_DEBUG_CHANGE
36f0: 53 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74  S)..  sqlite3Int
3700: 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74  eropDebug("sqlit
3710: 65 33 5f 63 68 61 6e 67 65 73 5f 69 6e 74 65 72  e3_changes_inter
3720: 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73 71  op(): calling sq
3730: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 25 70  lite3_changes(%p
3740: 29 2e 2e 2e 5c 6e 22 2c 20 64 62 29 3b 0d 0a 23  )...\n", db);..#
3750: 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 6e 64 65 66  endif....#ifndef
3760: 20 4e 44 45 42 55 47 0d 0a 20 20 69 66 20 28 21   NDEBUG..  if (!
3770: 64 62 29 0d 0a 20 20 20 20 20 20 73 71 6c 69 74  db)..      sqlit
3780: 65 33 49 6e 74 65 72 6f 70 42 72 65 61 6b 28 22  e3InteropBreak("
3790: 6e 75 6c 6c 20 64 61 74 61 62 61 73 65 20 68 61  null database ha
37a0: 6e 64 6c 65 20 66 6f 72 20 73 71 6c 69 74 65 33  ndle for sqlite3
37b0: 5f 63 68 61 6e 67 65 73 28 29 22 29 3b 0d 0a 23  _changes()");..#
37c0: 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 73 75 6c  endif....  resul
37d0: 74 20 3d 20 73 71 6c 69 74 65 33 5f 63 68 61 6e  t = sqlite3_chan
37e0: 67 65 73 28 64 62 29 3b 0d 0a 0d 0a 23 69 66 20  ges(db);....#if 
37f0: 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f  defined(INTEROP_
3800: 44 45 42 55 47 29 20 26 26 20 28 49 4e 54 45 52  DEBUG) && (INTER
3810: 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52  OP_DEBUG & INTER
3820: 4f 50 5f 44 45 42 55 47 5f 43 48 41 4e 47 45 53  OP_DEBUG_CHANGES
3830: 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65  )..  sqlite3Inte
3840: 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65  ropDebug("sqlite
3850: 33 5f 63 68 61 6e 67 65 73 5f 69 6e 74 65 72 6f  3_changes_intero
3860: 70 28 29 3a 20 73 71 6c 69 74 65 33 5f 63 68 61  p(): sqlite3_cha
3870: 6e 67 65 73 28 25 70 29 20 72 65 74 75 72 6e 65  nges(%p) returne
3880: 64 20 25 64 2e 5c 6e 22 2c 20 64 62 2c 20 72 65  d %d.\n", db, re
3890: 73 75 6c 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  sult);..#endif..
38a0: 0d 0a 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c  ..  return resul
38b0: 74 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f  t;..}....SQLITE_
38c0: 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73  API int WINAPI s
38d0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 69  qlite3_prepare_i
38e0: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 20 2a  nterop(sqlite3 *
38f0: 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  db, const char *
3900: 73 71 6c 2c 20 69 6e 74 20 6e 62 79 74 65 73 2c  sql, int nbytes,
3910: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a   sqlite3_stmt **
3920: 70 70 73 74 6d 74 2c 20 63 6f 6e 73 74 20 63 68  ppstmt, const ch
3930: 61 72 20 2a 2a 70 7a 74 61 69 6c 2c 20 69 6e 74  ar **pztail, int
3940: 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 69 6e   *plen)..{..  in
3950: 74 20 6e 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69  t n;....#if defi
3960: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  ned(INTEROP_DEBU
3970: 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44  G) && (INTEROP_D
3980: 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44  EBUG & INTEROP_D
3990: 45 42 55 47 5f 50 52 45 50 41 52 45 29 0d 0a 20  EBUG_PREPARE).. 
39a0: 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44   sqlite3InteropD
39b0: 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 70 72  ebug("sqlite3_pr
39c0: 65 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 29 3a  epare_interop():
39d0: 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33   calling sqlite3
39e0: 5f 70 72 65 70 61 72 65 28 25 70 2c 20 5c 22 25  _prepare(%p, \"%
39f0: 73 5c 22 2c 20 25 64 2c 20 25 70 29 2e 2e 2e 5c  s\", %d, %p)...\
3a00: 6e 22 2c 20 64 62 2c 20 73 71 6c 2c 20 6e 62 79  n", db, sql, nby
3a10: 74 65 73 2c 20 70 70 73 74 6d 74 29 3b 0d 0a 23  tes, ppstmt);..#
3a20: 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 53 51 4c  endif....#if SQL
3a30: 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  ITE_VERSION_NUMB
3a40: 45 52 20 3e 3d 20 33 30 30 33 30 30 39 0d 0a 20  ER >= 3003009.. 
3a50: 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65   n = sqlite3_pre
3a60: 70 61 72 65 5f 76 32 28 64 62 2c 20 73 71 6c 2c  pare_v2(db, sql,
3a70: 20 6e 62 79 74 65 73 2c 20 70 70 73 74 6d 74 2c   nbytes, ppstmt,
3a80: 20 70 7a 74 61 69 6c 29 3b 0d 0a 23 65 6c 73 65   pztail);..#else
3a90: 0d 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f  ..  n = sqlite3_
3aa0: 70 72 65 70 61 72 65 28 64 62 2c 20 73 71 6c 2c  prepare(db, sql,
3ab0: 20 6e 62 79 74 65 73 2c 20 70 70 73 74 6d 74 2c   nbytes, ppstmt,
3ac0: 20 70 7a 74 61 69 6c 29 3b 0d 0a 23 65 6e 64 69   pztail);..#endi
3ad0: 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64  f....#if defined
3ae0: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20  (INTEROP_DEBUG) 
3af0: 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  && (INTEROP_DEBU
3b00: 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55  G & INTEROP_DEBU
3b10: 47 5f 50 52 45 50 41 52 45 29 0d 0a 20 20 73 71  G_PREPARE)..  sq
3b20: 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75  lite3InteropDebu
3b30: 67 28 22 73 71 6c 69 74 65 33 5f 70 72 65 70 61  g("sqlite3_prepa
3b40: 72 65 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73 71  re_interop(): sq
3b50: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 25 70  lite3_prepare(%p
3b60: 2c 20 5c 22 25 73 5c 22 2c 20 25 64 2c 20 25 70  , \"%s\", %d, %p
3b70: 29 20 72 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e  ) returned %d.\n
3b80: 22 2c 20 64 62 2c 20 73 71 6c 2c 20 6e 62 79 74  ", db, sql, nbyt
3b90: 65 73 2c 20 70 70 73 74 6d 74 2c 20 6e 29 3b 0d  es, ppstmt, n);.
3ba0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 69 66 20  .#endif....  if 
3bb0: 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 28  (plen) *plen = (
3bc0: 70 7a 74 61 69 6c 20 26 26 20 2a 70 7a 74 61 69  pztail && *pztai
3bd0: 6c 29 20 3f 20 73 74 72 6c 65 6e 28 2a 70 7a 74  l) ? strlen(*pzt
3be0: 61 69 6c 29 20 3a 20 30 3b 0d 0a 0d 0a 20 20 72  ail) : 0;....  r
3bf0: 65 74 75 72 6e 20 6e 3b 0d 0a 7d 0d 0a 0d 0a 53  eturn n;..}....S
3c00: 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49  QLITE_API int WI
3c10: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 70 72 65  NAPI sqlite3_pre
3c20: 70 61 72 65 31 36 5f 69 6e 74 65 72 6f 70 28 73  pare16_interop(s
3c30: 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73  qlite3 *db, cons
3c40: 74 20 76 6f 69 64 20 2a 73 71 6c 2c 20 69 6e 74  t void *sql, int
3c50: 20 6e 63 68 61 72 73 2c 20 73 71 6c 69 74 65 33   nchars, sqlite3
3c60: 5f 73 74 6d 74 20 2a 2a 70 70 73 74 6d 74 2c 20  _stmt **ppstmt, 
3c70: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2a 70 7a 74  const void **pzt
3c80: 61 69 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d  ail, int *plen).
3c90: 0a 7b 0d 0a 20 20 69 6e 74 20 6e 3b 0d 0a 0d 0a  .{..  int n;....
3ca0: 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45  #if defined(INTE
3cb0: 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28 49  ROP_DEBUG) && (I
3cc0: 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49  NTEROP_DEBUG & I
3cd0: 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 50 52 45  NTEROP_DEBUG_PRE
3ce0: 50 41 52 45 31 36 29 0d 0a 20 20 73 71 6c 69 74  PARE16)..  sqlit
3cf0: 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22  e3InteropDebug("
3d00: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
3d10: 69 6e 74 65 72 6f 70 28 29 3a 20 63 61 6c 6c 69  interop(): calli
3d20: 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  ng sqlite3_prepa
3d30: 72 65 31 36 28 25 70 2c 20 5c 22 25 73 5c 22 2c  re16(%p, \"%s\",
3d40: 20 25 64 2c 20 25 70 29 2e 2e 2e 5c 6e 22 2c 20   %d, %p)...\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 29 3b 0d 0a 23 65 6e 64 69   ppstmt);..#endi
3d70: 66 0d 0a 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f  f....#if SQLITE_
3d80: 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e  VERSION_NUMBER >
3d90: 3d 20 33 30 30 33 30 30 39 0d 0a 20 20 6e 20 3d  = 3003009..  n =
3da0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
3db0: 31 36 5f 76 32 28 64 62 2c 20 73 71 6c 2c 20 6e  16_v2(db, sql, n
3dc0: 63 68 61 72 73 20 2a 20 73 69 7a 65 6f 66 28 77  chars * sizeof(w
3dd0: 63 68 61 72 5f 74 29 2c 20 70 70 73 74 6d 74 2c  char_t), ppstmt,
3de0: 20 70 7a 74 61 69 6c 29 3b 0d 0a 23 65 6c 73 65   pztail);..#else
3df0: 0d 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f  ..  n = sqlite3_
3e00: 70 72 65 70 61 72 65 31 36 28 64 62 2c 20 73 71  prepare16(db, sq
3e10: 6c 2c 20 6e 63 68 61 72 73 20 2a 20 73 69 7a 65  l, nchars * size
3e20: 6f 66 28 77 63 68 61 72 5f 74 29 2c 20 70 70 73  of(wchar_t), pps
3e30: 74 6d 74 2c 20 70 7a 74 61 69 6c 29 3b 0d 0a 23  tmt, pztail);..#
3e40: 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66  endif....#if def
3e50: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42  ined(INTEROP_DEB
3e60: 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f  UG) && (INTEROP_
3e70: 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f  DEBUG & INTEROP_
3e80: 44 45 42 55 47 5f 50 52 45 50 41 52 45 31 36 29  DEBUG_PREPARE16)
3e90: 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72  ..  sqlite3Inter
3ea0: 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33  opDebug("sqlite3
3eb0: 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70  _prepare_interop
3ec0: 28 29 3a 20 73 71 6c 69 74 65 33 5f 70 72 65 70  (): sqlite3_prep
3ed0: 61 72 65 31 36 28 25 70 2c 20 5c 22 25 73 5c 22  are16(%p, \"%s\"
3ee0: 2c 20 25 64 2c 20 25 70 29 20 72 65 74 75 72 6e  , %d, %p) return
3ef0: 65 64 20 25 64 2e 5c 6e 22 2c 20 64 62 2c 20 73  ed %d.\n", db, s
3f00: 71 6c 2c 20 6e 63 68 61 72 73 2c 20 70 70 73 74  ql, nchars, ppst
3f10: 6d 74 2c 20 6e 29 3b 0d 0a 23 65 6e 64 69 66 0d  mt, n);..#endif.
3f20: 0a 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a  ...  if (plen) *
3f30: 70 6c 65 6e 20 3d 20 28 70 7a 74 61 69 6c 20 26  plen = (pztail &
3f40: 26 20 2a 70 7a 74 61 69 6c 29 20 3f 20 77 63 73  & *pztail) ? wcs
3f50: 6c 65 6e 28 28 77 63 68 61 72 5f 74 20 2a 29 2a  len((wchar_t *)*
3f60: 70 7a 74 61 69 6c 29 20 2a 20 73 69 7a 65 6f 66  pztail) * sizeof
3f70: 28 77 63 68 61 72 5f 74 29 20 3a 20 30 3b 0d 0a  (wchar_t) : 0;..
3f80: 0d 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 7d  ..  return n;..}
3f90: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
3fa0: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
3fb0: 54 41 42 4c 45 29 20 26 26 20 53 51 4c 49 54 45  TABLE) && SQLITE
3fc0: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20  _VERSION_NUMBER 
3fd0: 3e 3d 20 33 30 30 34 30 30 31 0d 0a 23 69 66 64  >= 3004001..#ifd
3fe0: 65 66 20 5f 57 49 4e 33 32 0a 5f 5f 64 65 63 6c  ef _WIN32.__decl
3ff0: 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 0a  spec(dllexport).
4000: 23 65 6e 64 69 66 0a 76 6f 69 64 20 2a 73 71 6c  #endif.void *sql
4010: 69 74 65 33 5f 63 72 65 61 74 65 5f 64 69 73 70  ite3_create_disp
4020: 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c 65 28 0d 0a  osable_module(..
4030: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0d 0a    sqlite3 *db,..
4040: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
4050: 61 6d 65 2c 0d 0a 20 20 63 6f 6e 73 74 20 73 71  ame,..  const sq
4060: 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 2c  lite3_module *p,
4070: 0d 0a 20 20 76 6f 69 64 20 2a 70 43 6c 69 65 6e  ..  void *pClien
4080: 74 44 61 74 61 2c 0d 0a 20 20 76 6f 69 64 28 2a  tData,..  void(*
4090: 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 2a 29  xDestroy)(void*)
40a0: 0d 0a 29 3b 20 2f 2a 20 64 65 66 69 6e 65 64 20  ..); /* defined 
40b0: 69 6e 20 22 73 72 63 2f 65 78 74 2f 76 74 73 68  in "src/ext/vtsh
40c0: 69 6d 2e 63 22 20 28 69 6e 63 6c 75 64 65 64 20  im.c" (included 
40d0: 62 65 6c 6f 77 29 20 2a 2f 0d 0a 0d 0a 53 51 4c  below) */....SQL
40e0: 49 54 45 5f 41 50 49 20 76 6f 69 64 20 2a 57 49  ITE_API void *WI
40f0: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 72 65  NAPI sqlite3_cre
4100: 61 74 65 5f 64 69 73 70 6f 73 61 62 6c 65 5f 6d  ate_disposable_m
4110: 6f 64 75 6c 65 5f 69 6e 74 65 72 6f 70 28 0d 0a  odule_interop(..
4120: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0d 0a    sqlite3 *db,..
4130: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
4140: 61 6d 65 2c 0d 0a 20 20 73 71 6c 69 74 65 33 5f  ame,..  sqlite3_
4150: 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 2c  module *pModule,
4160: 0d 0a 20 20 69 6e 74 20 69 56 65 72 73 69 6f 6e  ..  int iVersion
4170: 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 43 72 65 61  ,..  int (*xCrea
4180: 74 65 29 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  te)(sqlite3*, vo
4190: 69 64 20 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  id *, int, const
41a0: 20 63 68 61 72 20 2a 63 6f 6e 73 74 2a 2c 20 73   char *const*, s
41b0: 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 2a 2c 20  qlite3_vtab **, 
41c0: 63 68 61 72 2a 2a 29 2c 0d 0a 20 20 69 6e 74 20  char**),..  int 
41d0: 28 2a 78 43 6f 6e 6e 65 63 74 29 28 73 71 6c 69  (*xConnect)(sqli
41e0: 74 65 33 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e  te3*, void *, in
41f0: 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63  t, const char *c
4200: 6f 6e 73 74 2a 2c 20 73 71 6c 69 74 65 33 5f 76  onst*, sqlite3_v
4210: 74 61 62 20 2a 2a 2c 20 63 68 61 72 2a 2a 29 2c  tab **, char**),
4220: 0d 0a 20 20 69 6e 74 20 28 2a 78 42 65 73 74 49  ..  int (*xBestI
4230: 6e 64 65 78 29 28 73 71 6c 69 74 65 33 5f 76 74  ndex)(sqlite3_vt
4240: 61 62 20 2a 2c 20 73 71 6c 69 74 65 33 5f 69 6e  ab *, sqlite3_in
4250: 64 65 78 5f 69 6e 66 6f 2a 29 2c 0d 0a 20 20 69  dex_info*),..  i
4260: 6e 74 20 28 2a 78 44 69 73 63 6f 6e 6e 65 63 74  nt (*xDisconnect
4270: 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a  )(sqlite3_vtab *
4280: 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 44 65 73  ),..  int (*xDes
4290: 74 72 6f 79 29 28 73 71 6c 69 74 65 33 5f 76 74  troy)(sqlite3_vt
42a0: 61 62 20 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a  ab *),..  int (*
42b0: 78 4f 70 65 6e 29 28 73 71 6c 69 74 65 33 5f 76  xOpen)(sqlite3_v
42c0: 74 61 62 20 2a 2c 20 73 71 6c 69 74 65 33 5f 76  tab *, sqlite3_v
42d0: 74 61 62 5f 63 75 72 73 6f 72 20 2a 2a 29 2c 0d  tab_cursor **),.
42e0: 0a 20 20 69 6e 74 20 28 2a 78 43 6c 6f 73 65 29  .  int (*xClose)
42f0: 28 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75  (sqlite3_vtab_cu
4300: 72 73 6f 72 2a 29 2c 0d 0a 20 20 69 6e 74 20 28  rsor*),..  int (
4310: 2a 78 46 69 6c 74 65 72 29 28 73 71 6c 69 74 65  *xFilter)(sqlite
4320: 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 2a 2c 20  3_vtab_cursor*, 
4330: 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  int, const char 
4340: 2a 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f  *, int, sqlite3_
4350: 76 61 6c 75 65 20 2a 2a 29 2c 0d 0a 20 20 69 6e  value **),..  in
4360: 74 20 28 2a 78 4e 65 78 74 29 28 73 71 6c 69 74  t (*xNext)(sqlit
4370: 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 2a 29  e3_vtab_cursor*)
4380: 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 45 6f 66 29  ,..  int (*xEof)
4390: 28 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75  (sqlite3_vtab_cu
43a0: 72 73 6f 72 2a 29 2c 0d 0a 20 20 69 6e 74 20 28  rsor*),..  int (
43b0: 2a 78 43 6f 6c 75 6d 6e 29 28 73 71 6c 69 74 65  *xColumn)(sqlite
43c0: 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 2a 2c 20  3_vtab_cursor*, 
43d0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
43e0: 2c 20 69 6e 74 29 2c 0d 0a 20 20 69 6e 74 20 28  , int),..  int (
43f0: 2a 78 52 6f 77 69 64 29 28 73 71 6c 69 74 65 33  *xRowid)(sqlite3
4400: 5f 76 74 61 62 5f 63 75 72 73 6f 72 2a 2c 20 73  _vtab_cursor*, s
4410: 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 2a 29 2c  qlite3_int64 *),
4420: 0d 0a 20 20 69 6e 74 20 28 2a 78 55 70 64 61 74  ..  int (*xUpdat
4430: 65 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20  e)(sqlite3_vtab 
4440: 2a 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f  *, int, sqlite3_
4450: 76 61 6c 75 65 20 2a 2a 2c 20 73 71 6c 69 74 65  value **, sqlite
4460: 33 5f 69 6e 74 36 34 20 2a 29 2c 0d 0a 20 20 69  3_int64 *),..  i
4470: 6e 74 20 28 2a 78 42 65 67 69 6e 29 28 73 71 6c  nt (*xBegin)(sql
4480: 69 74 65 33 5f 76 74 61 62 20 2a 29 2c 0d 0a 20  ite3_vtab *),.. 
4490: 20 69 6e 74 20 28 2a 78 53 79 6e 63 29 28 73 71   int (*xSync)(sq
44a0: 6c 69 74 65 33 5f 76 74 61 62 20 2a 29 2c 0d 0a  lite3_vtab *),..
44b0: 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 29    int (*xCommit)
44c0: 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 29  (sqlite3_vtab *)
44d0: 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 52 6f 6c 6c  ,..  int (*xRoll
44e0: 62 61 63 6b 29 28 73 71 6c 69 74 65 33 5f 76 74  back)(sqlite3_vt
44f0: 61 62 20 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a  ab *),..  int (*
4500: 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 29 28 73  xFindFunction)(s
4510: 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 2c 20 69  qlite3_vtab *, i
4520: 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
4530: 2c 20 76 6f 69 64 20 28 2a 2a 70 78 46 75 6e 63  , void (**pxFunc
4540: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
4550: 74 2a 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33  t*, int, sqlite3
4560: 5f 76 61 6c 75 65 2a 2a 29 2c 20 76 6f 69 64 20  _value**), void 
4570: 2a 2a 70 70 41 72 67 29 2c 0d 0a 20 20 69 6e 74  **ppArg),..  int
4580: 20 28 2a 78 52 65 6e 61 6d 65 29 28 73 71 6c 69   (*xRename)(sqli
4590: 74 65 33 5f 76 74 61 62 20 2a 2c 20 63 6f 6e 73  te3_vtab *, cons
45a0: 74 20 63 68 61 72 20 2a 29 2c 0d 0a 20 20 69 6e  t char *),..  in
45b0: 74 20 28 2a 78 53 61 76 65 70 6f 69 6e 74 29 28  t (*xSavepoint)(
45c0: 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 2c 20  sqlite3_vtab *, 
45d0: 69 6e 74 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78  int),..  int (*x
45e0: 52 65 6c 65 61 73 65 29 28 73 71 6c 69 74 65 33  Release)(sqlite3
45f0: 5f 76 74 61 62 20 2a 2c 20 69 6e 74 29 2c 0d 0a  _vtab *, int),..
4600: 20 20 69 6e 74 20 28 2a 78 52 6f 6c 6c 62 61 63    int (*xRollbac
4610: 6b 54 6f 29 28 73 71 6c 69 74 65 33 5f 76 74 61  kTo)(sqlite3_vta
4620: 62 20 2a 2c 20 69 6e 74 29 2c 0d 0a 20 20 76 6f  b *, int),..  vo
4630: 69 64 20 2a 70 43 6c 69 65 6e 74 44 61 74 61 2c  id *pClientData,
4640: 0d 0a 20 20 76 6f 69 64 28 2a 78 44 65 73 74 72  ..  void(*xDestr
4650: 6f 79 4d 6f 64 75 6c 65 29 28 76 6f 69 64 2a 29  oyModule)(void*)
4660: 0d 0a 29 7b 0d 0a 20 20 69 66 20 28 21 70 4d 6f  ..){..  if (!pMo
4670: 64 75 6c 65 29 20 72 65 74 75 72 6e 20 30 3b 0d  dule) return 0;.
4680: 0a 20 20 6d 65 6d 73 65 74 28 70 4d 6f 64 75 6c  .  memset(pModul
4690: 65 2c 20 30 2c 20 73 69 7a 65 6f 66 28 2a 70 4d  e, 0, sizeof(*pM
46a0: 6f 64 75 6c 65 29 29 3b 0d 0a 20 20 70 4d 6f 64  odule));..  pMod
46b0: 75 6c 65 2d 3e 69 56 65 72 73 69 6f 6e 20 3d 20  ule->iVersion = 
46c0: 69 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 70 4d 6f  iVersion;..  pMo
46d0: 64 75 6c 65 2d 3e 78 43 72 65 61 74 65 20 3d 20  dule->xCreate = 
46e0: 78 43 72 65 61 74 65 3b 0d 0a 20 20 70 4d 6f 64  xCreate;..  pMod
46f0: 75 6c 65 2d 3e 78 43 6f 6e 6e 65 63 74 20 3d 20  ule->xConnect = 
4700: 78 43 6f 6e 6e 65 63 74 3b 0d 0a 20 20 70 4d 6f  xConnect;..  pMo
4710: 64 75 6c 65 2d 3e 78 42 65 73 74 49 6e 64 65 78  dule->xBestIndex
4720: 20 3d 20 78 42 65 73 74 49 6e 64 65 78 3b 0d 0a   = xBestIndex;..
4730: 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 44 69 73 63    pModule->xDisc
4740: 6f 6e 6e 65 63 74 20 3d 20 78 44 69 73 63 6f 6e  onnect = xDiscon
4750: 6e 65 63 74 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65  nect;..  pModule
4760: 2d 3e 78 44 65 73 74 72 6f 79 20 3d 20 78 44 65  ->xDestroy = xDe
4770: 73 74 72 6f 79 3b 0d 0a 20 20 70 4d 6f 64 75 6c  stroy;..  pModul
4780: 65 2d 3e 78 4f 70 65 6e 20 3d 20 78 4f 70 65 6e  e->xOpen = xOpen
4790: 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  ;..  pModule->xC
47a0: 6c 6f 73 65 20 3d 20 78 43 6c 6f 73 65 3b 0d 0a  lose = xClose;..
47b0: 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74    pModule->xFilt
47c0: 65 72 20 3d 20 78 46 69 6c 74 65 72 3b 0d 0a 20  er = xFilter;.. 
47d0: 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20   pModule->xNext 
47e0: 3d 20 78 4e 65 78 74 3b 0d 0a 20 20 70 4d 6f 64  = xNext;..  pMod
47f0: 75 6c 65 2d 3e 78 45 6f 66 20 3d 20 78 45 6f 66  ule->xEof = xEof
4800: 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  ;..  pModule->xC
4810: 6f 6c 75 6d 6e 20 3d 20 78 43 6f 6c 75 6d 6e 3b  olumn = xColumn;
4820: 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f  ..  pModule->xRo
4830: 77 69 64 20 3d 20 78 52 6f 77 69 64 3b 0d 0a 20  wid = xRowid;.. 
4840: 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74   pModule->xUpdat
4850: 65 20 3d 20 78 55 70 64 61 74 65 3b 0d 0a 20 20  e = xUpdate;..  
4860: 70 4d 6f 64 75 6c 65 2d 3e 78 42 65 67 69 6e 20  pModule->xBegin 
4870: 3d 20 78 42 65 67 69 6e 3b 0d 0a 20 20 70 4d 6f  = xBegin;..  pMo
4880: 64 75 6c 65 2d 3e 78 53 79 6e 63 20 3d 20 78 53  dule->xSync = xS
4890: 79 6e 63 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d  ync;..  pModule-
48a0: 3e 78 43 6f 6d 6d 69 74 20 3d 20 78 43 6f 6d 6d  >xCommit = xComm
48b0: 69 74 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e  it;..  pModule->
48c0: 78 52 6f 6c 6c 62 61 63 6b 20 3d 20 78 52 6f 6c  xRollback = xRol
48d0: 6c 62 61 63 6b 3b 0d 0a 20 20 70 4d 6f 64 75 6c  lback;..  pModul
48e0: 65 2d 3e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e  e->xFindFunction
48f0: 20 3d 20 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e   = xFindFunction
4900: 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  ;..  pModule->xR
4910: 65 6e 61 6d 65 20 3d 20 78 52 65 6e 61 6d 65 3b  ename = xRename;
4920: 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 53 61  ..  pModule->xSa
4930: 76 65 70 6f 69 6e 74 20 3d 20 78 53 61 76 65 70  vepoint = xSavep
4940: 6f 69 6e 74 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65  oint;..  pModule
4950: 2d 3e 78 52 65 6c 65 61 73 65 20 3d 20 78 52 65  ->xRelease = xRe
4960: 6c 65 61 73 65 3b 0d 0a 20 20 70 4d 6f 64 75 6c  lease;..  pModul
4970: 65 2d 3e 78 52 6f 6c 6c 62 61 63 6b 54 6f 20 3d  e->xRollbackTo =
4980: 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 3b 0d 0a 20   xRollbackTo;.. 
4990: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f   return sqlite3_
49a0: 63 72 65 61 74 65 5f 64 69 73 70 6f 73 61 62 6c  create_disposabl
49b0: 65 5f 6d 6f 64 75 6c 65 28 64 62 2c 20 7a 4e 61  e_module(db, zNa
49c0: 6d 65 2c 20 70 4d 6f 64 75 6c 65 2c 20 70 43 6c  me, pModule, pCl
49d0: 69 65 6e 74 44 61 74 61 2c 20 78 44 65 73 74 72  ientData, xDestr
49e0: 6f 79 4d 6f 64 75 6c 65 29 3b 0d 0a 7d 0d 0a 23  oyModule);..}..#
49f0: 65 6e 64 69 66 0d 0a 0d 0a 53 51 4c 49 54 45 5f  endif....SQLITE_
4a00: 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73  API int WINAPI s
4a10: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62  qlite3_bind_doub
4a20: 6c 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  le_interop(sqlit
4a30: 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69  e3_stmt *stmt, i
4a40: 6e 74 20 69 43 6f 6c 2c 20 64 6f 75 62 6c 65 20  nt iCol, double 
4a50: 2a 76 61 6c 29 0d 0a 7b 0d 0a 20 20 69 66 20 28  *val)..{..  if (
4a60: 21 76 61 6c 29 20 72 65 74 75 72 6e 20 53 51 4c  !val) return SQL
4a70: 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 72 65  ITE_ERROR;..  re
4a80: 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 62 69 6e  turn sqlite3_bin
4a90: 64 5f 64 6f 75 62 6c 65 28 73 74 6d 74 2c 69 43  d_double(stmt,iC
4aa0: 6f 6c 2c 2a 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a  ol,*val);..}....
4ab0: 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57  SQLITE_API int W
4ac0: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 62 69  INAPI sqlite3_bi
4ad0: 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  nd_int64_interop
4ae0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73  (sqlite3_stmt *s
4af0: 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 73  tmt, int iCol, s
4b00: 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a 76 61 6c  qlite_int64 *val
4b10: 29 0d 0a 7b 0d 0a 20 20 69 66 20 28 21 76 61 6c  )..{..  if (!val
4b20: 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ) return SQLITE_
4b30: 45 52 52 4f 52 3b 0d 0a 20 20 72 65 74 75 72 6e  ERROR;..  return
4b40: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
4b50: 74 36 34 28 73 74 6d 74 2c 69 43 6f 6c 2c 2a 76  t64(stmt,iCol,*v
4b60: 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  al);..}....SQLIT
4b70: 45 5f 41 50 49 20 63 6f 6e 73 74 20 63 68 61 72  E_API const char
4b80: 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65   * WINAPI sqlite
4b90: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
4ba0: 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 71  _name_interop(sq
4bb0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74  lite3_stmt *stmt
4bc0: 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20  , int iCol, int 
4bd0: 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e  *plen)..{..  con
4be0: 73 74 20 63 68 61 72 20 2a 70 76 61 6c 20 3d 20  st char *pval = 
4bf0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
4c00: 61 6d 65 74 65 72 5f 6e 61 6d 65 28 73 74 6d 74  ameter_name(stmt
4c10: 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 69 66 20 28  , iCol);..  if (
4c20: 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 70 76  plen) *plen = pv
4c30: 61 6c 20 3f 20 73 74 72 6c 65 6e 28 70 76 61 6c  al ? strlen(pval
4c40: 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72 6e  ) : 0;..  return
4c50: 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c   pval;..}....SQL
4c60: 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 63 68  ITE_API const ch
4c70: 61 72 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69  ar * WINAPI sqli
4c80: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f  te3_column_name_
4c90: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f  interop(sqlite3_
4ca0: 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20  stmt *stmt, int 
4cb0: 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29  iCol, int *plen)
4cc0: 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61  ..{..  const cha
4cd0: 72 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65  r *pval = sqlite
4ce0: 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73 74  3_column_name(st
4cf0: 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 69 66  mt, iCol);..  if
4d00: 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20   (plen) *plen = 
4d10: 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e 28 70 76  pval ? strlen(pv
4d20: 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75  al) : 0;..  retu
4d30: 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53  rn pval;..}....S
4d40: 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20  QLITE_API const 
4d50: 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71  void * WINAPI sq
4d60: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
4d70: 65 31 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  e16_interop(sqli
4d80: 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20  te3_stmt *stmt, 
4d90: 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70  int iCol, int *p
4da0: 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74  len)..{..  const
4db0: 20 76 6f 69 64 20 2a 70 76 61 6c 20 3d 20 73 71   void *pval = sq
4dc0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
4dd0: 65 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b  e16(stmt, iCol);
4de0: 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70  ..  if (plen) *p
4df0: 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20 77 63 73  len = pval ? wcs
4e00: 6c 65 6e 28 28 77 63 68 61 72 5f 74 20 2a 29 70  len((wchar_t *)p
4e10: 76 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77 63  val) * sizeof(wc
4e20: 68 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 20 20 72  har_t) : 0;..  r
4e30: 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a  eturn pval;..}..
4e40: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e  ..SQLITE_API con
4e50: 73 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49  st char * WINAPI
4e60: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4e70: 64 65 63 6c 74 79 70 65 5f 69 6e 74 65 72 6f 70  decltype_interop
4e80: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73  (sqlite3_stmt *s
4e90: 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69  tmt, int iCol, i
4ea0: 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20  nt *plen)..{..  
4eb0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 76 61 6c  const char *pval
4ec0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
4ed0: 6e 5f 64 65 63 6c 74 79 70 65 28 73 74 6d 74 2c  n_decltype(stmt,
4ee0: 20 69 43 6f 6c 29 3b 0d 0a 20 20 69 66 20 28 70   iCol);..  if (p
4ef0: 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 70 76 61  len) *plen = pva
4f00: 6c 20 3f 20 73 74 72 6c 65 6e 28 70 76 61 6c 29  l ? strlen(pval)
4f10: 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72 6e 20   : 0;..  return 
4f20: 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49  pval;..}....SQLI
4f30: 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 76 6f 69  TE_API const voi
4f40: 64 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74  d * WINAPI sqlit
4f50: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  e3_column_declty
4f60: 70 65 31 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c  pe16_interop(sql
4f70: 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c  ite3_stmt *stmt,
4f80: 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a   int iCol, int *
4f90: 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73  plen)..{..  cons
4fa0: 74 20 76 6f 69 64 20 2a 70 76 61 6c 20 3d 20 73  t void *pval = s
4fb0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
4fc0: 63 6c 74 79 70 65 31 36 28 73 74 6d 74 2c 20 69  cltype16(stmt, i
4fd0: 43 6f 6c 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65  Col);..  if (ple
4fe0: 6e 29 20 2a 70 6c 65 6e 20 3d 20 70 76 61 6c 20  n) *plen = pval 
4ff0: 3f 20 77 63 73 6c 65 6e 28 28 77 63 68 61 72 5f  ? wcslen((wchar_
5000: 74 20 2a 29 70 76 61 6c 29 20 2a 20 73 69 7a 65  t *)pval) * size
5010: 6f 66 28 77 63 68 61 72 5f 74 29 20 3a 20 30 3b  of(wchar_t) : 0;
5020: 0d 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b  ..  return pval;
5030: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
5040: 49 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71  I void WINAPI sq
5050: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75  lite3_column_dou
5060: 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  ble_interop(sqli
5070: 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20  te3_stmt *stmt, 
5080: 69 6e 74 20 69 43 6f 6c 2c 20 64 6f 75 62 6c 65  int iCol, double
5090: 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 20 20 69 66 20   *val)..{..  if 
50a0: 28 21 76 61 6c 29 20 72 65 74 75 72 6e 3b 0d 0a  (!val) return;..
50b0: 20 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74 65 33    *val = sqlite3
50c0: 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 73  _column_double(s
50d0: 74 6d 74 2c 69 43 6f 6c 29 3b 0d 0a 7d 0d 0a 0d  tmt,iCol);..}...
50e0: 0a 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69 64  .SQLITE_API void
50f0: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
5100: 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 5f 69 6e 74  column_int64_int
5110: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
5120: 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f  t *stmt, int iCo
5130: 6c 2c 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  l, sqlite_int64 
5140: 2a 76 61 6c 29 0d 0a 7b 0d 0a 20 20 69 66 20 28  *val)..{..  if (
5150: 21 76 61 6c 29 20 72 65 74 75 72 6e 3b 0d 0a 20  !val) return;.. 
5160: 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f   *val = sqlite3_
5170: 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 73 74 6d  column_int64(stm
5180: 74 2c 69 43 6f 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53  t,iCol);..}....S
5190: 51 4c 49 54 45 5f 41 50 49 20 76 6f 69 64 20 57  QLITE_API void W
51a0: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 6c 61  INAPI sqlite3_la
51b0: 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 5f  st_insert_rowid_
51c0: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 20  interop(sqlite3 
51d0: 2a 64 62 2c 20 73 71 6c 69 74 65 5f 69 6e 74 36  *db, sqlite_int6
51e0: 34 20 2a 72 6f 77 49 64 29 0d 0a 7b 0d 0a 20 20  4 *rowId)..{..  
51f0: 69 66 20 28 21 72 6f 77 49 64 29 20 72 65 74 75  if (!rowId) retu
5200: 72 6e 3b 0d 0a 20 20 2a 72 6f 77 49 64 20 3d 20  rn;..  *rowId = 
5210: 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
5220: 65 72 74 5f 72 6f 77 69 64 28 64 62 29 3b 0d 0a  ert_rowid(db);..
5230: 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20  }....SQLITE_API 
5240: 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69  void WINAPI sqli
5250: 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 5f  te3_memory_used_
5260: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 5f 69  interop(sqlite_i
5270: 6e 74 36 34 20 2a 6e 42 79 74 65 73 29 0d 0a 7b  nt64 *nBytes)..{
5280: 0d 0a 20 20 69 66 20 28 21 6e 42 79 74 65 73 29  ..  if (!nBytes)
5290: 20 72 65 74 75 72 6e 3b 0d 0a 20 20 2a 6e 42 79   return;..  *nBy
52a0: 74 65 73 20 3d 20 73 71 6c 69 74 65 33 5f 6d 65  tes = sqlite3_me
52b0: 6d 6f 72 79 5f 75 73 65 64 28 29 3b 0d 0a 7d 0d  mory_used();..}.
52c0: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76 6f  ...SQLITE_API vo
52d0: 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  id WINAPI sqlite
52e0: 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74  3_memory_highwat
52f0: 65 72 5f 69 6e 74 65 72 6f 70 28 69 6e 74 20 72  er_interop(int r
5300: 65 73 65 74 46 6c 61 67 2c 20 73 71 6c 69 74 65  esetFlag, sqlite
5310: 5f 69 6e 74 36 34 20 2a 6e 42 79 74 65 73 29 0d  _int64 *nBytes).
5320: 0a 7b 0d 0a 20 20 69 66 20 28 21 6e 42 79 74 65  .{..  if (!nByte
5330: 73 29 20 72 65 74 75 72 6e 3b 0d 0a 20 20 2a 6e  s) return;..  *n
5340: 42 79 74 65 73 20 3d 20 73 71 6c 69 74 65 33 5f  Bytes = sqlite3_
5350: 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72  memory_highwater
5360: 28 72 65 73 65 74 46 6c 61 67 29 3b 0d 0a 7d 0d  (resetFlag);..}.
5370: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f  ...SQLITE_API co
5380: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
5390: 72 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74  r * WINAPI sqlit
53a0: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69  e3_column_text_i
53b0: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73  nterop(sqlite3_s
53c0: 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69  tmt *stmt, int i
53d0: 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d  Col, int *plen).
53e0: 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 75 6e 73 69  .{..  const unsi
53f0: 67 6e 65 64 20 63 68 61 72 20 2a 70 76 61 6c 20  gned char *pval 
5400: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
5410: 5f 74 65 78 74 28 73 74 6d 74 2c 20 69 43 6f 6c  _text(stmt, iCol
5420: 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20  );..  if (plen) 
5430: 2a 70 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 5f  *plen = sqlite3_
5440: 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d  column_bytes(stm
5450: 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 72 65 74  t, iCol);..  ret
5460: 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a  urn pval;..}....
5470: 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74  SQLITE_API const
5480: 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73   void * WINAPI s
5490: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
54a0: 78 74 31 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c  xt16_interop(sql
54b0: 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c  ite3_stmt *stmt,
54c0: 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a   int iCol, int *
54d0: 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73  plen)..{..  cons
54e0: 74 20 76 6f 69 64 20 2a 70 76 61 6c 20 3d 20 73  t void *pval = s
54f0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
5500: 78 74 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29  xt16(stmt, iCol)
5510: 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a  ;..  if (plen) *
5520: 70 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63  plen = sqlite3_c
5530: 6f 6c 75 6d 6e 5f 62 79 74 65 73 31 36 28 73 74  olumn_bytes16(st
5540: 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 72 65  mt, iCol);..  re
5550: 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d  turn pval;..}...
5560: 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20  .SQLITE_API int 
5570: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 66  WINAPI sqlite3_f
5580: 69 6e 61 6c 69 7a 65 5f 69 6e 74 65 72 6f 70 28  inalize_interop(
5590: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74  sqlite3_stmt *st
55a0: 6d 74 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72 65  mt)..{..  int re
55b0: 74 3b 0d 0a 23 69 66 20 21 64 65 66 69 6e 65 64  t;..#if !defined
55c0: 28 49 4e 54 45 52 4f 50 5f 4c 45 47 41 43 59 5f  (INTEROP_LEGACY_
55d0: 43 4c 4f 53 45 29 20 26 26 20 53 51 4c 49 54 45  CLOSE) && SQLITE
55e0: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20  _VERSION_NUMBER 
55f0: 3e 3d 20 33 30 30 37 30 31 34 0d 0a 0d 0a 23 69  >= 3007014....#i
5600: 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f  f defined(INTERO
5610: 50 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e 54  P_DEBUG) && (INT
5620: 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54  EROP_DEBUG & INT
5630: 45 52 4f 50 5f 44 45 42 55 47 5f 46 49 4e 41 4c  EROP_DEBUG_FINAL
5640: 49 5a 45 29 0d 0a 20 20 56 64 62 65 20 2a 70 20  IZE)..  Vdbe *p 
5650: 3d 20 28 56 64 62 65 20 2a 29 73 74 6d 74 3b 0d  = (Vdbe *)stmt;.
5660: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d  .  sqlite3 *db =
5670: 20 70 20 3f 20 70 2d 3e 64 62 20 3a 20 30 3b 0d   p ? p->db : 0;.
5680: 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f  .  sqlite3Intero
5690: 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f  pDebug("sqlite3_
56a0: 66 69 6e 61 6c 69 7a 65 5f 69 6e 74 65 72 6f 70  finalize_interop
56b0: 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69  (): calling sqli
56c0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 25 70 2c  te3_finalize(%p,
56d0: 20 25 70 29 2e 2e 2e 5c 6e 22 2c 20 64 62 2c 20   %p)...\n", db, 
56e0: 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  stmt);..#endif..
56f0: 0d 0a 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65  ..  ret = sqlite
5700: 33 5f 66 69 6e 61 6c 69 7a 65 28 73 74 6d 74 29  3_finalize(stmt)
5710: 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64  ;....#if defined
5720: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20  (INTEROP_DEBUG) 
5730: 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  && (INTEROP_DEBU
5740: 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55  G & INTEROP_DEBU
5750: 47 5f 46 49 4e 41 4c 49 5a 45 29 0d 0a 20 20 73  G_FINALIZE)..  s
5760: 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62  qlite3InteropDeb
5770: 75 67 28 22 73 71 6c 69 74 65 33 5f 66 69 6e 61  ug("sqlite3_fina
5780: 6c 69 7a 65 5f 69 6e 74 65 72 6f 70 28 29 3a 20  lize_interop(): 
5790: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
57a0: 28 25 70 2c 20 25 70 29 20 72 65 74 75 72 6e 65  (%p, %p) returne
57b0: 64 20 25 64 2e 5c 6e 22 2c 20 64 62 2c 20 73 74  d %d.\n", db, st
57c0: 6d 74 2c 20 72 65 74 29 3b 0d 0a 23 65 6e 64 69  mt, ret);..#endi
57d0: 66 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 72 65  f....  return re
57e0: 74 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 56 64 62  t;..#else..  Vdb
57f0: 65 20 2a 70 3b 0d 0a 20 20 72 65 74 20 3d 20 53  e *p;..  ret = S
5800: 51 4c 49 54 45 5f 4f 4b 3b 0d 0a 0d 0a 20 20 70  QLITE_OK;....  p
5810: 20 3d 20 28 56 64 62 65 20 2a 29 73 74 6d 74 3b   = (Vdbe *)stmt;
5820: 0d 0a 20 20 69 66 20 28 70 29 0d 0a 20 20 7b 0d  ..  if (p)..  {.
5830: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 2a 64 62  .    sqlite3 *db
5840: 20 3d 20 70 2d 3e 64 62 3b 0d 0a 0d 0a 20 20 20   = p->db;....   
5850: 20 69 66 20 28 64 62 20 21 3d 20 4e 55 4c 4c 29   if (db != NULL)
5860: 0d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ..      sqlite3_
5870: 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e  mutex_enter(db->
5880: 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 69  mutex);....    i
5890: 66 20 28 28 70 2d 3e 6d 61 67 69 63 20 3d 3d 20  f ((p->magic == 
58a0: 56 44 42 45 5f 4d 41 47 49 43 5f 44 45 41 44 29  VDBE_MAGIC_DEAD)
58b0: 20 26 26 20 28 64 62 20 3d 3d 20 4e 55 4c 4c 29   && (db == NULL)
58c0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
58d0: 73 71 6c 69 74 65 33 44 62 46 72 65 65 5f 69 6e  sqlite3DbFree_in
58e0: 74 65 72 6f 70 28 64 62 2c 20 70 29 3b 0d 0a 20  terop(db, p);.. 
58f0: 20 20 20 7d 0d 0a 20 20 20 20 65 6c 73 65 0d 0a     }..    else..
5900: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
5910: 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c   = sqlite3_final
5920: 69 7a 65 28 73 74 6d 74 29 3b 0d 0a 20 20 20 20  ize(stmt);..    
5930: 7d 0d 0a 0d 0a 20 20 20 20 69 66 20 28 64 62 20  }....    if (db 
5940: 21 3d 20 4e 55 4c 4c 29 0d 0a 20 20 20 20 20 20  != NULL)..      
5950: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65  sqlite3_mutex_le
5960: 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d  ave(db->mutex);.
5970: 0a 20 20 7d 0d 0a 0d 0a 20 20 72 65 74 75 72 6e  .  }....  return
5980: 20 72 65 74 3b 0d 0a 23 65 6e 64 69 66 0d 0a 7d   ret;..#endif..}
5990: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69  ....SQLITE_API i
59a0: 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  nt WINAPI sqlite
59b0: 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 5f  3_backup_finish_
59c0: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f  interop(sqlite3_
59d0: 62 61 63 6b 75 70 20 2a 70 29 0d 0a 7b 0d 0a 20  backup *p)..{.. 
59e0: 20 69 6e 74 20 72 65 74 3b 0d 0a 0d 0a 23 69 66   int ret;....#if
59f0: 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50   defined(INTEROP
5a00: 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e 54 45  _DEBUG) && (INTE
5a10: 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45  ROP_DEBUG & INTE
5a20: 52 4f 50 5f 44 45 42 55 47 5f 42 41 43 4b 55 50  ROP_DEBUG_BACKUP
5a30: 5f 46 49 4e 49 53 48 29 0d 0a 20 20 73 71 6c 69  _FINISH)..  sqli
5a40: 74 65 33 2a 20 70 44 65 73 74 44 62 20 3d 20 70  te3* pDestDb = p
5a50: 20 3f 20 70 2d 3e 70 44 65 73 74 44 62 20 3a 20   ? p->pDestDb : 
5a60: 30 3b 0d 0a 20 20 73 71 6c 69 74 65 33 2a 20 70  0;..  sqlite3* p
5a70: 53 72 63 44 62 20 3d 20 70 20 3f 20 70 2d 3e 70  SrcDb = p ? p->p
5a80: 53 72 63 44 62 20 3a 20 30 3b 0d 0a 20 20 73 71  SrcDb : 0;..  sq
5a90: 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75  lite3InteropDebu
5aa0: 67 28 22 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  g("sqlite3_backu
5ab0: 70 5f 66 69 6e 69 73 68 5f 69 6e 74 65 72 6f 70  p_finish_interop
5ac0: 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69  (): calling sqli
5ad0: 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73  te3_backup_finis
5ae0: 68 28 25 70 2c 20 25 70 2c 20 25 70 29 2e 2e 2e  h(%p, %p, %p)...
5af0: 5c 6e 22 2c 20 70 44 65 73 74 44 62 2c 20 70 53  \n", pDestDb, pS
5b00: 72 63 44 62 2c 20 70 29 3b 0d 0a 23 65 6e 64 69  rcDb, p);..#endi
5b10: 66 0d 0a 0d 0a 20 20 72 65 74 20 3d 20 73 71 6c  f....  ret = sql
5b20: 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69  ite3_backup_fini
5b30: 73 68 28 70 29 3b 0d 0a 0d 0a 23 69 66 20 64 65  sh(p);....#if de
5b40: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45  fined(INTEROP_DE
5b50: 42 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50  BUG) && (INTEROP
5b60: 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50  _DEBUG & INTEROP
5b70: 5f 44 45 42 55 47 5f 42 41 43 4b 55 50 5f 46 49  _DEBUG_BACKUP_FI
5b80: 4e 49 53 48 29 0d 0a 20 20 73 71 6c 69 74 65 33  NISH)..  sqlite3
5b90: 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71  InteropDebug("sq
5ba0: 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e  lite3_backup_fin
5bb0: 69 73 68 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73  ish_interop(): s
5bc0: 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69  qlite3_backup_fi
5bd0: 6e 69 73 68 28 25 70 2c 20 25 70 2c 20 25 70 29  nish(%p, %p, %p)
5be0: 20 72 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22   returned %d.\n"
5bf0: 2c 20 70 44 65 73 74 44 62 2c 20 70 53 72 63 44  , pDestDb, pSrcD
5c00: 62 2c 20 70 2c 20 72 65 74 29 3b 0d 0a 23 65 6e  b, p, ret);..#en
5c10: 64 69 66 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20  dif....  return 
5c20: 72 65 74 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  ret;..}....SQLIT
5c30: 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49  E_API int WINAPI
5c40: 20 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 63 6c   sqlite3_blob_cl
5c50: 6f 73 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  ose_interop(sqli
5c60: 74 65 33 5f 62 6c 6f 62 20 2a 70 29 0d 0a 7b 0d  te3_blob *p)..{.
5c70: 0a 20 20 69 6e 74 20 72 65 74 3b 0d 0a 0d 0a 23  .  int ret;....#
5c80: 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52  if defined(INTER
5c90: 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e  OP_DEBUG) && (IN
5ca0: 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e  TEROP_DEBUG & IN
5cb0: 54 45 52 4f 50 5f 44 45 42 55 47 5f 42 4c 4f 42  TEROP_DEBUG_BLOB
5cc0: 5f 43 4c 4f 53 45 29 0d 0a 20 20 73 71 6c 69 74  _CLOSE)..  sqlit
5cd0: 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22  e3InteropDebug("
5ce0: 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 63 6c 6f  sqlite3_blob_clo
5cf0: 73 65 5f 69 6e 74 65 72 6f 70 28 29 3a 20 63 61  se_interop(): ca
5d00: 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f 62 6c  lling sqlite3_bl
5d10: 6f 62 5f 63 6c 6f 73 65 28 25 70 29 2e 2e 2e 5c  ob_close(%p)...\
5d20: 6e 22 2c 20 70 29 3b 0d 0a 23 65 6e 64 69 66 0d  n", p);..#endif.
5d30: 0a 0d 0a 20 20 72 65 74 20 3d 20 73 71 6c 69 74  ...  ret = sqlit
5d40: 65 33 5f 62 6c 6f 62 5f 63 6c 6f 73 65 28 70 29  e3_blob_close(p)
5d50: 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64  ;....#if defined
5d60: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20  (INTEROP_DEBUG) 
5d70: 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  && (INTEROP_DEBU
5d80: 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55  G & INTEROP_DEBU
5d90: 47 5f 42 4c 4f 42 5f 43 4c 4f 53 45 29 0d 0a 20  G_BLOB_CLOSE).. 
5da0: 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44   sqlite3InteropD
5db0: 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 62 6c  ebug("sqlite3_bl
5dc0: 6f 62 5f 63 6c 6f 73 65 5f 69 6e 74 65 72 6f 70  ob_close_interop
5dd0: 28 29 3a 20 73 71 6c 69 74 65 33 5f 62 6c 6f 62  (): sqlite3_blob
5de0: 5f 63 6c 6f 73 65 28 25 70 29 20 72 65 74 75 72  _close(%p) retur
5df0: 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 70 2c 20 72  ned %d.\n", p, r
5e00: 65 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  et);..#endif....
5e10: 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d    return ret;..}
5e20: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69  ....SQLITE_API i
5e30: 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  nt WINAPI sqlite
5e40: 33 5f 72 65 73 65 74 5f 69 6e 74 65 72 6f 70 28  3_reset_interop(
5e50: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74  sqlite3_stmt *st
5e60: 6d 74 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72 65  mt)..{..  int re
5e70: 74 3b 0d 0a 23 69 66 20 21 64 65 66 69 6e 65 64  t;..#if !defined
5e80: 28 49 4e 54 45 52 4f 50 5f 4c 45 47 41 43 59 5f  (INTEROP_LEGACY_
5e90: 43 4c 4f 53 45 29 20 26 26 20 53 51 4c 49 54 45  CLOSE) && SQLITE
5ea0: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20  _VERSION_NUMBER 
5eb0: 3e 3d 20 33 30 30 37 30 31 34 0d 0a 0d 0a 23 69  >= 3007014....#i
5ec0: 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f  f defined(INTERO
5ed0: 50 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e 54  P_DEBUG) && (INT
5ee0: 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54  EROP_DEBUG & INT
5ef0: 45 52 4f 50 5f 44 45 42 55 47 5f 52 45 53 45 54  EROP_DEBUG_RESET
5f00: 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65  )..  sqlite3Inte
5f10: 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65  ropDebug("sqlite
5f20: 33 5f 72 65 73 65 74 5f 69 6e 74 65 72 6f 70 28  3_reset_interop(
5f30: 29 3a 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74  ): calling sqlit
5f40: 65 33 5f 72 65 73 65 74 28 25 70 29 2e 2e 2e 5c  e3_reset(%p)...\
5f50: 6e 22 2c 20 73 74 6d 74 29 3b 0d 0a 23 65 6e 64  n", stmt);..#end
5f60: 69 66 0d 0a 0d 0a 20 20 72 65 74 20 3d 20 73 71  if....  ret = sq
5f70: 6c 69 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74  lite3_reset(stmt
5f80: 29 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65  );....#if define
5f90: 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29  d(INTEROP_DEBUG)
5fa0: 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42   && (INTEROP_DEB
5fb0: 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42  UG & INTEROP_DEB
5fc0: 55 47 5f 52 45 53 45 54 29 0d 0a 20 20 73 71 6c  UG_RESET)..  sql
5fd0: 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67  ite3InteropDebug
5fe0: 28 22 73 71 6c 69 74 65 33 5f 72 65 73 65 74 5f  ("sqlite3_reset_
5ff0: 69 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c 69 74  interop(): sqlit
6000: 65 33 5f 72 65 73 65 74 28 25 70 29 20 72 65 74  e3_reset(%p) ret
6010: 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 73 74  urned %d.\n", st
6020: 6d 74 2c 20 72 65 74 29 3b 0d 0a 23 65 6e 64 69  mt, ret);..#endi
6030: 66 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 72 65  f....  return re
6040: 74 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 69 66 20  t;..#else..  if 
6050: 28 73 74 6d 74 20 26 26 20 28 28 56 64 62 65 20  (stmt && ((Vdbe 
6060: 2a 29 73 74 6d 74 29 2d 3e 6d 61 67 69 63 20 3d  *)stmt)->magic =
6070: 3d 20 56 44 42 45 5f 4d 41 47 49 43 5f 44 45 41  = VDBE_MAGIC_DEA
6080: 44 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  D) return SQLITE
6090: 5f 53 43 48 45 4d 41 3b 0d 0a 20 20 72 65 74 20  _SCHEMA;..  ret 
60a0: 3d 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28  = sqlite3_reset(
60b0: 73 74 6d 74 29 3b 0d 0a 20 20 72 65 74 75 72 6e  stmt);..  return
60c0: 20 72 65 74 3b 0d 0a 23 65 6e 64 69 66 0d 0a 7d   ret;..#endif..}
60d0: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69  ....SQLITE_API i
60e0: 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  nt WINAPI sqlite
60f0: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
6100: 6e 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  n_interop(sqlite
6110: 33 20 2a 70 73 71 6c 2c 20 63 6f 6e 73 74 20 63  3 *psql, const c
6120: 68 61 72 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61  har *zFunctionNa
6130: 6d 65 2c 20 69 6e 74 20 6e 41 72 67 2c 20 69 6e  me, int nArg, in
6140: 74 20 65 54 65 78 74 52 65 70 2c 20 76 6f 69 64  t eTextRep, void
6150: 20 2a 70 76 55 73 65 72 2c 20 53 51 4c 49 54 45   *pvUser, SQLITE
6160: 55 53 45 52 46 55 4e 43 20 66 75 6e 63 2c 20 53  USERFUNC func, S
6170: 51 4c 49 54 45 55 53 45 52 46 55 4e 43 20 66 75  QLITEUSERFUNC fu
6180: 6e 63 73 74 65 70 2c 20 53 51 4c 49 54 45 46 55  ncstep, SQLITEFU
6190: 4e 43 46 49 4e 41 4c 20 66 75 6e 63 66 69 6e 61  NCFINAL funcfina
61a0: 6c 2c 20 69 6e 74 20 6e 65 65 64 43 6f 6c 6c 53  l, int needCollS
61b0: 65 71 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 6e 3b  eq)..{..  int n;
61c0: 0d 0a 0d 0a 20 20 69 66 20 28 65 54 65 78 74 52  ....  if (eTextR
61d0: 65 70 20 3d 3d 20 53 51 4c 49 54 45 5f 55 54 46  ep == SQLITE_UTF
61e0: 31 36 29 0d 0a 20 20 20 20 65 54 65 78 74 52 65  16)..    eTextRe
61f0: 70 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 31 36  p = SQLITE_UTF16
6200: 4e 41 54 49 56 45 3b 0d 0a 0d 0a 20 20 6e 20 3d  NATIVE;....  n =
6210: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
6220: 66 75 6e 63 74 69 6f 6e 28 70 73 71 6c 2c 20 7a  function(psql, z
6230: 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41  FunctionName, nA
6240: 72 67 2c 20 65 54 65 78 74 52 65 70 2c 20 70 76  rg, eTextRep, pv
6250: 55 73 65 72 2c 20 66 75 6e 63 2c 20 66 75 6e 63  User, func, func
6260: 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29  step, funcfinal)
6270: 3b 0d 0a 20 20 69 66 20 28 6e 20 3d 3d 20 53 51  ;..  if (n == SQ
6280: 4c 49 54 45 5f 4f 4b 29 0d 0a 20 20 7b 0d 0a 20  LITE_OK)..  {.. 
6290: 20 20 20 69 66 20 28 6e 65 65 64 43 6f 6c 6c 53     if (needCollS
62a0: 65 71 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  eq)..    {..    
62b0: 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63    FuncDef *pFunc
62c0: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 46 75   = sqlite3FindFu
62d0: 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  nction(..       
62e0: 20 20 20 70 73 71 6c 2c 20 7a 46 75 6e 63 74 69     psql, zFuncti
62f0: 6f 6e 4e 61 6d 65 2c 0d 0a 23 69 66 20 53 51 4c  onName,..#if SQL
6300: 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  ITE_VERSION_NUMB
6310: 45 52 20 3c 20 33 30 31 32 30 30 30 0d 0a 20 20  ER < 3012000..  
6320: 20 20 20 20 20 20 20 20 73 74 72 6c 65 6e 28 7a          strlen(z
6330: 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 29 2c 0d 0a  FunctionName),..
6340: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
6350: 20 20 6e 41 72 67 2c 20 65 54 65 78 74 52 65 70    nArg, eTextRep
6360: 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20 69 66 28  , 0);..      if(
6370: 20 70 46 75 6e 63 20 29 0d 0a 20 20 20 20 20 20   pFunc )..      
6380: 7b 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45  {..#if SQLITE_VE
6390: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20  RSION_NUMBER >= 
63a0: 33 30 30 38 30 30 31 0d 0a 20 20 20 20 20 20 20  3008001..       
63b0: 20 70 46 75 6e 63 2d 3e 66 75 6e 63 46 6c 61 67   pFunc->funcFlag
63c0: 73 20 7c 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43  s |= SQLITE_FUNC
63d0: 5f 4e 45 45 44 43 4f 4c 4c 3b 0d 0a 23 65 6c 73  _NEEDCOLL;..#els
63e0: 65 0d 0a 20 20 20 20 20 20 20 20 70 46 75 6e 63  e..        pFunc
63f0: 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54  ->flags |= SQLIT
6400: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 3b  E_FUNC_NEEDCOLL;
6410: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
6420: 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d  }..    }..  }...
6430: 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 7d 0d  .  return n;..}.
6440: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76 6f  ...SQLITE_API vo
6450: 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  id WINAPI sqlite
6460: 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69  3_value_double_i
6470: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 76  nterop(sqlite3_v
6480: 61 6c 75 65 20 2a 70 76 61 6c 2c 20 64 6f 75 62  alue *pval, doub
6490: 6c 65 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 20 20 69  le *val)..{..  i
64a0: 66 20 28 21 76 61 6c 29 20 72 65 74 75 72 6e 3b  f (!val) return;
64b0: 0d 0a 20 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74  ..  *val = sqlit
64c0: 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28  e3_value_double(
64d0: 70 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c  pval);..}....SQL
64e0: 49 54 45 5f 41 50 49 20 76 6f 69 64 20 57 49 4e  ITE_API void WIN
64f0: 41 50 49 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  API sqlite3_valu
6500: 65 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  e_int64_interop(
6510: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
6520: 76 61 6c 2c 20 73 71 6c 69 74 65 5f 69 6e 74 36  val, sqlite_int6
6530: 34 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 20 20 69 66  4 *val)..{..  if
6540: 20 28 21 76 61 6c 29 20 72 65 74 75 72 6e 3b 0d   (!val) return;.
6550: 0a 20 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74 65  .  *val = sqlite
6560: 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28 70 76  3_value_int64(pv
6570: 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  al);..}....SQLIT
6580: 45 5f 41 50 49 20 63 6f 6e 73 74 20 75 6e 73 69  E_API const unsi
6590: 67 6e 65 64 20 63 68 61 72 20 2a 20 57 49 4e 41  gned char * WINA
65a0: 50 49 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  PI sqlite3_value
65b0: 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 71  _text_interop(sq
65c0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 76 61 6c  lite3_value *val
65d0: 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d  , int *plen)..{.
65e0: 0a 20 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  .  const unsigne
65f0: 64 20 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73  d char *pval = s
6600: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
6610: 74 28 76 61 6c 29 3b 0d 0a 20 20 69 66 20 28 70  t(val);..  if (p
6620: 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 73 71 6c  len) *plen = sql
6630: 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73  ite3_value_bytes
6640: 28 76 61 6c 29 3b 0d 0a 20 20 72 65 74 75 72 6e  (val);..  return
6650: 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c   pval;..}....SQL
6660: 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 76 6f  ITE_API const vo
6670: 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69  id * WINAPI sqli
6680: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36  te3_value_text16
6690: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
66a0: 5f 76 61 6c 75 65 20 2a 76 61 6c 2c 20 69 6e 74  _value *val, int
66b0: 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f   *plen)..{..  co
66c0: 6e 73 74 20 76 6f 69 64 20 2a 70 76 61 6c 20 3d  nst void *pval =
66d0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
66e0: 65 78 74 31 36 28 76 61 6c 29 3b 0d 0a 20 20 69  ext16(val);..  i
66f0: 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d  f (plen) *plen =
6700: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62   sqlite3_value_b
6710: 79 74 65 73 31 36 28 76 61 6c 29 3b 0d 0a 20 20  ytes16(val);..  
6720: 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d  return pval;..}.
6730: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76 6f  ...SQLITE_API vo
6740: 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  id WINAPI sqlite
6750: 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 5f  3_result_double_
6760: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f  interop(sqlite3_
6770: 63 6f 6e 74 65 78 74 20 2a 70 63 74 78 2c 20 64  context *pctx, d
6780: 6f 75 62 6c 65 20 2a 76 61 6c 29 0d 0a 7b 0d 0a  ouble *val)..{..
6790: 20 20 69 66 20 28 21 76 61 6c 29 20 72 65 74 75    if (!val) retu
67a0: 72 6e 3b 0d 0a 20 20 73 71 6c 69 74 65 33 5f 72  rn;..  sqlite3_r
67b0: 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 70 63 74  esult_double(pct
67c0: 78 2c 20 2a 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a  x, *val);..}....
67d0: 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69 64 20  SQLITE_API void 
67e0: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 72  WINAPI sqlite3_r
67f0: 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e 74 65  esult_int64_inte
6800: 72 6f 70 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  rop(sqlite3_cont
6810: 65 78 74 20 2a 70 63 74 78 2c 20 73 71 6c 69 74  ext *pctx, sqlit
6820: 65 5f 69 6e 74 36 34 20 2a 76 61 6c 29 0d 0a 7b  e_int64 *val)..{
6830: 0d 0a 20 20 69 66 20 28 21 76 61 6c 29 20 72 65  ..  if (!val) re
6840: 74 75 72 6e 3b 0d 0a 20 20 73 71 6c 69 74 65 33  turn;..  sqlite3
6850: 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 70 63  _result_int64(pc
6860: 74 78 2c 20 2a 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d  tx, *val);..}...
6870: 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20  .SQLITE_API int 
6880: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63  WINAPI sqlite3_c
6890: 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61  ontext_collcompa
68a0: 72 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  re_interop(sqlit
68b0: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 74 78 2c  e3_context *ctx,
68c0: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 31 2c   const void *p1,
68d0: 20 69 6e 74 20 70 31 6c 65 6e 2c 20 63 6f 6e 73   int p1len, cons
68e0: 74 20 76 6f 69 64 20 2a 70 32 2c 20 69 6e 74 20  t void *p2, int 
68f0: 70 32 6c 65 6e 29 0d 0a 7b 0d 0a 23 69 66 20 53  p2len)..{..#if S
6900: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
6910: 4d 42 45 52 20 3e 3d 20 33 30 30 38 30 30 37 0d  MBER >= 3008007.
6920: 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c  .  CollSeq *pCol
6930: 6c 20 3d 20 63 74 78 20 3f 20 73 71 6c 69 74 65  l = ctx ? sqlite
6940: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
6950: 63 74 78 29 20 3a 20 30 3b 0d 0a 23 65 6c 73 65  ctx) : 0;..#else
6960: 0d 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f  ..  CollSeq *pCo
6970: 6c 6c 20 3d 20 63 74 78 20 3f 20 63 74 78 2d 3e  ll = ctx ? ctx->
6980: 70 43 6f 6c 6c 20 3a 20 30 3b 0d 0a 23 65 6e 64  pColl : 0;..#end
6990: 69 66 0d 0a 20 20 69 66 20 28 21 63 74 78 20 7c  if..  if (!ctx |
69a0: 7c 20 21 63 74 78 2d 3e 70 46 75 6e 63 29 20 72  | !ctx->pFunc) r
69b0: 65 74 75 72 6e 20 34 3b 20 2f 2a 20 45 52 52 4f  eturn 4; /* ERRO
69c0: 52 20 2a 2f 0d 0a 20 20 69 66 20 28 21 70 43 6f  R */..  if (!pCo
69d0: 6c 6c 20 7c 7c 20 21 70 43 6f 6c 6c 2d 3e 78 43  ll || !pColl->xC
69e0: 6d 70 29 20 72 65 74 75 72 6e 20 33 3b 20 2f 2a  mp) return 3; /*
69f0: 20 45 52 52 4f 52 20 2a 2f 0d 0a 23 69 66 20 53   ERROR */..#if S
6a00: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
6a10: 4d 42 45 52 20 3e 3d 20 33 30 30 38 30 30 31 0d  MBER >= 3008001.
6a20: 0a 20 20 69 66 20 28 28 63 74 78 2d 3e 70 46 75  .  if ((ctx->pFu
6a30: 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26 20  nc->funcFlags & 
6a40: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
6a50: 43 4f 4c 4c 29 20 3d 3d 20 30 29 20 72 65 74 75  COLL) == 0) retu
6a60: 72 6e 20 32 3b 20 2f 2a 20 45 52 52 4f 52 20 2a  rn 2; /* ERROR *
6a70: 2f 0d 0a 23 65 6c 73 65 0d 0a 20 20 69 66 20 28  /..#else..  if (
6a80: 28 63 74 78 2d 3e 70 46 75 6e 63 2d 3e 66 6c 61  (ctx->pFunc->fla
6a90: 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43  gs & SQLITE_FUNC
6aa0: 5f 4e 45 45 44 43 4f 4c 4c 29 20 3d 3d 20 30 29  _NEEDCOLL) == 0)
6ab0: 20 72 65 74 75 72 6e 20 32 3b 20 2f 2a 20 45 52   return 2; /* ER
6ac0: 52 4f 52 20 2a 2f 0d 0a 23 65 6e 64 69 66 0d 0a  ROR */..#endif..
6ad0: 20 20 72 65 74 75 72 6e 20 70 43 6f 6c 6c 2d 3e    return pColl->
6ae0: 78 43 6d 70 28 70 43 6f 6c 6c 2d 3e 70 55 73 65  xCmp(pColl->pUse
6af0: 72 2c 20 70 31 6c 65 6e 2c 20 70 31 2c 20 70 32  r, p1len, p1, p2
6b00: 6c 65 6e 2c 20 70 32 29 3b 0d 0a 7d 0d 0a 0d 0a  len, p2);..}....
6b10: 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74  SQLITE_API const
6b20: 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49 20 73   char * WINAPI s
6b30: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63  qlite3_context_c
6b40: 6f 6c 6c 73 65 71 5f 69 6e 74 65 72 6f 70 28 73  ollseq_interop(s
6b50: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
6b60: 63 74 78 2c 20 69 6e 74 20 2a 70 74 79 70 65 2c  ctx, int *ptype,
6b70: 20 69 6e 74 20 2a 65 6e 63 2c 20 69 6e 74 20 2a   int *enc, int *
6b80: 70 6c 65 6e 29 0d 0a 7b 0d 0a 23 69 66 20 53 51  plen)..{..#if SQ
6b90: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
6ba0: 42 45 52 20 3e 3d 20 33 30 30 38 30 30 37 0d 0a  BER >= 3008007..
6bb0: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c    CollSeq *pColl
6bc0: 20 3d 20 63 74 78 20 3f 20 73 71 6c 69 74 65 33   = ctx ? sqlite3
6bd0: 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 63  GetFuncCollSeq(c
6be0: 74 78 29 20 3a 20 30 3b 0d 0a 23 65 6c 73 65 0d  tx) : 0;..#else.
6bf0: 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c  .  CollSeq *pCol
6c00: 6c 20 3d 20 63 74 78 20 3f 20 63 74 78 2d 3e 70  l = ctx ? ctx->p
6c10: 43 6f 6c 6c 20 3a 20 30 3b 0d 0a 23 65 6e 64 69  Coll : 0;..#endi
6c20: 66 0d 0a 20 20 69 66 20 28 70 74 79 70 65 29 20  f..  if (ptype) 
6c30: 2a 70 74 79 70 65 20 3d 20 30 3b 0d 0a 20 20 69  *ptype = 0;..  i
6c40: 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d  f (plen) *plen =
6c50: 20 30 3b 0d 0a 20 20 69 66 20 28 65 6e 63 29 20   0;..  if (enc) 
6c60: 2a 65 6e 63 20 3d 20 30 3b 0d 0a 0d 0a 20 20 69  *enc = 0;....  i
6c70: 66 20 28 21 63 74 78 20 7c 7c 20 21 63 74 78 2d  f (!ctx || !ctx-
6c80: 3e 70 46 75 6e 63 29 20 72 65 74 75 72 6e 20 4e  >pFunc) return N
6c90: 55 4c 4c 3b 0d 0a 23 69 66 20 53 51 4c 49 54 45  ULL;..#if SQLITE
6ca0: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20  _VERSION_NUMBER 
6cb0: 3e 3d 20 33 30 30 38 30 30 31 0d 0a 20 20 69 66  >= 3008001..  if
6cc0: 20 28 28 63 74 78 2d 3e 70 46 75 6e 63 2d 3e 66   ((ctx->pFunc->f
6cd0: 75 6e 63 46 6c 61 67 73 20 26 20 53 51 4c 49 54  uncFlags & SQLIT
6ce0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
6cf0: 20 3d 3d 20 30 29 20 72 65 74 75 72 6e 20 4e 55   == 0) return NU
6d00: 4c 4c 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 69 66  LL;..#else..  if
6d10: 20 28 28 63 74 78 2d 3e 70 46 75 6e 63 2d 3e 66   ((ctx->pFunc->f
6d20: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55  lags & SQLITE_FU
6d30: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 20 3d 3d 20  NC_NEEDCOLL) == 
6d40: 30 29 20 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d  0) return NULL;.
6d50: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 69 66 20  .#endif....  if 
6d60: 28 70 43 6f 6c 6c 29 0d 0a 20 20 7b 0d 0a 20 20  (pColl)..  {..  
6d70: 20 20 69 66 20 28 65 6e 63 29 20 2a 65 6e 63 20    if (enc) *enc 
6d80: 3d 20 70 43 6f 6c 6c 2d 3e 65 6e 63 3b 0d 0a 23  = pColl->enc;..#
6d90: 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  if SQLITE_VERSIO
6da0: 4e 5f 4e 55 4d 42 45 52 20 3c 20 33 30 30 37 30  N_NUMBER < 30070
6db0: 31 30 0d 0a 20 20 20 20 69 66 20 28 70 74 79 70  10..    if (ptyp
6dc0: 65 29 20 2a 70 74 79 70 65 20 3d 20 70 43 6f 6c  e) *ptype = pCol
6dd0: 6c 2d 3e 74 79 70 65 3b 0d 0a 23 65 6e 64 69 66  l->type;..#endif
6de0: 0d 0a 20 20 20 20 69 66 20 28 70 6c 65 6e 29 20  ..    if (plen) 
6df0: 2a 70 6c 65 6e 20 3d 20 70 43 6f 6c 6c 2d 3e 7a  *plen = pColl->z
6e00: 4e 61 6d 65 20 3f 20 73 74 72 6c 65 6e 28 70 43  Name ? strlen(pC
6e10: 6f 6c 6c 2d 3e 7a 4e 61 6d 65 29 20 3a 20 30 3b  oll->zName) : 0;
6e20: 0d 0a 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 70  ....    return p
6e30: 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 3b 0d 0a 20 20  Coll->zName;..  
6e40: 7d 0d 0a 20 20 72 65 74 75 72 6e 20 4e 55 4c 4c  }..  return NULL
6e50: 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  ;..}....SQLITE_A
6e60: 50 49 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20  PI const char * 
6e70: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63  WINAPI sqlite3_c
6e80: 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e  olumn_database_n
6e90: 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  ame_interop(sqli
6ea0: 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20  te3_stmt *stmt, 
6eb0: 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70  int iCol, int *p
6ec0: 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74  len)..{..  const
6ed0: 20 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73 71   char *pval = sq
6ee0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74  lite3_column_dat
6ef0: 61 62 61 73 65 5f 6e 61 6d 65 28 73 74 6d 74 2c  abase_name(stmt,
6f00: 20 69 43 6f 6c 29 3b 0d 0a 20 20 69 66 20 28 70   iCol);..  if (p
6f10: 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 70 76 61  len) *plen = pva
6f20: 6c 20 3f 20 73 74 72 6c 65 6e 28 70 76 61 6c 29  l ? strlen(pval)
6f30: 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72 6e 20   : 0;..  return 
6f40: 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49  pval;..}....SQLI
6f50: 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 76 6f 69  TE_API const voi
6f60: 64 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74  d * WINAPI sqlit
6f70: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61  e3_column_databa
6f80: 73 65 5f 6e 61 6d 65 31 36 5f 69 6e 74 65 72 6f  se_name16_intero
6f90: 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  p(sqlite3_stmt *
6fa0: 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20  stmt, int iCol, 
6fb0: 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20  int *plen)..{.. 
6fc0: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 61   const void *pva
6fd0: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  l = sqlite3_colu
6fe0: 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65  mn_database_name
6ff0: 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d  16(stmt, iCol);.
7000: 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c  .  if (plen) *pl
7010: 65 6e 20 3d 20 70 76 61 6c 20 3f 20 77 63 73 6c  en = pval ? wcsl
7020: 65 6e 28 28 77 63 68 61 72 5f 74 20 2a 29 70 76  en((wchar_t *)pv
7030: 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77 63 68  al) * sizeof(wch
7040: 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 20 20 72 65  ar_t) : 0;..  re
7050: 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d  turn pval;..}...
7060: 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73  .SQLITE_API cons
7070: 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49 20  t char * WINAPI 
7080: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
7090: 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f  able_name_intero
70a0: 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  p(sqlite3_stmt *
70b0: 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20  stmt, int iCol, 
70c0: 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20  int *plen)..{.. 
70d0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 76 61   const char *pva
70e0: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  l = sqlite3_colu
70f0: 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73 74  mn_table_name(st
7100: 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 69 66  mt, iCol);..  if
7110: 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20   (plen) *plen = 
7120: 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e 28 70 76  pval ? strlen(pv
7130: 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75  al) : 0;..  retu
7140: 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53  rn pval;..}....S
7150: 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20  QLITE_API const 
7160: 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71  void * WINAPI sq
7170: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62  lite3_column_tab
7180: 6c 65 5f 6e 61 6d 65 31 36 5f 69 6e 74 65 72 6f  le_name16_intero
7190: 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  p(sqlite3_stmt *
71a0: 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20  stmt, int iCol, 
71b0: 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20  int *plen)..{.. 
71c0: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 61   const void *pva
71d0: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  l = sqlite3_colu
71e0: 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31 36 28  mn_table_name16(
71f0: 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20  stmt, iCol);..  
7200: 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20  if (plen) *plen 
7210: 3d 20 70 76 61 6c 20 3f 20 77 63 73 6c 65 6e 28  = pval ? wcslen(
7220: 28 77 63 68 61 72 5f 74 20 2a 29 70 76 61 6c 29  (wchar_t *)pval)
7230: 20 2a 20 73 69 7a 65 6f 66 28 77 63 68 61 72 5f   * sizeof(wchar_
7240: 74 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72  t) : 0;..  retur
7250: 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51  n pval;..}....SQ
7260: 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 63  LITE_API const c
7270: 68 61 72 20 2a 20 57 49 4e 41 50 49 20 73 71 6c  har * WINAPI sql
7280: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
7290: 69 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28  in_name_interop(
72a0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74  sqlite3_stmt *st
72b0: 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e  mt, int iCol, in
72c0: 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63  t *plen)..{..  c
72d0: 6f 6e 73 74 20 63 68 61 72 20 2a 70 76 61 6c 20  onst char *pval 
72e0: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
72f0: 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 28 73 74 6d  _origin_name(stm
7300: 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 69 66 20  t, iCol);..  if 
7310: 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 70  (plen) *plen = p
7320: 76 61 6c 20 3f 20 73 74 72 6c 65 6e 28 70 76 61  val ? strlen(pva
7330: 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72  l) : 0;..  retur
7340: 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51  n pval;..}....SQ
7350: 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 76  LITE_API const v
7360: 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71 6c  oid * WINAPI sql
7370: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
7380: 69 6e 5f 6e 61 6d 65 31 36 5f 69 6e 74 65 72 6f  in_name16_intero
7390: 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  p(sqlite3_stmt *
73a0: 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20  stmt, int iCol, 
73b0: 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20  int *plen)..{.. 
73c0: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 61   const void *pva
73d0: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  l = sqlite3_colu
73e0: 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 31 36  mn_origin_name16
73f0: 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20  (stmt, iCol);.. 
7400: 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e   if (plen) *plen
7410: 20 3d 20 70 76 61 6c 20 3f 20 77 63 73 6c 65 6e   = pval ? wcslen
7420: 28 28 77 63 68 61 72 5f 74 20 2a 29 70 76 61 6c  ((wchar_t *)pval
7430: 29 20 2a 20 73 69 7a 65 6f 66 28 77 63 68 61 72  ) * sizeof(wchar
7440: 5f 74 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75  _t) : 0;..  retu
7450: 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53  rn pval;..}....S
7460: 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49  QLITE_API int WI
7470: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 74 61 62  NAPI sqlite3_tab
7480: 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
7490: 74 61 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  ta_interop(sqlit
74a0: 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68  e3 *db, const ch
74b0: 61 72 20 2a 7a 44 62 4e 61 6d 65 2c 20 63 6f 6e  ar *zDbName, con
74c0: 73 74 20 63 68 61 72 20 2a 7a 54 61 62 6c 65 4e  st char *zTableN
74d0: 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  ame, const char 
74e0: 2a 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 63 68  *zColumnName, ch
74f0: 61 72 20 63 6f 6e 73 74 20 2a 2a 70 7a 44 61 74  ar const **pzDat
7500: 61 54 79 70 65 2c 20 63 68 61 72 20 63 6f 6e 73  aType, char cons
7510: 74 20 2a 2a 70 7a 43 6f 6c 6c 53 65 71 2c 20 69  t **pzCollSeq, i
7520: 6e 74 20 2a 70 4e 6f 74 4e 75 6c 6c 2c 20 69 6e  nt *pNotNull, in
7530: 74 20 2a 70 50 72 69 6d 61 72 79 4b 65 79 2c 20  t *pPrimaryKey, 
7540: 69 6e 74 20 2a 70 41 75 74 6f 69 6e 63 2c 20 69  int *pAutoinc, i
7550: 6e 74 20 2a 70 64 74 4c 65 6e 2c 20 69 6e 74 20  nt *pdtLen, int 
7560: 2a 70 63 73 4c 65 6e 29 0d 0a 7b 0d 0a 20 20 69  *pcsLen)..{..  i
7570: 6e 74 20 6e 3b 0d 0a 0d 0a 20 20 6e 20 3d 20 73  nt n;....  n = s
7580: 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c  qlite3_table_col
7590: 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28 64 62 2c  umn_metadata(db,
75a0: 20 7a 44 62 4e 61 6d 65 2c 20 7a 54 61 62 6c 65   zDbName, zTable
75b0: 4e 61 6d 65 2c 20 7a 43 6f 6c 75 6d 6e 4e 61 6d  Name, zColumnNam
75c0: 65 2c 20 70 7a 44 61 74 61 54 79 70 65 2c 20 70  e, pzDataType, p
75d0: 7a 43 6f 6c 6c 53 65 71 2c 20 70 4e 6f 74 4e 75  zCollSeq, pNotNu
75e0: 6c 6c 2c 20 70 50 72 69 6d 61 72 79 4b 65 79 2c  ll, pPrimaryKey,
75f0: 20 70 41 75 74 6f 69 6e 63 29 3b 0d 0a 0d 0a 20   pAutoinc);.... 
7600: 20 69 66 20 28 70 64 74 4c 65 6e 29 20 2a 70 64   if (pdtLen) *pd
7610: 74 4c 65 6e 20 3d 20 28 70 7a 44 61 74 61 54 79  tLen = (pzDataTy
7620: 70 65 20 26 26 20 2a 70 7a 44 61 74 61 54 79 70  pe && *pzDataTyp
7630: 65 29 20 3f 20 73 74 72 6c 65 6e 28 2a 70 7a 44  e) ? strlen(*pzD
7640: 61 74 61 54 79 70 65 29 20 3a 20 30 3b 0d 0a 20  ataType) : 0;.. 
7650: 20 69 66 20 28 70 63 73 4c 65 6e 29 20 2a 70 63   if (pcsLen) *pc
7660: 73 4c 65 6e 20 3d 20 28 70 7a 43 6f 6c 6c 53 65  sLen = (pzCollSe
7670: 71 20 26 26 20 2a 70 7a 43 6f 6c 6c 53 65 71 29  q && *pzCollSeq)
7680: 20 3f 20 73 74 72 6c 65 6e 28 2a 70 7a 43 6f 6c   ? strlen(*pzCol
7690: 6c 53 65 71 29 20 3a 20 30 3b 0d 0a 0d 0a 20 20  lSeq) : 0;....  
76a0: 72 65 74 75 72 6e 20 6e 3b 0d 0a 7d 0d 0a 0d 0a  return n;..}....
76b0: 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57  SQLITE_API int W
76c0: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 69 6e  INAPI sqlite3_in
76d0: 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69 6e 66 6f 5f  dex_column_info_
76e0: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 20  interop(sqlite3 
76f0: 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  *db, const char 
7700: 2a 7a 44 62 2c 20 63 6f 6e 73 74 20 63 68 61 72  *zDb, const char
7710: 20 2a 7a 49 6e 64 65 78 4e 61 6d 65 2c 20 63 6f   *zIndexName, co
7720: 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 75 6d  nst char *zColum
7730: 6e 4e 61 6d 65 2c 20 69 6e 74 20 2a 73 6f 72 74  nName, int *sort
7740: 4f 72 64 65 72 2c 20 69 6e 74 20 2a 6f 6e 45 72  Order, int *onEr
7750: 72 6f 72 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  ror, const char 
7760: 2a 2a 70 7a 43 6f 6c 6c 2c 20 69 6e 74 20 2a 70  **pzColl, int *p
7770: 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 49 6e 64 65 78  len)..{..  Index
7780: 20 2a 70 49 64 78 3b 0d 0a 20 20 54 61 62 6c 65   *pIdx;..  Table
7790: 20 2a 70 54 61 62 3b 0d 0a 20 20 69 6e 74 20 6e   *pTab;..  int n
77a0: 3b 0d 0a 0d 0a 20 20 69 66 20 28 21 64 62 29 20  ;....  if (!db) 
77b0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
77c0: 52 4f 52 3b 0d 0a 20 20 73 71 6c 69 74 65 33 5f  ROR;..  sqlite3_
77d0: 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e  mutex_enter(db->
77e0: 6d 75 74 65 78 29 3b 0d 0a 20 20 73 71 6c 69 74  mutex);..  sqlit
77f0: 65 33 42 74 72 65 65 45 6e 74 65 72 41 6c 6c 28  e3BtreeEnterAll(
7800: 64 62 29 3b 0d 0a 0d 0a 20 20 70 49 64 78 20 3d  db);....  pIdx =
7810: 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65   sqlite3FindInde
7820: 78 28 64 62 2c 20 7a 49 6e 64 65 78 4e 61 6d 65  x(db, zIndexName
7830: 2c 20 7a 44 62 29 3b 0d 0a 0d 0a 20 20 73 71 6c  , zDb);....  sql
7840: 69 74 65 33 42 74 72 65 65 4c 65 61 76 65 41 6c  ite3BtreeLeaveAl
7850: 6c 28 64 62 29 3b 0d 0a 20 20 73 71 6c 69 74 65  l(db);..  sqlite
7860: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62  3_mutex_leave(db
7870: 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20 20 69  ->mutex);....  i
7880: 66 20 28 21 70 49 64 78 29 20 72 65 74 75 72 6e  f (!pIdx) return
7890: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0d 0a   SQLITE_ERROR;..
78a0: 0d 0a 20 20 70 54 61 62 20 3d 20 70 49 64 78 2d  ..  pTab = pIdx-
78b0: 3e 70 54 61 62 6c 65 3b 0d 0a 20 20 66 6f 72 20  >pTable;..  for 
78c0: 28 6e 20 3d 20 30 3b 20 6e 20 3c 20 70 49 64 78  (n = 0; n < pIdx
78d0: 2d 3e 6e 43 6f 6c 75 6d 6e 3b 20 6e 2b 2b 29 0d  ->nColumn; n++).
78e0: 0a 20 20 7b 0d 0a 20 20 20 20 69 6e 74 20 63 6e  .  {..    int cn
78f0: 75 6d 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c  um = pIdx->aiCol
7900: 75 6d 6e 5b 6e 5d 3b 0d 0a 20 20 20 20 69 66 20  umn[n];..    if 
7910: 28 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28  (sqlite3StrICmp(
7920: 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e 75 6d 5d  pTab->aCol[cnum]
7930: 2e 7a 4e 61 6d 65 2c 20 7a 43 6f 6c 75 6d 6e 4e  .zName, zColumnN
7940: 61 6d 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20  ame) == 0)..    
7950: 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 20 73 6f  {..      if ( so
7960: 72 74 4f 72 64 65 72 20 29 20 2a 73 6f 72 74 4f  rtOrder ) *sortO
7970: 72 64 65 72 20 3d 20 70 49 64 78 2d 3e 61 53 6f  rder = pIdx->aSo
7980: 72 74 4f 72 64 65 72 5b 6e 5d 3b 0d 0a 20 20 20  rtOrder[n];..   
7990: 20 20 20 69 66 20 28 20 70 7a 43 6f 6c 6c 20 29     if ( pzColl )
79a0: 20 2a 70 7a 43 6f 6c 6c 20 3d 20 70 49 64 78 2d   *pzColl = pIdx-
79b0: 3e 61 7a 43 6f 6c 6c 5b 6e 5d 3b 0d 0a 20 20 20  >azColl[n];..   
79c0: 20 20 20 69 66 20 28 20 70 6c 65 6e 20 29 20 2a     if ( plen ) *
79d0: 70 6c 65 6e 20 3d 20 73 74 72 6c 65 6e 28 2a 70  plen = strlen(*p
79e0: 7a 43 6f 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 69  zColl);..      i
79f0: 66 20 28 20 6f 6e 45 72 72 6f 72 20 29 20 2a 6f  f ( onError ) *o
7a00: 6e 45 72 72 6f 72 20 3d 20 70 49 64 78 2d 3e 6f  nError = pIdx->o
7a10: 6e 45 72 72 6f 72 3b 0d 0a 0d 0a 20 20 20 20 20  nError;....     
7a20: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
7a30: 4b 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a  K;..    }..  }..
7a40: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
7a50: 45 52 52 4f 52 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c  ERROR;..}....SQL
7a60: 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41  ITE_API int WINA
7a70: 50 49 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65  PI sqlite3_table
7a80: 5f 63 75 72 73 6f 72 5f 69 6e 74 65 72 6f 70 28  _cursor_interop(
7a90: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 73  sqlite3_stmt *ps
7aa0: 74 6d 74 2c 20 69 6e 74 20 69 44 62 2c 20 50 67  tmt, int iDb, Pg
7ab0: 6e 6f 20 74 61 62 6c 65 52 6f 6f 74 50 61 67 65  no tableRootPage
7ac0: 29 0d 0a 7b 0d 0a 20 20 56 64 62 65 20 2a 70 20  )..{..  Vdbe *p 
7ad0: 3d 20 28 56 64 62 65 20 2a 29 70 73 74 6d 74 3b  = (Vdbe *)pstmt;
7ae0: 0d 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  ..  sqlite3 *db 
7af0: 3d 20 28 70 20 3d 3d 20 4e 55 4c 4c 29 20 3f 20  = (p == NULL) ? 
7b00: 4e 55 4c 4c 20 3a 20 70 2d 3e 64 62 3b 0d 0a 20  NULL : p->db;.. 
7b10: 20 69 6e 74 20 6e 3b 0d 0a 20 20 69 6e 74 20 72   int n;..  int r
7b20: 65 74 20 3d 20 2d 31 3b 20 2f 2a 20 4e 4f 54 20  et = -1; /* NOT 
7b30: 46 4f 55 4e 44 20 2a 2f 0d 0a 0d 0a 20 20 69 66  FOUND */....  if
7b40: 20 28 21 70 20 7c 7c 20 21 64 62 29 20 72 65 74   (!p || !db) ret
7b50: 75 72 6e 20 72 65 74 3b 0d 0a 20 20 73 71 6c 69  urn ret;..  sqli
7b60: 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28  te3_mutex_enter(
7b70: 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 66  db->mutex);..  f
7b80: 6f 72 20 28 6e 20 3d 20 30 3b 20 6e 20 3c 20 70  or (n = 0; n < p
7b90: 2d 3e 6e 43 75 72 73 6f 72 20 26 26 20 70 2d 3e  ->nCursor && p->
7ba0: 61 70 43 73 72 5b 6e 5d 20 21 3d 20 4e 55 4c 4c  apCsr[n] != NULL
7bb0: 3b 20 6e 2b 2b 29 0d 0a 20 20 7b 0d 0a 20 20 20  ; n++)..  {..   
7bc0: 20 69 66 20 28 70 2d 3e 61 70 43 73 72 5b 6e 5d   if (p->apCsr[n]
7bd0: 2d 3e 69 73 54 61 62 6c 65 20 3d 3d 20 30 29 20  ->isTable == 0) 
7be0: 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 69  continue;..    i
7bf0: 66 20 28 70 2d 3e 61 70 43 73 72 5b 6e 5d 2d 3e  f (p->apCsr[n]->
7c00: 69 44 62 20 21 3d 20 69 44 62 29 20 63 6f 6e 74  iDb != iDb) cont
7c10: 69 6e 75 65 3b 0d 0a 23 69 66 20 53 51 4c 49 54  inue;..#if SQLIT
7c20: 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52  E_VERSION_NUMBER
7c30: 20 3e 3d 20 33 30 31 30 30 30 30 0d 0a 20 20 20   >= 3010000..   
7c40: 20 69 66 20 28 70 2d 3e 61 70 43 73 72 5b 6e 5d   if (p->apCsr[n]
7c50: 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2d 3e 70 67  ->uc.pCursor->pg
7c60: 6e 6f 52 6f 6f 74 20 3d 3d 20 74 61 62 6c 65 52  noRoot == tableR
7c70: 6f 6f 74 50 61 67 65 29 0d 0a 23 65 6c 73 65 0d  ootPage)..#else.
7c80: 0a 20 20 20 20 69 66 20 28 70 2d 3e 61 70 43 73  .    if (p->apCs
7c90: 72 5b 6e 5d 2d 3e 70 43 75 72 73 6f 72 2d 3e 70  r[n]->pCursor->p
7ca0: 67 6e 6f 52 6f 6f 74 20 3d 3d 20 74 61 62 6c 65  gnoRoot == table
7cb0: 52 6f 6f 74 50 61 67 65 29 0d 0a 23 65 6e 64 69  RootPage)..#endi
7cc0: 66 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  f..    {..      
7cd0: 72 65 74 20 3d 20 6e 3b 0d 0a 20 20 20 20 20 20  ret = n;..      
7ce0: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 7d 0d 0a 20  break;..    }.. 
7cf0: 20 7d 0d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   }..  sqlite3_mu
7d00: 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75  tex_leave(db->mu
7d10: 74 65 78 29 3b 0d 0a 0d 0a 20 20 72 65 74 75 72  tex);....  retur
7d20: 6e 20 72 65 74 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c  n ret;..}....SQL
7d30: 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41  ITE_API int WINA
7d40: 50 49 20 73 71 6c 69 74 65 33 5f 63 75 72 73 6f  PI sqlite3_curso
7d50: 72 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70 28  r_rowid_interop(
7d60: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 73  sqlite3_stmt *ps
7d70: 74 6d 74 2c 20 69 6e 74 20 63 75 72 73 6f 72 2c  tmt, int cursor,
7d80: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a 70   sqlite_int64 *p
7d90: 72 6f 77 69 64 29 0d 0a 7b 0d 0a 20 20 56 64 62  rowid)..{..  Vdb
7da0: 65 20 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70  e *p = (Vdbe *)p
7db0: 73 74 6d 74 3b 0d 0a 20 20 73 71 6c 69 74 65 33  stmt;..  sqlite3
7dc0: 20 2a 64 62 20 3d 20 28 70 20 3d 3d 20 4e 55 4c   *db = (p == NUL
7dd0: 4c 29 20 3f 20 4e 55 4c 4c 20 3a 20 70 2d 3e 64  L) ? NULL : p->d
7de0: 62 3b 0d 0a 20 20 56 64 62 65 43 75 72 73 6f 72  b;..  VdbeCursor
7df0: 20 2a 70 43 3b 0d 0a 23 69 66 20 53 51 4c 49 54   *pC;..#if SQLIT
7e00: 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52  E_VERSION_NUMBER
7e10: 20 3e 3d 20 33 30 31 31 30 30 30 0d 0a 20 20 69   >= 3011000..  i
7e20: 6e 74 20 70 32 20 3d 20 30 3b 0d 0a 23 65 6e 64  nt p2 = 0;..#end
7e30: 69 66 0d 0a 20 20 69 6e 74 20 72 65 74 20 3d 20  if..  int ret = 
7e40: 53 51 4c 49 54 45 5f 4f 4b 3b 0d 0a 0d 0a 20 20  SQLITE_OK;....  
7e50: 69 66 20 28 21 70 20 7c 7c 20 21 64 62 29 20 72  if (!p || !db) r
7e60: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
7e70: 4f 52 3b 0d 0a 20 20 73 71 6c 69 74 65 33 5f 6d  OR;..  sqlite3_m
7e80: 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d  utex_enter(db->m
7e90: 75 74 65 78 29 3b 0d 0a 20 20 77 68 69 6c 65 20  utex);..  while 
7ea0: 28 31 29 0d 0a 20 20 7b 0d 0a 20 20 20 20 69 66  (1)..  {..    if
7eb0: 20 28 63 75 72 73 6f 72 20 3c 20 30 20 7c 7c 20   (cursor < 0 || 
7ec0: 63 75 72 73 6f 72 20 3e 3d 20 70 2d 3e 6e 43 75  cursor >= p->nCu
7ed0: 72 73 6f 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  rsor)..    {..  
7ee0: 20 20 20 20 72 65 74 20 3d 20 53 51 4c 49 54 45      ret = SQLITE
7ef0: 5f 45 52 52 4f 52 3b 0d 0a 20 20 20 20 20 20 62  _ERROR;..      b
7f00: 72 65 61 6b 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20  reak;..    }..  
7f10: 20 20 69 66 20 28 70 2d 3e 61 70 43 73 72 5b 63    if (p->apCsr[c
7f20: 75 72 73 6f 72 5d 20 3d 3d 20 4e 55 4c 4c 29 0d  ursor] == NULL).
7f30: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
7f40: 74 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  t = SQLITE_ERROR
7f50: 3b 0d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0d  ;..      break;.
7f60: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 43  .    }....    pC
7f70: 20 3d 20 70 2d 3e 61 70 43 73 72 5b 63 75 72 73   = p->apCsr[curs
7f80: 6f 72 5d 3b 0d 0a 0d 0a 23 69 66 20 53 51 4c 49  or];....#if SQLI
7f90: 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45  TE_VERSION_NUMBE
7fa0: 52 20 3e 3d 20 33 30 31 31 30 30 30 0d 0a 20 20  R >= 3011000..  
7fb0: 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33 56    ret = sqlite3V
7fc0: 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
7fd0: 26 70 43 2c 20 26 70 32 29 3b 0d 0a 23 65 6c 73  &pC, &p2);..#els
7fe0: 65 0d 0a 20 20 20 20 72 65 74 20 3d 20 73 71 6c  e..    ret = sql
7ff0: 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
8000: 76 65 74 6f 28 70 43 29 3b 0d 0a 23 65 6e 64 69  veto(pC);..#endi
8010: 66 0d 0a 20 20 20 20 69 66 28 72 65 74 29 0d 0a  f..    if(ret)..
8020: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 0d 0a        break;....
8030: 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49  #if SQLITE_VERSI
8040: 4f 4e 5f 4e 55 4d 42 45 52 20 3c 20 33 30 30 38  ON_NUMBER < 3008
8050: 30 30 37 0d 0a 20 20 20 20 69 66 28 70 43 2d 3e  007..    if(pC->
8060: 72 6f 77 69 64 49 73 56 61 6c 69 64 29 0d 0a 20  rowidIsValid).. 
8070: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28     {..      if (
8080: 70 72 6f 77 69 64 29 20 2a 70 72 6f 77 69 64 20  prowid) *prowid 
8090: 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = pC->lastRowid;
80a0: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 65 6c 73  ..    }..    els
80b0: 65 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 20 53  e..#endif..#if S
80c0: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
80d0: 4d 42 45 52 20 3e 3d 20 33 30 31 30 30 30 30 0d  MBER >= 3010000.
80e0: 0a 20 20 20 20 69 66 28 70 43 2d 3e 65 43 75 72  .    if(pC->eCur
80f0: 54 79 70 65 20 21 3d 20 43 55 52 54 59 50 45 5f  Type != CURTYPE_
8100: 42 54 52 45 45 29 0d 0a 23 65 6c 73 65 0d 0a 20  BTREE)..#else.. 
8110: 20 20 20 69 66 28 70 43 2d 3e 70 73 65 75 64 6f     if(pC->pseudo
8120: 54 61 62 6c 65 52 65 67 20 3e 20 30 29 0d 0a 23  TableReg > 0)..#
8130: 65 6e 64 69 66 0d 0a 20 20 20 20 7b 0d 0a 20 20  endif..    {..  
8140: 20 20 20 20 72 65 74 20 3d 20 53 51 4c 49 54 45      ret = SQLITE
8150: 5f 45 52 52 4f 52 3b 0d 0a 20 20 20 20 20 20 62  _ERROR;..      b
8160: 72 65 61 6b 3b 0d 0a 20 20 20 20 7d 0d 0a 23 69  reak;..    }..#i
8170: 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
8180: 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 31 30 30  _NUMBER >= 30100
8190: 30 30 0d 0a 20 20 20 20 65 6c 73 65 20 69 66 28  00..    else if(
81a0: 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c 7c 20 70  pC->nullRow || p
81b0: 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3d 3d 30  C->uc.pCursor==0
81c0: 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 65 6c  )..#else..    el
81d0: 73 65 20 69 66 28 70 43 2d 3e 6e 75 6c 6c 52 6f  se if(pC->nullRo
81e0: 77 20 7c 7c 20 70 43 2d 3e 70 43 75 72 73 6f 72  w || pC->pCursor
81f0: 3d 3d 30 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ==0)..#endif..  
8200: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 20 3d    {..      ret =
8210: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0d 0a   SQLITE_ERROR;..
8220: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
8230: 20 20 7d 0d 0a 20 20 20 20 65 6c 73 65 0d 0a 20    }..    else.. 
8240: 20 20 20 7b 0d 0a 23 69 66 20 53 51 4c 49 54 45     {..#if SQLITE
8250: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20  _VERSION_NUMBER 
8260: 3e 3d 20 33 30 31 30 30 30 30 0d 0a 20 20 20 20  >= 3010000..    
8270: 20 20 69 66 20 28 70 43 2d 3e 75 63 2e 70 43 75    if (pC->uc.pCu
8280: 72 73 6f 72 20 3d 3d 20 4e 55 4c 4c 29 0d 0a 23  rsor == NULL)..#
8290: 65 6c 73 65 0d 0a 20 20 20 20 20 20 69 66 20 28  else..      if (
82a0: 70 43 2d 3e 70 43 75 72 73 6f 72 20 3d 3d 20 4e  pC->pCursor == N
82b0: 55 4c 4c 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ULL)..#endif..  
82c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
82d0: 65 74 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  et = SQLITE_ERRO
82e0: 52 3b 0d 0a 20 20 20 20 20 20 20 20 62 72 65 61  R;..        brea
82f0: 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 23 69 66  k;..      }..#if
8300: 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f   SQLITE_VERSION_
8310: 4e 55 4d 42 45 52 20 3e 3d 20 33 30 31 34 30 30  NUMBER >= 301400
8320: 30 0d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  0..      sqlite3
8330: 42 74 72 65 65 45 6e 74 65 72 43 75 72 73 6f 72  BtreeEnterCursor
8340: 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
8350: 3b 0d 0a 20 20 20 20 20 20 2a 70 72 6f 77 69 64  ;..      *prowid
8360: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
8370: 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63  ntegerKey(pC->uc
8380: 2e 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20  .pCursor);..    
8390: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 65    sqlite3BtreeLe
83a0: 61 76 65 43 75 72 73 6f 72 28 70 43 2d 3e 75 63  aveCursor(pC->uc
83b0: 2e 70 43 75 72 73 6f 72 29 3b 0d 0a 23 65 6c 69  .pCursor);..#eli
83c0: 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
83d0: 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 31 30 30  _NUMBER >= 30100
83e0: 30 30 0d 0a 20 20 20 20 20 20 73 71 6c 69 74 65  00..      sqlite
83f0: 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
8400: 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 72  ->uc.pCursor, pr
8410: 6f 77 69 64 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  owid);..#else.. 
8420: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
8430: 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75  eKeySize(pC->pCu
8440: 72 73 6f 72 2c 20 70 72 6f 77 69 64 29 3b 0d 0a  rsor, prowid);..
8450: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66  #endif..      if
8460: 20 28 70 72 6f 77 69 64 29 20 2a 70 72 6f 77 69   (prowid) *prowi
8470: 64 20 3d 20 2a 70 72 6f 77 69 64 3b 0d 0a 20 20  d = *prowid;..  
8480: 20 20 7d 0d 0a 20 20 20 20 62 72 65 61 6b 3b 0d    }..    break;.
8490: 0a 20 20 7d 0d 0a 20 20 73 71 6c 69 74 65 33 5f  .  }..  sqlite3_
84a0: 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e  mutex_leave(db->
84b0: 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20 20 72 65 74  mutex);....  ret
84c0: 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a 0d 0a 2f  urn ret;..}..../
84d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
84e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
84f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8500: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8510: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0d 0a  *************/..
8520: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
8530: 4c 49 54 45 5f 43 4f 52 45 29 0d 0a 23 75 6e 64  LITE_CORE)..#und
8540: 65 66 20 53 51 4c 49 54 45 5f 43 4f 52 45 0d 0a  ef SQLITE_CORE..
8550: 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65  #endif....#if de
8560: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 56 49  fined(INTEROP_VI
8570: 52 54 55 41 4c 5f 54 41 42 4c 45 29 20 26 26 20  RTUAL_TABLE) && 
8580: 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e  SQLITE_VERSION_N
8590: 55 4d 42 45 52 20 3e 3d 20 33 30 30 34 30 30 31  UMBER >= 3004001
85a0: 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 65  ..#include "../e
85b0: 78 74 2f 76 74 73 68 69 6d 2e 63 22 0d 0a 23 65  xt/vtshim.c"..#e
85c0: 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69  ndif....#if defi
85d0: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 46 54 53 35  ned(INTEROP_FTS5
85e0: 5f 45 58 54 45 4e 53 49 4f 4e 29 0d 0a 23 69 6e  _EXTENSION)..#in
85f0: 63 6c 75 64 65 20 22 2e 2e 2f 65 78 74 2f 66 74  clude "../ext/ft
8600: 73 35 2e 63 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d  s5.c"..#endif...
8610: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54  .#if defined(INT
8620: 45 52 4f 50 5f 4a 53 4f 4e 31 5f 45 58 54 45 4e  EROP_JSON1_EXTEN
8630: 53 49 4f 4e 29 0d 0a 23 69 6e 63 6c 75 64 65 20  SION)..#include 
8640: 22 2e 2e 2f 65 78 74 2f 6a 73 6f 6e 31 2e 63 22  "../ext/json1.c"
8650: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20  ..#endif....#if 
8660: 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f  defined(INTEROP_
8670: 50 45 52 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e  PERCENTILE_EXTEN
8680: 53 49 4f 4e 29 0d 0a 23 69 6e 63 6c 75 64 65 20  SION)..#include 
8690: 22 2e 2e 2f 65 78 74 2f 70 65 72 63 65 6e 74 69  "../ext/percenti
86a0: 6c 65 2e 63 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d  le.c"..#endif...
86b0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54  .#if defined(INT
86c0: 45 52 4f 50 5f 52 45 47 45 58 50 5f 45 58 54 45  EROP_REGEXP_EXTE
86d0: 4e 53 49 4f 4e 29 0d 0a 23 69 6e 63 6c 75 64 65  NSION)..#include
86e0: 20 22 2e 2e 2f 65 78 74 2f 72 65 67 65 78 70 2e   "../ext/regexp.
86f0: 63 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69  c"..#endif....#i
8700: 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f  f defined(INTERO
8710: 50 5f 53 48 41 31 5f 45 58 54 45 4e 53 49 4f 4e  P_SHA1_EXTENSION
8720: 29 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f  )..#include "../
8730: 65 78 74 2f 73 68 61 31 2e 63 22 0d 0a 23 65 6e  ext/sha1.c"..#en
8740: 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e  dif....#if defin
8750: 65 64 28 49 4e 54 45 52 4f 50 5f 54 4f 54 59 50  ed(INTEROP_TOTYP
8760: 45 5f 45 58 54 45 4e 53 49 4f 4e 29 0d 0a 23 69  E_EXTENSION)..#i
8770: 6e 63 6c 75 64 65 20 22 2e 2e 2f 65 78 74 2f 74  nclude "../ext/t
8780: 6f 74 79 70 65 2e 63 22 0d 0a 23 65 6e 64 69 66  otype.c"..#endif
8790: 0d 0a 0d 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..../***********
87a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
87b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
87c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
87d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
87e0: 2a 2a 2f 0d 0a 0d 0a 2f 2a 0d 0a 2a 2a 20 54 68  **/..../*..** Th
87f0: 65 20 49 4e 54 45 52 4f 50 5f 54 45 53 54 5f 45  e INTEROP_TEST_E
8800: 58 54 45 4e 53 49 4f 4e 20 62 6c 6f 63 6b 20 6d  XTENSION block m
8810: 75 73 74 20 62 65 20 61 74 20 74 68 65 20 65 6e  ust be at the en
8820: 64 20 6f 66 20 74 68 69 73 20 73 6f 75 72 63 65  d of this source
8830: 20 66 69 6c 65 0d 0a 2a 2a 20 62 65 63 61 75 73   file..** becaus
8840: 65 20 69 74 20 69 6e 63 6c 75 64 65 73 20 74 68  e it includes th
8850: 65 20 22 73 71 6c 69 74 65 33 65 78 74 2e 68 22  e "sqlite3ext.h"
8860: 20 66 69 6c 65 2c 20 77 68 69 63 68 20 64 65 66   file, which def
8870: 69 6e 65 73 20 74 68 65 20 73 71 6c 69 74 65 33  ines the sqlite3
8880: 0d 0a 2a 2a 20 70 75 62 6c 69 63 20 41 50 49 20  ..** public API 
8890: 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 73 20 74  function names t
88a0: 6f 20 62 65 20 6d 61 63 72 6f 73 20 61 6e 64 20  o be macros and 
88b0: 74 68 61 74 20 77 6f 75 6c 64 20 63 61 75 73 65  that would cause
88c0: 20 74 68 65 20 63 6f 64 65 0d 0a 2a 2a 20 61 62   the code..** ab
88d0: 6f 76 65 20 74 68 69 73 20 70 6f 69 6e 74 20 74  ove this point t
88e0: 6f 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0d 0a  o malfunction...
88f0: 2a 2f 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  */..#if defined(
8900: 49 4e 54 45 52 4f 50 5f 54 45 53 54 5f 45 58 54  INTEROP_TEST_EXT
8910: 45 4e 53 49 4f 4e 29 0d 0a 23 69 66 20 21 53 51  ENSION)..#if !SQ
8920: 4c 49 54 45 5f 4f 53 5f 57 49 4e 0d 0a 23 69 6e  LITE_OS_WIN..#in
8930: 63 6c 75 64 65 20 3c 75 6e 69 73 74 64 2e 68 3e  clude <unistd.h>
8940: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 6e 63  ..#endif....#inc
8950: 6c 75 64 65 20 22 2e 2e 2f 63 6f 72 65 2f 73 71  lude "../core/sq
8960: 6c 69 74 65 33 65 78 74 2e 68 22 0d 0a 53 51 4c  lite3ext.h"..SQL
8970: 49 54 45 5f 45 58 54 45 4e 53 49 4f 4e 5f 49 4e  ITE_EXTENSION_IN
8980: 49 54 31 0d 0a 0d 0a 2f 2a 0d 0a 2a 2a 20 54 68  IT1..../*..** Th
8990: 65 20 69 6e 74 65 72 6f 70 45 72 72 6f 72 28 29  e interopError()
89a0: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 74 72   SQL function tr
89b0: 65 61 74 73 20 69 74 73 20 66 69 72 73 74 20 61  eats its first a
89c0: 72 67 75 6d 65 6e 74 20 61 73 20 61 6e 20 69 6e  rgument as an in
89d0: 74 65 67 65 72 0d 0a 2a 2a 20 65 72 72 6f 72 20  teger..** error 
89e0: 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 2e 0d  code to return..
89f0: 0a 2a 2f 0d 0a 53 51 4c 49 54 45 5f 50 52 49 56  .*/..SQLITE_PRIV
8a00: 41 54 45 20 76 6f 69 64 20 69 6e 74 65 72 6f 70  ATE void interop
8a10: 45 72 72 6f 72 46 75 6e 63 28 0d 0a 20 20 73 71  ErrorFunc(..  sq
8a20: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63  lite3_context *c
8a30: 6f 6e 74 65 78 74 2c 0d 0a 20 20 69 6e 74 20 61  ontext,..  int a
8a40: 72 67 63 2c 0d 0a 20 20 73 71 6c 69 74 65 33 5f  rgc,..  sqlite3_
8a50: 76 61 6c 75 65 20 2a 2a 61 72 67 76 0d 0a 29 7b  value **argv..){
8a60: 0d 0a 20 20 69 6e 74 20 72 63 3b 0d 0a 20 20 69  ..  int rc;..  i
8a70: 66 28 20 61 72 67 63 21 3d 31 20 29 7b 0d 0a 20  f( argc!=1 ){.. 
8a80: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
8a90: 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c  t_error(context,
8aa0: 20 22 6e 65 65 64 20 65 78 61 63 74 6c 79 20 6f   "need exactly o
8ab0: 6e 65 20 61 72 67 75 6d 65 6e 74 22 2c 20 2d 31  ne argument", -1
8ac0: 29 3b 0d 0a 20 20 20 20 72 65 74 75 72 6e 3b 0d  );..    return;.
8ad0: 0a 20 20 7d 0d 0a 20 20 72 63 20 3d 20 73 71 6c  .  }..  rc = sql
8ae0: 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 61  ite3_value_int(a
8af0: 72 67 76 5b 30 5d 29 3b 0d 0a 20 20 73 71 6c 69  rgv[0]);..  sqli
8b00: 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72  te3_result_error
8b10: 5f 63 6f 64 65 28 63 6f 6e 74 65 78 74 2c 20 72  _code(context, r
8b20: 63 29 3b 0d 0a 7d 0d 0a 0d 0a 2f 2a 0d 0a 2a 2a  c);..}..../*..**
8b30: 20 54 68 65 20 69 6e 74 65 72 6f 70 54 65 73 74   The interopTest
8b40: 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  () SQL function 
8b50: 72 65 74 75 72 6e 73 20 69 74 73 20 66 69 72 73  returns its firs
8b60: 74 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 72 61  t argument or ra
8b70: 69 73 65 73 20 61 6e 0d 0a 2a 2a 20 65 72 72 6f  ises an..** erro
8b80: 72 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  r if there are n
8b90: 6f 74 20 65 6e 6f 75 67 68 20 61 72 67 75 6d 65  ot enough argume
8ba0: 6e 74 73 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49 54 45  nts...*/..SQLITE
8bb0: 5f 50 52 49 56 41 54 45 20 76 6f 69 64 20 69 6e  _PRIVATE void in
8bc0: 74 65 72 6f 70 54 65 73 74 46 75 6e 63 28 0d 0a  teropTestFunc(..
8bd0: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
8be0: 74 20 2a 63 6f 6e 74 65 78 74 2c 0d 0a 20 20 69  t *context,..  i
8bf0: 6e 74 20 61 72 67 63 2c 0d 0a 20 20 73 71 6c 69  nt argc,..  sqli
8c00: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76  te3_value **argv
8c10: 0d 0a 29 7b 0d 0a 20 20 63 6f 6e 73 74 20 75 6e  ..){..  const un
8c20: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 7a 3b 0d  signed char *z;.
8c30: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 31 20 29  .  if( argc!=1 )
8c40: 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72  {..    sqlite3_r
8c50: 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74  esult_error(cont
8c60: 65 78 74 2c 20 22 6e 65 65 64 20 65 78 61 63 74  ext, "need exact
8c70: 6c 79 20 6f 6e 65 20 61 72 67 75 6d 65 6e 74 22  ly one argument"
8c80: 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 72 65 74 75  , -1);..    retu
8c90: 72 6e 3b 0d 0a 20 20 7d 0d 0a 20 20 7a 20 3d 20  rn;..  }..  z = 
8ca0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
8cb0: 78 74 28 61 72 67 76 5b 30 5d 29 3b 0d 0a 20 20  xt(argv[0]);..  
8cc0: 69 66 28 20 7a 20 29 7b 0d 0a 20 20 20 20 73 71  if( z ){..    sq
8cd0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
8ce0: 74 28 63 6f 6e 74 65 78 74 2c 20 28 63 68 61 72  t(context, (char
8cf0: 2a 29 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f  *)z, -1, SQLITE_
8d00: 53 54 41 54 49 43 29 3b 0d 0a 20 20 7d 65 6c 73  STATIC);..  }els
8d10: 65 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  e{..    sqlite3_
8d20: 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74  result_null(cont
8d30: 65 78 74 29 3b 0d 0a 20 20 7d 0d 0a 7d 0d 0a 0d  ext);..  }..}...
8d40: 0a 2f 2a 0d 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ./*..** The inte
8d50: 72 6f 70 53 6c 65 65 70 28 29 20 53 51 4c 20 66  ropSleep() SQL f
8d60: 75 6e 63 74 69 6f 6e 20 77 61 69 74 73 20 74 68  unction waits th
8d70: 65 20 73 70 65 63 69 66 69 65 64 20 6e 75 6d 62  e specified numb
8d80: 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e  er of millisecon
8d90: 64 73 0d 0a 2a 2a 20 6f 72 20 72 61 69 73 65 73  ds..** or raises
8da0: 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65   an error if the
8db0: 72 65 20 61 72 65 20 6e 6f 74 20 65 6e 6f 75 67  re are not enoug
8dc0: 68 20 61 72 67 75 6d 65 6e 74 73 2e 0d 0a 2a 2f  h arguments...*/
8dd0: 0d 0a 53 51 4c 49 54 45 5f 50 52 49 56 41 54 45  ..SQLITE_PRIVATE
8de0: 20 76 6f 69 64 20 69 6e 74 65 72 6f 70 53 6c 65   void interopSle
8df0: 65 70 46 75 6e 63 28 0d 0a 20 20 73 71 6c 69 74  epFunc(..  sqlit
8e00: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74  e3_context *cont
8e10: 65 78 74 2c 0d 0a 20 20 69 6e 74 20 61 72 67 63  ext,..  int argc
8e20: 2c 0d 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  ,..  sqlite3_val
8e30: 75 65 20 2a 2a 61 72 67 76 0d 0a 29 7b 0d 0a 20  ue **argv..){.. 
8e40: 20 69 6e 74 20 6d 3b 0d 0a 20 20 69 66 28 20 61   int m;..  if( a
8e50: 72 67 63 21 3d 31 20 29 7b 0d 0a 20 20 20 20 73  rgc!=1 ){..    s
8e60: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72  qlite3_result_er
8e70: 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 22 6e 65  ror(context, "ne
8e80: 65 64 20 65 78 61 63 74 6c 79 20 6f 6e 65 20 61  ed exactly one a
8e90: 72 67 75 6d 65 6e 74 22 2c 20 2d 31 29 3b 0d 0a  rgument", -1);..
8ea0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 7d      return;..  }
8eb0: 0d 0a 20 20 6d 20 3d 20 73 71 6c 69 74 65 33 5f  ..  m = sqlite3_
8ec0: 76 61 6c 75 65 5f 69 6e 74 28 61 72 67 76 5b 30  value_int(argv[0
8ed0: 5d 29 3b 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f  ]);..#if SQLITE_
8ee0: 4f 53 5f 57 49 4e 0d 0a 23 69 66 20 53 51 4c 49  OS_WIN..#if SQLI
8ef0: 54 45 5f 4f 53 5f 57 49 4e 43 45 0d 0a 20 20 53  TE_OS_WINCE..  S
8f00: 6c 65 65 70 28 6d 29 3b 0d 0a 20 20 73 71 6c 69  leep(m);..  sqli
8f10: 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63  te3_result_int(c
8f20: 6f 6e 74 65 78 74 2c 20 57 41 49 54 5f 4f 42 4a  ontext, WAIT_OBJ
8f30: 45 43 54 5f 30 29 3b 0d 0a 23 65 6c 73 65 0d 0a  ECT_0);..#else..
8f40: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
8f50: 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 53 6c  _int(context, Sl
8f60: 65 65 70 45 78 28 6d 2c 20 54 52 55 45 29 29 3b  eepEx(m, TRUE));
8f70: 0d 0a 23 65 6e 64 69 66 0d 0a 23 65 6c 73 65 0d  ..#endif..#else.
8f80: 0a 20 20 69 66 28 20 6d 3e 30 20 29 7b 0d 0a 20  .  if( m>0 ){.. 
8f90: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
8fa0: 74 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c  t_int64(context,
8fb0: 20 73 6c 65 65 70 28 28 75 6e 73 69 67 6e 65 64   sleep((unsigned
8fc0: 29 6d 29 29 3b 0d 0a 20 20 7d 65 6c 73 65 7b 0d  )m));..  }else{.
8fd0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73  .    sqlite3_res
8fe0: 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78 74  ult_null(context
8ff0: 29 3b 0d 0a 20 20 7d 0d 0a 23 65 6e 64 69 66 0d  );..  }..#endif.
9000: 0a 7d 0d 0a 0d 0a 2f 2a 20 53 51 4c 69 74 65 20  .}..../* SQLite 
9010: 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 72 6f 75  invokes this rou
9020: 74 69 6e 65 20 6f 6e 63 65 20 77 68 65 6e 20 69  tine once when i
9030: 74 20 6c 6f 61 64 73 20 74 68 65 20 65 78 74 65  t loads the exte
9040: 6e 73 69 6f 6e 2e 0d 0a 2a 2a 20 43 72 65 61 74  nsion...** Creat
9050: 65 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73 2c  e new functions,
9060: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
9070: 6e 63 65 73 2c 20 61 6e 64 20 76 69 72 74 75 61  nces, and virtua
9080: 6c 20 74 61 62 6c 65 0d 0a 2a 2a 20 6d 6f 64 75  l table..** modu
9090: 6c 65 73 20 68 65 72 65 2e 20 20 54 68 69 73 20  les here.  This 
90a0: 69 73 20 75 73 75 61 6c 6c 79 20 74 68 65 20 6f  is usually the o
90b0: 6e 6c 79 20 65 78 70 6f 72 74 65 64 20 73 79 6d  nly exported sym
90c0: 62 6f 6c 20 69 6e 0d 0a 2a 2a 20 74 68 65 20 73  bol in..** the s
90d0: 68 61 72 65 64 20 6c 69 62 72 61 72 79 2e 0d 0a  hared library...
90e0: 2a 2f 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69  */..SQLITE_API i
90f0: 6e 74 20 69 6e 74 65 72 6f 70 5f 74 65 73 74 5f  nt interop_test_
9100: 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74 28 0d  extension_init(.
9110: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0d  .  sqlite3 *db,.
9120: 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d  .  char **pzErrM
9130: 73 67 2c 0d 0a 20 20 63 6f 6e 73 74 20 73 71 6c  sg,..  const sql
9140: 69 74 65 33 5f 61 70 69 5f 72 6f 75 74 69 6e 65  ite3_api_routine
9150: 73 20 2a 70 41 70 69 0d 0a 29 7b 0d 0a 20 20 69  s *pApi..){..  i
9160: 6e 74 20 72 63 3b 0d 0a 20 20 53 51 4c 49 54 45  nt rc;..  SQLITE
9170: 5f 45 58 54 45 4e 53 49 4f 4e 5f 49 4e 49 54 32  _EXTENSION_INIT2
9180: 28 70 41 70 69 29 0d 0a 20 20 72 63 20 3d 20 73  (pApi)..  rc = s
9190: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
91a0: 6e 63 74 69 6f 6e 28 64 62 2c 20 22 69 6e 74 65  nction(db, "inte
91b0: 72 6f 70 45 72 72 6f 72 22 2c 20 2d 31 2c 20 53  ropError", -1, S
91c0: 51 4c 49 54 45 5f 41 4e 59 2c 20 30 2c 0d 0a 20  QLITE_ANY, 0,.. 
91d0: 20 20 20 20 20 69 6e 74 65 72 6f 70 45 72 72 6f       interopErro
91e0: 72 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0d 0a 20  rFunc, 0, 0);.. 
91f0: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
9200: 4f 4b 20 29 7b 0d 0a 20 20 20 20 72 63 20 3d 20  OK ){..    rc = 
9210: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
9220: 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 69 6e 74  unction(db, "int
9230: 65 72 6f 70 54 65 73 74 22 2c 20 2d 31 2c 20 53  eropTest", -1, S
9240: 51 4c 49 54 45 5f 41 4e 59 2c 20 30 2c 0d 0a 20  QLITE_ANY, 0,.. 
9250: 20 20 20 20 20 20 20 69 6e 74 65 72 6f 70 54 65         interopTe
9260: 73 74 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0d 0a  stFunc, 0, 0);..
9270: 20 20 7d 0d 0a 20 20 69 66 28 20 72 63 3d 3d 53    }..  if( rc==S
9280: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0d 0a 20 20 20  QLITE_OK ){..   
9290: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72   rc = sqlite3_cr
92a0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62  eate_function(db
92b0: 2c 20 22 69 6e 74 65 72 6f 70 53 6c 65 65 70 22  , "interopSleep"
92c0: 2c 20 31 2c 20 53 51 4c 49 54 45 5f 41 4e 59 2c  , 1, SQLITE_ANY,
92d0: 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74   0,..        int
92e0: 65 72 6f 70 53 6c 65 65 70 46 75 6e 63 2c 20 30  eropSleepFunc, 0
92f0: 2c 20 30 29 3b 0d 0a 20 20 7d 0d 0a 20 20 72 65  , 0);..  }..  re
9300: 74 75 72 6e 20 72 63 3b 0d 0a 7d 0d 0a 23 65 6e  turn rc;..}..#en
9310: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 53  dif /* SQLITE_OS
9320: 5f 57 49 4e 20 2a 2f 0d 0a                       _WIN */..