System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 070c9c3480b4a0ecff0df1035541710d8c144625:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 23 64 65 66 69 6e 65 20 53 51  */....#define SQ
0130: 4c 49 54 45 5f 41 50 49 20 5f 5f 64 65 63 6c 73  LITE_API __decls
0140: 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 0d 0a  pec(dllexport)..
0150: 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 63  ..#include "../c
0160: 6f 72 65 2f 73 71 6c 69 74 65 33 2e 63 22 0d 0a  ore/sqlite3.c"..
0170: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
0180: 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 45 58  TEROP_INCLUDE_EX
0190: 54 52 41 29 0d 0a 23 69 6e 63 6c 75 64 65 20 22  TRA)..#include "
01a0: 2e 2e 2f 65 78 74 2f 65 78 74 72 61 2e 63 22 0d  ../ext/extra.c".
01b0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64  .#endif....#if d
01c0: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 49  efined(INTEROP_I
01d0: 4e 43 4c 55 44 45 5f 43 45 52 4f 44 29 0d 0a 23  NCLUDE_CEROD)..#
01e0: 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 65 78 74 2f  include "../ext/
01f0: 63 65 72 6f 64 2e 63 22 0d 0a 23 65 6e 64 69 66  cerod.c"..#endif
0200: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
0210: 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f  INTEROP_INCLUDE_
0220: 53 45 45 29 0d 0a 23 69 6e 63 6c 75 64 65 20 22  SEE)..#include "
0230: 2e 2e 2f 65 78 74 2f 73 65 65 2e 63 22 0d 0a 23  ../ext/see.c"..#
0240: 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66  endif....#if def
0250: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 49 4e 43  ined(INTEROP_INC
0260: 4c 55 44 45 5f 5a 49 50 56 46 53 29 0d 0a 23 69  LUDE_ZIPVFS)..#i
0270: 6e 63 6c 75 64 65 20 22 2e 2e 2f 65 78 74 2f 7a  nclude "../ext/z
0280: 69 70 76 66 73 2e 63 22 0d 0a 23 69 6e 63 6c 75  ipvfs.c"..#inclu
0290: 64 65 20 22 2e 2e 2f 65 78 74 2f 61 6c 67 6f 72  de "../ext/algor
02a0: 69 74 68 6d 73 2e 63 22 0d 0a 23 65 6e 64 69 66  ithms.c"..#endif
02b0: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
02c0: 49 4e 54 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f  INTEROP_EXTENSIO
02d0: 4e 5f 46 55 4e 43 54 49 4f 4e 53 29 0d 0a 23 75  N_FUNCTIONS)..#u
02e0: 6e 64 65 66 20 43 4f 4d 50 49 4c 45 5f 53 51 4c  ndef COMPILE_SQL
02f0: 49 54 45 5f 45 58 54 45 4e 53 49 4f 4e 53 5f 41  ITE_EXTENSIONS_A
0300: 53 5f 4c 4f 41 44 41 42 4c 45 5f 4d 4f 44 55 4c  S_LOADABLE_MODUL
0310: 45 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f  E..#include "../
0320: 63 6f 6e 74 72 69 62 2f 65 78 74 65 6e 73 69 6f  contrib/extensio
0330: 6e 2d 66 75 6e 63 74 69 6f 6e 73 2e 63 22 0d 0a  n-functions.c"..
0340: 65 78 74 65 72 6e 20 69 6e 74 20 52 65 67 69 73  extern int Regis
0350: 74 65 72 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63  terExtensionFunc
0360: 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 20 2a 64  tions(sqlite3 *d
0370: 62 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23  b);..#endif....#
0380: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
0390: 45 5f 4f 53 5f 57 49 4e 29 0d 0a 23 69 66 20 64  E_OS_WIN)..#if d
03a0: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 43  efined(INTEROP_C
03b0: 4f 44 45 43 29 20 26 26 20 21 64 65 66 69 6e 65  ODEC) && !define
03c0: 64 28 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44  d(INTEROP_INCLUD
03d0: 45 5f 53 45 45 29 0d 0a 23 69 66 64 65 66 20 53  E_SEE)..#ifdef S
03e0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 5a 49 50  QLITE_ENABLE_ZIP
03f0: 56 46 53 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54  VFS..#define INT
0400: 45 52 4f 50 5f 43 4f 44 45 43 5f 47 45 54 5f 50  EROP_CODEC_GET_P
0410: 41 47 45 52 28 61 2c 62 2c 63 29 20 73 71 6c 69  AGER(a,b,c) sqli
0420: 74 65 33 50 61 67 65 72 47 65 74 28 61 2c 62 2c  te3PagerGet(a,b,
0430: 63 2c 30 29 0d 0a 23 65 6c 69 66 20 53 51 4c 49  c,0)..#elif SQLI
0440: 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45  TE_VERSION_NUMBE
0450: 52 20 3e 20 33 30 30 39 30 30 32 0d 0a 23 64 65  R > 3009002..#de
0460: 66 69 6e 65 20 49 4e 54 45 52 4f 50 5f 43 4f 44  fine INTEROP_COD
0470: 45 43 5f 47 45 54 5f 50 41 47 45 52 28 61 2c 62  EC_GET_PAGER(a,b
0480: 2c 63 29 20 73 71 6c 69 74 65 33 50 61 67 65 72  ,c) sqlite3Pager
0490: 47 65 74 28 61 2c 62 2c 63 2c 30 29 0d 0a 23 65  Get(a,b,c,0)..#e
04a0: 6c 73 65 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54  lse..#define INT
04b0: 45 52 4f 50 5f 43 4f 44 45 43 5f 47 45 54 5f 50  EROP_CODEC_GET_P
04c0: 41 47 45 52 28 61 2c 62 2c 63 29 20 73 71 6c 69  AGER(a,b,c) sqli
04d0: 74 65 33 50 61 67 65 72 47 65 74 28 61 2c 62 2c  te3PagerGet(a,b,
04e0: 63 29 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 6e 63  c)..#endif..#inc
04f0: 6c 75 64 65 20 22 63 72 79 70 74 2e 63 22 0d 0a  lude "crypt.c"..
0500: 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 6e 63 6c 75  #endif....#inclu
0510: 64 65 20 22 69 6e 74 65 72 6f 70 2e 68 22 0d 0a  de "interop.h"..
0520: 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52 4f  ..#define INTERO
0530: 50 5f 44 45 42 55 47 5f 4e 4f 4e 45 20 20 20 20  P_DEBUG_NONE    
0540: 20 20 20 20 20 20 20 28 30 78 30 30 30 30 29 0d         (0x0000).
0550: 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52 4f 50  .#define INTEROP
0560: 5f 44 45 42 55 47 5f 43 4c 4f 53 45 20 20 20 20  _DEBUG_CLOSE    
0570: 20 20 20 20 20 20 28 30 78 30 30 30 31 29 0d 0a        (0x0001)..
0580: 23 64 65 66 69 6e 65 20 49 4e 54 45 52 4f 50 5f  #define INTEROP_
0590: 44 45 42 55 47 5f 46 49 4e 41 4c 49 5a 45 20 20  DEBUG_FINALIZE  
05a0: 20 20 20 20 20 28 30 78 30 30 30 32 29 0d 0a 23       (0x0002)..#
05b0: 64 65 66 69 6e 65 20 49 4e 54 45 52 4f 50 5f 44  define INTEROP_D
05c0: 45 42 55 47 5f 42 41 43 4b 55 50 5f 46 49 4e 49  EBUG_BACKUP_FINI
05d0: 53 48 20 20 28 30 78 30 30 30 34 29 0d 0a 23 64  SH  (0x0004)..#d
05e0: 65 66 69 6e 65 20 49 4e 54 45 52 4f 50 5f 44 45  efine INTEROP_DE
05f0: 42 55 47 5f 4f 50 45 4e 20 20 20 20 20 20 20 20  BUG_OPEN        
0600: 20 20 20 28 30 78 30 30 30 38 29 0d 0a 23 64 65     (0x0008)..#de
0610: 66 69 6e 65 20 49 4e 54 45 52 4f 50 5f 44 45 42  fine INTEROP_DEB
0620: 55 47 5f 4f 50 45 4e 31 36 20 20 20 20 20 20 20  UG_OPEN16       
0630: 20 20 28 30 78 30 30 31 30 29 0d 0a 23 64 65 66    (0x0010)..#def
0640: 69 6e 65 20 49 4e 54 45 52 4f 50 5f 44 45 42 55  ine INTEROP_DEBU
0650: 47 5f 50 52 45 50 41 52 45 20 20 20 20 20 20 20  G_PREPARE       
0660: 20 28 30 78 30 30 32 30 29 0d 0a 23 64 65 66 69   (0x0020)..#defi
0670: 6e 65 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  ne INTEROP_DEBUG
0680: 5f 50 52 45 50 41 52 45 31 36 20 20 20 20 20 20  _PREPARE16      
0690: 28 30 78 30 30 34 30 29 0d 0a 23 64 65 66 69 6e  (0x0040)..#defin
06a0: 65 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f  e INTEROP_DEBUG_
06b0: 52 45 53 45 54 20 20 20 20 20 20 20 20 20 20 28  RESET          (
06c0: 30 78 30 30 38 30 29 0d 0a 23 64 65 66 69 6e 65  0x0080)..#define
06d0: 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 43   INTEROP_DEBUG_C
06e0: 48 41 4e 47 45 53 20 20 20 20 20 20 20 20 28 30  HANGES        (0
06f0: 78 30 31 30 30 29 0d 0a 23 64 65 66 69 6e 65 20  x0100)..#define 
0700: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 42 52  INTEROP_DEBUG_BR
0710: 45 41 4b 20 20 20 20 20 20 20 20 20 20 28 30 78  EAK          (0x
0720: 30 32 30 30 29 0d 0a 0d 0a 23 69 66 20 64 65 66  0200)....#if def
0730: 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26  ined(_MSC_VER) &
0740: 26 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f  & defined(INTERO
0750: 50 5f 44 45 42 55 47 29 20 26 26 20 5c 0d 0a 20  P_DEBUG) && \.. 
0760: 20 20 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55     (INTEROP_DEBU
0770: 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55  G & INTEROP_DEBU
0780: 47 5f 42 52 45 41 4b 29 0d 0a 23 64 65 66 69 6e  G_BREAK)..#defin
0790: 65 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70  e sqlite3Interop
07a0: 42 72 65 61 6b 28 61 29 20 7b 20 73 71 6c 69 74  Break(a) { sqlit
07b0: 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22  e3InteropDebug("
07c0: 25 73 5c 6e 22 2c 20 28 61 29 29 3b 20 5f 5f 64  %s\n", (a)); __d
07d0: 65 62 75 67 62 72 65 61 6b 28 29 3b 20 7d 0d 0a  ebugbreak(); }..
07e0: 23 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65 20 73  #else..#define s
07f0: 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 42 72 65  qlite3InteropBre
0800: 61 6b 28 61 29 0d 0a 23 65 6e 64 69 66 0d 0a 0d  ak(a)..#endif...
0810: 0a 74 79 70 65 64 65 66 20 76 6f 69 64 20 28 2a  .typedef void (*
0820: 53 51 4c 49 54 45 55 53 45 52 46 55 4e 43 29 28  SQLITEUSERFUNC)(
0830: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
0840: 2a 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f  *, int, sqlite3_
0850: 76 61 6c 75 65 20 2a 2a 29 3b 0d 0a 74 79 70 65  value **);..type
0860: 64 65 66 20 76 6f 69 64 20 28 2a 53 51 4c 49 54  def void (*SQLIT
0870: 45 46 55 4e 43 46 49 4e 41 4c 29 28 73 71 6c 69  EFUNCFINAL)(sqli
0880: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 29 3b 0d  te3_context *);.
0890: 0a 0d 0a 2f 2a 0d 0a 2a 2a 20 41 6e 20 61 72 72  .../*..** An arr
08a0: 61 79 20 6f 66 20 6e 61 6d 65 73 20 6f 66 20 61  ay of names of a
08b0: 6c 6c 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  ll compile-time 
08c0: 6f 70 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 61  options.  This a
08d0: 72 72 61 79 20 73 68 6f 75 6c 64 0d 0a 2a 2a 20  rray should..** 
08e0: 62 65 20 73 6f 72 74 65 64 20 41 2d 5a 2e 0d 0a  be sorted A-Z...
08f0: 2a 2a 0d 0a 2a 2a 20 54 68 69 73 20 61 72 72 61  **..** This arra
0900: 79 20 6c 6f 6f 6b 73 20 6c 61 72 67 65 2c 20 62  y looks large, b
0910: 75 74 20 69 6e 20 61 20 74 79 70 69 63 61 6c 20  ut in a typical 
0920: 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 61 63 74  installation act
0930: 75 61 6c 6c 79 20 75 73 65 73 0d 0a 2a 2a 20 6f  ually uses..** o
0940: 6e 6c 79 20 61 20 68 61 6e 64 66 75 6c 20 6f 66  nly a handful of
0950: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
0960: 74 69 6f 6e 73 2c 20 73 6f 20 6d 6f 73 74 20 74  tions, so most t
0970: 69 6d 65 73 20 74 68 69 73 20 61 72 72 61 79 20  imes this array 
0980: 69 73 20 75 73 75 61 6c 6c 79 0d 0a 2a 2a 20 72  is usually..** r
0990: 61 74 68 65 72 20 73 68 6f 72 74 20 61 6e 64 20  ather short and 
09a0: 75 73 65 73 20 6c 69 74 74 6c 65 20 6d 65 6d 6f  uses little memo
09b0: 72 79 20 73 70 61 63 65 2e 0d 0a 2a 2f 0d 0a 73  ry space...*/..s
09c0: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
09d0: 20 2a 20 63 6f 6e 73 74 20 61 7a 49 6e 74 65 72   * const azInter
09e0: 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 5b 5d 20 3d  opCompileOpt[] =
09f0: 20 7b 0d 0a 0d 0a 2f 2a 20 54 68 65 73 65 20 6d   {..../* These m
0a00: 61 63 72 6f 73 20 61 72 65 20 70 72 6f 76 69 64  acros are provid
0a10: 65 64 20 74 6f 20 22 73 74 72 69 6e 67 69 66 79  ed to "stringify
0a20: 22 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  " the value of t
0a30: 68 65 20 64 65 66 69 6e 65 0d 0a 2a 2a 20 66 6f  he define..** fo
0a40: 72 20 74 68 6f 73 65 20 6f 70 74 69 6f 6e 73 20  r those options 
0a50: 69 6e 20 77 68 69 63 68 20 74 68 65 20 76 61 6c  in which the val
0a60: 75 65 20 69 73 20 6d 65 61 6e 69 6e 67 66 75 6c  ue is meaningful
0a70: 2e 20 2a 2f 0d 0a 23 69 66 6e 64 65 66 20 43 54  . */..#ifndef CT
0a80: 49 4d 45 4f 50 54 5f 56 41 4c 5f 0d 0a 23 64 65  IMEOPT_VAL_..#de
0a90: 66 69 6e 65 20 43 54 49 4d 45 4f 50 54 5f 56 41  fine CTIMEOPT_VA
0aa0: 4c 5f 28 6f 70 74 29 20 23 6f 70 74 0d 0a 23 65  L_(opt) #opt..#e
0ab0: 6e 64 69 66 0d 0a 0d 0a 23 69 66 6e 64 65 66 20  ndif....#ifndef 
0ac0: 43 54 49 4d 45 4f 50 54 5f 56 41 4c 0d 0a 23 64  CTIMEOPT_VAL..#d
0ad0: 65 66 69 6e 65 20 43 54 49 4d 45 4f 50 54 5f 56  efine CTIMEOPT_V
0ae0: 41 4c 28 6f 70 74 29 20 43 54 49 4d 45 4f 50 54  AL(opt) CTIMEOPT
0af0: 5f 56 41 4c 5f 28 6f 70 74 29 0d 0a 23 65 6e 64  _VAL_(opt)..#end
0b00: 69 66 0d 0a 0d 0a 23 69 66 64 65 66 20 49 4e 54  if....#ifdef INT
0b10: 45 52 4f 50 5f 43 4f 44 45 43 0d 0a 20 20 22 43  EROP_CODEC..  "C
0b20: 4f 44 45 43 22 2c 0d 0a 23 65 6e 64 69 66 0d 0a  ODEC",..#endif..
0b30: 23 69 66 64 65 66 20 49 4e 54 45 52 4f 50 5f 44  #ifdef INTEROP_D
0b40: 45 42 55 47 0d 0a 20 20 22 44 45 42 55 47 3d 22  EBUG..  "DEBUG="
0b50: 20 43 54 49 4d 45 4f 50 54 5f 56 41 4c 28 49 4e   CTIMEOPT_VAL(IN
0b60: 54 45 52 4f 50 5f 44 45 42 55 47 29 2c 0d 0a 23  TEROP_DEBUG),..#
0b70: 65 6e 64 69 66 0d 0a 23 69 66 64 65 66 20 49 4e  endif..#ifdef IN
0b80: 54 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f  TEROP_EXTENSION_
0b90: 46 55 4e 43 54 49 4f 4e 53 0d 0a 20 20 22 45 58  FUNCTIONS..  "EX
0ba0: 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e  TENSION_FUNCTION
0bb0: 53 22 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66  S",..#endif..#if
0bc0: 64 65 66 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c  def INTEROP_INCL
0bd0: 55 44 45 5f 43 45 52 4f 44 0d 0a 20 20 22 49 4e  UDE_CEROD..  "IN
0be0: 43 4c 55 44 45 5f 43 45 52 4f 44 22 2c 0d 0a 23  CLUDE_CEROD",..#
0bf0: 65 6e 64 69 66 0d 0a 23 69 66 64 65 66 20 49 4e  endif..#ifdef IN
0c00: 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 45 58  TEROP_INCLUDE_EX
0c10: 54 52 41 0d 0a 20 20 22 49 4e 43 4c 55 44 45 5f  TRA..  "INCLUDE_
0c20: 45 58 54 52 41 22 2c 0d 0a 23 65 6e 64 69 66 0d  EXTRA",..#endif.
0c30: 0a 23 69 66 64 65 66 20 49 4e 54 45 52 4f 50 5f  .#ifdef INTEROP_
0c40: 49 4e 43 4c 55 44 45 5f 53 45 45 0d 0a 20 20 22  INCLUDE_SEE..  "
0c50: 49 4e 43 4c 55 44 45 5f 53 45 45 22 2c 0d 0a 23  INCLUDE_SEE",..#
0c60: 65 6e 64 69 66 0d 0a 23 69 66 64 65 66 20 49 4e  endif..#ifdef IN
0c70: 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 5a 49  TEROP_INCLUDE_ZI
0c80: 50 56 46 53 0d 0a 20 20 22 49 4e 43 4c 55 44 45  PVFS..  "INCLUDE
0c90: 5f 5a 49 50 56 46 53 22 2c 0d 0a 23 65 6e 64 69  _ZIPVFS",..#endi
0ca0: 66 0d 0a 23 69 66 64 65 66 20 49 4e 54 45 52 4f  f..#ifdef INTERO
0cb0: 50 5f 4a 53 4f 4e 31 5f 45 58 54 45 4e 53 49 4f  P_JSON1_EXTENSIO
0cc0: 4e 0d 0a 20 20 22 4a 53 4f 4e 31 5f 45 58 54 45  N..  "JSON1_EXTE
0cd0: 4e 53 49 4f 4e 22 2c 0d 0a 23 65 6e 64 69 66 0d  NSION",..#endif.
0ce0: 0a 23 69 66 64 65 66 20 49 4e 54 45 52 4f 50 5f  .#ifdef INTEROP_
0cf0: 4c 45 47 41 43 59 5f 43 4c 4f 53 45 0d 0a 20 20  LEGACY_CLOSE..  
0d00: 22 4c 45 47 41 43 59 5f 43 4c 4f 53 45 22 2c 0d  "LEGACY_CLOSE",.
0d10: 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
0d20: 49 4e 54 45 52 4f 50 5f 4c 4f 47 0d 0a 20 20 22  INTEROP_LOG..  "
0d30: 4c 4f 47 22 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23  LOG",..#endif..#
0d40: 69 66 64 65 66 20 49 4e 54 45 52 4f 50 5f 50 45  ifdef INTEROP_PE
0d50: 52 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e 53 49  RCENTILE_EXTENSI
0d60: 4f 4e 0d 0a 20 20 22 50 45 52 43 45 4e 54 49 4c  ON..  "PERCENTIL
0d70: 45 5f 45 58 54 45 4e 53 49 4f 4e 22 2c 0d 0a 23  E_EXTENSION",..#
0d80: 65 6e 64 69 66 0d 0a 23 69 66 64 65 66 20 49 4e  endif..#ifdef IN
0d90: 54 45 52 4f 50 5f 52 45 47 45 58 50 5f 45 58 54  TEROP_REGEXP_EXT
0da0: 45 4e 53 49 4f 4e 0d 0a 20 20 22 52 45 47 45 58  ENSION..  "REGEX
0db0: 50 5f 45 58 54 45 4e 53 49 4f 4e 22 2c 0d 0a 23  P_EXTENSION",..#
0dc0: 65 6e 64 69 66 0d 0a 23 69 66 64 65 66 20 49 4e  endif..#ifdef IN
0dd0: 54 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e  TEROP_TEST_EXTEN
0de0: 53 49 4f 4e 0d 0a 20 20 22 54 45 53 54 5f 45 58  SION..  "TEST_EX
0df0: 54 45 4e 53 49 4f 4e 22 2c 0d 0a 23 65 6e 64 69  TENSION",..#endi
0e00: 66 0d 0a 23 69 66 64 65 66 20 49 4e 54 45 52 4f  f..#ifdef INTERO
0e10: 50 5f 54 4f 54 59 50 45 5f 45 58 54 45 4e 53 49  P_TOTYPE_EXTENSI
0e20: 4f 4e 0d 0a 20 20 22 54 4f 54 59 50 45 5f 45 58  ON..  "TOTYPE_EX
0e30: 54 45 4e 53 49 4f 4e 22 2c 0d 0a 23 65 6e 64 69  TENSION",..#endi
0e40: 66 0d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
0e50: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 0d  _VERSION_NUMBER.
0e60: 0a 20 20 22 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  .  "VERSION_NUMB
0e70: 45 52 3d 22 20 43 54 49 4d 45 4f 50 54 5f 56 41  ER=" CTIMEOPT_VA
0e80: 4c 28 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  L(SQLITE_VERSION
0e90: 5f 4e 55 4d 42 45 52 29 2c 0d 0a 23 65 6e 64 69  _NUMBER),..#endi
0ea0: 66 0d 0a 23 69 66 64 65 66 20 49 4e 54 45 52 4f  f..#ifdef INTERO
0eb0: 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d  P_VIRTUAL_TABLE.
0ec0: 0a 20 20 22 56 49 52 54 55 41 4c 5f 54 41 42 4c  .  "VIRTUAL_TABL
0ed0: 45 22 2c 0d 0a 23 65 6e 64 69 66 0d 0a 7d 3b 0d  E",..#endif..};.
0ee0: 0a 0d 0a 2f 2a 0d 0a 2a 2a 20 47 69 76 65 6e 20  .../*..** Given 
0ef0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f  the name of a co
0f00: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
0f10: 6e 2c 20 72 65 74 75 72 6e 20 74 72 75 65 20 69  n, return true i
0f20: 66 20 74 68 61 74 20 6f 70 74 69 6f 6e 0d 0a 2a  f that option..*
0f30: 2a 20 77 61 73 20 75 73 65 64 20 61 6e 64 20 66  * was used and f
0f40: 61 6c 73 65 20 69 66 20 6e 6f 74 2e 0d 0a 2a 2a  alse if not...**
0f50: 0d 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 63 61  ..** The name ca
0f60: 6e 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62 65 67  n optionally beg
0f70: 69 6e 20 77 69 74 68 20 22 53 51 4c 49 54 45 5f  in with "SQLITE_
0f80: 22 20 6f 72 20 22 49 4e 54 45 52 4f 50 5f 22 20  " or "INTEROP_" 
0f90: 62 75 74 20 74 68 6f 73 65 0d 0a 2a 2a 20 70 72  but those..** pr
0fa0: 65 66 69 78 65 73 20 61 72 65 20 6e 6f 74 20 72  efixes are not r
0fb0: 65 71 75 69 72 65 64 20 66 6f 72 20 61 20 6d 61  equired for a ma
0fc0: 74 63 68 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49 54 45  tch...*/..SQLITE
0fd0: 5f 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20  _API int WINAPI 
0fe0: 69 6e 74 65 72 6f 70 5f 63 6f 6d 70 69 6c 65 6f  interop_compileo
0ff0: 70 74 69 6f 6e 5f 75 73 65 64 28 63 6f 6e 73 74  ption_used(const
1000: 20 63 68 61 72 20 2a 7a 4f 70 74 4e 61 6d 65 29   char *zOptName)
1010: 7b 0d 0a 20 20 69 6e 74 20 69 2c 20 6e 3b 0d 0a  {..  int i, n;..
1020: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
1030: 4e 49 43 6d 70 28 7a 4f 70 74 4e 61 6d 65 2c 20  NICmp(zOptName, 
1040: 22 53 51 4c 49 54 45 5f 22 2c 20 37 29 3d 3d 30  "SQLITE_", 7)==0
1050: 20 29 20 7a 4f 70 74 4e 61 6d 65 20 2b 3d 20 37   ) zOptName += 7
1060: 3b 0d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ;..  if( sqlite3
1070: 53 74 72 4e 49 43 6d 70 28 7a 4f 70 74 4e 61 6d  StrNICmp(zOptNam
1080: 65 2c 20 22 49 4e 54 45 52 4f 50 5f 22 2c 20 38  e, "INTEROP_", 8
1090: 29 3d 3d 30 20 29 20 7a 4f 70 74 4e 61 6d 65 20  )==0 ) zOptName 
10a0: 2b 3d 20 38 3b 0d 0a 20 20 6e 20 3d 20 73 71 6c  += 8;..  n = sql
10b0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4f 70  ite3Strlen30(zOp
10c0: 74 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 2f 2a 20  tName);....  /* 
10d0: 53 69 6e 63 65 20 41 72 72 61 79 53 69 7a 65 28  Since ArraySize(
10e0: 61 7a 49 6e 74 65 72 6f 70 43 6f 6d 70 69 6c 65  azInteropCompile
10f0: 4f 70 74 29 20 69 73 20 6e 6f 72 6d 61 6c 6c 79  Opt) is normally
1100: 20 69 6e 20 73 69 6e 67 6c 65 20 64 69 67 69 74   in single digit
1110: 73 2c 20 61 0d 0a 20 20 2a 2a 20 6c 69 6e 65 61  s, a..  ** linea
1120: 72 20 73 65 61 72 63 68 20 69 73 20 61 64 65 71  r search is adeq
1130: 75 61 74 65 2e 20 20 4e 6f 20 6e 65 65 64 20 66  uate.  No need f
1140: 6f 72 20 61 20 62 69 6e 61 72 79 20 73 65 61 72  or a binary sear
1150: 63 68 2e 20 2a 2f 0d 0a 20 20 66 6f 72 28 69 3d  ch. */..  for(i=
1160: 30 3b 20 69 3c 41 72 72 61 79 53 69 7a 65 28 61  0; i<ArraySize(a
1170: 7a 49 6e 74 65 72 6f 70 43 6f 6d 70 69 6c 65 4f  zInteropCompileO
1180: 70 74 29 3b 20 69 2b 2b 29 7b 0d 0a 20 20 20 20  pt); i++){..    
1190: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49  if( sqlite3StrNI
11a0: 43 6d 70 28 7a 4f 70 74 4e 61 6d 65 2c 20 61 7a  Cmp(zOptName, az
11b0: 49 6e 74 65 72 6f 70 43 6f 6d 70 69 6c 65 4f 70  InteropCompileOp
11c0: 74 5b 69 5d 2c 20 6e 29 3d 3d 30 0d 0a 20 20 20  t[i], n)==0..   
11d0: 20 20 26 26 20 73 71 6c 69 74 65 33 43 74 79 70    && sqlite3Ctyp
11e0: 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
11f0: 68 61 72 29 61 7a 49 6e 74 65 72 6f 70 43 6f 6d  har)azInteropCom
1200: 70 69 6c 65 4f 70 74 5b 69 5d 5b 6e 5d 5d 3d 3d  pileOpt[i][n]]==
1210: 30 0d 0a 20 20 20 20 29 7b 0d 0a 20 20 20 20 20  0..    ){..     
1220: 20 72 65 74 75 72 6e 20 31 3b 0d 0a 20 20 20 20   return 1;..    
1230: 7d 0d 0a 20 20 7d 0d 0a 20 20 72 65 74 75 72 6e  }..  }..  return
1240: 20 30 3b 0d 0a 7d 0d 0a 0d 0a 2f 2a 0d 0a 2a 2a   0;..}..../*..**
1250: 20 52 65 74 75 72 6e 20 74 68 65 20 4e 2d 74 68   Return the N-th
1260: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
1270: 74 69 6f 6e 20 73 74 72 69 6e 67 2e 20 20 49 66  tion string.  If
1280: 20 4e 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e   N is out of ran
1290: 67 65 2c 0d 0a 2a 2a 20 72 65 74 75 72 6e 20 61  ge,..** return a
12a0: 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 0d 0a   NULL pointer...
12b0: 2a 2f 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63  */..SQLITE_API c
12c0: 6f 6e 73 74 20 63 68 61 72 20 2a 57 49 4e 41 50  onst char *WINAP
12d0: 49 20 69 6e 74 65 72 6f 70 5f 63 6f 6d 70 69 6c  I interop_compil
12e0: 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e 74 20  eoption_get(int 
12f0: 4e 29 7b 0d 0a 20 20 69 66 28 20 4e 3e 3d 30 20  N){..  if( N>=0 
1300: 26 26 20 4e 3c 41 72 72 61 79 53 69 7a 65 28 61  && N<ArraySize(a
1310: 7a 49 6e 74 65 72 6f 70 43 6f 6d 70 69 6c 65 4f  zInteropCompileO
1320: 70 74 29 20 29 7b 0d 0a 20 20 20 20 72 65 74 75  pt) ){..    retu
1330: 72 6e 20 61 7a 49 6e 74 65 72 6f 70 43 6f 6d 70  rn azInteropComp
1340: 69 6c 65 4f 70 74 5b 4e 5d 3b 0d 0a 20 20 7d 0d  ileOpt[N];..  }.
1350: 0a 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 7d 0d  .  return 0;..}.
1360: 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49  ...#if defined(I
1370: 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20 7c 7c  NTEROP_DEBUG) ||
1380: 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50   defined(INTEROP
1390: 5f 4c 4f 47 29 0d 0a 53 51 4c 49 54 45 5f 50 52  _LOG)..SQLITE_PR
13a0: 49 56 41 54 45 20 76 6f 69 64 20 73 71 6c 69 74  IVATE void sqlit
13b0: 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 63  e3InteropDebug(c
13c0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d  onst char *zForm
13d0: 61 74 2c 20 2e 2e 2e 29 7b 0d 0a 20 20 76 61 5f  at, ...){..  va_
13e0: 6c 69 73 74 20 61 70 3b 20 20 20 20 20 20 20 20  list ap;        
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 20 2f 2a 20 56 61 72 61 72 67 20 6c 69 73 74 20   /* Vararg list 
1410: 2a 2f 0d 0a 20 20 53 74 72 41 63 63 75 6d 20 61  */..  StrAccum a
1420: 63 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  cc;             
1430: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72            /* Str
1440: 69 6e 67 20 61 63 63 75 6d 75 6c 61 74 6f 72 20  ing accumulator 
1450: 2a 2f 0d 0a 20 20 63 68 61 72 20 7a 4d 73 67 5b  */..  char zMsg[
1460: 53 51 4c 49 54 45 5f 50 52 49 4e 54 5f 42 55 46  SQLITE_PRINT_BUF
1470: 5f 53 49 5a 45 2a 33 5d 3b 20 2f 2a 20 43 6f 6d  _SIZE*3]; /* Com
1480: 70 6c 65 74 65 20 6c 6f 67 20 6d 65 73 73 61 67  plete log messag
1490: 65 20 2a 2f 0d 0a 20 20 76 61 5f 73 74 61 72 74  e */..  va_start
14a0: 28 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0d 0a  (ap, zFormat);..
14b0: 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49  #if SQLITE_VERSI
14c0: 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30  ON_NUMBER >= 300
14d0: 38 30 31 30 0d 0a 20 20 73 71 6c 69 74 65 33 53  8010..  sqlite3S
14e0: 74 72 41 63 63 75 6d 49 6e 69 74 28 26 61 63 63  trAccumInit(&acc
14f0: 2c 20 30 2c 20 7a 4d 73 67 2c 20 73 69 7a 65 6f  , 0, zMsg, sizeo
1500: 66 28 7a 4d 73 67 29 2c 20 30 29 3b 0d 0a 23 65  f(zMsg), 0);..#e
1510: 6c 73 65 0d 0a 20 20 73 71 6c 69 74 65 33 53 74  lse..  sqlite3St
1520: 72 41 63 63 75 6d 49 6e 69 74 28 26 61 63 63 2c  rAccumInit(&acc,
1530: 20 7a 4d 73 67 2c 20 73 69 7a 65 6f 66 28 7a 4d   zMsg, sizeof(zM
1540: 73 67 29 2c 20 30 29 3b 0d 0a 20 20 61 63 63 2e  sg), 0);..  acc.
1550: 75 73 65 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0d 0a  useMalloc = 0;..
1560: 23 65 6e 64 69 66 0d 0a 20 20 73 71 6c 69 74 65  #endif..  sqlite
1570: 33 56 58 50 72 69 6e 74 66 28 26 61 63 63 2c 20  3VXPrintf(&acc, 
1580: 30 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b  0, zFormat, ap);
1590: 0d 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0d  ..  va_end(ap);.
15a0: 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53  .#if SQLITE_VERS
15b0: 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30  ION_NUMBER >= 30
15c0: 30 37 30 31 33 0d 0a 20 20 73 71 6c 69 74 65 33  07013..  sqlite3
15d0: 5f 77 69 6e 33 32 5f 77 72 69 74 65 5f 64 65 62  _win32_write_deb
15e0: 75 67 28 73 71 6c 69 74 65 33 53 74 72 41 63 63  ug(sqlite3StrAcc
15f0: 75 6d 46 69 6e 69 73 68 28 26 61 63 63 29 2c 20  umFinish(&acc), 
1600: 2d 31 29 3b 0d 0a 23 65 6c 69 66 20 64 65 66 69  -1);..#elif defi
1610: 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32  ned(SQLITE_WIN32
1620: 5f 48 41 53 5f 41 4e 53 49 29 0d 0a 20 20 4f 75  _HAS_ANSI)..  Ou
1630: 74 70 75 74 44 65 62 75 67 53 74 72 69 6e 67 41  tputDebugStringA
1640: 28 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d  (sqlite3StrAccum
1650: 46 69 6e 69 73 68 28 26 61 63 63 29 29 3b 0d 0a  Finish(&acc));..
1660: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 53 51  #elif defined(SQ
1670: 4c 49 54 45 5f 57 49 4e 33 32 5f 48 41 53 5f 57  LITE_WIN32_HAS_W
1680: 49 44 45 29 0d 0a 20 20 7b 0d 0a 20 20 20 20 4c  IDE)..  {..    L
1690: 50 57 53 54 52 20 7a 57 69 64 65 4d 73 67 20 3d  PWSTR zWideMsg =
16a0: 20 75 74 66 38 54 6f 55 6e 69 63 6f 64 65 28 73   utf8ToUnicode(s
16b0: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69  qlite3StrAccumFi
16c0: 6e 69 73 68 28 26 61 63 63 29 29 3b 0d 0a 20 20  nish(&acc));..  
16d0: 20 20 69 66 28 20 7a 57 69 64 65 4d 73 67 20 29    if( zWideMsg )
16e0: 7b 0d 0a 20 20 20 20 20 20 4f 75 74 70 75 74 44  {..      OutputD
16f0: 65 62 75 67 53 74 72 69 6e 67 57 28 7a 57 69 64  ebugStringW(zWid
1700: 65 4d 73 67 29 3b 0d 0a 20 20 20 20 20 20 73 71  eMsg);..      sq
1710: 6c 69 74 65 33 5f 66 72 65 65 28 7a 57 69 64 65  lite3_free(zWide
1720: 4d 73 67 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20  Msg);..    }..  
1730: 7d 0d 0a 23 65 6c 73 65 0d 0a 20 20 66 70 72 69  }..#else..  fpri
1740: 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 22  ntf(stderr, "%s"
1750: 2c 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  , sqlite3StrAccu
1760: 6d 46 69 6e 69 73 68 28 26 61 63 63 29 29 3b 0d  mFinish(&acc));.
1770: 0a 23 65 6e 64 69 66 0d 0a 7d 0d 0a 23 65 6e 64  .#endif..}..#end
1780: 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65  if....#if define
1790: 64 28 49 4e 54 45 52 4f 50 5f 4c 4f 47 29 0d 0a  d(INTEROP_LOG)..
17a0: 53 51 4c 49 54 45 5f 50 52 49 56 41 54 45 20 69  SQLITE_PRIVATE i
17b0: 6e 74 20 6c 6f 67 43 6f 6e 66 69 67 75 72 65 64  nt logConfigured
17c0: 20 3d 20 30 3b 0d 0a 0d 0a 53 51 4c 49 54 45 5f   = 0;....SQLITE_
17d0: 50 52 49 56 41 54 45 20 76 6f 69 64 20 73 71 6c  PRIVATE void sql
17e0: 69 74 65 33 49 6e 74 65 72 6f 70 4c 6f 67 43 61  ite3InteropLogCa
17f0: 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a 70 41 72  llback(void *pAr
1800: 67 2c 20 69 6e 74 20 69 43 6f 64 65 2c 20 63 6f  g, int iCode, co
1810: 6e 73 74 20 63 68 61 72 20 2a 7a 4d 73 67 29 7b  nst char *zMsg){
1820: 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72  ..  sqlite3Inter
1830: 6f 70 44 65 62 75 67 28 22 49 4e 54 45 52 4f 50  opDebug("INTEROP
1840: 5f 4c 4f 47 20 28 25 64 29 20 25 73 5c 6e 22 2c  _LOG (%d) %s\n",
1850: 20 69 43 6f 64 65 2c 20 7a 4d 73 67 29 3b 0d 0a   iCode, zMsg);..
1860: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 53 51 4c  }..#endif....SQL
1870: 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41  ITE_API int WINA
1880: 50 49 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  PI sqlite3_mallo
1890: 63 5f 73 69 7a 65 5f 69 6e 74 65 72 6f 70 28 76  c_size_interop(v
18a0: 6f 69 64 20 2a 70 29 7b 0d 0a 20 20 72 65 74 75  oid *p){..  retu
18b0: 72 6e 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  rn sqlite3Malloc
18c0: 53 69 7a 65 28 70 29 3b 0d 0a 7d 0d 0a 0d 0a 23  Size(p);..}....#
18d0: 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52  if defined(INTER
18e0: 4f 50 5f 4c 45 47 41 43 59 5f 43 4c 4f 53 45 29  OP_LEGACY_CLOSE)
18f0: 20 7c 7c 20 53 51 4c 49 54 45 5f 56 45 52 53 49   || SQLITE_VERSI
1900: 4f 4e 5f 4e 55 4d 42 45 52 20 3c 20 33 30 30 37  ON_NUMBER < 3007
1910: 30 31 34 0d 0a 53 51 4c 49 54 45 5f 50 52 49 56  014..SQLITE_PRIV
1920: 41 54 45 20 76 6f 69 64 20 2a 20 73 71 6c 69 74  ATE void * sqlit
1930: 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 5f 69  e3DbMallocZero_i
1940: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 20 2a  nterop(sqlite3 *
1950: 64 62 2c 20 69 6e 74 20 6e 29 0d 0a 7b 0d 0a 20  db, int n)..{.. 
1960: 20 76 6f 69 64 20 2a 70 3b 0d 0a 20 20 69 66 20   void *p;..  if 
1970: 28 64 62 29 20 7b 0d 0a 20 20 20 20 73 71 6c 69  (db) {..    sqli
1980: 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28  te3_mutex_enter(
1990: 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 7d  db->mutex);..  }
19a0: 0d 0a 20 20 70 20 3d 20 73 71 6c 69 74 65 33 44  ..  p = sqlite3D
19b0: 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 6e  bMallocZero(db,n
19c0: 29 3b 0d 0a 20 20 69 66 20 28 64 62 29 20 7b 0d  );..  if (db) {.
19d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  .    sqlite3_mut
19e0: 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74  ex_leave(db->mut
19f0: 65 78 29 3b 0d 0a 20 20 7d 0d 0a 20 20 72 65 74  ex);..  }..  ret
1a00: 75 72 6e 20 70 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c  urn p;..}....SQL
1a10: 49 54 45 5f 50 52 49 56 41 54 45 20 76 6f 69 64  ITE_PRIVATE void
1a20: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 5f 69   sqlite3DbFree_i
1a30: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 20 2a  nterop(sqlite3 *
1a40: 64 62 2c 20 76 6f 69 64 20 2a 70 29 0d 0a 7b 0d  db, void *p)..{.
1a50: 0a 20 20 69 66 20 28 64 62 29 20 7b 0d 0a 20 20  .  if (db) {..  
1a60: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
1a70: 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29  enter(db->mutex)
1a80: 3b 0d 0a 20 20 7d 0d 0a 20 20 69 66 20 28 70 29  ;..  }..  if (p)
1a90: 20 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 4d   {..    sqlite3M
1aa0: 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 70  emdebugSetType(p
1ab0: 2c 20 4d 45 4d 54 59 50 45 5f 44 42 7c 4d 45 4d  , MEMTYPE_DB|MEM
1ac0: 54 59 50 45 5f 48 45 41 50 29 3b 0d 0a 20 20 7d  TYPE_HEAP);..  }
1ad0: 0d 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ..  sqlite3DbFre
1ae0: 65 28 64 62 2c 70 29 3b 0d 0a 20 20 69 66 20 28  e(db,p);..  if (
1af0: 64 62 29 20 7b 0d 0a 20 20 20 20 73 71 6c 69 74  db) {..    sqlit
1b00: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64  e3_mutex_leave(d
1b10: 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 7d 0d  b->mutex);..  }.
1b20: 0a 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 2f 2a  .}..#endif..../*
1b30: 0d 0a 20 20 20 20 54 68 65 20 67 6f 61 6c 20 6f  ..    The goal o
1b40: 66 20 74 68 69 73 20 76 65 72 73 69 6f 6e 20 6f  f this version o
1b50: 66 20 63 6c 6f 73 65 20 69 73 20 64 69 66 66 65  f close is diffe
1b60: 72 65 6e 74 20 74 68 61 6e 20 74 68 61 74 20 6f  rent than that o
1b70: 66 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28  f sqlite3_close(
1b80: 29 2c 20 61 6e 64 20 69 73 20 64 65 73 69 67 6e  ), and is design
1b90: 65 64 20 74 6f 20 6c 65 6e 64 20 69 74 73 65 6c  ed to lend itsel
1ba0: 66 20 62 65 74 74 65 72 20 74 6f 20 2e 4e 45 54  f better to .NET
1bb0: 27 73 20 6e 6f 6e 2d 64 65 74 65 72 6d 69 6e 69  's non-determini
1bc0: 73 74 69 63 20 66 69 6e 61 6c 69 7a 65 72 73 20  stic finalizers 
1bd0: 61 6e 64 0d 0a 20 20 20 20 74 68 65 20 47 43 20  and..    the GC 
1be0: 74 68 72 65 61 64 2e 20 20 53 51 4c 69 74 65 20  thread.  SQLite 
1bf0: 77 69 6c 6c 20 6e 6f 74 20 63 6c 6f 73 65 20 61  will not close a
1c00: 20 64 61 74 61 62 61 73 65 20 69 66 20 73 74 61   database if sta
1c10: 74 65 6d 65 6e 74 73 20 61 72 65 20 6f 70 65 6e  tements are open
1c20: 20 6f 6e 20 69 74 20 2d 2d 20 62 75 74 20 66 6f   on it -- but fo
1c30: 72 20 6f 75 72 20 70 75 72 70 6f 73 65 73 2c 20  r our purposes, 
1c40: 77 65 27 64 20 72 61 74 68 65 72 20 66 69 6e 61  we'd rather fina
1c50: 6c 69 7a 65 20 61 6c 6c 20 61 63 74 69 76 65 20  lize all active 
1c60: 73 74 61 74 65 6d 65 6e 74 73 0d 0a 20 20 20 20  statements..    
1c70: 61 6e 64 20 66 6f 72 63 69 62 6c 79 20 63 6c 6f  and forcibly clo
1c80: 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  se the database.
1c90: 20 20 54 68 65 20 72 65 61 73 6f 6e 20 69 73 20    The reason is 
1ca0: 73 69 6d 70 6c 65 20 2d 2d 20 61 20 6c 6f 74 20  simple -- a lot 
1cb0: 6f 66 20 70 65 6f 70 6c 65 20 64 6f 6e 27 74 20  of people don't 
1cc0: 44 69 73 70 6f 73 65 28 29 20 6f 66 20 74 68 65  Dispose() of the
1cd0: 69 72 20 6f 62 6a 65 63 74 73 20 63 6f 72 72 65  ir objects corre
1ce0: 63 74 6c 79 20 61 6e 64 20 6c 65 74 20 74 68 65  ctly and let the
1cf0: 20 67 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74   garbage collect
1d00: 6f 72 0d 0a 20 20 20 20 64 6f 20 69 74 2e 20 20  or..    do it.  
1d10: 54 68 69 73 20 6c 65 61 64 73 20 74 6f 20 75 6e  This leads to un
1d20: 65 78 70 65 63 74 65 64 20 62 65 68 61 76 69 6f  expected behavio
1d30: 72 20 77 68 65 6e 20 61 20 75 73 65 72 20 74 68  r when a user th
1d40: 69 6e 6b 73 20 74 68 65 79 27 76 65 20 63 6c 6f  inks they've clo
1d50: 73 65 64 20 61 20 64 61 74 61 62 61 73 65 2c 20  sed a database, 
1d60: 62 75 74 20 69 74 27 73 20 73 74 69 6c 6c 20 6f  but it's still o
1d70: 70 65 6e 20 62 65 63 61 75 73 65 20 6e 6f 74 20  pen because not 
1d80: 61 6c 6c 20 74 68 65 20 73 74 61 74 65 6d 65 6e  all the statemen
1d90: 74 73 20 68 61 76 65 0d 0a 20 20 20 20 68 69 74  ts have..    hit
1da0: 20 74 68 65 20 47 43 20 79 65 74 2e 0d 0a 0d 0a   the GC yet.....
1db0: 20 20 20 20 53 6f 2c 20 68 65 72 65 20 77 65 20      So, here we 
1dc0: 68 61 76 65 20 61 20 70 72 6f 62 6c 65 6d 20 2e  have a problem .
1dd0: 2e 2e 20 2e 4e 45 54 20 68 61 73 20 61 20 70 6f  .. .NET has a po
1de0: 69 6e 74 65 72 20 74 6f 20 61 6e 79 20 6e 75 6d  inter to any num
1df0: 62 65 72 20 6f 66 20 73 71 6c 69 74 65 33 5f 73  ber of sqlite3_s
1e00: 74 6d 74 20 6f 62 6a 65 63 74 73 2e 20 20 57 65  tmt objects.  We
1e10: 20 63 61 6e 27 74 20 63 61 6c 6c 20 73 71 6c 69   can't call sqli
1e20: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 20 6f  te3_finalize() o
1e30: 6e 20 74 68 65 73 65 20 62 65 63 61 75 73 65 0d  n these because.
1e40: 0a 20 20 20 20 74 68 65 69 72 20 6d 65 6d 6f 72  .    their memor
1e50: 79 20 69 73 20 66 72 65 65 64 20 61 6e 64 20 63  y is freed and c
1e60: 61 6e 20 62 65 20 75 73 65 64 20 66 6f 72 20 73  an be used for s
1e70: 6f 6d 65 74 68 69 6e 67 20 65 6c 73 65 2e 20 20  omething else.  
1e80: 54 68 65 20 47 43 20 74 68 72 65 61 64 20 63 6f  The GC thread co
1e90: 75 6c 64 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20  uld potentially 
1ea0: 74 72 79 20 61 6e 64 20 63 61 6c 6c 20 66 69 6e  try and call fin
1eb0: 61 6c 69 7a 65 20 61 67 61 69 6e 20 6f 6e 20 74  alize again on t
1ec0: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 61 66 74  he statement aft
1ed0: 65 72 0d 0a 20 20 20 20 74 68 61 74 20 6d 65 6d  er..    that mem
1ee0: 6f 72 79 20 77 61 73 20 64 65 61 6c 6c 6f 63 61  ory was dealloca
1ef0: 74 65 64 2e 20 20 42 41 44 2e 20 20 53 6f 2c 20  ted.  BAD.  So, 
1f00: 77 68 61 74 20 77 65 20 6e 65 65 64 20 74 6f 20  what we need to 
1f10: 64 6f 20 69 73 20 6d 61 6b 65 20 61 20 63 6f 70  do is make a cop
1f20: 79 20 6f 66 20 65 61 63 68 20 73 74 61 74 65 6d  y of each statem
1f30: 65 6e 74 2c 20 61 6e 64 20 63 61 6c 6c 20 66 69  ent, and call fi
1f40: 6e 61 6c 69 7a 65 28 29 20 6f 6e 20 74 68 65 20  nalize() on the 
1f50: 63 6f 70 79 20 2d 2d 20 73 6f 20 74 68 61 74 20  copy -- so that 
1f60: 74 68 65 20 6f 72 69 67 69 6e 61 6c 0d 0a 20 20  the original..  
1f70: 20 20 73 74 61 74 65 6d 65 6e 74 27 73 20 6d 65    statement's me
1f80: 6d 6f 72 79 20 69 73 20 70 72 65 73 65 72 76 65  mory is preserve
1f90: 64 2c 20 61 6e 64 20 6d 61 72 6b 65 64 20 61 73  d, and marked as
1fa0: 20 42 41 44 2c 20 62 75 74 20 77 65 20 63 61 6e   BAD, but we can
1fb0: 20 73 74 69 6c 6c 20 6d 61 6e 61 67 65 20 74 6f   still manage to
1fc0: 20 66 69 6e 61 6c 69 7a 65 20 65 76 65 72 79 74   finalize everyt
1fd0: 68 69 6e 67 20 61 6e 64 20 66 6f 72 63 69 62 6c  hing and forcibl
1fe0: 79 20 63 6c 6f 73 65 20 74 68 65 20 64 61 74 61  y close the data
1ff0: 62 61 73 65 2e 20 20 4c 61 74 65 72 20 77 68 65  base.  Later whe
2000: 6e 20 74 68 65 0d 0a 20 20 20 20 47 43 20 67 65  n the..    GC ge
2010: 74 73 20 61 72 6f 75 6e 64 20 74 6f 20 63 61 6c  ts around to cal
2020: 6c 69 6e 67 20 66 69 6e 61 6c 69 7a 65 5f 69 6e  ling finalize_in
2030: 74 65 72 6f 70 28 29 20 6f 6e 20 74 68 65 20 22  terop() on the "
2040: 62 61 64 22 20 73 74 61 74 65 6d 65 6e 74 2c 20  bad" statement, 
2050: 77 65 20 64 65 74 65 63 74 20 74 68 61 74 20 61  we detect that a
2060: 6e 64 20 66 69 6e 69 73 68 20 64 65 61 6c 6c 6f  nd finish deallo
2070: 63 61 74 69 6e 67 20 74 68 65 20 70 6f 69 6e 74  cating the point
2080: 65 72 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49 54 45 5f  er...*/..SQLITE_
2090: 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73  API int WINAPI s
20a0: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 5f 69 6e 74  qlite3_close_int
20b0: 65 72 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62  erop(sqlite3 *db
20c0: 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72 65 74 3b  )..{..  int ret;
20d0: 0d 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 49  ..#if !defined(I
20e0: 4e 54 45 52 4f 50 5f 4c 45 47 41 43 59 5f 43 4c  NTEROP_LEGACY_CL
20f0: 4f 53 45 29 20 26 26 20 53 51 4c 49 54 45 5f 56  OSE) && SQLITE_V
2100: 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d  ERSION_NUMBER >=
2110: 20 33 30 30 37 30 31 34 0d 0a 0d 0a 23 69 66 20   3007014....#if 
2120: 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f  defined(INTEROP_
2130: 44 45 42 55 47 29 20 26 26 20 28 49 4e 54 45 52  DEBUG) && (INTER
2140: 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52  OP_DEBUG & INTER
2150: 4f 50 5f 44 45 42 55 47 5f 43 4c 4f 53 45 29 0d  OP_DEBUG_CLOSE).
2160: 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f  .  sqlite3Intero
2170: 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f  pDebug("sqlite3_
2180: 63 6c 6f 73 65 5f 69 6e 74 65 72 6f 70 28 29 3a  close_interop():
2190: 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33   calling sqlite3
21a0: 5f 63 6c 6f 73 65 5f 76 32 28 25 70 29 2e 2e 2e  _close_v2(%p)...
21b0: 5c 6e 22 2c 20 64 62 29 3b 0d 0a 23 65 6e 64 69  \n", db);..#endi
21c0: 66 0d 0a 0d 0a 20 20 72 65 74 20 3d 20 73 71 6c  f....  ret = sql
21d0: 69 74 65 33 5f 63 6c 6f 73 65 5f 76 32 28 64 62  ite3_close_v2(db
21e0: 29 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65  );....#if define
21f0: 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29  d(INTEROP_DEBUG)
2200: 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42   && (INTEROP_DEB
2210: 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42  UG & INTEROP_DEB
2220: 55 47 5f 43 4c 4f 53 45 29 0d 0a 20 20 73 71 6c  UG_CLOSE)..  sql
2230: 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67  ite3InteropDebug
2240: 28 22 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 5f  ("sqlite3_close_
2250: 69 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c 69 74  interop(): sqlit
2260: 65 33 5f 63 6c 6f 73 65 5f 76 32 28 25 70 29 20  e3_close_v2(%p) 
2270: 72 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c  returned %d.\n",
2280: 20 64 62 2c 20 72 65 74 29 3b 0d 0a 23 65 6e 64   db, ret);..#end
2290: 69 66 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 72  if....  return r
22a0: 65 74 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 72 65  et;..#else..  re
22b0: 74 20 3d 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  t = sqlite3_clos
22c0: 65 28 64 62 29 3b 0d 0a 0d 0a 20 20 69 66 20 28  e(db);....  if (
22d0: 72 65 74 20 3d 3d 20 53 51 4c 49 54 45 5f 42 55  ret == SQLITE_BU
22e0: 53 59 29 0d 0a 20 20 7b 0d 0a 20 20 20 20 73 71  SY)..  {..    sq
22f0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
2300: 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d  r(db->mutex);...
2310: 0a 20 20 20 20 69 66 20 28 21 64 62 2d 3e 70 56  .    if (!db->pV
2320: 64 62 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dbe)..    {..   
2330: 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
2340: 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78  _leave(db->mutex
2350: 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  );..      return
2360: 20 72 65 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a   ret;..    }....
2370: 20 20 20 20 77 68 69 6c 65 20 28 64 62 2d 3e 70      while (db->p
2380: 56 64 62 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  Vdbe)..    {..  
2390: 20 20 20 20 2f 2a 20 4d 61 6b 65 20 61 20 63 6f      /* Make a co
23a0: 70 79 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  py of the first 
23b0: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
23c0: 6e 74 20 2a 2f 0d 0a 20 20 20 20 20 20 56 64 62  nt */..      Vdb
23d0: 65 20 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 73  e *p = (Vdbe *)s
23e0: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
23f0: 72 6f 5f 69 6e 74 65 72 6f 70 28 64 62 2c 20 73  ro_interop(db, s
2400: 69 7a 65 6f 66 28 56 64 62 65 29 29 3b 0d 0a 20  izeof(Vdbe));.. 
2410: 20 20 20 20 20 56 64 62 65 20 2a 70 6f 20 3d 20       Vdbe *po = 
2420: 64 62 2d 3e 70 56 64 62 65 3b 0d 0a 0d 0a 20 20  db->pVdbe;....  
2430: 20 20 20 20 69 66 20 28 21 70 29 0d 0a 20 20 20      if (!p)..   
2440: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
2450: 74 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  t = SQLITE_NOMEM
2460: 3b 0d 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  ;..        break
2470: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
2480: 20 20 20 20 43 6f 70 79 4d 65 6d 6f 72 79 28 70      CopyMemory(p
2490: 2c 20 70 6f 2c 20 73 69 7a 65 6f 66 28 56 64 62  , po, sizeof(Vdb
24a0: 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2a  e));....      /*
24b0: 20 50 75 74 20 69 74 20 6f 6e 20 74 68 65 20 63   Put it on the c
24c0: 68 61 69 6e 20 73 6f 20 77 65 20 63 61 6e 20 66  hain so we can f
24d0: 72 65 65 20 69 74 20 2a 2f 0d 0a 20 20 20 20 20  ree it */..     
24e0: 20 64 62 2d 3e 70 56 64 62 65 20 3d 20 70 3b 0d   db->pVdbe = p;.
24f0: 0a 20 20 20 20 20 20 72 65 74 20 3d 20 73 71 6c  .      ret = sql
2500: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 28 73  ite3_finalize((s
2510: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 70 29  qlite3_stmt *)p)
2520: 3b 20 2f 2a 20 54 68 69 73 20 77 69 6c 6c 20 61  ; /* This will a
2530: 6c 73 6f 20 66 72 65 65 20 74 68 65 20 63 6f 70  lso free the cop
2540: 79 27 73 20 6d 65 6d 6f 72 79 20 2a 2f 0d 0a 20  y's memory */.. 
2550: 20 20 20 20 20 69 66 20 28 72 65 74 29 0d 0a 20       if (ret).. 
2560: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2570: 2f 2a 20 66 69 6e 61 6c 69 7a 65 20 66 61 69 6c  /* finalize fail
2580: 65 64 20 2d 2d 20 73 6f 20 77 65 20 6d 75 73 74  ed -- so we must
2590: 20 70 75 74 20 62 61 63 6b 20 61 6e 79 74 68 69   put back anythi
25a0: 6e 67 20 77 65 20 6d 75 6e 67 65 64 20 2a 2f 0d  ng we munged */.
25b0: 0a 20 20 20 20 20 20 20 20 43 6f 70 79 4d 65 6d  .        CopyMem
25c0: 6f 72 79 28 70 6f 2c 20 70 2c 20 73 69 7a 65 6f  ory(po, p, sizeo
25d0: 66 28 56 64 62 65 29 29 3b 0d 0a 20 20 20 20 20  f(Vdbe));..     
25e0: 20 20 20 64 62 2d 3e 70 56 64 62 65 20 3d 20 70     db->pVdbe = p
25f0: 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2a  o;....        /*
2600: 0d 0a 20 20 20 20 20 20 20 20 2a 2a 20 4e 4f 54  ..        ** NOT
2610: 45 3a 20 4f 6b 2c 20 77 65 20 6d 75 73 74 20 66  E: Ok, we must f
2620: 72 65 65 20 74 68 69 73 20 62 6c 6f 63 6b 20 74  ree this block t
2630: 68 61 74 20 2a 77 65 2a 20 61 6c 6c 6f 63 61 74  hat *we* allocat
2640: 65 64 20 28 61 62 6f 76 65 29 20 73 69 6e 63 65  ed (above) since
2650: 0d 0a 20 20 20 20 20 20 20 20 2a 2a 20 20 20 20  ..        **    
2660: 20 20 20 66 69 6e 61 6c 69 7a 65 20 64 69 64 20     finalize did 
2670: 6e 6f 74 20 64 6f 20 73 6f 2e 0d 0a 20 20 20 20  not do so...    
2680: 20 20 20 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20      */..        
2690: 73 71 6c 69 74 65 33 44 62 46 72 65 65 5f 69 6e  sqlite3DbFree_in
26a0: 74 65 72 6f 70 28 64 62 2c 20 70 29 3b 0d 0a 20  terop(db, p);.. 
26b0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
26c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c       }..      el
26d0: 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  se..      {..   
26e0: 20 20 20 20 20 5a 65 72 6f 4d 65 6d 6f 72 79 28       ZeroMemory(
26f0: 70 6f 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 29  po, sizeof(Vdbe)
2700: 29 3b 0d 0a 20 20 20 20 20 20 20 20 70 6f 2d 3e  );..        po->
2710: 6d 61 67 69 63 20 3d 20 56 44 42 45 5f 4d 41 47  magic = VDBE_MAG
2720: 49 43 5f 44 45 41 44 3b 0d 0a 20 20 20 20 20 20  IC_DEAD;..      
2730: 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 73 71  }..    }..    sq
2740: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76  lite3_mutex_leav
2750: 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20  e(db->mutex);.. 
2760: 20 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33     ret = sqlite3
2770: 5f 63 6c 6f 73 65 28 64 62 29 3b 0d 0a 20 20 7d  _close(db);..  }
2780: 0d 0a 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0d  ..  return ret;.
2790: 0a 23 65 6e 64 69 66 0d 0a 7d 0d 0a 0d 0a 23 69  .#endif..}....#i
27a0: 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f  f defined(INTERO
27b0: 50 5f 4c 4f 47 29 0d 0a 53 51 4c 49 54 45 5f 41  P_LOG)..SQLITE_A
27c0: 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71  PI int WINAPI sq
27d0: 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67  lite3_config_log
27e0: 5f 69 6e 74 65 72 6f 70 28 29 0d 0a 7b 0d 0a 20  _interop()..{.. 
27f0: 20 69 6e 74 20 72 65 74 3b 0d 0a 20 20 69 66 28   int ret;..  if(
2800: 20 21 6c 6f 67 43 6f 6e 66 69 67 75 72 65 64 20   !logConfigured 
2810: 29 7b 0d 0a 20 20 20 20 72 65 74 20 3d 20 73 71  ){..    ret = sq
2820: 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c  lite3_config(SQL
2830: 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c 20  ITE_CONFIG_LOG, 
2840: 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 4c 6f  sqlite3InteropLo
2850: 67 43 61 6c 6c 62 61 63 6b 2c 20 30 29 3b 0d 0a  gCallback, 0);..
2860: 20 20 20 20 69 66 28 20 72 65 74 3d 3d 53 51 4c      if( ret==SQL
2870: 49 54 45 5f 4f 4b 20 29 7b 0d 0a 20 20 20 20 20  ITE_OK ){..     
2880: 20 6c 6f 67 43 6f 6e 66 69 67 75 72 65 64 20 3d   logConfigured =
2890: 20 31 3b 0d 0a 20 20 20 20 7d 65 6c 73 65 7b 0d   1;..    }else{.
28a0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 49 6e  .      sqlite3In
28b0: 74 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69  teropDebug("sqli
28c0: 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67 5f 69  te3_config_log_i
28d0: 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c 69 74 65  nterop(): sqlite
28e0: 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f  3_config(SQLITE_
28f0: 43 4f 4e 46 49 47 5f 4c 4f 47 29 20 72 65 74 75  CONFIG_LOG) retu
2900: 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 72 65 74  rned %d.\n", ret
2910: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 65 6c  );..    }..  }el
2920: 73 65 7b 0d 0a 20 20 20 20 72 65 74 20 3d 20 53  se{..    ret = S
2930: 51 4c 49 54 45 5f 4f 4b 3b 0d 0a 20 20 7d 0d 0a  QLITE_OK;..  }..
2940: 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d    return ret;..}
2950: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 53 51 4c 49  ..#endif....SQLI
2960: 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 63 68 61  TE_API const cha
2970: 72 20 2a 57 49 4e 41 50 49 20 69 6e 74 65 72 6f  r *WINAPI intero
2980: 70 5f 6c 69 62 76 65 72 73 69 6f 6e 28 76 6f 69  p_libversion(voi
2990: 64 29 0d 0a 7b 0d 0a 20 20 72 65 74 75 72 6e 20  d)..{..  return 
29a0: 49 4e 54 45 52 4f 50 5f 56 45 52 53 49 4f 4e 3b  INTEROP_VERSION;
29b0: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
29c0: 49 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 57 49  I const char *WI
29d0: 4e 41 50 49 20 69 6e 74 65 72 6f 70 5f 73 6f 75  NAPI interop_sou
29e0: 72 63 65 69 64 28 76 6f 69 64 29 0d 0a 7b 0d 0a  rceid(void)..{..
29f0: 20 20 72 65 74 75 72 6e 20 49 4e 54 45 52 4f 50    return INTEROP
2a00: 5f 53 4f 55 52 43 45 5f 49 44 20 22 20 22 20 49  _SOURCE_ID " " I
2a10: 4e 54 45 52 4f 50 5f 53 4f 55 52 43 45 5f 54 49  NTEROP_SOURCE_TI
2a20: 4d 45 53 54 41 4d 50 3b 0d 0a 7d 0d 0a 0d 0a 53  MESTAMP;..}....S
2a30: 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49  QLITE_API int WI
2a40: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 6f 70 65  NAPI sqlite3_ope
2a50: 6e 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 73 74 20  n_interop(const 
2a60: 63 68 61 72 20 2a 66 69 6c 65 6e 61 6d 65 2c 20  char *filename, 
2a70: 63 6f 6e 73 74 20 63 68 61 72 20 2a 76 66 73 4e  const char *vfsN
2a80: 61 6d 65 2c 20 69 6e 74 20 66 6c 61 67 73 2c 20  ame, int flags, 
2a90: 69 6e 74 20 65 78 74 46 75 6e 63 73 2c 20 73 71  int extFuncs, sq
2aa0: 6c 69 74 65 33 20 2a 2a 70 70 64 62 29 0d 0a 7b  lite3 **ppdb)..{
2ab0: 0d 0a 20 20 69 6e 74 20 72 65 74 3b 0d 0a 0d 0a  ..  int ret;....
2ac0: 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45  #if defined(INTE
2ad0: 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28 49  ROP_DEBUG) && (I
2ae0: 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49  NTEROP_DEBUG & I
2af0: 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 4f 50 45  NTEROP_DEBUG_OPE
2b00: 4e 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74  N)..  sqlite3Int
2b10: 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74  eropDebug("sqlit
2b20: 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28  e3_open_interop(
2b30: 29 3a 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74  ): calling sqlit
2b40: 65 33 5f 6f 70 65 6e 5f 76 32 28 5c 22 25 73 5c  e3_open_v2(\"%s\
2b50: 22 2c 20 5c 22 25 73 5c 22 2c 20 25 64 2c 20 25  ", \"%s\", %d, %
2b60: 64 2c 20 25 70 29 2e 2e 2e 5c 6e 22 2c 20 66 69  d, %p)...\n", fi
2b70: 6c 65 6e 61 6d 65 2c 20 76 66 73 4e 61 6d 65 2c  lename, vfsName,
2b80: 20 66 6c 61 67 73 2c 20 65 78 74 46 75 6e 63 73   flags, extFuncs
2b90: 2c 20 70 70 64 62 29 3b 0d 0a 23 65 6e 64 69 66  , ppdb);..#endif
2ba0: 0d 0a 0d 0a 20 20 72 65 74 20 3d 20 73 71 6c 69  ....  ret = sqli
2bb0: 74 65 33 5f 6f 70 65 6e 5f 76 32 28 66 69 6c 65  te3_open_v2(file
2bc0: 6e 61 6d 65 2c 20 70 70 64 62 2c 20 66 6c 61 67  name, ppdb, flag
2bd0: 73 2c 20 76 66 73 4e 61 6d 65 29 3b 0d 0a 0d 0a  s, vfsName);....
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 44 45 42 55 47 29 20 26 26 20 28 49  ROP_DEBUG) && (I
2c00: 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49  NTEROP_DEBUG & I
2c10: 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 4f 50 45  NTEROP_DEBUG_OPE
2c20: 4e 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74  N)..  sqlite3Int
2c30: 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74  eropDebug("sqlit
2c40: 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28  e3_open_interop(
2c50: 29 3a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f  ): sqlite3_open_
2c60: 76 32 28 5c 22 25 73 5c 22 2c 20 5c 22 25 73 5c  v2(\"%s\", \"%s\
2c70: 22 2c 20 25 64 2c 20 25 64 2c 20 25 70 29 20 72  ", %d, %d, %p) r
2c80: 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20  eturned %d.\n", 
2c90: 66 69 6c 65 6e 61 6d 65 2c 20 76 66 73 4e 61 6d  filename, vfsNam
2ca0: 65 2c 20 66 6c 61 67 73 2c 20 65 78 74 46 75 6e  e, flags, extFun
2cb0: 63 73 2c 20 70 70 64 62 2c 20 72 65 74 29 3b 0d  cs, ppdb, ret);.
2cc0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64  .#endif....#if d
2cd0: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 45  efined(INTEROP_E
2ce0: 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f  XTENSION_FUNCTIO
2cf0: 4e 53 29 0d 0a 20 20 69 66 20 28 28 72 65 74 20  NS)..  if ((ret 
2d00: 3d 3d 20 53 51 4c 49 54 45 5f 4f 4b 29 20 26 26  == SQLITE_OK) &&
2d10: 20 70 70 64 62 20 26 26 20 65 78 74 46 75 6e 63   ppdb && extFunc
2d20: 73 29 0d 0a 20 20 20 20 52 65 67 69 73 74 65 72  s)..    Register
2d30: 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f  ExtensionFunctio
2d40: 6e 73 28 2a 70 70 64 62 29 3b 0d 0a 23 65 6e 64  ns(*ppdb);..#end
2d50: 69 66 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 72  if....  return r
2d60: 65 74 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45  et;..}....SQLITE
2d70: 5f 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20  _API int WINAPI 
2d80: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 5f 69  sqlite3_open16_i
2d90: 6e 74 65 72 6f 70 28 63 6f 6e 73 74 20 63 68 61  nterop(const cha
2da0: 72 20 2a 66 69 6c 65 6e 61 6d 65 2c 20 63 6f 6e  r *filename, con
2db0: 73 74 20 63 68 61 72 20 2a 76 66 73 4e 61 6d 65  st char *vfsName
2dc0: 2c 20 69 6e 74 20 66 6c 61 67 73 2c 20 69 6e 74  , int flags, int
2dd0: 20 65 78 74 46 75 6e 63 73 2c 20 73 71 6c 69 74   extFuncs, sqlit
2de0: 65 33 20 2a 2a 70 70 64 62 29 0d 0a 7b 0d 0a 20  e3 **ppdb)..{.. 
2df0: 20 69 6e 74 20 72 65 74 3b 0d 0a 0d 0a 23 69 66   int ret;....#if
2e00: 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50   defined(INTEROP
2e10: 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e 54 45  _DEBUG) && (INTE
2e20: 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45  ROP_DEBUG & INTE
2e30: 52 4f 50 5f 44 45 42 55 47 5f 4f 50 45 4e 31 36  ROP_DEBUG_OPEN16
2e40: 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65  )..  sqlite3Inte
2e50: 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65  ropDebug("sqlite
2e60: 33 5f 6f 70 65 6e 31 36 5f 69 6e 74 65 72 6f 70  3_open16_interop
2e70: 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69  (): calling sqli
2e80: 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70  te3_open_interop
2e90: 28 5c 22 25 73 5c 22 2c 20 5c 22 25 73 5c 22 2c  (\"%s\", \"%s\",
2ea0: 20 25 64 2c 20 25 64 2c 20 25 70 29 2e 2e 2e 5c   %d, %d, %p)...\
2eb0: 6e 22 2c 20 66 69 6c 65 6e 61 6d 65 2c 20 76 66  n", filename, vf
2ec0: 73 4e 61 6d 65 2c 20 66 6c 61 67 73 2c 20 65 78  sName, flags, ex
2ed0: 74 46 75 6e 63 73 2c 20 70 70 64 62 29 3b 0d 0a  tFuncs, ppdb);..
2ee0: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 20  #endif....  ret 
2ef0: 3d 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69  = sqlite3_open_i
2f00: 6e 74 65 72 6f 70 28 66 69 6c 65 6e 61 6d 65 2c  nterop(filename,
2f10: 20 76 66 73 4e 61 6d 65 2c 20 66 6c 61 67 73 2c   vfsName, flags,
2f20: 20 65 78 74 46 75 6e 63 73 2c 20 70 70 64 62 29   extFuncs, ppdb)
2f30: 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64  ;....#if defined
2f40: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20  (INTEROP_DEBUG) 
2f50: 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  && (INTEROP_DEBU
2f60: 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55  G & INTEROP_DEBU
2f70: 47 5f 4f 50 45 4e 31 36 29 0d 0a 20 20 73 71 6c  G_OPEN16)..  sql
2f80: 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67  ite3InteropDebug
2f90: 28 22 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36  ("sqlite3_open16
2fa0: 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c 69  _interop(): sqli
2fb0: 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70  te3_open_interop
2fc0: 28 5c 22 25 73 5c 22 2c 20 5c 22 25 73 5c 22 2c  (\"%s\", \"%s\",
2fd0: 20 25 64 2c 20 25 64 2c 20 25 70 29 20 72 65 74   %d, %d, %p) ret
2fe0: 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 66 69  urned %d.\n", fi
2ff0: 6c 65 6e 61 6d 65 2c 20 76 66 73 4e 61 6d 65 2c  lename, vfsName,
3000: 20 66 6c 61 67 73 2c 20 65 78 74 46 75 6e 63 73   flags, extFuncs
3010: 2c 20 70 70 64 62 2c 20 72 65 74 29 3b 0d 0a 23  , ppdb, ret);..#
3020: 65 6e 64 69 66 0d 0a 0d 0a 20 20 69 66 20 28 28  endif....  if ((
3030: 72 65 74 20 3d 3d 20 53 51 4c 49 54 45 5f 4f 4b  ret == SQLITE_OK
3040: 29 20 26 26 20 70 70 64 62 20 26 26 20 21 44 62  ) && ppdb && !Db
3050: 48 61 73 50 72 6f 70 65 72 74 79 28 2a 70 70 64  HasProperty(*ppd
3060: 62 2c 20 30 2c 20 44 42 5f 53 63 68 65 6d 61 4c  b, 0, DB_SchemaL
3070: 6f 61 64 65 64 29 29 0d 0a 20 20 7b 0d 0a 20 20  oaded))..  {..  
3080: 20 20 45 4e 43 28 2a 70 70 64 62 29 20 3d 20 53    ENC(*ppdb) = S
3090: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
30a0: 45 3b 0d 0a 0d 0a 23 69 66 20 53 51 4c 49 54 45  E;....#if SQLITE
30b0: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20  _VERSION_NUMBER 
30c0: 3e 3d 20 33 30 30 38 30 30 38 0d 0a 20 20 20 20  >= 3008008..    
30d0: 2f 2f 0d 0a 20 20 20 20 2f 2f 20 42 55 47 46 49  //..    // BUGFI
30e0: 58 3a 20 53 65 65 20 74 69 63 6b 65 74 20 5b 37  X: See ticket [7
30f0: 63 31 35 31 61 32 66 30 65 32 32 38 30 34 63 5d  c151a2f0e22804c]
3100: 2e 0d 0a 20 20 20 20 2f 2f 0d 0a 20 20 20 20 53  ...    //..    S
3110: 43 48 45 4d 41 5f 45 4e 43 28 2a 70 70 64 62 29  CHEMA_ENC(*ppdb)
3120: 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e   = SQLITE_UTF16N
3130: 41 54 49 56 45 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ATIVE;..#endif..
3140: 20 20 7d 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20    }....  return 
3150: 72 65 74 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  ret;..}....SQLIT
3160: 45 5f 41 50 49 20 63 6f 6e 73 74 20 63 68 61 72  E_API const char
3170: 20 2a 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33   *WINAPI sqlite3
3180: 5f 65 72 72 6d 73 67 5f 69 6e 74 65 72 6f 70 28  _errmsg_interop(
3190: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74  sqlite3 *db, int
31a0: 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f   *plen)..{..  co
31b0: 6e 73 74 20 63 68 61 72 20 2a 70 76 61 6c 20 3d  nst char *pval =
31c0: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
31d0: 64 62 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e  db);..  if (plen
31e0: 29 20 2a 70 6c 65 6e 20 3d 20 70 76 61 6c 20 3f  ) *plen = pval ?
31f0: 20 73 74 72 6c 65 6e 28 70 76 61 6c 29 20 3a 20   strlen(pval) : 
3200: 30 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70 76 61  0;..  return pva
3210: 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f  l;..}....SQLITE_
3220: 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73  API int WINAPI s
3230: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 5f 69  qlite3_changes_i
3240: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 20 2a  nterop(sqlite3 *
3250: 64 62 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72 65  db)..{..  int re
3260: 73 75 6c 74 3b 0d 0a 0d 0a 23 69 66 20 64 65 66  sult;....#if def
3270: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42  ined(INTEROP_DEB
3280: 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f  UG) && (INTEROP_
3290: 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f  DEBUG & INTEROP_
32a0: 44 45 42 55 47 5f 43 48 41 4e 47 45 53 29 0d 0a  DEBUG_CHANGES)..
32b0: 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70    sqlite3Interop
32c0: 44 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 63  Debug("sqlite3_c
32d0: 68 61 6e 67 65 73 5f 69 6e 74 65 72 6f 70 28 29  hanges_interop()
32e0: 3a 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65  : calling sqlite
32f0: 33 5f 63 68 61 6e 67 65 73 28 25 70 29 2e 2e 2e  3_changes(%p)...
3300: 5c 6e 22 2c 20 64 62 29 3b 0d 0a 23 65 6e 64 69  \n", db);..#endi
3310: 66 0d 0a 0d 0a 23 69 66 6e 64 65 66 20 4e 44 45  f....#ifndef NDE
3320: 42 55 47 0d 0a 20 20 69 66 20 28 21 64 62 29 0d  BUG..  if (!db).
3330: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 49 6e  .      sqlite3In
3340: 74 65 72 6f 70 42 72 65 61 6b 28 22 6e 75 6c 6c  teropBreak("null
3350: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
3360: 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 63 68 61   for sqlite3_cha
3370: 6e 67 65 73 28 29 22 29 3b 0d 0a 23 65 6e 64 69  nges()");..#endi
3380: 66 0d 0a 0d 0a 20 20 72 65 73 75 6c 74 20 3d 20  f....  result = 
3390: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
33a0: 64 62 29 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69  db);....#if defi
33b0: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  ned(INTEROP_DEBU
33c0: 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44  G) && (INTEROP_D
33d0: 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44  EBUG & INTEROP_D
33e0: 45 42 55 47 5f 43 48 41 4e 47 45 53 29 0d 0a 20  EBUG_CHANGES).. 
33f0: 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44   sqlite3InteropD
3400: 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 63 68  ebug("sqlite3_ch
3410: 61 6e 67 65 73 5f 69 6e 74 65 72 6f 70 28 29 3a  anges_interop():
3420: 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73   sqlite3_changes
3430: 28 25 70 29 20 72 65 74 75 72 6e 65 64 20 25 64  (%p) returned %d
3440: 2e 5c 6e 22 2c 20 64 62 2c 20 72 65 73 75 6c 74  .\n", db, result
3450: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
3460: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
3470: 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20  }....SQLITE_API 
3480: 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74  int WINAPI sqlit
3490: 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72  e3_prepare_inter
34a0: 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  op(sqlite3 *db, 
34b0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 2c  const char *sql,
34c0: 20 69 6e 74 20 6e 62 79 74 65 73 2c 20 73 71 6c   int nbytes, sql
34d0: 69 74 65 33 5f 73 74 6d 74 20 2a 2a 70 70 73 74  ite3_stmt **ppst
34e0: 6d 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  mt, const char *
34f0: 2a 70 7a 74 61 69 6c 2c 20 69 6e 74 20 2a 70 6c  *pztail, int *pl
3500: 65 6e 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 6e 3b  en)..{..  int n;
3510: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
3520: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26  INTEROP_DEBUG) &
3530: 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  & (INTEROP_DEBUG
3540: 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47   & INTEROP_DEBUG
3550: 5f 50 52 45 50 41 52 45 29 0d 0a 20 20 73 71 6c  _PREPARE)..  sql
3560: 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67  ite3InteropDebug
3570: 28 22 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  ("sqlite3_prepar
3580: 65 5f 69 6e 74 65 72 6f 70 28 29 3a 20 63 61 6c  e_interop(): cal
3590: 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65  ling sqlite3_pre
35a0: 70 61 72 65 28 25 70 2c 20 5c 22 25 73 5c 22 2c  pare(%p, \"%s\",
35b0: 20 25 64 2c 20 25 70 29 2e 2e 2e 5c 6e 22 2c 20   %d, %p)...\n", 
35c0: 64 62 2c 20 73 71 6c 2c 20 6e 62 79 74 65 73 2c  db, sql, nbytes,
35d0: 20 70 70 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69   ppstmt);..#endi
35e0: 66 0d 0a 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f  f....#if SQLITE_
35f0: 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e  VERSION_NUMBER >
3600: 3d 20 33 30 30 33 30 30 39 0d 0a 20 20 6e 20 3d  = 3003009..  n =
3610: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
3620: 5f 76 32 28 64 62 2c 20 73 71 6c 2c 20 6e 62 79  _v2(db, sql, nby
3630: 74 65 73 2c 20 70 70 73 74 6d 74 2c 20 70 7a 74  tes, ppstmt, pzt
3640: 61 69 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  ail);..#else..  
3650: 6e 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  n = sqlite3_prep
3660: 61 72 65 28 64 62 2c 20 73 71 6c 2c 20 6e 62 79  are(db, sql, nby
3670: 74 65 73 2c 20 70 70 73 74 6d 74 2c 20 70 7a 74  tes, ppstmt, pzt
3680: 61 69 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  ail);..#endif...
3690: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54  .#if defined(INT
36a0: 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28  EROP_DEBUG) && (
36b0: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20  INTEROP_DEBUG & 
36c0: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 50 52  INTEROP_DEBUG_PR
36d0: 45 50 41 52 45 29 0d 0a 20 20 73 71 6c 69 74 65  EPARE)..  sqlite
36e0: 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73  3InteropDebug("s
36f0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 69  qlite3_prepare_i
3700: 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c 69 74 65  nterop(): sqlite
3710: 33 5f 70 72 65 70 61 72 65 28 25 70 2c 20 5c 22  3_prepare(%p, \"
3720: 25 73 5c 22 2c 20 25 64 2c 20 25 70 29 20 72 65  %s\", %d, %p) re
3730: 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 64  turned %d.\n", d
3740: 62 2c 20 73 71 6c 2c 20 6e 62 79 74 65 73 2c 20  b, sql, nbytes, 
3750: 70 70 73 74 6d 74 2c 20 6e 29 3b 0d 0a 23 65 6e  ppstmt, n);..#en
3760: 64 69 66 0d 0a 0d 0a 20 20 69 66 20 28 70 6c 65  dif....  if (ple
3770: 6e 29 20 2a 70 6c 65 6e 20 3d 20 28 70 7a 74 61  n) *plen = (pzta
3780: 69 6c 20 26 26 20 2a 70 7a 74 61 69 6c 29 20 3f  il && *pztail) ?
3790: 20 73 74 72 6c 65 6e 28 2a 70 7a 74 61 69 6c 29   strlen(*pztail)
37a0: 20 3a 20 30 3b 0d 0a 0d 0a 20 20 72 65 74 75 72   : 0;....  retur
37b0: 6e 20 6e 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  n n;..}....SQLIT
37c0: 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49  E_API int WINAPI
37d0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
37e0: 31 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  16_interop(sqlit
37f0: 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 76 6f  e3 *db, const vo
3800: 69 64 20 2a 73 71 6c 2c 20 69 6e 74 20 6e 63 68  id *sql, int nch
3810: 61 72 73 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d  ars, sqlite3_stm
3820: 74 20 2a 2a 70 70 73 74 6d 74 2c 20 63 6f 6e 73  t **ppstmt, cons
3830: 74 20 76 6f 69 64 20 2a 2a 70 7a 74 61 69 6c 2c  t void **pztail,
3840: 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a   int *plen)..{..
3850: 20 20 69 6e 74 20 6e 3b 0d 0a 0d 0a 23 69 66 20    int n;....#if 
3860: 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f  defined(INTEROP_
3870: 44 45 42 55 47 29 20 26 26 20 28 49 4e 54 45 52  DEBUG) && (INTER
3880: 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52  OP_DEBUG & INTER
3890: 4f 50 5f 44 45 42 55 47 5f 50 52 45 50 41 52 45  OP_DEBUG_PREPARE
38a0: 31 36 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e  16)..  sqlite3In
38b0: 74 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69  teropDebug("sqli
38c0: 74 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74 65  te3_prepare_inte
38d0: 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73  rop(): calling s
38e0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36  qlite3_prepare16
38f0: 28 25 70 2c 20 5c 22 25 73 5c 22 2c 20 25 64 2c  (%p, \"%s\", %d,
3900: 20 25 70 29 2e 2e 2e 5c 6e 22 2c 20 64 62 2c 20   %p)...\n", db, 
3910: 73 71 6c 2c 20 6e 63 68 61 72 73 2c 20 70 70 73  sql, nchars, pps
3920: 74 6d 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  tmt);..#endif...
3930: 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53  .#if SQLITE_VERS
3940: 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30  ION_NUMBER >= 30
3950: 30 33 30 30 39 0d 0a 20 20 6e 20 3d 20 73 71 6c  03009..  n = sql
3960: 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 5f 76  ite3_prepare16_v
3970: 32 28 64 62 2c 20 73 71 6c 2c 20 6e 63 68 61 72  2(db, sql, nchar
3980: 73 20 2a 20 73 69 7a 65 6f 66 28 77 63 68 61 72  s * sizeof(wchar
3990: 5f 74 29 2c 20 70 70 73 74 6d 74 2c 20 70 7a 74  _t), ppstmt, pzt
39a0: 61 69 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  ail);..#else..  
39b0: 6e 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  n = sqlite3_prep
39c0: 61 72 65 31 36 28 64 62 2c 20 73 71 6c 2c 20 6e  are16(db, sql, n
39d0: 63 68 61 72 73 20 2a 20 73 69 7a 65 6f 66 28 77  chars * sizeof(w
39e0: 63 68 61 72 5f 74 29 2c 20 70 70 73 74 6d 74 2c  char_t), ppstmt,
39f0: 20 70 7a 74 61 69 6c 29 3b 0d 0a 23 65 6e 64 69   pztail);..#endi
3a00: 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64  f....#if defined
3a10: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20  (INTEROP_DEBUG) 
3a20: 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  && (INTEROP_DEBU
3a30: 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55  G & INTEROP_DEBU
3a40: 47 5f 50 52 45 50 41 52 45 31 36 29 0d 0a 20 20  G_PREPARE16)..  
3a50: 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65  sqlite3InteropDe
3a60: 62 75 67 28 22 73 71 6c 69 74 65 33 5f 70 72 65  bug("sqlite3_pre
3a70: 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 29 3a 20  pare_interop(): 
3a80: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31  sqlite3_prepare1
3a90: 36 28 25 70 2c 20 5c 22 25 73 5c 22 2c 20 25 64  6(%p, \"%s\", %d
3aa0: 2c 20 25 70 29 20 72 65 74 75 72 6e 65 64 20 25  , %p) returned %
3ab0: 64 2e 5c 6e 22 2c 20 64 62 2c 20 73 71 6c 2c 20  d.\n", db, sql, 
3ac0: 6e 63 68 61 72 73 2c 20 70 70 73 74 6d 74 2c 20  nchars, ppstmt, 
3ad0: 6e 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  n);..#endif.... 
3ae0: 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e   if (plen) *plen
3af0: 20 3d 20 28 70 7a 74 61 69 6c 20 26 26 20 2a 70   = (pztail && *p
3b00: 7a 74 61 69 6c 29 20 3f 20 77 63 73 6c 65 6e 28  ztail) ? wcslen(
3b10: 28 77 63 68 61 72 5f 74 20 2a 29 2a 70 7a 74 61  (wchar_t *)*pzta
3b20: 69 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77 63 68  il) * sizeof(wch
3b30: 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 0d 0a 20 20  ar_t) : 0;....  
3b40: 72 65 74 75 72 6e 20 6e 3b 0d 0a 7d 0d 0a 0d 0a  return n;..}....
3b50: 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45  #if defined(INTE
3b60: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
3b70: 45 29 20 26 26 20 53 51 4c 49 54 45 5f 56 45 52  E) && SQLITE_VER
3b80: 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33  SION_NUMBER >= 3
3b90: 30 30 34 30 30 31 0d 0a 23 69 66 64 65 66 20 5f  004001..#ifdef _
3ba0: 57 49 4e 33 32 0a 5f 5f 64 65 63 6c 73 70 65 63  WIN32.__declspec
3bb0: 28 64 6c 6c 65 78 70 6f 72 74 29 0a 23 65 6e 64  (dllexport).#end
3bc0: 69 66 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  if.void *sqlite3
3bd0: 5f 63 72 65 61 74 65 5f 64 69 73 70 6f 73 61 62  _create_disposab
3be0: 6c 65 5f 6d 6f 64 75 6c 65 28 0d 0a 20 20 73 71  le_module(..  sq
3bf0: 6c 69 74 65 33 20 2a 64 62 2c 0d 0a 20 20 63 6f  lite3 *db,..  co
3c00: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c  nst char *zName,
3c10: 0d 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ..  const sqlite
3c20: 33 5f 6d 6f 64 75 6c 65 20 2a 70 2c 0d 0a 20 20  3_module *p,..  
3c30: 76 6f 69 64 20 2a 70 43 6c 69 65 6e 74 44 61 74  void *pClientDat
3c40: 61 2c 0d 0a 20 20 76 6f 69 64 28 2a 78 44 65 73  a,..  void(*xDes
3c50: 74 72 6f 79 29 28 76 6f 69 64 2a 29 0d 0a 29 3b  troy)(void*)..);
3c60: 20 2f 2a 20 64 65 66 69 6e 65 64 20 69 6e 20 22   /* defined in "
3c70: 73 72 63 2f 65 78 74 2f 76 74 73 68 69 6d 2e 63  src/ext/vtshim.c
3c80: 22 20 28 69 6e 63 6c 75 64 65 64 20 62 65 6c 6f  " (included belo
3c90: 77 29 20 2a 2f 0d 0a 0d 0a 53 51 4c 49 54 45 5f  w) */....SQLITE_
3ca0: 41 50 49 20 76 6f 69 64 20 2a 57 49 4e 41 50 49  API void *WINAPI
3cb0: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
3cc0: 64 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c  disposable_modul
3cd0: 65 5f 69 6e 74 65 72 6f 70 28 0d 0a 20 20 73 71  e_interop(..  sq
3ce0: 6c 69 74 65 33 20 2a 64 62 2c 0d 0a 20 20 63 6f  lite3 *db,..  co
3cf0: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c  nst char *zName,
3d00: 0d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  ..  sqlite3_modu
3d10: 6c 65 20 2a 70 4d 6f 64 75 6c 65 2c 0d 0a 20 20  le *pModule,..  
3d20: 69 6e 74 20 69 56 65 72 73 69 6f 6e 2c 0d 0a 20  int iVersion,.. 
3d30: 20 69 6e 74 20 28 2a 78 43 72 65 61 74 65 29 28   int (*xCreate)(
3d40: 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 20 2a  sqlite3*, void *
3d50: 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
3d60: 72 20 2a 63 6f 6e 73 74 2a 2c 20 73 71 6c 69 74  r *const*, sqlit
3d70: 65 33 5f 76 74 61 62 20 2a 2a 2c 20 63 68 61 72  e3_vtab **, char
3d80: 2a 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 43  **),..  int (*xC
3d90: 6f 6e 6e 65 63 74 29 28 73 71 6c 69 74 65 33 2a  onnect)(sqlite3*
3da0: 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 2c 20 63  , void *, int, c
3db0: 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
3dc0: 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  *, sqlite3_vtab 
3dd0: 2a 2a 2c 20 63 68 61 72 2a 2a 29 2c 0d 0a 20 20  **, char**),..  
3de0: 69 6e 74 20 28 2a 78 42 65 73 74 49 6e 64 65 78  int (*xBestIndex
3df0: 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a  )(sqlite3_vtab *
3e00: 2c 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  , sqlite3_index_
3e10: 69 6e 66 6f 2a 29 2c 0d 0a 20 20 69 6e 74 20 28  info*),..  int (
3e20: 2a 78 44 69 73 63 6f 6e 6e 65 63 74 29 28 73 71  *xDisconnect)(sq
3e30: 6c 69 74 65 33 5f 76 74 61 62 20 2a 29 2c 0d 0a  lite3_vtab *),..
3e40: 20 20 69 6e 74 20 28 2a 78 44 65 73 74 72 6f 79    int (*xDestroy
3e50: 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a  )(sqlite3_vtab *
3e60: 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 4f 70 65  ),..  int (*xOpe
3e70: 6e 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20  n)(sqlite3_vtab 
3e80: 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  *, sqlite3_vtab_
3e90: 63 75 72 73 6f 72 20 2a 2a 29 2c 0d 0a 20 20 69  cursor **),..  i
3ea0: 6e 74 20 28 2a 78 43 6c 6f 73 65 29 28 73 71 6c  nt (*xClose)(sql
3eb0: 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
3ec0: 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 46 69  *),..  int (*xFi
3ed0: 6c 74 65 72 29 28 73 71 6c 69 74 65 33 5f 76 74  lter)(sqlite3_vt
3ee0: 61 62 5f 63 75 72 73 6f 72 2a 2c 20 69 6e 74 2c  ab_cursor*, int,
3ef0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
3f00: 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  nt, sqlite3_valu
3f10: 65 20 2a 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a  e **),..  int (*
3f20: 78 4e 65 78 74 29 28 73 71 6c 69 74 65 33 5f 76  xNext)(sqlite3_v
3f30: 74 61 62 5f 63 75 72 73 6f 72 2a 29 2c 0d 0a 20  tab_cursor*),.. 
3f40: 20 69 6e 74 20 28 2a 78 45 6f 66 29 28 73 71 6c   int (*xEof)(sql
3f50: 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
3f60: 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 43 6f  *),..  int (*xCo
3f70: 6c 75 6d 6e 29 28 73 71 6c 69 74 65 33 5f 76 74  lumn)(sqlite3_vt
3f80: 61 62 5f 63 75 72 73 6f 72 2a 2c 20 73 71 6c 69  ab_cursor*, sqli
3f90: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 20 69 6e  te3_context*, in
3fa0: 74 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 52 6f  t),..  int (*xRo
3fb0: 77 69 64 29 28 73 71 6c 69 74 65 33 5f 76 74 61  wid)(sqlite3_vta
3fc0: 62 5f 63 75 72 73 6f 72 2a 2c 20 73 71 6c 69 74  b_cursor*, sqlit
3fd0: 65 33 5f 69 6e 74 36 34 20 2a 29 2c 0d 0a 20 20  e3_int64 *),..  
3fe0: 69 6e 74 20 28 2a 78 55 70 64 61 74 65 29 28 73  int (*xUpdate)(s
3ff0: 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 2c 20 69  qlite3_vtab *, i
4000: 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  nt, sqlite3_valu
4010: 65 20 2a 2a 2c 20 73 71 6c 69 74 65 33 5f 69 6e  e **, sqlite3_in
4020: 74 36 34 20 2a 29 2c 0d 0a 20 20 69 6e 74 20 28  t64 *),..  int (
4030: 2a 78 42 65 67 69 6e 29 28 73 71 6c 69 74 65 33  *xBegin)(sqlite3
4040: 5f 76 74 61 62 20 2a 29 2c 0d 0a 20 20 69 6e 74  _vtab *),..  int
4050: 20 28 2a 78 53 79 6e 63 29 28 73 71 6c 69 74 65   (*xSync)(sqlite
4060: 33 5f 76 74 61 62 20 2a 29 2c 0d 0a 20 20 69 6e  3_vtab *),..  in
4070: 74 20 28 2a 78 43 6f 6d 6d 69 74 29 28 73 71 6c  t (*xCommit)(sql
4080: 69 74 65 33 5f 76 74 61 62 20 2a 29 2c 0d 0a 20  ite3_vtab *),.. 
4090: 20 69 6e 74 20 28 2a 78 52 6f 6c 6c 62 61 63 6b   int (*xRollback
40a0: 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a  )(sqlite3_vtab *
40b0: 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 46 69 6e  ),..  int (*xFin
40c0: 64 46 75 6e 63 74 69 6f 6e 29 28 73 71 6c 69 74  dFunction)(sqlit
40d0: 65 33 5f 76 74 61 62 20 2a 2c 20 69 6e 74 2c 20  e3_vtab *, int, 
40e0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 76 6f  const char *, vo
40f0: 69 64 20 28 2a 2a 70 78 46 75 6e 63 29 28 73 71  id (**pxFunc)(sq
4100: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 20  lite3_context*, 
4110: 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  int, sqlite3_val
4120: 75 65 2a 2a 29 2c 20 76 6f 69 64 20 2a 2a 70 70  ue**), void **pp
4130: 41 72 67 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78  Arg),..  int (*x
4140: 52 65 6e 61 6d 65 29 28 73 71 6c 69 74 65 33 5f  Rename)(sqlite3_
4150: 76 74 61 62 20 2a 2c 20 63 6f 6e 73 74 20 63 68  vtab *, const ch
4160: 61 72 20 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a  ar *),..  int (*
4170: 78 53 61 76 65 70 6f 69 6e 74 29 28 73 71 6c 69  xSavepoint)(sqli
4180: 74 65 33 5f 76 74 61 62 20 2a 2c 20 69 6e 74 29  te3_vtab *, int)
4190: 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 52 65 6c 65  ,..  int (*xRele
41a0: 61 73 65 29 28 73 71 6c 69 74 65 33 5f 76 74 61  ase)(sqlite3_vta
41b0: 62 20 2a 2c 20 69 6e 74 29 2c 0d 0a 20 20 69 6e  b *, int),..  in
41c0: 74 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 54 6f 29  t (*xRollbackTo)
41d0: 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 2c  (sqlite3_vtab *,
41e0: 20 69 6e 74 29 2c 0d 0a 20 20 76 6f 69 64 20 2a   int),..  void *
41f0: 70 43 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20  pClientData,..  
4200: 76 6f 69 64 28 2a 78 44 65 73 74 72 6f 79 4d 6f  void(*xDestroyMo
4210: 64 75 6c 65 29 28 76 6f 69 64 2a 29 0d 0a 29 7b  dule)(void*)..){
4220: 0d 0a 20 20 69 66 20 28 21 70 4d 6f 64 75 6c 65  ..  if (!pModule
4230: 29 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20 6d  ) return 0;..  m
4240: 65 6d 73 65 74 28 70 4d 6f 64 75 6c 65 2c 20 30  emset(pModule, 0
4250: 2c 20 73 69 7a 65 6f 66 28 2a 70 4d 6f 64 75 6c  , sizeof(*pModul
4260: 65 29 29 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d  e));..  pModule-
4270: 3e 69 56 65 72 73 69 6f 6e 20 3d 20 69 56 65 72  >iVersion = iVer
4280: 73 69 6f 6e 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65  sion;..  pModule
4290: 2d 3e 78 43 72 65 61 74 65 20 3d 20 78 43 72 65  ->xCreate = xCre
42a0: 61 74 65 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d  ate;..  pModule-
42b0: 3e 78 43 6f 6e 6e 65 63 74 20 3d 20 78 43 6f 6e  >xConnect = xCon
42c0: 6e 65 63 74 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65  nect;..  pModule
42d0: 2d 3e 78 42 65 73 74 49 6e 64 65 78 20 3d 20 78  ->xBestIndex = x
42e0: 42 65 73 74 49 6e 64 65 78 3b 0d 0a 20 20 70 4d  BestIndex;..  pM
42f0: 6f 64 75 6c 65 2d 3e 78 44 69 73 63 6f 6e 6e 65  odule->xDisconne
4300: 63 74 20 3d 20 78 44 69 73 63 6f 6e 6e 65 63 74  ct = xDisconnect
4310: 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 44  ;..  pModule->xD
4320: 65 73 74 72 6f 79 20 3d 20 78 44 65 73 74 72 6f  estroy = xDestro
4330: 79 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78  y;..  pModule->x
4340: 4f 70 65 6e 20 3d 20 78 4f 70 65 6e 3b 0d 0a 20  Open = xOpen;.. 
4350: 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65   pModule->xClose
4360: 20 3d 20 78 43 6c 6f 73 65 3b 0d 0a 20 20 70 4d   = xClose;..  pM
4370: 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 20 3d  odule->xFilter =
4380: 20 78 46 69 6c 74 65 72 3b 0d 0a 20 20 70 4d 6f   xFilter;..  pMo
4390: 64 75 6c 65 2d 3e 78 4e 65 78 74 20 3d 20 78 4e  dule->xNext = xN
43a0: 65 78 74 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d  ext;..  pModule-
43b0: 3e 78 45 6f 66 20 3d 20 78 45 6f 66 3b 0d 0a 20  >xEof = xEof;.. 
43c0: 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d   pModule->xColum
43d0: 6e 20 3d 20 78 43 6f 6c 75 6d 6e 3b 0d 0a 20 20  n = xColumn;..  
43e0: 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20  pModule->xRowid 
43f0: 3d 20 78 52 6f 77 69 64 3b 0d 0a 20 20 70 4d 6f  = xRowid;..  pMo
4400: 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 20 3d 20  dule->xUpdate = 
4410: 78 55 70 64 61 74 65 3b 0d 0a 20 20 70 4d 6f 64  xUpdate;..  pMod
4420: 75 6c 65 2d 3e 78 42 65 67 69 6e 20 3d 20 78 42  ule->xBegin = xB
4430: 65 67 69 6e 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65  egin;..  pModule
4440: 2d 3e 78 53 79 6e 63 20 3d 20 78 53 79 6e 63 3b  ->xSync = xSync;
4450: 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f  ..  pModule->xCo
4460: 6d 6d 69 74 20 3d 20 78 43 6f 6d 6d 69 74 3b 0d  mmit = xCommit;.
4470: 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 6c  .  pModule->xRol
4480: 6c 62 61 63 6b 20 3d 20 78 52 6f 6c 6c 62 61 63  lback = xRollbac
4490: 6b 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78  k;..  pModule->x
44a0: 46 69 6e 64 46 75 6e 63 74 69 6f 6e 20 3d 20 78  FindFunction = x
44b0: 46 69 6e 64 46 75 6e 63 74 69 6f 6e 3b 0d 0a 20  FindFunction;.. 
44c0: 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d   pModule->xRenam
44d0: 65 20 3d 20 78 52 65 6e 61 6d 65 3b 0d 0a 20 20  e = xRename;..  
44e0: 70 4d 6f 64 75 6c 65 2d 3e 78 53 61 76 65 70 6f  pModule->xSavepo
44f0: 69 6e 74 20 3d 20 78 53 61 76 65 70 6f 69 6e 74  int = xSavepoint
4500: 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  ;..  pModule->xR
4510: 65 6c 65 61 73 65 20 3d 20 78 52 65 6c 65 61 73  elease = xReleas
4520: 65 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78  e;..  pModule->x
4530: 52 6f 6c 6c 62 61 63 6b 54 6f 20 3d 20 78 52 6f  RollbackTo = xRo
4540: 6c 6c 62 61 63 6b 54 6f 3b 0d 0a 20 20 72 65 74  llbackTo;..  ret
4550: 75 72 6e 20 73 71 6c 69 74 65 33 5f 63 72 65 61  urn sqlite3_crea
4560: 74 65 5f 64 69 73 70 6f 73 61 62 6c 65 5f 6d 6f  te_disposable_mo
4570: 64 75 6c 65 28 64 62 2c 20 7a 4e 61 6d 65 2c 20  dule(db, zName, 
4580: 70 4d 6f 64 75 6c 65 2c 20 70 43 6c 69 65 6e 74  pModule, pClient
4590: 44 61 74 61 2c 20 78 44 65 73 74 72 6f 79 4d 6f  Data, xDestroyMo
45a0: 64 75 6c 65 29 3b 0d 0a 7d 0d 0a 23 65 6e 64 69  dule);..}..#endi
45b0: 66 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20  f....SQLITE_API 
45c0: 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74  int WINAPI sqlit
45d0: 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 5f 69  e3_bind_double_i
45e0: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73  nterop(sqlite3_s
45f0: 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69  tmt *stmt, int i
4600: 43 6f 6c 2c 20 64 6f 75 62 6c 65 20 2a 76 61 6c  Col, double *val
4610: 29 0d 0a 7b 0d 0a 20 20 69 66 20 28 21 76 61 6c  )..{..  if (!val
4620: 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ) return SQLITE_
4630: 45 52 52 4f 52 3b 0d 0a 20 20 72 65 74 75 72 6e  ERROR;..  return
4640: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f   sqlite3_bind_do
4650: 75 62 6c 65 28 73 74 6d 74 2c 69 43 6f 6c 2c 2a  uble(stmt,iCol,*
4660: 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49  val);..}....SQLI
4670: 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41 50  TE_API int WINAP
4680: 49 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  I sqlite3_bind_i
4690: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 73 71 6c  nt64_interop(sql
46a0: 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c  ite3_stmt *stmt,
46b0: 20 69 6e 74 20 69 43 6f 6c 2c 20 73 71 6c 69 74   int iCol, sqlit
46c0: 65 5f 69 6e 74 36 34 20 2a 76 61 6c 29 0d 0a 7b  e_int64 *val)..{
46d0: 0d 0a 20 20 69 66 20 28 21 76 61 6c 29 20 72 65  ..  if (!val) re
46e0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
46f0: 52 3b 0d 0a 20 20 72 65 74 75 72 6e 20 73 71 6c  R;..  return sql
4700: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28  ite3_bind_int64(
4710: 73 74 6d 74 2c 69 43 6f 6c 2c 2a 76 61 6c 29 3b  stmt,iCol,*val);
4720: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
4730: 49 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 57  I const char * W
4740: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 62 69  INAPI sqlite3_bi
4750: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
4760: 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  e_interop(sqlite
4770: 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e  3_stmt *stmt, in
4780: 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65  t iCol, int *ple
4790: 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 63  n)..{..  const c
47a0: 68 61 72 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69  har *pval = sqli
47b0: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
47c0: 65 72 5f 6e 61 6d 65 28 73 74 6d 74 2c 20 69 43  er_name(stmt, iC
47d0: 6f 6c 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e  ol);..  if (plen
47e0: 29 20 2a 70 6c 65 6e 20 3d 20 70 76 61 6c 20 3f  ) *plen = pval ?
47f0: 20 73 74 72 6c 65 6e 28 70 76 61 6c 29 20 3a 20   strlen(pval) : 
4800: 30 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70 76 61  0;..  return pva
4810: 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f  l;..}....SQLITE_
4820: 41 50 49 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  API const char *
4830: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
4840: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e 74 65  column_name_inte
4850: 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  rop(sqlite3_stmt
4860: 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c   *stmt, int iCol
4870: 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d  , int *plen)..{.
4880: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 70  .  const char *p
4890: 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  val = sqlite3_co
48a0: 6c 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2c 20  lumn_name(stmt, 
48b0: 69 43 6f 6c 29 3b 0d 0a 20 20 69 66 20 28 70 6c  iCol);..  if (pl
48c0: 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 70 76 61 6c  en) *plen = pval
48d0: 20 3f 20 73 74 72 6c 65 6e 28 70 76 61 6c 29 20   ? strlen(pval) 
48e0: 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70  : 0;..  return p
48f0: 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  val;..}....SQLIT
4900: 45 5f 41 50 49 20 63 6f 6e 73 74 20 76 6f 69 64  E_API const void
4910: 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65   * WINAPI sqlite
4920: 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 5f  3_column_name16_
4930: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f  interop(sqlite3_
4940: 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20  stmt *stmt, int 
4950: 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29  iCol, int *plen)
4960: 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 76 6f 69  ..{..  const voi
4970: 64 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65  d *pval = sqlite
4980: 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 28  3_column_name16(
4990: 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20  stmt, iCol);..  
49a0: 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20  if (plen) *plen 
49b0: 3d 20 70 76 61 6c 20 3f 20 77 63 73 6c 65 6e 28  = pval ? wcslen(
49c0: 28 77 63 68 61 72 5f 74 20 2a 29 70 76 61 6c 29  (wchar_t *)pval)
49d0: 20 2a 20 73 69 7a 65 6f 66 28 77 63 68 61 72 5f   * sizeof(wchar_
49e0: 74 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72  t) : 0;..  retur
49f0: 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51  n pval;..}....SQ
4a00: 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 63  LITE_API const c
4a10: 68 61 72 20 2a 20 57 49 4e 41 50 49 20 73 71 6c  har * WINAPI sql
4a20: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
4a30: 74 79 70 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c  type_interop(sql
4a40: 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c  ite3_stmt *stmt,
4a50: 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a   int iCol, int *
4a60: 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73  plen)..{..  cons
4a70: 74 20 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73  t char *pval = s
4a80: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
4a90: 63 6c 74 79 70 65 28 73 74 6d 74 2c 20 69 43 6f  cltype(stmt, iCo
4aa0: 6c 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29  l);..  if (plen)
4ab0: 20 2a 70 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20   *plen = pval ? 
4ac0: 73 74 72 6c 65 6e 28 70 76 61 6c 29 20 3a 20 30  strlen(pval) : 0
4ad0: 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c  ;..  return pval
4ae0: 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  ;..}....SQLITE_A
4af0: 50 49 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 20  PI const void * 
4b00: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63  WINAPI sqlite3_c
4b10: 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36  olumn_decltype16
4b20: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
4b30: 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74  _stmt *stmt, int
4b40: 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e   iCol, int *plen
4b50: 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 76 6f  )..{..  const vo
4b60: 69 64 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74  id *pval = sqlit
4b70: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  e3_column_declty
4b80: 70 65 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29  pe16(stmt, iCol)
4b90: 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a  ;..  if (plen) *
4ba0: 70 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20 77 63  plen = pval ? wc
4bb0: 73 6c 65 6e 28 28 77 63 68 61 72 5f 74 20 2a 29  slen((wchar_t *)
4bc0: 70 76 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77  pval) * sizeof(w
4bd0: 63 68 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 20 20  char_t) : 0;..  
4be0: 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d  return pval;..}.
4bf0: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76 6f  ...SQLITE_API vo
4c00: 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  id WINAPI sqlite
4c10: 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 5f  3_column_double_
4c20: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f  interop(sqlite3_
4c30: 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20  stmt *stmt, int 
4c40: 69 43 6f 6c 2c 20 64 6f 75 62 6c 65 20 2a 76 61  iCol, double *va
4c50: 6c 29 0d 0a 7b 0d 0a 20 20 69 66 20 28 21 76 61  l)..{..  if (!va
4c60: 6c 29 20 72 65 74 75 72 6e 3b 0d 0a 20 20 2a 76  l) return;..  *v
4c70: 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  al = sqlite3_col
4c80: 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 74 6d 74 2c  umn_double(stmt,
4c90: 69 43 6f 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c  iCol);..}....SQL
4ca0: 49 54 45 5f 41 50 49 20 76 6f 69 64 20 57 49 4e  ITE_API void WIN
4cb0: 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  API sqlite3_colu
4cc0: 6d 6e 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  mn_int64_interop
4cd0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73  (sqlite3_stmt *s
4ce0: 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 73  tmt, int iCol, s
4cf0: 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a 76 61 6c  qlite_int64 *val
4d00: 29 0d 0a 7b 0d 0a 20 20 69 66 20 28 21 76 61 6c  )..{..  if (!val
4d10: 29 20 72 65 74 75 72 6e 3b 0d 0a 20 20 2a 76 61  ) return;..  *va
4d20: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  l = sqlite3_colu
4d30: 6d 6e 5f 69 6e 74 36 34 28 73 74 6d 74 2c 69 43  mn_int64(stmt,iC
4d40: 6f 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  ol);..}....SQLIT
4d50: 45 5f 41 50 49 20 76 6f 69 64 20 57 49 4e 41 50  E_API void WINAP
4d60: 49 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  I sqlite3_last_i
4d70: 6e 73 65 72 74 5f 72 6f 77 69 64 5f 69 6e 74 65  nsert_rowid_inte
4d80: 72 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  rop(sqlite3 *db,
4d90: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a 72   sqlite_int64 *r
4da0: 6f 77 49 64 29 0d 0a 7b 0d 0a 20 20 69 66 20 28  owId)..{..  if (
4db0: 21 72 6f 77 49 64 29 20 72 65 74 75 72 6e 3b 0d  !rowId) return;.
4dc0: 0a 20 20 2a 72 6f 77 49 64 20 3d 20 73 71 6c 69  .  *rowId = sqli
4dd0: 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
4de0: 72 6f 77 69 64 28 64 62 29 3b 0d 0a 7d 0d 0a 0d  rowid(db);..}...
4df0: 0a 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69 64  .SQLITE_API void
4e00: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
4e10: 6d 65 6d 6f 72 79 5f 75 73 65 64 5f 69 6e 74 65  memory_used_inte
4e20: 72 6f 70 28 73 71 6c 69 74 65 5f 69 6e 74 36 34  rop(sqlite_int64
4e30: 20 2a 6e 42 79 74 65 73 29 0d 0a 7b 0d 0a 20 20   *nBytes)..{..  
4e40: 69 66 20 28 21 6e 42 79 74 65 73 29 20 72 65 74  if (!nBytes) ret
4e50: 75 72 6e 3b 0d 0a 20 20 2a 6e 42 79 74 65 73 20  urn;..  *nBytes 
4e60: 3d 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79  = sqlite3_memory
4e70: 5f 75 73 65 64 28 29 3b 0d 0a 7d 0d 0a 0d 0a 53  _used();..}....S
4e80: 51 4c 49 54 45 5f 41 50 49 20 76 6f 69 64 20 57  QLITE_API void W
4e90: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 6d 65  INAPI sqlite3_me
4ea0: 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72 5f 69  mory_highwater_i
4eb0: 6e 74 65 72 6f 70 28 69 6e 74 20 72 65 73 65 74  nterop(int reset
4ec0: 46 6c 61 67 2c 20 73 71 6c 69 74 65 5f 69 6e 74  Flag, sqlite_int
4ed0: 36 34 20 2a 6e 42 79 74 65 73 29 0d 0a 7b 0d 0a  64 *nBytes)..{..
4ee0: 20 20 69 66 20 28 21 6e 42 79 74 65 73 29 20 72    if (!nBytes) r
4ef0: 65 74 75 72 6e 3b 0d 0a 20 20 2a 6e 42 79 74 65  eturn;..  *nByte
4f00: 73 20 3d 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f  s = sqlite3_memo
4f10: 72 79 5f 68 69 67 68 77 61 74 65 72 28 72 65 73  ry_highwater(res
4f20: 65 74 46 6c 61 67 29 3b 0d 0a 7d 0d 0a 0d 0a 53  etFlag);..}....S
4f30: 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20  QLITE_API const 
4f40: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 20  unsigned char * 
4f50: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63  WINAPI sqlite3_c
4f60: 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72  olumn_text_inter
4f70: 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  op(sqlite3_stmt 
4f80: 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c  *stmt, int iCol,
4f90: 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a   int *plen)..{..
4fa0: 20 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64    const unsigned
4fb0: 20 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73 71   char *pval = sq
4fc0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
4fd0: 74 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a  t(stmt, iCol);..
4fe0: 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65    if (plen) *ple
4ff0: 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  n = sqlite3_colu
5000: 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2c 20 69  mn_bytes(stmt, i
5010: 43 6f 6c 29 3b 0d 0a 20 20 72 65 74 75 72 6e 20  Col);..  return 
5020: 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49  pval;..}....SQLI
5030: 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 76 6f 69  TE_API const voi
5040: 64 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74  d * WINAPI sqlit
5050: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36  e3_column_text16
5060: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
5070: 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74  _stmt *stmt, int
5080: 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e   iCol, int *plen
5090: 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 76 6f  )..{..  const vo
50a0: 69 64 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74  id *pval = sqlit
50b0: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36  e3_column_text16
50c0: 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20  (stmt, iCol);.. 
50d0: 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e   if (plen) *plen
50e0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
50f0: 6e 5f 62 79 74 65 73 31 36 28 73 74 6d 74 2c 20  n_bytes16(stmt, 
5100: 69 43 6f 6c 29 3b 0d 0a 20 20 72 65 74 75 72 6e  iCol);..  return
5110: 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c   pval;..}....SQL
5120: 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41  ITE_API int WINA
5130: 50 49 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  PI sqlite3_final
5140: 69 7a 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  ize_interop(sqli
5150: 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 29 0d  te3_stmt *stmt).
5160: 0a 7b 0d 0a 20 20 69 6e 74 20 72 65 74 3b 0d 0a  .{..  int ret;..
5170: 23 69 66 20 21 64 65 66 69 6e 65 64 28 49 4e 54  #if !defined(INT
5180: 45 52 4f 50 5f 4c 45 47 41 43 59 5f 43 4c 4f 53  EROP_LEGACY_CLOS
5190: 45 29 20 26 26 20 53 51 4c 49 54 45 5f 56 45 52  E) && SQLITE_VER
51a0: 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33  SION_NUMBER >= 3
51b0: 30 30 37 30 31 34 0d 0a 0d 0a 23 69 66 20 64 65  007014....#if de
51c0: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45  fined(INTEROP_DE
51d0: 42 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50  BUG) && (INTEROP
51e0: 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50  _DEBUG & INTEROP
51f0: 5f 44 45 42 55 47 5f 46 49 4e 41 4c 49 5a 45 29  _DEBUG_FINALIZE)
5200: 0d 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56  ..  Vdbe *p = (V
5210: 64 62 65 20 2a 29 73 74 6d 74 3b 0d 0a 20 20 73  dbe *)stmt;..  s
5220: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 20 3f  qlite3 *db = p ?
5230: 20 70 2d 3e 64 62 20 3a 20 30 3b 0d 0a 20 20 73   p->db : 0;..  s
5240: 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62  qlite3InteropDeb
5250: 75 67 28 22 73 71 6c 69 74 65 33 5f 66 69 6e 61  ug("sqlite3_fina
5260: 6c 69 7a 65 5f 69 6e 74 65 72 6f 70 28 29 3a 20  lize_interop(): 
5270: 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f  calling sqlite3_
5280: 66 69 6e 61 6c 69 7a 65 28 25 70 2c 20 25 70 29  finalize(%p, %p)
5290: 2e 2e 2e 5c 6e 22 2c 20 64 62 2c 20 73 74 6d 74  ...\n", db, stmt
52a0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
52b0: 72 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 66 69  ret = sqlite3_fi
52c0: 6e 61 6c 69 7a 65 28 73 74 6d 74 29 3b 0d 0a 0d  nalize(stmt);...
52d0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54  .#if defined(INT
52e0: 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28  EROP_DEBUG) && (
52f0: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20  INTEROP_DEBUG & 
5300: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 46 49  INTEROP_DEBUG_FI
5310: 4e 41 4c 49 5a 45 29 0d 0a 20 20 73 71 6c 69 74  NALIZE)..  sqlit
5320: 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22  e3InteropDebug("
5330: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
5340: 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c 69  _interop(): sqli
5350: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 25 70 2c  te3_finalize(%p,
5360: 20 25 70 29 20 72 65 74 75 72 6e 65 64 20 25 64   %p) returned %d
5370: 2e 5c 6e 22 2c 20 64 62 2c 20 73 74 6d 74 2c 20  .\n", db, stmt, 
5380: 72 65 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  ret);..#endif...
5390: 0a 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a  .  return ret;..
53a0: 23 65 6c 73 65 0d 0a 20 20 56 64 62 65 20 2a 70  #else..  Vdbe *p
53b0: 3b 0d 0a 20 20 72 65 74 20 3d 20 53 51 4c 49 54  ;..  ret = SQLIT
53c0: 45 5f 4f 4b 3b 0d 0a 0d 0a 20 20 70 20 3d 20 28  E_OK;....  p = (
53d0: 56 64 62 65 20 2a 29 73 74 6d 74 3b 0d 0a 20 20  Vdbe *)stmt;..  
53e0: 69 66 20 28 70 29 0d 0a 20 20 7b 0d 0a 20 20 20  if (p)..  {..   
53f0: 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70   sqlite3 *db = p
5400: 2d 3e 64 62 3b 0d 0a 0d 0a 20 20 20 20 69 66 20  ->db;....    if 
5410: 28 64 62 20 21 3d 20 4e 55 4c 4c 29 0d 0a 20 20  (db != NULL)..  
5420: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
5430: 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65  x_enter(db->mute
5440: 78 29 3b 0d 0a 0d 0a 20 20 20 20 69 66 20 28 28  x);....    if ((
5450: 70 2d 3e 6d 61 67 69 63 20 3d 3d 20 56 44 42 45  p->magic == VDBE
5460: 5f 4d 41 47 49 43 5f 44 45 41 44 29 20 26 26 20  _MAGIC_DEAD) && 
5470: 28 64 62 20 3d 3d 20 4e 55 4c 4c 29 29 0d 0a 20  (db == NULL)).. 
5480: 20 20 20 7b 0d 0a 20 20 20 20 20 20 73 71 6c 69     {..      sqli
5490: 74 65 33 44 62 46 72 65 65 5f 69 6e 74 65 72 6f  te3DbFree_intero
54a0: 70 28 64 62 2c 20 70 29 3b 0d 0a 20 20 20 20 7d  p(db, p);..    }
54b0: 0d 0a 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20  ..    else..    
54c0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 20 3d 20 73  {..      ret = s
54d0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
54e0: 73 74 6d 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  stmt);..    }...
54f0: 0a 20 20 20 20 69 66 20 28 64 62 20 21 3d 20 4e  .    if (db != N
5500: 55 4c 4c 29 0d 0a 20 20 20 20 20 20 73 71 6c 69  ULL)..      sqli
5510: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
5520: 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 7d  db->mutex);..  }
5530: 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 72 65 74  ....  return ret
5540: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 7d 0d 0a 0d 0a  ;..#endif..}....
5550: 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57  SQLITE_API int W
5560: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 62 61  INAPI sqlite3_ba
5570: 63 6b 75 70 5f 66 69 6e 69 73 68 5f 69 6e 74 65  ckup_finish_inte
5580: 72 6f 70 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  rop(sqlite3_back
5590: 75 70 20 2a 70 29 0d 0a 7b 0d 0a 20 20 69 6e 74  up *p)..{..  int
55a0: 20 72 65 74 3b 0d 0a 0d 0a 23 69 66 20 64 65 66   ret;....#if def
55b0: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42  ined(INTEROP_DEB
55c0: 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f  UG) && (INTEROP_
55d0: 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f  DEBUG & INTEROP_
55e0: 44 45 42 55 47 5f 42 41 43 4b 55 50 5f 46 49 4e  DEBUG_BACKUP_FIN
55f0: 49 53 48 29 0d 0a 20 20 73 71 6c 69 74 65 33 2a  ISH)..  sqlite3*
5600: 20 70 44 65 73 74 44 62 20 3d 20 70 20 3f 20 70   pDestDb = p ? p
5610: 2d 3e 70 44 65 73 74 44 62 20 3a 20 30 3b 0d 0a  ->pDestDb : 0;..
5620: 20 20 73 71 6c 69 74 65 33 2a 20 70 53 72 63 44    sqlite3* pSrcD
5630: 62 20 3d 20 70 20 3f 20 70 2d 3e 70 53 72 63 44  b = p ? p->pSrcD
5640: 62 20 3a 20 30 3b 0d 0a 20 20 73 71 6c 69 74 65  b : 0;..  sqlite
5650: 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73  3InteropDebug("s
5660: 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69  qlite3_backup_fi
5670: 6e 69 73 68 5f 69 6e 74 65 72 6f 70 28 29 3a 20  nish_interop(): 
5680: 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f  calling sqlite3_
5690: 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28 25 70  backup_finish(%p
56a0: 2c 20 25 70 2c 20 25 70 29 2e 2e 2e 5c 6e 22 2c  , %p, %p)...\n",
56b0: 20 70 44 65 73 74 44 62 2c 20 70 53 72 63 44 62   pDestDb, pSrcDb
56c0: 2c 20 70 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  , p);..#endif...
56d0: 0a 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33  .  ret = sqlite3
56e0: 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28 70  _backup_finish(p
56f0: 29 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65  );....#if define
5700: 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29  d(INTEROP_DEBUG)
5710: 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42   && (INTEROP_DEB
5720: 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42  UG & INTEROP_DEB
5730: 55 47 5f 42 41 43 4b 55 50 5f 46 49 4e 49 53 48  UG_BACKUP_FINISH
5740: 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65  )..  sqlite3Inte
5750: 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65  ropDebug("sqlite
5760: 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 5f  3_backup_finish_
5770: 69 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c 69 74  interop(): sqlit
5780: 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68  e3_backup_finish
5790: 28 25 70 2c 20 25 70 2c 20 25 70 29 20 72 65 74  (%p, %p, %p) ret
57a0: 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 70 44  urned %d.\n", pD
57b0: 65 73 74 44 62 2c 20 70 53 72 63 44 62 2c 20 70  estDb, pSrcDb, p
57c0: 2c 20 72 65 74 29 3b 0d 0a 23 65 6e 64 69 66 0d  , ret);..#endif.
57d0: 0a 0d 0a 20 20 72 65 74 75 72 6e 20 72 65 74 3b  ...  return ret;
57e0: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
57f0: 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c  I int WINAPI sql
5800: 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65 72  ite3_reset_inter
5810: 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  op(sqlite3_stmt 
5820: 2a 73 74 6d 74 29 0d 0a 7b 0d 0a 20 20 69 6e 74  *stmt)..{..  int
5830: 20 72 65 74 3b 0d 0a 23 69 66 20 21 64 65 66 69   ret;..#if !defi
5840: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 4c 45 47 41  ned(INTEROP_LEGA
5850: 43 59 5f 43 4c 4f 53 45 29 20 26 26 20 53 51 4c  CY_CLOSE) && SQL
5860: 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  ITE_VERSION_NUMB
5870: 45 52 20 3e 3d 20 33 30 30 37 30 31 34 0d 0a 0d  ER >= 3007014...
5880: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54  .#if defined(INT
5890: 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28  EROP_DEBUG) && (
58a0: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20  INTEROP_DEBUG & 
58b0: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 52 45  INTEROP_DEBUG_RE
58c0: 53 45 54 29 0d 0a 20 20 73 71 6c 69 74 65 33 49  SET)..  sqlite3I
58d0: 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c  nteropDebug("sql
58e0: 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65 72  ite3_reset_inter
58f0: 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73 71  op(): calling sq
5900: 6c 69 74 65 33 5f 72 65 73 65 74 28 25 70 29 2e  lite3_reset(%p).
5910: 2e 2e 5c 6e 22 2c 20 73 74 6d 74 29 3b 0d 0a 23  ..\n", stmt);..#
5920: 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 20 3d  endif....  ret =
5930: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 73   sqlite3_reset(s
5940: 74 6d 74 29 3b 0d 0a 0d 0a 23 69 66 20 64 65 66  tmt);....#if def
5950: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42  ined(INTEROP_DEB
5960: 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f  UG) && (INTEROP_
5970: 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f  DEBUG & INTEROP_
5980: 44 45 42 55 47 5f 52 45 53 45 54 29 0d 0a 20 20  DEBUG_RESET)..  
5990: 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65  sqlite3InteropDe
59a0: 62 75 67 28 22 73 71 6c 69 74 65 33 5f 72 65 73  bug("sqlite3_res
59b0: 65 74 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73 71  et_interop(): sq
59c0: 6c 69 74 65 33 5f 72 65 73 65 74 28 25 70 29 20  lite3_reset(%p) 
59d0: 72 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c  returned %d.\n",
59e0: 20 73 74 6d 74 2c 20 72 65 74 29 3b 0d 0a 23 65   stmt, ret);..#e
59f0: 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 75 72 6e  ndif....  return
5a00: 20 72 65 74 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20   ret;..#else..  
5a10: 69 66 20 28 73 74 6d 74 20 26 26 20 28 28 56 64  if (stmt && ((Vd
5a20: 62 65 20 2a 29 73 74 6d 74 29 2d 3e 6d 61 67 69  be *)stmt)->magi
5a30: 63 20 3d 3d 20 56 44 42 45 5f 4d 41 47 49 43 5f  c == VDBE_MAGIC_
5a40: 44 45 41 44 29 20 72 65 74 75 72 6e 20 53 51 4c  DEAD) return SQL
5a50: 49 54 45 5f 53 43 48 45 4d 41 3b 0d 0a 20 20 72  ITE_SCHEMA;..  r
5a60: 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 73  et = sqlite3_res
5a70: 65 74 28 73 74 6d 74 29 3b 0d 0a 20 20 72 65 74  et(stmt);..  ret
5a80: 75 72 6e 20 72 65 74 3b 0d 0a 23 65 6e 64 69 66  urn ret;..#endif
5a90: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
5aa0: 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c  I int WINAPI sql
5ab0: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
5ac0: 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 73 71 6c  tion_interop(sql
5ad0: 69 74 65 33 20 2a 70 73 71 6c 2c 20 63 6f 6e 73  ite3 *psql, cons
5ae0: 74 20 63 68 61 72 20 2a 7a 46 75 6e 63 74 69 6f  t char *zFunctio
5af0: 6e 4e 61 6d 65 2c 20 69 6e 74 20 6e 41 72 67 2c  nName, int nArg,
5b00: 20 69 6e 74 20 65 54 65 78 74 52 65 70 2c 20 76   int eTextRep, v
5b10: 6f 69 64 20 2a 70 76 55 73 65 72 2c 20 53 51 4c  oid *pvUser, SQL
5b20: 49 54 45 55 53 45 52 46 55 4e 43 20 66 75 6e 63  ITEUSERFUNC func
5b30: 2c 20 53 51 4c 49 54 45 55 53 45 52 46 55 4e 43  , SQLITEUSERFUNC
5b40: 20 66 75 6e 63 73 74 65 70 2c 20 53 51 4c 49 54   funcstep, SQLIT
5b50: 45 46 55 4e 43 46 49 4e 41 4c 20 66 75 6e 63 66  EFUNCFINAL funcf
5b60: 69 6e 61 6c 2c 20 69 6e 74 20 6e 65 65 64 43 6f  inal, int needCo
5b70: 6c 6c 53 65 71 29 0d 0a 7b 0d 0a 20 20 69 6e 74  llSeq)..{..  int
5b80: 20 6e 3b 0d 0a 0d 0a 20 20 69 66 20 28 65 54 65   n;....  if (eTe
5b90: 78 74 52 65 70 20 3d 3d 20 53 51 4c 49 54 45 5f  xtRep == SQLITE_
5ba0: 55 54 46 31 36 29 0d 0a 20 20 20 20 65 54 65 78  UTF16)..    eTex
5bb0: 74 52 65 70 20 3d 20 53 51 4c 49 54 45 5f 55 54  tRep = SQLITE_UT
5bc0: 46 31 36 4e 41 54 49 56 45 3b 0d 0a 0d 0a 20 20  F16NATIVE;....  
5bd0: 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61  n = sqlite3_crea
5be0: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 70 73 71 6c  te_function(psql
5bf0: 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c  , zFunctionName,
5c00: 20 6e 41 72 67 2c 20 65 54 65 78 74 52 65 70 2c   nArg, eTextRep,
5c10: 20 70 76 55 73 65 72 2c 20 66 75 6e 63 2c 20 66   pvUser, func, f
5c20: 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e  uncstep, funcfin
5c30: 61 6c 29 3b 0d 0a 20 20 69 66 20 28 6e 20 3d 3d  al);..  if (n ==
5c40: 20 53 51 4c 49 54 45 5f 4f 4b 29 0d 0a 20 20 7b   SQLITE_OK)..  {
5c50: 0d 0a 20 20 20 20 69 66 20 28 6e 65 65 64 43 6f  ..    if (needCo
5c60: 6c 6c 53 65 71 29 0d 0a 20 20 20 20 7b 0d 0a 20  llSeq)..    {.. 
5c70: 20 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46       FuncDef *pF
5c80: 75 6e 63 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  unc = sqlite3Fin
5c90: 64 46 75 6e 63 74 69 6f 6e 28 70 73 71 6c 2c 20  dFunction(psql, 
5ca0: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 73  zFunctionName, s
5cb0: 74 72 6c 65 6e 28 7a 46 75 6e 63 74 69 6f 6e 4e  trlen(zFunctionN
5cc0: 61 6d 65 29 2c 20 6e 41 72 67 2c 20 65 54 65 78  ame), nArg, eTex
5cd0: 74 52 65 70 2c 20 30 29 3b 0d 0a 20 20 20 20 20  tRep, 0);..     
5ce0: 20 69 66 28 20 70 46 75 6e 63 20 29 0d 0a 20 20   if( pFunc )..  
5cf0: 20 20 20 20 7b 0d 0a 23 69 66 20 53 51 4c 49 54      {..#if SQLIT
5d00: 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52  E_VERSION_NUMBER
5d10: 20 3e 3d 20 33 30 30 38 30 30 31 0d 0a 20 20 20   >= 3008001..   
5d20: 20 20 20 20 20 70 46 75 6e 63 2d 3e 66 75 6e 63       pFunc->func
5d30: 46 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f  Flags |= SQLITE_
5d40: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 3b 0d 0a  FUNC_NEEDCOLL;..
5d50: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 70  #else..        p
5d60: 46 75 6e 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 53  Func->flags |= S
5d70: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
5d80: 4f 4c 4c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  OLL;..#endif..  
5d90: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
5da0: 7d 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 6e 3b  }....  return n;
5db0: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
5dc0: 49 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71  I void WINAPI sq
5dd0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62  lite3_value_doub
5de0: 6c 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  le_interop(sqlit
5df0: 65 33 5f 76 61 6c 75 65 20 2a 70 76 61 6c 2c 20  e3_value *pval, 
5e00: 64 6f 75 62 6c 65 20 2a 76 61 6c 29 0d 0a 7b 0d  double *val)..{.
5e10: 0a 20 20 69 66 20 28 21 76 61 6c 29 20 72 65 74  .  if (!val) ret
5e20: 75 72 6e 3b 0d 0a 20 20 2a 76 61 6c 20 3d 20 73  urn;..  *val = s
5e30: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75  qlite3_value_dou
5e40: 62 6c 65 28 70 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d  ble(pval);..}...
5e50: 0a 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69 64  .SQLITE_API void
5e60: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
5e70: 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e 74 65  value_int64_inte
5e80: 72 6f 70 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  rop(sqlite3_valu
5e90: 65 20 2a 70 76 61 6c 2c 20 73 71 6c 69 74 65 5f  e *pval, sqlite_
5ea0: 69 6e 74 36 34 20 2a 76 61 6c 29 0d 0a 7b 0d 0a  int64 *val)..{..
5eb0: 20 20 69 66 20 28 21 76 61 6c 29 20 72 65 74 75    if (!val) retu
5ec0: 72 6e 3b 0d 0a 20 20 2a 76 61 6c 20 3d 20 73 71  rn;..  *val = sq
5ed0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36  lite3_value_int6
5ee0: 34 28 70 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53  4(pval);..}....S
5ef0: 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20  QLITE_API const 
5f00: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 20  unsigned char * 
5f10: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 76  WINAPI sqlite3_v
5f20: 61 6c 75 65 5f 74 65 78 74 5f 69 6e 74 65 72 6f  alue_text_intero
5f30: 70 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  p(sqlite3_value 
5f40: 2a 76 61 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29  *val, int *plen)
5f50: 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 75 6e 73  ..{..  const uns
5f60: 69 67 6e 65 64 20 63 68 61 72 20 2a 70 76 61 6c  igned char *pval
5f70: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
5f80: 5f 74 65 78 74 28 76 61 6c 29 3b 0d 0a 20 20 69  _text(val);..  i
5f90: 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d  f (plen) *plen =
5fa0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62   sqlite3_value_b
5fb0: 79 74 65 73 28 76 61 6c 29 3b 0d 0a 20 20 72 65  ytes(val);..  re
5fc0: 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d  turn pval;..}...
5fd0: 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73  .SQLITE_API cons
5fe0: 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20  t void * WINAPI 
5ff0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
6000: 78 74 31 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c  xt16_interop(sql
6010: 69 74 65 33 5f 76 61 6c 75 65 20 2a 76 61 6c 2c  ite3_value *val,
6020: 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a   int *plen)..{..
6030: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76    const void *pv
6040: 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c  al = sqlite3_val
6050: 75 65 5f 74 65 78 74 31 36 28 76 61 6c 29 3b 0d  ue_text16(val);.
6060: 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c  .  if (plen) *pl
6070: 65 6e 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c  en = sqlite3_val
6080: 75 65 5f 62 79 74 65 73 31 36 28 76 61 6c 29 3b  ue_bytes16(val);
6090: 0d 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b  ..  return pval;
60a0: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
60b0: 49 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71  I void WINAPI sq
60c0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75  lite3_result_dou
60d0: 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  ble_interop(sqli
60e0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 63 74  te3_context *pct
60f0: 78 2c 20 64 6f 75 62 6c 65 20 2a 76 61 6c 29 0d  x, double *val).
6100: 0a 7b 0d 0a 20 20 69 66 20 28 21 76 61 6c 29 20  .{..  if (!val) 
6110: 72 65 74 75 72 6e 3b 0d 0a 20 20 73 71 6c 69 74  return;..  sqlit
6120: 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65  e3_result_double
6130: 28 70 63 74 78 2c 20 2a 76 61 6c 29 3b 0d 0a 7d  (pctx, *val);..}
6140: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76  ....SQLITE_API v
6150: 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74  oid WINAPI sqlit
6160: 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f  e3_result_int64_
6170: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f  interop(sqlite3_
6180: 63 6f 6e 74 65 78 74 20 2a 70 63 74 78 2c 20 73  context *pctx, s
6190: 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a 76 61 6c  qlite_int64 *val
61a0: 29 0d 0a 7b 0d 0a 20 20 69 66 20 28 21 76 61 6c  )..{..  if (!val
61b0: 29 20 72 65 74 75 72 6e 3b 0d 0a 20 20 73 71 6c  ) return;..  sql
61c0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36  ite3_result_int6
61d0: 34 28 70 63 74 78 2c 20 2a 76 61 6c 29 3b 0d 0a  4(pctx, *val);..
61e0: 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20  }....SQLITE_API 
61f0: 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74  int WINAPI sqlit
6200: 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63  e3_context_collc
6210: 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 73  ompare_interop(s
6220: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
6230: 63 74 78 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  ctx, const void 
6240: 2a 70 31 2c 20 69 6e 74 20 70 31 6c 65 6e 2c 20  *p1, int p1len, 
6250: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 32 2c 20  const void *p2, 
6260: 69 6e 74 20 70 32 6c 65 6e 29 0d 0a 7b 0d 0a 23  int p2len)..{..#
6270: 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  if SQLITE_VERSIO
6280: 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 38  N_NUMBER >= 3008
6290: 30 30 37 0d 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  007..  CollSeq *
62a0: 70 43 6f 6c 6c 20 3d 20 63 74 78 20 3f 20 73 71  pColl = ctx ? sq
62b0: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
62c0: 53 65 71 28 63 74 78 29 20 3a 20 30 3b 0d 0a 23  Seq(ctx) : 0;..#
62d0: 65 6c 73 65 0d 0a 20 20 43 6f 6c 6c 53 65 71 20  else..  CollSeq 
62e0: 2a 70 43 6f 6c 6c 20 3d 20 63 74 78 20 3f 20 63  *pColl = ctx ? c
62f0: 74 78 2d 3e 70 43 6f 6c 6c 20 3a 20 30 3b 0d 0a  tx->pColl : 0;..
6300: 23 65 6e 64 69 66 0d 0a 20 20 69 66 20 28 21 63  #endif..  if (!c
6310: 74 78 20 7c 7c 20 21 63 74 78 2d 3e 70 46 75 6e  tx || !ctx->pFun
6320: 63 29 20 72 65 74 75 72 6e 20 34 3b 20 2f 2a 20  c) return 4; /* 
6330: 45 52 52 4f 52 20 2a 2f 0d 0a 20 20 69 66 20 28  ERROR */..  if (
6340: 21 70 43 6f 6c 6c 20 7c 7c 20 21 70 43 6f 6c 6c  !pColl || !pColl
6350: 2d 3e 78 43 6d 70 29 20 72 65 74 75 72 6e 20 33  ->xCmp) return 3
6360: 3b 20 2f 2a 20 45 52 52 4f 52 20 2a 2f 0d 0a 23  ; /* ERROR */..#
6370: 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  if SQLITE_VERSIO
6380: 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 38  N_NUMBER >= 3008
6390: 30 30 31 0d 0a 20 20 69 66 20 28 28 63 74 78 2d  001..  if ((ctx-
63a0: 3e 70 46 75 6e 63 2d 3e 66 75 6e 63 46 6c 61 67  >pFunc->funcFlag
63b0: 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  s & SQLITE_FUNC_
63c0: 4e 45 45 44 43 4f 4c 4c 29 20 3d 3d 20 30 29 20  NEEDCOLL) == 0) 
63d0: 72 65 74 75 72 6e 20 32 3b 20 2f 2a 20 45 52 52  return 2; /* ERR
63e0: 4f 52 20 2a 2f 0d 0a 23 65 6c 73 65 0d 0a 20 20  OR */..#else..  
63f0: 69 66 20 28 28 63 74 78 2d 3e 70 46 75 6e 63 2d  if ((ctx->pFunc-
6400: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
6410: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 20 3d  FUNC_NEEDCOLL) =
6420: 3d 20 30 29 20 72 65 74 75 72 6e 20 32 3b 20 2f  = 0) return 2; /
6430: 2a 20 45 52 52 4f 52 20 2a 2f 0d 0a 23 65 6e 64  * ERROR */..#end
6440: 69 66 0d 0a 20 20 72 65 74 75 72 6e 20 70 43 6f  if..  return pCo
6450: 6c 6c 2d 3e 78 43 6d 70 28 70 43 6f 6c 6c 2d 3e  ll->xCmp(pColl->
6460: 70 55 73 65 72 2c 20 70 31 6c 65 6e 2c 20 70 31  pUser, p1len, p1
6470: 2c 20 70 32 6c 65 6e 2c 20 70 32 29 3b 0d 0a 7d  , p2len, p2);..}
6480: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63  ....SQLITE_API c
6490: 6f 6e 73 74 20 63 68 61 72 20 2a 20 57 49 4e 41  onst char * WINA
64a0: 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  PI sqlite3_conte
64b0: 78 74 5f 63 6f 6c 6c 73 65 71 5f 69 6e 74 65 72  xt_collseq_inter
64c0: 6f 70 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  op(sqlite3_conte
64d0: 78 74 20 2a 63 74 78 2c 20 69 6e 74 20 2a 70 74  xt *ctx, int *pt
64e0: 79 70 65 2c 20 69 6e 74 20 2a 65 6e 63 2c 20 69  ype, int *enc, i
64f0: 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 23 69  nt *plen)..{..#i
6500: 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
6510: 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 38 30  _NUMBER >= 30080
6520: 30 37 0d 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70  07..  CollSeq *p
6530: 43 6f 6c 6c 20 3d 20 63 74 78 20 3f 20 73 71 6c  Coll = ctx ? sql
6540: 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53  ite3GetFuncCollS
6550: 65 71 28 63 74 78 29 20 3a 20 30 3b 0d 0a 23 65  eq(ctx) : 0;..#e
6560: 6c 73 65 0d 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  lse..  CollSeq *
6570: 70 43 6f 6c 6c 20 3d 20 63 74 78 20 3f 20 63 74  pColl = ctx ? ct
6580: 78 2d 3e 70 43 6f 6c 6c 20 3a 20 30 3b 0d 0a 23  x->pColl : 0;..#
6590: 65 6e 64 69 66 0d 0a 20 20 69 66 20 28 70 74 79  endif..  if (pty
65a0: 70 65 29 20 2a 70 74 79 70 65 20 3d 20 30 3b 0d  pe) *ptype = 0;.
65b0: 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c  .  if (plen) *pl
65c0: 65 6e 20 3d 20 30 3b 0d 0a 20 20 69 66 20 28 65  en = 0;..  if (e
65d0: 6e 63 29 20 2a 65 6e 63 20 3d 20 30 3b 0d 0a 0d  nc) *enc = 0;...
65e0: 0a 20 20 69 66 20 28 21 63 74 78 20 7c 7c 20 21  .  if (!ctx || !
65f0: 63 74 78 2d 3e 70 46 75 6e 63 29 20 72 65 74 75  ctx->pFunc) retu
6600: 72 6e 20 4e 55 4c 4c 3b 0d 0a 23 69 66 20 53 51  rn NULL;..#if SQ
6610: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
6620: 42 45 52 20 3e 3d 20 33 30 30 38 30 30 31 0d 0a  BER >= 3008001..
6630: 20 20 69 66 20 28 28 63 74 78 2d 3e 70 46 75 6e    if ((ctx->pFun
6640: 63 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26 20 53  c->funcFlags & S
6650: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
6660: 4f 4c 4c 29 20 3d 3d 20 30 29 20 72 65 74 75 72  OLL) == 0) retur
6670: 6e 20 4e 55 4c 4c 3b 0d 0a 23 65 6c 73 65 0d 0a  n NULL;..#else..
6680: 20 20 69 66 20 28 28 63 74 78 2d 3e 70 46 75 6e    if ((ctx->pFun
6690: 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  c->flags & SQLIT
66a0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
66b0: 20 3d 3d 20 30 29 20 72 65 74 75 72 6e 20 4e 55   == 0) return NU
66c0: 4c 4c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  LL;..#endif.... 
66d0: 20 69 66 20 28 70 43 6f 6c 6c 29 0d 0a 20 20 7b   if (pColl)..  {
66e0: 0d 0a 20 20 20 20 69 66 20 28 65 6e 63 29 20 2a  ..    if (enc) *
66f0: 65 6e 63 20 3d 20 70 43 6f 6c 6c 2d 3e 65 6e 63  enc = pColl->enc
6700: 3b 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45  ;..#if SQLITE_VE
6710: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3c 20 33  RSION_NUMBER < 3
6720: 30 30 37 30 31 30 0d 0a 20 20 20 20 69 66 20 28  007010..    if (
6730: 70 74 79 70 65 29 20 2a 70 74 79 70 65 20 3d 20  ptype) *ptype = 
6740: 70 43 6f 6c 6c 2d 3e 74 79 70 65 3b 0d 0a 23 65  pColl->type;..#e
6750: 6e 64 69 66 0d 0a 20 20 20 20 69 66 20 28 70 6c  ndif..    if (pl
6760: 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 70 43 6f 6c  en) *plen = pCol
6770: 6c 2d 3e 7a 4e 61 6d 65 20 3f 20 73 74 72 6c 65  l->zName ? strle
6780: 6e 28 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 29 20  n(pColl->zName) 
6790: 3a 20 30 3b 0d 0a 0d 0a 20 20 20 20 72 65 74 75  : 0;....    retu
67a0: 72 6e 20 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 3b  rn pColl->zName;
67b0: 0d 0a 20 20 7d 0d 0a 20 20 72 65 74 75 72 6e 20  ..  }..  return 
67c0: 4e 55 4c 4c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49  NULL;..}....SQLI
67d0: 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 63 68 61  TE_API const cha
67e0: 72 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74  r * WINAPI sqlit
67f0: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61  e3_column_databa
6800: 73 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28  se_name_interop(
6810: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74  sqlite3_stmt *st
6820: 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e  mt, int iCol, in
6830: 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63  t *plen)..{..  c
6840: 6f 6e 73 74 20 63 68 61 72 20 2a 70 76 61 6c 20  onst char *pval 
6850: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
6860: 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 28 73  _database_name(s
6870: 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 69  tmt, iCol);..  i
6880: 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d  f (plen) *plen =
6890: 20 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e 28 70   pval ? strlen(p
68a0: 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74  val) : 0;..  ret
68b0: 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a  urn pval;..}....
68c0: 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74  SQLITE_API const
68d0: 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73   void * WINAPI s
68e0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61  qlite3_column_da
68f0: 74 61 62 61 73 65 5f 6e 61 6d 65 31 36 5f 69 6e  tabase_name16_in
6900: 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74  terop(sqlite3_st
6910: 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43  mt *stmt, int iC
6920: 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a  ol, int *plen)..
6930: 7b 0d 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  {..  const void 
6940: 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f  *pval = sqlite3_
6950: 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f  column_database_
6960: 6e 61 6d 65 31 36 28 73 74 6d 74 2c 20 69 43 6f  name16(stmt, iCo
6970: 6c 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29  l);..  if (plen)
6980: 20 2a 70 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20   *plen = pval ? 
6990: 77 63 73 6c 65 6e 28 28 77 63 68 61 72 5f 74 20  wcslen((wchar_t 
69a0: 2a 29 70 76 61 6c 29 20 2a 20 73 69 7a 65 6f 66  *)pval) * sizeof
69b0: 28 77 63 68 61 72 5f 74 29 20 3a 20 30 3b 0d 0a  (wchar_t) : 0;..
69c0: 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a    return pval;..
69d0: 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20  }....SQLITE_API 
69e0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 57 49 4e  const char * WIN
69f0: 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  API sqlite3_colu
6a00: 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e  mn_table_name_in
6a10: 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74  terop(sqlite3_st
6a20: 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43  mt *stmt, int iC
6a30: 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a  ol, int *plen)..
6a40: 7b 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  {..  const char 
6a50: 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f  *pval = sqlite3_
6a60: 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d  column_table_nam
6a70: 65 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a  e(stmt, iCol);..
6a80: 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65    if (plen) *ple
6a90: 6e 20 3d 20 70 76 61 6c 20 3f 20 73 74 72 6c 65  n = pval ? strle
6aa0: 6e 28 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20  n(pval) : 0;..  
6ab0: 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d  return pval;..}.
6ac0: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f  ...SQLITE_API co
6ad0: 6e 73 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50  nst void * WINAP
6ae0: 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  I sqlite3_column
6af0: 5f 74 61 62 6c 65 5f 6e 61 6d 65 31 36 5f 69 6e  _table_name16_in
6b00: 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74  terop(sqlite3_st
6b10: 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43  mt *stmt, int iC
6b20: 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a  ol, int *plen)..
6b30: 7b 0d 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  {..  const void 
6b40: 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f  *pval = sqlite3_
6b50: 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d  column_table_nam
6b60: 65 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b  e16(stmt, iCol);
6b70: 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70  ..  if (plen) *p
6b80: 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20 77 63 73  len = pval ? wcs
6b90: 6c 65 6e 28 28 77 63 68 61 72 5f 74 20 2a 29 70  len((wchar_t *)p
6ba0: 76 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77 63  val) * sizeof(wc
6bb0: 68 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 20 20 72  har_t) : 0;..  r
6bc0: 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a  eturn pval;..}..
6bd0: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e  ..SQLITE_API con
6be0: 73 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49  st char * WINAPI
6bf0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
6c00: 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f 69 6e 74 65  origin_name_inte
6c10: 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  rop(sqlite3_stmt
6c20: 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c   *stmt, int iCol
6c30: 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d  , int *plen)..{.
6c40: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 70  .  const char *p
6c50: 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  val = sqlite3_co
6c60: 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65  lumn_origin_name
6c70: 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20  (stmt, iCol);.. 
6c80: 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e   if (plen) *plen
6c90: 20 3d 20 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e   = pval ? strlen
6ca0: 28 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72  (pval) : 0;..  r
6cb0: 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a  eturn pval;..}..
6cc0: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e  ..SQLITE_API con
6cd0: 73 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49  st void * WINAPI
6ce0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
6cf0: 6f 72 69 67 69 6e 5f 6e 61 6d 65 31 36 5f 69 6e  origin_name16_in
6d00: 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74  terop(sqlite3_st
6d10: 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43  mt *stmt, int iC
6d20: 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a  ol, int *plen)..
6d30: 7b 0d 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  {..  const void 
6d40: 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f  *pval = sqlite3_
6d50: 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61  column_origin_na
6d60: 6d 65 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29  me16(stmt, iCol)
6d70: 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a  ;..  if (plen) *
6d80: 70 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20 77 63  plen = pval ? wc
6d90: 73 6c 65 6e 28 28 77 63 68 61 72 5f 74 20 2a 29  slen((wchar_t *)
6da0: 70 76 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77  pval) * sizeof(w
6db0: 63 68 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 20 20  char_t) : 0;..  
6dc0: 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d  return pval;..}.
6dd0: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e  ...SQLITE_API in
6de0: 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  t WINAPI sqlite3
6df0: 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65  _table_column_me
6e00: 74 61 64 61 74 61 5f 69 6e 74 65 72 6f 70 28 73  tadata_interop(s
6e10: 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73  qlite3 *db, cons
6e20: 74 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d 65 2c  t char *zDbName,
6e30: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
6e40: 62 6c 65 4e 61 6d 65 2c 20 63 6f 6e 73 74 20 63  bleName, const c
6e50: 68 61 72 20 2a 7a 43 6f 6c 75 6d 6e 4e 61 6d 65  har *zColumnName
6e60: 2c 20 63 68 61 72 20 2a 2a 70 7a 44 61 74 61 54  , char **pzDataT
6e70: 79 70 65 2c 20 63 68 61 72 20 2a 2a 70 7a 43 6f  ype, char **pzCo
6e80: 6c 6c 53 65 71 2c 20 69 6e 74 20 2a 70 4e 6f 74  llSeq, int *pNot
6e90: 4e 75 6c 6c 2c 20 69 6e 74 20 2a 70 50 72 69 6d  Null, int *pPrim
6ea0: 61 72 79 4b 65 79 2c 20 69 6e 74 20 2a 70 41 75  aryKey, int *pAu
6eb0: 74 6f 69 6e 63 2c 20 69 6e 74 20 2a 70 64 74 4c  toinc, int *pdtL
6ec0: 65 6e 2c 20 69 6e 74 20 2a 70 63 73 4c 65 6e 29  en, int *pcsLen)
6ed0: 0d 0a 7b 0d 0a 20 20 69 6e 74 20 6e 3b 0d 0a 0d  ..{..  int n;...
6ee0: 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 74  .  n = sqlite3_t
6ef0: 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61  able_column_meta
6f00: 64 61 74 61 28 64 62 2c 20 7a 44 62 4e 61 6d 65  data(db, zDbName
6f10: 2c 20 7a 54 61 62 6c 65 4e 61 6d 65 2c 20 7a 43  , zTableName, zC
6f20: 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 70 7a 44 61 74  olumnName, pzDat
6f30: 61 54 79 70 65 2c 20 70 7a 43 6f 6c 6c 53 65 71  aType, pzCollSeq
6f40: 2c 20 70 4e 6f 74 4e 75 6c 6c 2c 20 70 50 72 69  , pNotNull, pPri
6f50: 6d 61 72 79 4b 65 79 2c 20 70 41 75 74 6f 69 6e  maryKey, pAutoin
6f60: 63 29 3b 0d 0a 0d 0a 20 20 69 66 20 28 70 64 74  c);....  if (pdt
6f70: 4c 65 6e 29 20 2a 70 64 74 4c 65 6e 20 3d 20 28  Len) *pdtLen = (
6f80: 70 7a 44 61 74 61 54 79 70 65 20 26 26 20 2a 70  pzDataType && *p
6f90: 7a 44 61 74 61 54 79 70 65 29 20 3f 20 73 74 72  zDataType) ? str
6fa0: 6c 65 6e 28 2a 70 7a 44 61 74 61 54 79 70 65 29  len(*pzDataType)
6fb0: 20 3a 20 30 3b 0d 0a 20 20 69 66 20 28 70 63 73   : 0;..  if (pcs
6fc0: 4c 65 6e 29 20 2a 70 63 73 4c 65 6e 20 3d 20 28  Len) *pcsLen = (
6fd0: 70 7a 43 6f 6c 6c 53 65 71 20 26 26 20 2a 70 7a  pzCollSeq && *pz
6fe0: 43 6f 6c 6c 53 65 71 29 20 3f 20 73 74 72 6c 65  CollSeq) ? strle
6ff0: 6e 28 2a 70 7a 43 6f 6c 6c 53 65 71 29 20 3a 20  n(*pzCollSeq) : 
7000: 30 3b 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 6e  0;....  return n
7010: 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  ;..}....SQLITE_A
7020: 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71  PI int WINAPI sq
7030: 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6c 75  lite3_index_colu
7040: 6d 6e 5f 69 6e 66 6f 5f 69 6e 74 65 72 6f 70 28  mn_info_interop(
7050: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e  sqlite3 *db, con
7060: 73 74 20 63 68 61 72 20 2a 7a 44 62 2c 20 63 6f  st char *zDb, co
7070: 6e 73 74 20 63 68 61 72 20 2a 7a 49 6e 64 65 78  nst char *zIndex
7080: 4e 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  Name, const char
7090: 20 2a 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 69   *zColumnName, i
70a0: 6e 74 20 2a 73 6f 72 74 4f 72 64 65 72 2c 20 69  nt *sortOrder, i
70b0: 6e 74 20 2a 6f 6e 45 72 72 6f 72 2c 20 63 68 61  nt *onError, cha
70c0: 72 20 2a 2a 70 7a 43 6f 6c 6c 2c 20 69 6e 74 20  r **pzColl, int 
70d0: 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 49 6e 64  *plen)..{..  Ind
70e0: 65 78 20 2a 70 49 64 78 3b 0d 0a 20 20 54 61 62  ex *pIdx;..  Tab
70f0: 6c 65 20 2a 70 54 61 62 3b 0d 0a 20 20 69 6e 74  le *pTab;..  int
7100: 20 6e 3b 0d 0a 0d 0a 20 20 69 66 20 28 21 64 62   n;....  if (!db
7110: 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ) return SQLITE_
7120: 45 52 52 4f 52 3b 0d 0a 20 20 73 71 6c 69 74 65  ERROR;..  sqlite
7130: 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62  3_mutex_enter(db
7140: 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 73 71 6c  ->mutex);..  sql
7150: 69 74 65 33 42 74 72 65 65 45 6e 74 65 72 41 6c  ite3BtreeEnterAl
7160: 6c 28 64 62 29 3b 0d 0a 0d 0a 20 20 70 49 64 78  l(db);....  pIdx
7170: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e   = sqlite3FindIn
7180: 64 65 78 28 64 62 2c 20 7a 49 6e 64 65 78 4e 61  dex(db, zIndexNa
7190: 6d 65 2c 20 7a 44 62 29 3b 0d 0a 0d 0a 20 20 73  me, zDb);....  s
71a0: 71 6c 69 74 65 33 42 74 72 65 65 4c 65 61 76 65  qlite3BtreeLeave
71b0: 41 6c 6c 28 64 62 29 3b 0d 0a 20 20 73 71 6c 69  All(db);..  sqli
71c0: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
71d0: 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20  db->mutex);.... 
71e0: 20 69 66 20 28 21 70 49 64 78 29 20 72 65 74 75   if (!pIdx) retu
71f0: 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b  rn SQLITE_ERROR;
7200: 0d 0a 0d 0a 20 20 70 54 61 62 20 3d 20 70 49 64  ....  pTab = pId
7210: 78 2d 3e 70 54 61 62 6c 65 3b 0d 0a 20 20 66 6f  x->pTable;..  fo
7220: 72 20 28 6e 20 3d 20 30 3b 20 6e 20 3c 20 70 49  r (n = 0; n < pI
7230: 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 3b 20 6e 2b 2b  dx->nColumn; n++
7240: 29 0d 0a 20 20 7b 0d 0a 20 20 20 20 69 6e 74 20  )..  {..    int 
7250: 63 6e 75 6d 20 3d 20 70 49 64 78 2d 3e 61 69 43  cnum = pIdx->aiC
7260: 6f 6c 75 6d 6e 5b 6e 5d 3b 0d 0a 20 20 20 20 69  olumn[n];..    i
7270: 66 20 28 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f (sqlite3StrICm
7280: 70 28 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e 75  p(pTab->aCol[cnu
7290: 6d 5d 2e 7a 4e 61 6d 65 2c 20 7a 43 6f 6c 75 6d  m].zName, zColum
72a0: 6e 4e 61 6d 65 29 20 3d 3d 20 30 29 0d 0a 20 20  nName) == 0)..  
72b0: 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 20    {..      if ( 
72c0: 73 6f 72 74 4f 72 64 65 72 20 29 20 2a 73 6f 72  sortOrder ) *sor
72d0: 74 4f 72 64 65 72 20 3d 20 70 49 64 78 2d 3e 61  tOrder = pIdx->a
72e0: 53 6f 72 74 4f 72 64 65 72 5b 6e 5d 3b 0d 0a 20  SortOrder[n];.. 
72f0: 20 20 20 20 20 69 66 20 28 20 70 7a 43 6f 6c 6c       if ( pzColl
7300: 20 29 20 2a 70 7a 43 6f 6c 6c 20 3d 20 70 49 64   ) *pzColl = pId
7310: 78 2d 3e 61 7a 43 6f 6c 6c 5b 6e 5d 3b 0d 0a 20  x->azColl[n];.. 
7320: 20 20 20 20 20 69 66 20 28 20 70 6c 65 6e 20 29       if ( plen )
7330: 20 2a 70 6c 65 6e 20 3d 20 73 74 72 6c 65 6e 28   *plen = strlen(
7340: 2a 70 7a 43 6f 6c 6c 29 3b 0d 0a 20 20 20 20 20  *pzColl);..     
7350: 20 69 66 20 28 20 6f 6e 45 72 72 6f 72 20 29 20   if ( onError ) 
7360: 2a 6f 6e 45 72 72 6f 72 20 3d 20 70 49 64 78 2d  *onError = pIdx-
7370: 3e 6f 6e 45 72 72 6f 72 3b 0d 0a 0d 0a 20 20 20  >onError;....   
7380: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
7390: 5f 4f 4b 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d  _OK;..    }..  }
73a0: 0d 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ..  return SQLIT
73b0: 45 5f 45 52 52 4f 52 3b 0d 0a 7d 0d 0a 0d 0a 53  E_ERROR;..}....S
73c0: 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49  QLITE_API int WI
73d0: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 74 61 62  NAPI sqlite3_tab
73e0: 6c 65 5f 63 75 72 73 6f 72 5f 69 6e 74 65 72 6f  le_cursor_intero
73f0: 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  p(sqlite3_stmt *
7400: 70 73 74 6d 74 2c 20 69 6e 74 20 69 44 62 2c 20  pstmt, int iDb, 
7410: 50 67 6e 6f 20 74 61 62 6c 65 52 6f 6f 74 50 61  Pgno tableRootPa
7420: 67 65 29 0d 0a 7b 0d 0a 20 20 56 64 62 65 20 2a  ge)..{..  Vdbe *
7430: 70 20 3d 20 28 56 64 62 65 20 2a 29 70 73 74 6d  p = (Vdbe *)pstm
7440: 74 3b 0d 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  t;..  sqlite3 *d
7450: 62 20 3d 20 28 70 20 3d 3d 20 4e 55 4c 4c 29 20  b = (p == NULL) 
7460: 3f 20 4e 55 4c 4c 20 3a 20 70 2d 3e 64 62 3b 0d  ? NULL : p->db;.
7470: 0a 20 20 69 6e 74 20 6e 3b 0d 0a 20 20 69 6e 74  .  int n;..  int
7480: 20 72 65 74 20 3d 20 2d 31 3b 20 2f 2a 20 4e 4f   ret = -1; /* NO
7490: 54 20 46 4f 55 4e 44 20 2a 2f 0d 0a 0d 0a 20 20  T FOUND */....  
74a0: 69 66 20 28 21 70 20 7c 7c 20 21 64 62 29 20 72  if (!p || !db) r
74b0: 65 74 75 72 6e 20 72 65 74 3b 0d 0a 20 20 73 71  eturn ret;..  sq
74c0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
74d0: 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20  r(db->mutex);.. 
74e0: 20 66 6f 72 20 28 6e 20 3d 20 30 3b 20 6e 20 3c   for (n = 0; n <
74f0: 20 70 2d 3e 6e 43 75 72 73 6f 72 20 26 26 20 70   p->nCursor && p
7500: 2d 3e 61 70 43 73 72 5b 6e 5d 20 21 3d 20 4e 55  ->apCsr[n] != NU
7510: 4c 4c 3b 20 6e 2b 2b 29 0d 0a 20 20 7b 0d 0a 20  LL; n++)..  {.. 
7520: 20 20 20 69 66 20 28 70 2d 3e 61 70 43 73 72 5b     if (p->apCsr[
7530: 6e 5d 2d 3e 69 73 54 61 62 6c 65 20 3d 3d 20 46  n]->isTable == F
7540: 41 4c 53 45 29 20 63 6f 6e 74 69 6e 75 65 3b 0d  ALSE) continue;.
7550: 0a 20 20 20 20 69 66 20 28 70 2d 3e 61 70 43 73  .    if (p->apCs
7560: 72 5b 6e 5d 2d 3e 69 44 62 20 21 3d 20 69 44 62  r[n]->iDb != iDb
7570: 29 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 23 69 66  ) continue;..#if
7580: 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f   SQLITE_VERSION_
7590: 4e 55 4d 42 45 52 20 3e 3d 20 33 30 31 30 30 30  NUMBER >= 301000
75a0: 30 0d 0a 20 20 20 20 69 66 20 28 70 2d 3e 61 70  0..    if (p->ap
75b0: 43 73 72 5b 6e 5d 2d 3e 75 63 2e 70 43 75 72 73  Csr[n]->uc.pCurs
75c0: 6f 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 3d 20  or->pgnoRoot == 
75d0: 74 61 62 6c 65 52 6f 6f 74 50 61 67 65 29 0d 0a  tableRootPage)..
75e0: 23 65 6c 73 65 0d 0a 20 20 20 20 69 66 20 28 70  #else..    if (p
75f0: 2d 3e 61 70 43 73 72 5b 6e 5d 2d 3e 70 43 75 72  ->apCsr[n]->pCur
7600: 73 6f 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 3d  sor->pgnoRoot ==
7610: 20 74 61 62 6c 65 52 6f 6f 74 50 61 67 65 29 0d   tableRootPage).
7620: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7b 0d 0a  .#endif..    {..
7630: 20 20 20 20 20 20 72 65 74 20 3d 20 6e 3b 0d 0a        ret = n;..
7640: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
7650: 20 20 7d 0d 0a 20 20 7d 0d 0a 20 20 73 71 6c 69    }..  }..  sqli
7660: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
7670: 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20  db->mutex);.... 
7680: 20 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d   return ret;..}.
7690: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e  ...SQLITE_API in
76a0: 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  t WINAPI sqlite3
76b0: 5f 63 75 72 73 6f 72 5f 72 6f 77 69 64 5f 69 6e  _cursor_rowid_in
76c0: 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74  terop(sqlite3_st
76d0: 6d 74 20 2a 70 73 74 6d 74 2c 20 69 6e 74 20 63  mt *pstmt, int c
76e0: 75 72 73 6f 72 2c 20 73 71 6c 69 74 65 5f 69 6e  ursor, sqlite_in
76f0: 74 36 34 20 2a 70 72 6f 77 69 64 29 0d 0a 7b 0d  t64 *prowid)..{.
7700: 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64  .  Vdbe *p = (Vd
7710: 62 65 20 2a 29 70 73 74 6d 74 3b 0d 0a 20 20 73  be *)pstmt;..  s
7720: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 28 70 20  qlite3 *db = (p 
7730: 3d 3d 20 4e 55 4c 4c 29 20 3f 20 4e 55 4c 4c 20  == NULL) ? NULL 
7740: 3a 20 70 2d 3e 64 62 3b 0d 0a 20 20 56 64 62 65  : p->db;..  Vdbe
7750: 43 75 72 73 6f 72 20 2a 70 43 3b 0d 0a 20 20 69  Cursor *pC;..  i
7760: 6e 74 20 72 65 74 20 3d 20 53 51 4c 49 54 45 5f  nt ret = SQLITE_
7770: 4f 4b 3b 0d 0a 0d 0a 20 20 69 66 20 28 21 70 20  OK;....  if (!p 
7780: 7c 7c 20 21 64 62 29 20 72 65 74 75 72 6e 20 53  || !db) return S
7790: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20  QLITE_ERROR;..  
77a0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e  sqlite3_mutex_en
77b0: 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d  ter(db->mutex);.
77c0: 0a 20 20 77 68 69 6c 65 20 28 31 29 0d 0a 20 20  .  while (1)..  
77d0: 7b 0d 0a 20 20 20 20 69 66 20 28 63 75 72 73 6f  {..    if (curso
77e0: 72 20 3c 20 30 20 7c 7c 20 63 75 72 73 6f 72 20  r < 0 || cursor 
77f0: 3e 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 0d 0a  >= p->nCursor)..
7800: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
7810: 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
7820: 0d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a  ..      break;..
7830: 20 20 20 20 7d 0d 0a 20 20 20 20 69 66 20 28 70      }..    if (p
7840: 2d 3e 61 70 43 73 72 5b 63 75 72 73 6f 72 5d 20  ->apCsr[cursor] 
7850: 3d 3d 20 4e 55 4c 4c 29 0d 0a 20 20 20 20 7b 0d  == NULL)..    {.
7860: 0a 20 20 20 20 20 20 72 65 74 20 3d 20 53 51 4c  .      ret = SQL
7870: 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 20 20  ITE_ERROR;..    
7880: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 7d 0d    break;..    }.
7890: 0a 0d 0a 20 20 20 20 70 43 20 3d 20 70 2d 3e 61  ...    pC = p->a
78a0: 70 43 73 72 5b 63 75 72 73 6f 72 5d 3b 0d 0a 0d  pCsr[cursor];...
78b0: 0a 20 20 20 20 72 65 74 20 3d 20 73 71 6c 69 74  .    ret = sqlit
78c0: 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
78d0: 74 6f 28 70 43 29 3b 0d 0a 20 20 20 20 69 66 28  to(pC);..    if(
78e0: 72 65 74 29 0d 0a 20 20 20 20 20 20 62 72 65 61  ret)..      brea
78f0: 6b 3b 0d 0a 0d 0a 23 69 66 20 53 51 4c 49 54 45  k;....#if SQLITE
7900: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20  _VERSION_NUMBER 
7910: 3c 20 33 30 30 38 30 30 37 0d 0a 20 20 20 20 69  < 3008007..    i
7920: 66 28 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c  f(pC->rowidIsVal
7930: 69 64 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  id)..    {..    
7940: 20 20 69 66 20 28 70 72 6f 77 69 64 29 20 2a 70    if (prowid) *p
7950: 72 6f 77 69 64 20 3d 20 70 43 2d 3e 6c 61 73 74  rowid = pC->last
7960: 52 6f 77 69 64 3b 0d 0a 20 20 20 20 7d 0d 0a 20  Rowid;..    }.. 
7970: 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d     else..#endif.
7980: 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53  .#if SQLITE_VERS
7990: 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30  ION_NUMBER >= 30
79a0: 31 30 30 30 30 0d 0a 20 20 20 20 69 66 28 70 43  10000..    if(pC
79b0: 2d 3e 75 63 2e 70 73 65 75 64 6f 54 61 62 6c 65  ->uc.pseudoTable
79c0: 52 65 67 20 3e 20 30 29 0d 0a 23 65 6c 73 65 0d  Reg > 0)..#else.
79d0: 0a 20 20 20 20 69 66 28 70 43 2d 3e 70 73 65 75  .    if(pC->pseu
79e0: 64 6f 54 61 62 6c 65 52 65 67 20 3e 20 30 29 0d  doTableReg > 0).
79f0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7b 0d 0a  .#endif..    {..
7a00: 20 20 20 20 20 20 72 65 74 20 3d 20 53 51 4c 49        ret = SQLI
7a10: 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 20 20 20  TE_ERROR;..     
7a20: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 7d 0d 0a   break;..    }..
7a30: 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49  #if SQLITE_VERSI
7a40: 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 31  ON_NUMBER >= 301
7a50: 30 30 30 30 0d 0a 20 20 20 20 65 6c 73 65 20 69  0000..    else i
7a60: 66 28 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c 7c  f(pC->nullRow ||
7a70: 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3d   pC->uc.pCursor=
7a80: 3d 30 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  =0)..#else..    
7a90: 65 6c 73 65 20 69 66 28 70 43 2d 3e 6e 75 6c 6c  else if(pC->null
7aa0: 52 6f 77 20 7c 7c 20 70 43 2d 3e 70 43 75 72 73  Row || pC->pCurs
7ab0: 6f 72 3d 3d 30 29 0d 0a 23 65 6e 64 69 66 0d 0a  or==0)..#endif..
7ac0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
7ad0: 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
7ae0: 0d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a  ..      break;..
7af0: 20 20 20 20 7d 0d 0a 20 20 20 20 65 6c 73 65 0d      }..    else.
7b00: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 53 51 4c 49  .    {..#if SQLI
7b10: 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45  TE_VERSION_NUMBE
7b20: 52 20 3e 3d 20 33 30 31 30 30 30 30 0d 0a 20 20  R >= 3010000..  
7b30: 20 20 20 20 69 66 20 28 70 43 2d 3e 75 63 2e 70      if (pC->uc.p
7b40: 43 75 72 73 6f 72 20 3d 3d 20 4e 55 4c 4c 29 0d  Cursor == NULL).
7b50: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 69 66  .#else..      if
7b60: 20 28 70 43 2d 3e 70 43 75 72 73 6f 72 20 3d 3d   (pC->pCursor ==
7b70: 20 4e 55 4c 4c 29 0d 0a 23 65 6e 64 69 66 0d 0a   NULL)..#endif..
7b80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7b90: 20 72 65 74 20 3d 20 53 51 4c 49 54 45 5f 45 52   ret = SQLITE_ER
7ba0: 52 4f 52 3b 0d 0a 20 20 20 20 20 20 20 20 62 72  ROR;..        br
7bb0: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 23  eak;..      }..#
7bc0: 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  if SQLITE_VERSIO
7bd0: 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 31 30  N_NUMBER >= 3010
7be0: 30 30 30 0d 0a 20 20 20 20 20 20 73 71 6c 69 74  000..      sqlit
7bf0: 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
7c00: 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70  C->uc.pCursor, p
7c10: 72 6f 77 69 64 29 3b 0d 0a 23 65 6c 73 65 0d 0a  rowid);..#else..
7c20: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
7c30: 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43  eeKeySize(pC->pC
7c40: 75 72 73 6f 72 2c 20 70 72 6f 77 69 64 29 3b 0d  ursor, prowid);.
7c50: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69  .#endif..      i
7c60: 66 20 28 70 72 6f 77 69 64 29 20 2a 70 72 6f 77  f (prowid) *prow
7c70: 69 64 20 3d 20 2a 70 72 6f 77 69 64 3b 0d 0a 20  id = *prowid;.. 
7c80: 20 20 20 7d 0d 0a 20 20 20 20 62 72 65 61 6b 3b     }..    break;
7c90: 0d 0a 20 20 7d 0d 0a 20 20 73 71 6c 69 74 65 33  ..  }..  sqlite3
7ca0: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d  _mutex_leave(db-
7cb0: 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20 20 72 65  >mutex);....  re
7cc0: 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a 23 65  turn ret;..}..#e
7cd0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
7ce0: 53 5f 57 49 4e 20 2a 2f 0d 0a 0d 0a 2f 2a 2a 2a  S_WIN */..../***
7cf0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7d00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7d10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7d20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7d30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0d 0a 0d 0a 23  **********/....#
7d40: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
7d50: 45 5f 43 4f 52 45 29 0d 0a 23 75 6e 64 65 66 20  E_CORE)..#undef 
7d60: 53 51 4c 49 54 45 5f 43 4f 52 45 0d 0a 23 65 6e  SQLITE_CORE..#en
7d70: 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e  dif....#if defin
7d80: 65 64 28 49 4e 54 45 52 4f 50 5f 56 49 52 54 55  ed(INTEROP_VIRTU
7d90: 41 4c 5f 54 41 42 4c 45 29 20 26 26 20 53 51 4c  AL_TABLE) && SQL
7da0: 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  ITE_VERSION_NUMB
7db0: 45 52 20 3e 3d 20 33 30 30 34 30 30 31 0d 0a 23  ER >= 3004001..#
7dc0: 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 65 78 74 2f  include "../ext/
7dd0: 76 74 73 68 69 6d 2e 63 22 0d 0a 23 65 6e 64 69  vtshim.c"..#endi
7de0: 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64  f....#if defined
7df0: 28 49 4e 54 45 52 4f 50 5f 46 54 53 35 5f 45 58  (INTEROP_FTS5_EX
7e00: 54 45 4e 53 49 4f 4e 29 0d 0a 23 69 6e 63 6c 75  TENSION)..#inclu
7e10: 64 65 20 22 2e 2e 2f 65 78 74 2f 66 74 73 35 2e  de "../ext/fts5.
7e20: 63 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69  c"..#endif....#i
7e30: 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f  f defined(INTERO
7e40: 50 5f 4a 53 4f 4e 31 5f 45 58 54 45 4e 53 49 4f  P_JSON1_EXTENSIO
7e50: 4e 29 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e  N)..#include "..
7e60: 2f 65 78 74 2f 6a 73 6f 6e 31 2e 63 22 0d 0a 23  /ext/json1.c"..#
7e70: 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66  endif....#if def
7e80: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 50 45 52  ined(INTEROP_PER
7e90: 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e 53 49 4f  CENTILE_EXTENSIO
7ea0: 4e 29 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e  N)..#include "..
7eb0: 2f 65 78 74 2f 70 65 72 63 65 6e 74 69 6c 65 2e  /ext/percentile.
7ec0: 63 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69  c"..#endif....#i
7ed0: 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f  f defined(INTERO
7ee0: 50 5f 52 45 47 45 58 50 5f 45 58 54 45 4e 53 49  P_REGEXP_EXTENSI
7ef0: 4f 4e 29 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e  ON)..#include ".
7f00: 2e 2f 65 78 74 2f 72 65 67 65 78 70 2e 63 22 0d  ./ext/regexp.c".
7f10: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64  .#endif....#if d
7f20: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 54  efined(INTEROP_T
7f30: 4f 54 59 50 45 5f 45 58 54 45 4e 53 49 4f 4e 29  OTYPE_EXTENSION)
7f40: 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 65  ..#include "../e
7f50: 78 74 2f 74 6f 74 79 70 65 2e 63 22 0d 0a 23 65  xt/totype.c"..#e
7f60: 6e 64 69 66 0d 0a 0d 0a 2f 2a 2a 2a 2a 2a 2a 2a  ndif..../*******
7f70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7f80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7f90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7fa0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7fb0: 2a 2a 2a 2a 2a 2a 2f 0d 0a 0d 0a 2f 2a 0d 0a 2a  ******/..../*..*
7fc0: 2a 20 54 68 65 20 49 4e 54 45 52 4f 50 5f 54 45  * The INTEROP_TE
7fd0: 53 54 5f 45 58 54 45 4e 53 49 4f 4e 20 62 6c 6f  ST_EXTENSION blo
7fe0: 63 6b 20 6d 75 73 74 20 62 65 20 61 74 20 74 68  ck must be at th
7ff0: 65 20 65 6e 64 20 6f 66 20 74 68 69 73 20 73 6f  e end of this so
8000: 75 72 63 65 20 66 69 6c 65 0d 0a 2a 2a 20 62 65  urce file..** be
8010: 63 61 75 73 65 20 69 74 20 69 6e 63 6c 75 64 65  cause it include
8020: 73 20 74 68 65 20 22 73 71 6c 69 74 65 33 65 78  s the "sqlite3ex
8030: 74 2e 68 22 20 66 69 6c 65 2c 20 77 68 69 63 68  t.h" file, which
8040: 20 64 65 66 69 6e 65 73 20 74 68 65 20 73 71 6c   defines the sql
8050: 69 74 65 33 0d 0a 2a 2a 20 70 75 62 6c 69 63 20  ite3..** public 
8060: 41 50 49 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d  API function nam
8070: 65 73 20 74 6f 20 62 65 20 6d 61 63 72 6f 73 20  es to be macros 
8080: 61 6e 64 20 74 68 61 74 20 77 6f 75 6c 64 20 63  and that would c
8090: 61 75 73 65 20 74 68 65 20 63 6f 64 65 0d 0a 2a  ause the code..*
80a0: 2a 20 61 62 6f 76 65 20 74 68 69 73 20 70 6f 69  * above this poi
80b0: 6e 74 20 74 6f 20 6d 61 6c 66 75 6e 63 74 69 6f  nt to malfunctio
80c0: 6e 2e 0d 0a 2a 2f 0d 0a 23 69 66 20 64 65 66 69  n...*/..#if defi
80d0: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 54 45 53 54  ned(INTEROP_TEST
80e0: 5f 45 58 54 45 4e 53 49 4f 4e 29 0d 0a 23 69 6e  _EXTENSION)..#in
80f0: 63 6c 75 64 65 20 22 2e 2e 2f 63 6f 72 65 2f 73  clude "../core/s
8100: 71 6c 69 74 65 33 65 78 74 2e 68 22 0d 0a 53 51  qlite3ext.h"..SQ
8110: 4c 49 54 45 5f 45 58 54 45 4e 53 49 4f 4e 5f 49  LITE_EXTENSION_I
8120: 4e 49 54 31 0d 0a 0d 0a 2f 2a 0d 0a 2a 2a 20 54  NIT1..../*..** T
8130: 68 65 20 69 6e 74 65 72 6f 70 54 65 73 74 28 29  he interopTest()
8140: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 72 65   SQL function re
8150: 74 75 72 6e 73 20 69 74 73 20 66 69 72 73 74 20  turns its first 
8160: 61 72 67 75 6d 65 6e 74 20 6f 72 20 72 61 69 73  argument or rais
8170: 65 73 20 61 6e 0d 0a 2a 2a 20 65 72 72 6f 72 20  es an..** error 
8180: 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 74  if there are not
8190: 20 65 6e 6f 75 67 68 20 61 72 67 75 6d 65 6e 74   enough argument
81a0: 73 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49 54 45 5f 50  s...*/..SQLITE_P
81b0: 52 49 56 41 54 45 20 76 6f 69 64 20 69 6e 74 65  RIVATE void inte
81c0: 72 6f 70 54 65 73 74 46 75 6e 63 28 0d 0a 20 20  ropTestFunc(..  
81d0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
81e0: 2a 63 6f 6e 74 65 78 74 2c 0d 0a 20 20 69 6e 74  *context,..  int
81f0: 20 61 72 67 63 2c 0d 0a 20 20 73 71 6c 69 74 65   argc,..  sqlite
8200: 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0d 0a  3_value **argv..
8210: 29 7b 0d 0a 20 20 63 6f 6e 73 74 20 75 6e 73 69  ){..  const unsi
8220: 67 6e 65 64 20 63 68 61 72 20 2a 7a 3b 0d 0a 20  gned char *z;.. 
8230: 20 69 66 28 20 61 72 67 63 21 3d 31 20 29 7b 0d   if( argc!=1 ){.
8240: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73  .    sqlite3_res
8250: 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78  ult_error(contex
8260: 74 2c 20 22 6e 65 65 64 20 65 78 61 63 74 6c 79  t, "need exactly
8270: 20 6f 6e 65 20 61 72 67 75 6d 65 6e 74 22 2c 20   one argument", 
8280: 2d 31 29 3b 0d 0a 20 20 20 20 72 65 74 75 72 6e  -1);..    return
8290: 3b 0d 0a 20 20 7d 0d 0a 20 20 7a 20 3d 20 73 71  ;..  }..  z = sq
82a0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
82b0: 28 61 72 67 76 5b 30 5d 29 3b 0d 0a 20 20 69 66  (argv[0]);..  if
82c0: 28 20 7a 20 29 7b 0d 0a 20 20 20 20 73 71 6c 69  ( z ){..    sqli
82d0: 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
82e0: 63 6f 6e 74 65 78 74 2c 20 28 63 68 61 72 2a 29  context, (char*)
82f0: 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53 54  z, -1, SQLITE_ST
8300: 41 54 49 43 29 3b 0d 0a 20 20 7d 65 6c 73 65 7b  ATIC);..  }else{
8310: 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65  ..    sqlite3_re
8320: 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78  sult_null(contex
8330: 74 29 3b 0d 0a 20 20 7d 0d 0a 7d 0d 0a 0d 0a 2f  t);..  }..}..../
8340: 2a 0d 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 6f  *..** The intero
8350: 70 53 6c 65 65 70 28 29 20 53 51 4c 20 66 75 6e  pSleep() SQL fun
8360: 63 74 69 6f 6e 20 77 61 69 74 73 20 74 68 65 20  ction waits the 
8370: 73 70 65 63 69 66 69 65 64 20 6e 75 6d 62 65 72  specified number
8380: 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73   of milliseconds
8390: 0d 0a 2a 2a 20 6f 72 20 72 61 69 73 65 73 20 61  ..** or raises a
83a0: 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65 72 65  n error if there
83b0: 20 61 72 65 20 6e 6f 74 20 65 6e 6f 75 67 68 20   are not enough 
83c0: 61 72 67 75 6d 65 6e 74 73 2e 0d 0a 2a 2f 0d 0a  arguments...*/..
83d0: 53 51 4c 49 54 45 5f 50 52 49 56 41 54 45 20 76  SQLITE_PRIVATE v
83e0: 6f 69 64 20 69 6e 74 65 72 6f 70 53 6c 65 65 70  oid interopSleep
83f0: 46 75 6e 63 28 0d 0a 20 20 73 71 6c 69 74 65 33  Func(..  sqlite3
8400: 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78  _context *contex
8410: 74 2c 0d 0a 20 20 69 6e 74 20 61 72 67 63 2c 0d  t,..  int argc,.
8420: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
8430: 20 2a 2a 61 72 67 76 0d 0a 29 7b 0d 0a 20 20 69   **argv..){..  i
8440: 6e 74 20 6d 3b 0d 0a 20 20 69 66 28 20 61 72 67  nt m;..  if( arg
8450: 63 21 3d 31 20 29 7b 0d 0a 20 20 20 20 73 71 6c  c!=1 ){..    sql
8460: 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f  ite3_result_erro
8470: 72 28 63 6f 6e 74 65 78 74 2c 20 22 6e 65 65 64  r(context, "need
8480: 20 65 78 61 63 74 6c 79 20 6f 6e 65 20 61 72 67   exactly one arg
8490: 75 6d 65 6e 74 22 2c 20 2d 31 29 3b 0d 0a 20 20  ument", -1);..  
84a0: 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 7d 0d 0a    return;..  }..
84b0: 20 20 6d 20 3d 20 73 71 6c 69 74 65 33 5f 76 61    m = sqlite3_va
84c0: 6c 75 65 5f 69 6e 74 28 61 72 67 76 5b 30 5d 29  lue_int(argv[0])
84d0: 3b 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f 53  ;..#if SQLITE_OS
84e0: 5f 57 49 4e 43 45 0d 0a 20 20 53 6c 65 65 70 28  _WINCE..  Sleep(
84f0: 6d 29 3b 0d 0a 20 20 73 71 6c 69 74 65 33 5f 72  m);..  sqlite3_r
8500: 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78  esult_int(contex
8510: 74 2c 20 57 41 49 54 5f 4f 42 4a 45 43 54 5f 30  t, WAIT_OBJECT_0
8520: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 73 71 6c  );..#else..  sql
8530: 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28  ite3_result_int(
8540: 63 6f 6e 74 65 78 74 2c 20 53 6c 65 65 70 45 78  context, SleepEx
8550: 28 6d 2c 20 54 52 55 45 29 29 3b 0d 0a 23 65 6e  (m, TRUE));..#en
8560: 64 69 66 0d 0a 7d 0d 0a 0d 0a 2f 2a 20 53 51 4c  dif..}..../* SQL
8570: 69 74 65 20 69 6e 76 6f 6b 65 73 20 74 68 69 73  ite invokes this
8580: 20 72 6f 75 74 69 6e 65 20 6f 6e 63 65 20 77 68   routine once wh
8590: 65 6e 20 69 74 20 6c 6f 61 64 73 20 74 68 65 20  en it loads the 
85a0: 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 2a 2a 20 43  extension...** C
85b0: 72 65 61 74 65 20 6e 65 77 20 66 75 6e 63 74 69  reate new functi
85c0: 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ons, collating s
85d0: 65 71 75 65 6e 63 65 73 2c 20 61 6e 64 20 76 69  equences, and vi
85e0: 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 2a 2a 20  rtual table..** 
85f0: 6d 6f 64 75 6c 65 73 20 68 65 72 65 2e 20 20 54  modules here.  T
8600: 68 69 73 20 69 73 20 75 73 75 61 6c 6c 79 20 74  his is usually t
8610: 68 65 20 6f 6e 6c 79 20 65 78 70 6f 72 74 65 64  he only exported
8620: 20 73 79 6d 62 6f 6c 20 69 6e 0d 0a 2a 2a 20 74   symbol in..** t
8630: 68 65 20 73 68 61 72 65 64 20 6c 69 62 72 61 72  he shared librar
8640: 79 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49 54 45 5f 41  y...*/..SQLITE_A
8650: 50 49 20 69 6e 74 20 69 6e 74 65 72 6f 70 5f 74  PI int interop_t
8660: 65 73 74 5f 65 78 74 65 6e 73 69 6f 6e 5f 69 6e  est_extension_in
8670: 69 74 28 0d 0a 20 20 73 71 6c 69 74 65 33 20 2a  it(..  sqlite3 *
8680: 64 62 2c 0d 0a 20 20 63 68 61 72 20 2a 2a 70 7a  db,..  char **pz
8690: 45 72 72 4d 73 67 2c 0d 0a 20 20 63 6f 6e 73 74  ErrMsg,..  const
86a0: 20 73 71 6c 69 74 65 33 5f 61 70 69 5f 72 6f 75   sqlite3_api_rou
86b0: 74 69 6e 65 73 20 2a 70 41 70 69 0d 0a 29 7b 0d  tines *pApi..){.
86c0: 0a 20 20 69 6e 74 20 72 63 3b 0d 0a 20 20 53 51  .  int rc;..  SQ
86d0: 4c 49 54 45 5f 45 58 54 45 4e 53 49 4f 4e 5f 49  LITE_EXTENSION_I
86e0: 4e 49 54 32 28 70 41 70 69 29 0d 0a 20 20 72 63  NIT2(pApi)..  rc
86f0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
8700: 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22  e_function(db, "
8710: 69 6e 74 65 72 6f 70 54 65 73 74 22 2c 20 2d 31  interopTest", -1
8720: 2c 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20 30 2c  , SQLITE_ANY, 0,
8730: 0d 0a 20 20 20 20 20 20 69 6e 74 65 72 6f 70 54  ..      interopT
8740: 65 73 74 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0d  estFunc, 0, 0);.
8750: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
8760: 45 5f 4f 4b 20 29 7b 0d 0a 20 20 20 20 72 63 20  E_OK ){..    rc 
8770: 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  = sqlite3_create
8780: 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 69  _function(db, "i
8790: 6e 74 65 72 6f 70 53 6c 65 65 70 22 2c 20 31 2c  nteropSleep", 1,
87a0: 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20 30 2c 0d   SQLITE_ANY, 0,.
87b0: 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6f 70  .        interop
87c0: 53 6c 65 65 70 46 75 6e 63 2c 20 30 2c 20 30 29  SleepFunc, 0, 0)
87d0: 3b 0d 0a 20 20 7d 0d 0a 20 20 72 65 74 75 72 6e  ;..  }..  return
87e0: 20 72 63 3b 0d 0a 7d 0d 0a 23 65 6e 64 69 66 20   rc;..}..#endif 
87f0: 2f 2a 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  /* defined(SQLIT
8800: 45 5f 4f 53 5f 57 49 4e 29 20 2a 2f 0d 0a        E_OS_WIN) */..