System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 892b1e401c4bcc12f6c3fb193e02868b43666834:


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 23 69 66 20 53 51 4c 49  #endif..#if SQLI
1570: 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45  TE_VERSION_NUMBE
1580: 52 20 3e 3d 20 33 30 31 31 30 30 30 0d 0a 20 20  R >= 3011000..  
1590: 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28  sqlite3VXPrintf(
15a0: 26 61 63 63 2c 20 7a 46 6f 72 6d 61 74 2c 20 61  &acc, zFormat, a
15b0: 70 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 73 71  p);..#else..  sq
15c0: 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28 26 61  lite3VXPrintf(&a
15d0: 63 63 2c 20 30 2c 20 7a 46 6f 72 6d 61 74 2c 20  cc, 0, zFormat, 
15e0: 61 70 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ap);..#endif..  
15f0: 76 61 5f 65 6e 64 28 61 70 29 3b 0d 0a 23 69 66  va_end(ap);..#if
1600: 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f   SQLITE_VERSION_
1610: 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 37 30 31  NUMBER >= 300701
1620: 33 0d 0a 20 20 73 71 6c 69 74 65 33 5f 77 69 6e  3..  sqlite3_win
1630: 33 32 5f 77 72 69 74 65 5f 64 65 62 75 67 28 73  32_write_debug(s
1640: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69  qlite3StrAccumFi
1650: 6e 69 73 68 28 26 61 63 63 29 2c 20 2d 31 29 3b  nish(&acc), -1);
1660: 0d 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28  ..#elif defined(
1670: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 48 41 53  SQLITE_WIN32_HAS
1680: 5f 41 4e 53 49 29 0d 0a 20 20 4f 75 74 70 75 74  _ANSI)..  Output
1690: 44 65 62 75 67 53 74 72 69 6e 67 41 28 73 71 6c  DebugStringA(sql
16a0: 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69  ite3StrAccumFini
16b0: 73 68 28 26 61 63 63 29 29 3b 0d 0a 23 65 6c 69  sh(&acc));..#eli
16c0: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
16d0: 5f 57 49 4e 33 32 5f 48 41 53 5f 57 49 44 45 29  _WIN32_HAS_WIDE)
16e0: 0d 0a 20 20 7b 0d 0a 20 20 20 20 4c 50 57 53 54  ..  {..    LPWST
16f0: 52 20 7a 57 69 64 65 4d 73 67 20 3d 20 75 74 66  R zWideMsg = utf
1700: 38 54 6f 55 6e 69 63 6f 64 65 28 73 71 6c 69 74  8ToUnicode(sqlit
1710: 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68  e3StrAccumFinish
1720: 28 26 61 63 63 29 29 3b 0d 0a 20 20 20 20 69 66  (&acc));..    if
1730: 28 20 7a 57 69 64 65 4d 73 67 20 29 7b 0d 0a 20  ( zWideMsg ){.. 
1740: 20 20 20 20 20 4f 75 74 70 75 74 44 65 62 75 67       OutputDebug
1750: 53 74 72 69 6e 67 57 28 7a 57 69 64 65 4d 73 67  StringW(zWideMsg
1760: 29 3b 0d 0a 20 20 20 20 20 20 73 71 6c 69 74 65  );..      sqlite
1770: 33 5f 66 72 65 65 28 7a 57 69 64 65 4d 73 67 29  3_free(zWideMsg)
1780: 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 23  ;..    }..  }..#
1790: 65 6c 73 65 0d 0a 20 20 66 70 72 69 6e 74 66 28  else..  fprintf(
17a0: 73 74 64 65 72 72 2c 20 22 25 73 22 2c 20 73 71  stderr, "%s", sq
17b0: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e  lite3StrAccumFin
17c0: 69 73 68 28 26 61 63 63 29 29 3b 0d 0a 23 65 6e  ish(&acc));..#en
17d0: 64 69 66 0d 0a 7d 0d 0a 23 65 6e 64 69 66 0d 0a  dif..}..#endif..
17e0: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
17f0: 54 45 52 4f 50 5f 4c 4f 47 29 0d 0a 53 51 4c 49  TEROP_LOG)..SQLI
1800: 54 45 5f 50 52 49 56 41 54 45 20 69 6e 74 20 6c  TE_PRIVATE int l
1810: 6f 67 43 6f 6e 66 69 67 75 72 65 64 20 3d 20 30  ogConfigured = 0
1820: 3b 0d 0a 0d 0a 53 51 4c 49 54 45 5f 50 52 49 56  ;....SQLITE_PRIV
1830: 41 54 45 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ATE void sqlite3
1840: 49 6e 74 65 72 6f 70 4c 6f 67 43 61 6c 6c 62 61  InteropLogCallba
1850: 63 6b 28 76 6f 69 64 20 2a 70 41 72 67 2c 20 69  ck(void *pArg, i
1860: 6e 74 20 69 43 6f 64 65 2c 20 63 6f 6e 73 74 20  nt iCode, const 
1870: 63 68 61 72 20 2a 7a 4d 73 67 29 7b 0d 0a 20 20  char *zMsg){..  
1880: 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65  sqlite3InteropDe
1890: 62 75 67 28 22 49 4e 54 45 52 4f 50 5f 4c 4f 47  bug("INTEROP_LOG
18a0: 20 28 25 64 29 20 25 73 5c 6e 22 2c 20 69 43 6f   (%d) %s\n", iCo
18b0: 64 65 2c 20 7a 4d 73 67 29 3b 0d 0a 7d 0d 0a 23  de, zMsg);..}..#
18c0: 65 6e 64 69 66 0d 0a 0d 0a 53 51 4c 49 54 45 5f  endif....SQLITE_
18d0: 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73  API int WINAPI s
18e0: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 73 69  qlite3_malloc_si
18f0: 7a 65 5f 69 6e 74 65 72 6f 70 28 76 6f 69 64 20  ze_interop(void 
1900: 2a 70 29 7b 0d 0a 20 20 72 65 74 75 72 6e 20 73  *p){..  return s
1910: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
1920: 28 70 29 3b 0d 0a 7d 0d 0a 0d 0a 23 69 66 20 64  (p);..}....#if d
1930: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 4c  efined(INTEROP_L
1940: 45 47 41 43 59 5f 43 4c 4f 53 45 29 20 7c 7c 20  EGACY_CLOSE) || 
1950: 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e  SQLITE_VERSION_N
1960: 55 4d 42 45 52 20 3c 20 33 30 30 37 30 31 34 0d  UMBER < 3007014.
1970: 0a 53 51 4c 49 54 45 5f 50 52 49 56 41 54 45 20  .SQLITE_PRIVATE 
1980: 76 6f 69 64 20 2a 20 73 71 6c 69 74 65 33 44 62  void * sqlite3Db
1990: 4d 61 6c 6c 6f 63 5a 65 72 6f 5f 69 6e 74 65 72  MallocZero_inter
19a0: 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  op(sqlite3 *db, 
19b0: 69 6e 74 20 6e 29 0d 0a 7b 0d 0a 20 20 76 6f 69  int n)..{..  voi
19c0: 64 20 2a 70 3b 0d 0a 20 20 69 66 20 28 64 62 29  d *p;..  if (db)
19d0: 20 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   {..    sqlite3_
19e0: 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e  mutex_enter(db->
19f0: 6d 75 74 65 78 29 3b 0d 0a 20 20 7d 0d 0a 20 20  mutex);..  }..  
1a00: 70 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  p = sqlite3DbMal
1a10: 6c 6f 63 5a 65 72 6f 28 64 62 2c 6e 29 3b 0d 0a  locZero(db,n);..
1a20: 20 20 69 66 20 28 64 62 29 20 7b 0d 0a 20 20 20    if (db) {..   
1a30: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c   sqlite3_mutex_l
1a40: 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b  eave(db->mutex);
1a50: 0d 0a 20 20 7d 0d 0a 20 20 72 65 74 75 72 6e 20  ..  }..  return 
1a60: 70 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f  p;..}....SQLITE_
1a70: 50 52 49 56 41 54 45 20 76 6f 69 64 20 73 71 6c  PRIVATE void sql
1a80: 69 74 65 33 44 62 46 72 65 65 5f 69 6e 74 65 72  ite3DbFree_inter
1a90: 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  op(sqlite3 *db, 
1aa0: 76 6f 69 64 20 2a 70 29 0d 0a 7b 0d 0a 20 20 69  void *p)..{..  i
1ab0: 66 20 28 64 62 29 20 7b 0d 0a 20 20 20 20 73 71  f (db) {..    sq
1ac0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
1ad0: 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20  r(db->mutex);.. 
1ae0: 20 7d 0d 0a 20 20 69 66 20 28 70 29 20 7b 0d 0a   }..  if (p) {..
1af0: 20 20 20 20 73 71 6c 69 74 65 33 4d 65 6d 64 65      sqlite3Memde
1b00: 62 75 67 53 65 74 54 79 70 65 28 70 2c 20 4d 45  bugSetType(p, ME
1b10: 4d 54 59 50 45 5f 44 42 7c 4d 45 4d 54 59 50 45  MTYPE_DB|MEMTYPE
1b20: 5f 48 45 41 50 29 3b 0d 0a 20 20 7d 0d 0a 20 20  _HEAP);..  }..  
1b30: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
1b40: 2c 70 29 3b 0d 0a 20 20 69 66 20 28 64 62 29 20  ,p);..  if (db) 
1b50: 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d  {..    sqlite3_m
1b60: 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d  utex_leave(db->m
1b70: 75 74 65 78 29 3b 0d 0a 20 20 7d 0d 0a 7d 0d 0a  utex);..  }..}..
1b80: 23 65 6e 64 69 66 0d 0a 0d 0a 2f 2a 0d 0a 20 20  #endif..../*..  
1b90: 20 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68    The goal of th
1ba0: 69 73 20 76 65 72 73 69 6f 6e 20 6f 66 20 63 6c  is version of cl
1bb0: 6f 73 65 20 69 73 20 64 69 66 66 65 72 65 6e 74  ose is different
1bc0: 20 74 68 61 6e 20 74 68 61 74 20 6f 66 20 73 71   than that of sq
1bd0: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2c 20 61  lite3_close(), a
1be0: 6e 64 20 69 73 20 64 65 73 69 67 6e 65 64 20 74  nd is designed t
1bf0: 6f 20 6c 65 6e 64 20 69 74 73 65 6c 66 20 62 65  o lend itself be
1c00: 74 74 65 72 20 74 6f 20 2e 4e 45 54 27 73 20 6e  tter to .NET's n
1c10: 6f 6e 2d 64 65 74 65 72 6d 69 6e 69 73 74 69 63  on-deterministic
1c20: 20 66 69 6e 61 6c 69 7a 65 72 73 20 61 6e 64 0d   finalizers and.
1c30: 0a 20 20 20 20 74 68 65 20 47 43 20 74 68 72 65  .    the GC thre
1c40: 61 64 2e 20 20 53 51 4c 69 74 65 20 77 69 6c 6c  ad.  SQLite will
1c50: 20 6e 6f 74 20 63 6c 6f 73 65 20 61 20 64 61 74   not close a dat
1c60: 61 62 61 73 65 20 69 66 20 73 74 61 74 65 6d 65  abase if stateme
1c70: 6e 74 73 20 61 72 65 20 6f 70 65 6e 20 6f 6e 20  nts are open on 
1c80: 69 74 20 2d 2d 20 62 75 74 20 66 6f 72 20 6f 75  it -- but for ou
1c90: 72 20 70 75 72 70 6f 73 65 73 2c 20 77 65 27 64  r purposes, we'd
1ca0: 20 72 61 74 68 65 72 20 66 69 6e 61 6c 69 7a 65   rather finalize
1cb0: 20 61 6c 6c 20 61 63 74 69 76 65 20 73 74 61 74   all active stat
1cc0: 65 6d 65 6e 74 73 0d 0a 20 20 20 20 61 6e 64 20  ements..    and 
1cd0: 66 6f 72 63 69 62 6c 79 20 63 6c 6f 73 65 20 74  forcibly close t
1ce0: 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  he database.  Th
1cf0: 65 20 72 65 61 73 6f 6e 20 69 73 20 73 69 6d 70  e reason is simp
1d00: 6c 65 20 2d 2d 20 61 20 6c 6f 74 20 6f 66 20 70  le -- a lot of p
1d10: 65 6f 70 6c 65 20 64 6f 6e 27 74 20 44 69 73 70  eople don't Disp
1d20: 6f 73 65 28 29 20 6f 66 20 74 68 65 69 72 20 6f  ose() of their o
1d30: 62 6a 65 63 74 73 20 63 6f 72 72 65 63 74 6c 79  bjects correctly
1d40: 20 61 6e 64 20 6c 65 74 20 74 68 65 20 67 61 72   and let the gar
1d50: 62 61 67 65 20 63 6f 6c 6c 65 63 74 6f 72 0d 0a  bage collector..
1d60: 20 20 20 20 64 6f 20 69 74 2e 20 20 54 68 69 73      do it.  This
1d70: 20 6c 65 61 64 73 20 74 6f 20 75 6e 65 78 70 65   leads to unexpe
1d80: 63 74 65 64 20 62 65 68 61 76 69 6f 72 20 77 68  cted behavior wh
1d90: 65 6e 20 61 20 75 73 65 72 20 74 68 69 6e 6b 73  en a user thinks
1da0: 20 74 68 65 79 27 76 65 20 63 6c 6f 73 65 64 20   they've closed 
1db0: 61 20 64 61 74 61 62 61 73 65 2c 20 62 75 74 20  a database, but 
1dc0: 69 74 27 73 20 73 74 69 6c 6c 20 6f 70 65 6e 20  it's still open 
1dd0: 62 65 63 61 75 73 65 20 6e 6f 74 20 61 6c 6c 20  because not all 
1de0: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 73 20 68  the statements h
1df0: 61 76 65 0d 0a 20 20 20 20 68 69 74 20 74 68 65  ave..    hit the
1e00: 20 47 43 20 79 65 74 2e 0d 0a 0d 0a 20 20 20 20   GC yet.....    
1e10: 53 6f 2c 20 68 65 72 65 20 77 65 20 68 61 76 65  So, here we have
1e20: 20 61 20 70 72 6f 62 6c 65 6d 20 2e 2e 2e 20 2e   a problem ... .
1e30: 4e 45 54 20 68 61 73 20 61 20 70 6f 69 6e 74 65  NET has a pointe
1e40: 72 20 74 6f 20 61 6e 79 20 6e 75 6d 62 65 72 20  r to any number 
1e50: 6f 66 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  of sqlite3_stmt 
1e60: 6f 62 6a 65 63 74 73 2e 20 20 57 65 20 63 61 6e  objects.  We can
1e70: 27 74 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f  't call sqlite3_
1e80: 66 69 6e 61 6c 69 7a 65 28 29 20 6f 6e 20 74 68  finalize() on th
1e90: 65 73 65 20 62 65 63 61 75 73 65 0d 0a 20 20 20  ese because..   
1ea0: 20 74 68 65 69 72 20 6d 65 6d 6f 72 79 20 69 73   their memory is
1eb0: 20 66 72 65 65 64 20 61 6e 64 20 63 61 6e 20 62   freed and can b
1ec0: 65 20 75 73 65 64 20 66 6f 72 20 73 6f 6d 65 74  e used for somet
1ed0: 68 69 6e 67 20 65 6c 73 65 2e 20 20 54 68 65 20  hing else.  The 
1ee0: 47 43 20 74 68 72 65 61 64 20 63 6f 75 6c 64 20  GC thread could 
1ef0: 70 6f 74 65 6e 74 69 61 6c 6c 79 20 74 72 79 20  potentially try 
1f00: 61 6e 64 20 63 61 6c 6c 20 66 69 6e 61 6c 69 7a  and call finaliz
1f10: 65 20 61 67 61 69 6e 20 6f 6e 20 74 68 65 20 73  e again on the s
1f20: 74 61 74 65 6d 65 6e 74 20 61 66 74 65 72 0d 0a  tatement after..
1f30: 20 20 20 20 74 68 61 74 20 6d 65 6d 6f 72 79 20      that memory 
1f40: 77 61 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2e  was deallocated.
1f50: 20 20 42 41 44 2e 20 20 53 6f 2c 20 77 68 61 74    BAD.  So, what
1f60: 20 77 65 20 6e 65 65 64 20 74 6f 20 64 6f 20 69   we need to do i
1f70: 73 20 6d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66  s make a copy of
1f80: 20 65 61 63 68 20 73 74 61 74 65 6d 65 6e 74 2c   each statement,
1f90: 20 61 6e 64 20 63 61 6c 6c 20 66 69 6e 61 6c 69   and call finali
1fa0: 7a 65 28 29 20 6f 6e 20 74 68 65 20 63 6f 70 79  ze() on the copy
1fb0: 20 2d 2d 20 73 6f 20 74 68 61 74 20 74 68 65 20   -- so that the 
1fc0: 6f 72 69 67 69 6e 61 6c 0d 0a 20 20 20 20 73 74  original..    st
1fd0: 61 74 65 6d 65 6e 74 27 73 20 6d 65 6d 6f 72 79  atement's memory
1fe0: 20 69 73 20 70 72 65 73 65 72 76 65 64 2c 20 61   is preserved, a
1ff0: 6e 64 20 6d 61 72 6b 65 64 20 61 73 20 42 41 44  nd marked as BAD
2000: 2c 20 62 75 74 20 77 65 20 63 61 6e 20 73 74 69  , but we can sti
2010: 6c 6c 20 6d 61 6e 61 67 65 20 74 6f 20 66 69 6e  ll manage to fin
2020: 61 6c 69 7a 65 20 65 76 65 72 79 74 68 69 6e 67  alize everything
2030: 20 61 6e 64 20 66 6f 72 63 69 62 6c 79 20 63 6c   and forcibly cl
2040: 6f 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ose the database
2050: 2e 20 20 4c 61 74 65 72 20 77 68 65 6e 20 74 68  .  Later when th
2060: 65 0d 0a 20 20 20 20 47 43 20 67 65 74 73 20 61  e..    GC gets a
2070: 72 6f 75 6e 64 20 74 6f 20 63 61 6c 6c 69 6e 67  round to calling
2080: 20 66 69 6e 61 6c 69 7a 65 5f 69 6e 74 65 72 6f   finalize_intero
2090: 70 28 29 20 6f 6e 20 74 68 65 20 22 62 61 64 22  p() on the "bad"
20a0: 20 73 74 61 74 65 6d 65 6e 74 2c 20 77 65 20 64   statement, we d
20b0: 65 74 65 63 74 20 74 68 61 74 20 61 6e 64 20 66  etect that and f
20c0: 69 6e 69 73 68 20 64 65 61 6c 6c 6f 63 61 74 69  inish deallocati
20d0: 6e 67 20 74 68 65 20 70 6f 69 6e 74 65 72 2e 0d  ng the pointer..
20e0: 0a 2a 2f 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20  .*/..SQLITE_API 
20f0: 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74  int WINAPI sqlit
2100: 65 33 5f 63 6c 6f 73 65 5f 69 6e 74 65 72 6f 70  e3_close_interop
2110: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 0d 0a 7b  (sqlite3 *db)..{
2120: 0d 0a 20 20 69 6e 74 20 72 65 74 3b 0d 0a 23 69  ..  int ret;..#i
2130: 66 20 21 64 65 66 69 6e 65 64 28 49 4e 54 45 52  f !defined(INTER
2140: 4f 50 5f 4c 45 47 41 43 59 5f 43 4c 4f 53 45 29  OP_LEGACY_CLOSE)
2150: 20 26 26 20 53 51 4c 49 54 45 5f 56 45 52 53 49   && SQLITE_VERSI
2160: 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30  ON_NUMBER >= 300
2170: 37 30 31 34 0d 0a 0d 0a 23 69 66 20 64 65 66 69  7014....#if defi
2180: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  ned(INTEROP_DEBU
2190: 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44  G) && (INTEROP_D
21a0: 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44  EBUG & INTEROP_D
21b0: 45 42 55 47 5f 43 4c 4f 53 45 29 0d 0a 20 20 73  EBUG_CLOSE)..  s
21c0: 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62  qlite3InteropDeb
21d0: 75 67 28 22 73 71 6c 69 74 65 33 5f 63 6c 6f 73  ug("sqlite3_clos
21e0: 65 5f 69 6e 74 65 72 6f 70 28 29 3a 20 63 61 6c  e_interop(): cal
21f0: 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f 63 6c 6f  ling sqlite3_clo
2200: 73 65 5f 76 32 28 25 70 29 2e 2e 2e 5c 6e 22 2c  se_v2(%p)...\n",
2210: 20 64 62 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d   db);..#endif...
2220: 0a 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33  .  ret = sqlite3
2230: 5f 63 6c 6f 73 65 5f 76 32 28 64 62 29 3b 0d 0a  _close_v2(db);..
2240: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
2250: 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20  TEROP_DEBUG) && 
2260: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26  (INTEROP_DEBUG &
2270: 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 43   INTEROP_DEBUG_C
2280: 4c 4f 53 45 29 0d 0a 20 20 73 71 6c 69 74 65 33  LOSE)..  sqlite3
2290: 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71  InteropDebug("sq
22a0: 6c 69 74 65 33 5f 63 6c 6f 73 65 5f 69 6e 74 65  lite3_close_inte
22b0: 72 6f 70 28 29 3a 20 73 71 6c 69 74 65 33 5f 63  rop(): sqlite3_c
22c0: 6c 6f 73 65 5f 76 32 28 25 70 29 20 72 65 74 75  lose_v2(%p) retu
22d0: 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 64 62 2c  rned %d.\n", db,
22e0: 20 72 65 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a   ret);..#endif..
22f0: 0d 0a 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0d  ..  return ret;.
2300: 0a 23 65 6c 73 65 0d 0a 20 20 72 65 74 20 3d 20  .#else..  ret = 
2310: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64 62  sqlite3_close(db
2320: 29 3b 0d 0a 0d 0a 20 20 69 66 20 28 72 65 74 20  );....  if (ret 
2330: 3d 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 29 0d  == SQLITE_BUSY).
2340: 0a 20 20 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65  .  {..    sqlite
2350: 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62  3_mutex_enter(db
2360: 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20 20 20  ->mutex);....   
2370: 20 69 66 20 28 21 64 62 2d 3e 70 56 64 62 65 29   if (!db->pVdbe)
2380: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 73  ..    {..      s
2390: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
23a0: 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a  ve(db->mutex);..
23b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 74        return ret
23c0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
23d0: 77 68 69 6c 65 20 28 64 62 2d 3e 70 56 64 62 65  while (db->pVdbe
23e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
23f0: 2f 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f  /* Make a copy o
2400: 66 20 74 68 65 20 66 69 72 73 74 20 70 72 65 70  f the first prep
2410: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 2a  ared statement *
2420: 2f 0d 0a 20 20 20 20 20 20 56 64 62 65 20 2a 70  /..      Vdbe *p
2430: 20 3d 20 28 56 64 62 65 20 2a 29 73 71 6c 69 74   = (Vdbe *)sqlit
2440: 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 5f 69  e3DbMallocZero_i
2450: 6e 74 65 72 6f 70 28 64 62 2c 20 73 69 7a 65 6f  nterop(db, sizeo
2460: 66 28 56 64 62 65 29 29 3b 0d 0a 20 20 20 20 20  f(Vdbe));..     
2470: 20 56 64 62 65 20 2a 70 6f 20 3d 20 64 62 2d 3e   Vdbe *po = db->
2480: 70 56 64 62 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  pVdbe;....      
2490: 69 66 20 28 21 70 29 0d 0a 20 20 20 20 20 20 7b  if (!p)..      {
24a0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 20 3d 20  ..        ret = 
24b0: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0d 0a 20  SQLITE_NOMEM;.. 
24c0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
24d0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
24e0: 43 6f 70 79 4d 65 6d 6f 72 79 28 70 2c 20 70 6f  CopyMemory(p, po
24f0: 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 29 29 3b  , sizeof(Vdbe));
2500: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2a 20 50 75 74  ....      /* Put
2510: 20 69 74 20 6f 6e 20 74 68 65 20 63 68 61 69 6e   it on the chain
2520: 20 73 6f 20 77 65 20 63 61 6e 20 66 72 65 65 20   so we can free 
2530: 69 74 20 2a 2f 0d 0a 20 20 20 20 20 20 64 62 2d  it */..      db-
2540: 3e 70 56 64 62 65 20 3d 20 70 3b 0d 0a 20 20 20  >pVdbe = p;..   
2550: 20 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33     ret = sqlite3
2560: 5f 66 69 6e 61 6c 69 7a 65 28 28 73 71 6c 69 74  _finalize((sqlit
2570: 65 33 5f 73 74 6d 74 20 2a 29 70 29 3b 20 2f 2a  e3_stmt *)p); /*
2580: 20 54 68 69 73 20 77 69 6c 6c 20 61 6c 73 6f 20   This will also 
2590: 66 72 65 65 20 74 68 65 20 63 6f 70 79 27 73 20  free the copy's 
25a0: 6d 65 6d 6f 72 79 20 2a 2f 0d 0a 20 20 20 20 20  memory */..     
25b0: 20 69 66 20 28 72 65 74 29 0d 0a 20 20 20 20 20   if (ret)..     
25c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 66   {..        /* f
25d0: 69 6e 61 6c 69 7a 65 20 66 61 69 6c 65 64 20 2d  inalize failed -
25e0: 2d 20 73 6f 20 77 65 20 6d 75 73 74 20 70 75 74  - so we must put
25f0: 20 62 61 63 6b 20 61 6e 79 74 68 69 6e 67 20 77   back anything w
2600: 65 20 6d 75 6e 67 65 64 20 2a 2f 0d 0a 20 20 20  e munged */..   
2610: 20 20 20 20 20 43 6f 70 79 4d 65 6d 6f 72 79 28       CopyMemory(
2620: 70 6f 2c 20 70 2c 20 73 69 7a 65 6f 66 28 56 64  po, p, sizeof(Vd
2630: 62 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 64  be));..        d
2640: 62 2d 3e 70 56 64 62 65 20 3d 20 70 6f 3b 0d 0a  b->pVdbe = po;..
2650: 0d 0a 20 20 20 20 20 20 20 20 2f 2a 0d 0a 20 20  ..        /*..  
2660: 20 20 20 20 20 20 2a 2a 20 4e 4f 54 45 3a 20 4f        ** NOTE: O
2670: 6b 2c 20 77 65 20 6d 75 73 74 20 66 72 65 65 20  k, we must free 
2680: 74 68 69 73 20 62 6c 6f 63 6b 20 74 68 61 74 20  this block that 
2690: 2a 77 65 2a 20 61 6c 6c 6f 63 61 74 65 64 20 28  *we* allocated (
26a0: 61 62 6f 76 65 29 20 73 69 6e 63 65 0d 0a 20 20  above) since..  
26b0: 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 66        **       f
26c0: 69 6e 61 6c 69 7a 65 20 64 69 64 20 6e 6f 74 20  inalize did not 
26d0: 64 6f 20 73 6f 2e 0d 0a 20 20 20 20 20 20 20 20  do so...        
26e0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 69  */..        sqli
26f0: 74 65 33 44 62 46 72 65 65 5f 69 6e 74 65 72 6f  te3DbFree_intero
2700: 70 28 64 62 2c 20 70 29 3b 0d 0a 20 20 20 20 20  p(db, p);..     
2710: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
2720: 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a   }..      else..
2730: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2740: 20 5a 65 72 6f 4d 65 6d 6f 72 79 28 70 6f 2c 20   ZeroMemory(po, 
2750: 73 69 7a 65 6f 66 28 56 64 62 65 29 29 3b 0d 0a  sizeof(Vdbe));..
2760: 20 20 20 20 20 20 20 20 70 6f 2d 3e 6d 61 67 69          po->magi
2770: 63 20 3d 20 56 44 42 45 5f 4d 41 47 49 43 5f 44  c = VDBE_MAGIC_D
2780: 45 41 44 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  EAD;..      }.. 
2790: 20 20 20 7d 0d 0a 20 20 20 20 73 71 6c 69 74 65     }..    sqlite
27a0: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62  3_mutex_leave(db
27b0: 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 20 20 72  ->mutex);..    r
27c0: 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 63 6c 6f  et = sqlite3_clo
27d0: 73 65 28 64 62 29 3b 0d 0a 20 20 7d 0d 0a 20 20  se(db);..  }..  
27e0: 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 23 65 6e  return ret;..#en
27f0: 64 69 66 0d 0a 7d 0d 0a 0d 0a 23 69 66 20 64 65  dif..}....#if de
2800: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 4c 4f  fined(INTEROP_LO
2810: 47 29 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69  G)..SQLITE_API i
2820: 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  nt WINAPI sqlite
2830: 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67 5f 69 6e 74  3_config_log_int
2840: 65 72 6f 70 28 29 0d 0a 7b 0d 0a 20 20 69 6e 74  erop()..{..  int
2850: 20 72 65 74 3b 0d 0a 20 20 69 66 28 20 21 6c 6f   ret;..  if( !lo
2860: 67 43 6f 6e 66 69 67 75 72 65 64 20 29 7b 0d 0a  gConfigured ){..
2870: 20 20 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65      ret = sqlite
2880: 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f  3_config(SQLITE_
2890: 43 4f 4e 46 49 47 5f 4c 4f 47 2c 20 73 71 6c 69  CONFIG_LOG, sqli
28a0: 74 65 33 49 6e 74 65 72 6f 70 4c 6f 67 43 61 6c  te3InteropLogCal
28b0: 6c 62 61 63 6b 2c 20 30 29 3b 0d 0a 20 20 20 20  lback, 0);..    
28c0: 69 66 28 20 72 65 74 3d 3d 53 51 4c 49 54 45 5f  if( ret==SQLITE_
28d0: 4f 4b 20 29 7b 0d 0a 20 20 20 20 20 20 6c 6f 67  OK ){..      log
28e0: 43 6f 6e 66 69 67 75 72 65 64 20 3d 20 31 3b 0d  Configured = 1;.
28f0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0d 0a 20 20 20  .    }else{..   
2900: 20 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f     sqlite3Intero
2910: 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f  pDebug("sqlite3_
2920: 63 6f 6e 66 69 67 5f 6c 6f 67 5f 69 6e 74 65 72  config_log_inter
2930: 6f 70 28 29 3a 20 73 71 6c 69 74 65 33 5f 63 6f  op(): sqlite3_co
2940: 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46  nfig(SQLITE_CONF
2950: 49 47 5f 4c 4f 47 29 20 72 65 74 75 72 6e 65 64  IG_LOG) returned
2960: 20 25 64 2e 5c 6e 22 2c 20 72 65 74 29 3b 0d 0a   %d.\n", ret);..
2970: 20 20 20 20 7d 0d 0a 20 20 7d 65 6c 73 65 7b 0d      }..  }else{.
2980: 0a 20 20 20 20 72 65 74 20 3d 20 53 51 4c 49 54  .    ret = SQLIT
2990: 45 5f 4f 4b 3b 0d 0a 20 20 7d 0d 0a 20 20 72 65  E_OK;..  }..  re
29a0: 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a 23 65  turn ret;..}..#e
29b0: 6e 64 69 66 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  ndif....SQLITE_A
29c0: 50 49 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 57  PI const char *W
29d0: 49 4e 41 50 49 20 69 6e 74 65 72 6f 70 5f 6c 69  INAPI interop_li
29e0: 62 76 65 72 73 69 6f 6e 28 76 6f 69 64 29 0d 0a  bversion(void)..
29f0: 7b 0d 0a 20 20 72 65 74 75 72 6e 20 49 4e 54 45  {..  return INTE
2a00: 52 4f 50 5f 56 45 52 53 49 4f 4e 3b 0d 0a 7d 0d  ROP_VERSION;..}.
2a10: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f  ...SQLITE_API co
2a20: 6e 73 74 20 63 68 61 72 20 2a 57 49 4e 41 50 49  nst char *WINAPI
2a30: 20 69 6e 74 65 72 6f 70 5f 73 6f 75 72 63 65 69   interop_sourcei
2a40: 64 28 76 6f 69 64 29 0d 0a 7b 0d 0a 20 20 72 65  d(void)..{..  re
2a50: 74 75 72 6e 20 49 4e 54 45 52 4f 50 5f 53 4f 55  turn INTEROP_SOU
2a60: 52 43 45 5f 49 44 20 22 20 22 20 49 4e 54 45 52  RCE_ID " " INTER
2a70: 4f 50 5f 53 4f 55 52 43 45 5f 54 49 4d 45 53 54  OP_SOURCE_TIMEST
2a80: 41 4d 50 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  AMP;..}....SQLIT
2a90: 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49  E_API int WINAPI
2aa0: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e   sqlite3_open_in
2ab0: 74 65 72 6f 70 28 63 6f 6e 73 74 20 63 68 61 72  terop(const char
2ac0: 20 2a 66 69 6c 65 6e 61 6d 65 2c 20 63 6f 6e 73   *filename, cons
2ad0: 74 20 63 68 61 72 20 2a 76 66 73 4e 61 6d 65 2c  t char *vfsName,
2ae0: 20 69 6e 74 20 66 6c 61 67 73 2c 20 69 6e 74 20   int flags, int 
2af0: 65 78 74 46 75 6e 63 73 2c 20 73 71 6c 69 74 65  extFuncs, sqlite
2b00: 33 20 2a 2a 70 70 64 62 29 0d 0a 7b 0d 0a 20 20  3 **ppdb)..{..  
2b10: 69 6e 74 20 72 65 74 3b 0d 0a 0d 0a 23 69 66 20  int ret;....#if 
2b20: 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f  defined(INTEROP_
2b30: 44 45 42 55 47 29 20 26 26 20 28 49 4e 54 45 52  DEBUG) && (INTER
2b40: 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52  OP_DEBUG & INTER
2b50: 4f 50 5f 44 45 42 55 47 5f 4f 50 45 4e 29 0d 0a  OP_DEBUG_OPEN)..
2b60: 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70    sqlite3Interop
2b70: 44 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 6f  Debug("sqlite3_o
2b80: 70 65 6e 5f 69 6e 74 65 72 6f 70 28 29 3a 20 63  pen_interop(): c
2b90: 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f 6f  alling sqlite3_o
2ba0: 70 65 6e 5f 76 32 28 5c 22 25 73 5c 22 2c 20 5c  pen_v2(\"%s\", \
2bb0: 22 25 73 5c 22 2c 20 25 64 2c 20 25 64 2c 20 25  "%s\", %d, %d, %
2bc0: 70 29 2e 2e 2e 5c 6e 22 2c 20 66 69 6c 65 6e 61  p)...\n", filena
2bd0: 6d 65 2c 20 76 66 73 4e 61 6d 65 2c 20 66 6c 61  me, vfsName, fla
2be0: 67 73 2c 20 65 78 74 46 75 6e 63 73 2c 20 70 70  gs, extFuncs, pp
2bf0: 64 62 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  db);..#endif....
2c00: 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33 5f    ret = sqlite3_
2c10: 6f 70 65 6e 5f 76 32 28 66 69 6c 65 6e 61 6d 65  open_v2(filename
2c20: 2c 20 70 70 64 62 2c 20 66 6c 61 67 73 2c 20 76  , ppdb, flags, v
2c30: 66 73 4e 61 6d 65 29 3b 0d 0a 0d 0a 23 69 66 20  fsName);....#if 
2c40: 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f  defined(INTEROP_
2c50: 44 45 42 55 47 29 20 26 26 20 28 49 4e 54 45 52  DEBUG) && (INTER
2c60: 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52  OP_DEBUG & INTER
2c70: 4f 50 5f 44 45 42 55 47 5f 4f 50 45 4e 29 0d 0a  OP_DEBUG_OPEN)..
2c80: 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70    sqlite3Interop
2c90: 44 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 6f  Debug("sqlite3_o
2ca0: 70 65 6e 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73  pen_interop(): s
2cb0: 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 5c  qlite3_open_v2(\
2cc0: 22 25 73 5c 22 2c 20 5c 22 25 73 5c 22 2c 20 25  "%s\", \"%s\", %
2cd0: 64 2c 20 25 64 2c 20 25 70 29 20 72 65 74 75 72  d, %d, %p) retur
2ce0: 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 66 69 6c 65  ned %d.\n", file
2cf0: 6e 61 6d 65 2c 20 76 66 73 4e 61 6d 65 2c 20 66  name, vfsName, f
2d00: 6c 61 67 73 2c 20 65 78 74 46 75 6e 63 73 2c 20  lags, extFuncs, 
2d10: 70 70 64 62 2c 20 72 65 74 29 3b 0d 0a 23 65 6e  ppdb, ret);..#en
2d20: 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e  dif....#if defin
2d30: 65 64 28 49 4e 54 45 52 4f 50 5f 45 58 54 45 4e  ed(INTEROP_EXTEN
2d40: 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53 29 0d  SION_FUNCTIONS).
2d50: 0a 20 20 69 66 20 28 28 72 65 74 20 3d 3d 20 53  .  if ((ret == S
2d60: 51 4c 49 54 45 5f 4f 4b 29 20 26 26 20 70 70 64  QLITE_OK) && ppd
2d70: 62 20 26 26 20 65 78 74 46 75 6e 63 73 29 0d 0a  b && extFuncs)..
2d80: 20 20 20 20 52 65 67 69 73 74 65 72 45 78 74 65      RegisterExte
2d90: 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e 73 28 2a  nsionFunctions(*
2da0: 70 70 64 62 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ppdb);..#endif..
2db0: 0d 0a 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0d  ..  return ret;.
2dc0: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
2dd0: 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69   int WINAPI sqli
2de0: 74 65 33 5f 6f 70 65 6e 31 36 5f 69 6e 74 65 72  te3_open16_inter
2df0: 6f 70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 66  op(const char *f
2e00: 69 6c 65 6e 61 6d 65 2c 20 63 6f 6e 73 74 20 63  ilename, const c
2e10: 68 61 72 20 2a 76 66 73 4e 61 6d 65 2c 20 69 6e  har *vfsName, in
2e20: 74 20 66 6c 61 67 73 2c 20 69 6e 74 20 65 78 74  t flags, int ext
2e30: 46 75 6e 63 73 2c 20 73 71 6c 69 74 65 33 20 2a  Funcs, sqlite3 *
2e40: 2a 70 70 64 62 29 0d 0a 7b 0d 0a 20 20 69 6e 74  *ppdb)..{..  int
2e50: 20 72 65 74 3b 0d 0a 0d 0a 23 69 66 20 64 65 66   ret;....#if def
2e60: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42  ined(INTEROP_DEB
2e70: 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f  UG) && (INTEROP_
2e80: 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f  DEBUG & INTEROP_
2e90: 44 45 42 55 47 5f 4f 50 45 4e 31 36 29 0d 0a 20  DEBUG_OPEN16).. 
2ea0: 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44   sqlite3InteropD
2eb0: 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 6f 70  ebug("sqlite3_op
2ec0: 65 6e 31 36 5f 69 6e 74 65 72 6f 70 28 29 3a 20  en16_interop(): 
2ed0: 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f  calling sqlite3_
2ee0: 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28 5c 22 25  open_interop(\"%
2ef0: 73 5c 22 2c 20 5c 22 25 73 5c 22 2c 20 25 64 2c  s\", \"%s\", %d,
2f00: 20 25 64 2c 20 25 70 29 2e 2e 2e 5c 6e 22 2c 20   %d, %p)...\n", 
2f10: 66 69 6c 65 6e 61 6d 65 2c 20 76 66 73 4e 61 6d  filename, vfsNam
2f20: 65 2c 20 66 6c 61 67 73 2c 20 65 78 74 46 75 6e  e, flags, extFun
2f30: 63 73 2c 20 70 70 64 62 29 3b 0d 0a 23 65 6e 64  cs, ppdb);..#end
2f40: 69 66 0d 0a 0d 0a 20 20 72 65 74 20 3d 20 73 71  if....  ret = sq
2f50: 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72  lite3_open_inter
2f60: 6f 70 28 66 69 6c 65 6e 61 6d 65 2c 20 76 66 73  op(filename, vfs
2f70: 4e 61 6d 65 2c 20 66 6c 61 67 73 2c 20 65 78 74  Name, flags, ext
2f80: 46 75 6e 63 73 2c 20 70 70 64 62 29 3b 0d 0a 0d  Funcs, ppdb);...
2f90: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54  .#if defined(INT
2fa0: 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28  EROP_DEBUG) && (
2fb0: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20  INTEROP_DEBUG & 
2fc0: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 4f 50  INTEROP_DEBUG_OP
2fd0: 45 4e 31 36 29 0d 0a 20 20 73 71 6c 69 74 65 33  EN16)..  sqlite3
2fe0: 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71  InteropDebug("sq
2ff0: 6c 69 74 65 33 5f 6f 70 65 6e 31 36 5f 69 6e 74  lite3_open16_int
3000: 65 72 6f 70 28 29 3a 20 73 71 6c 69 74 65 33 5f  erop(): sqlite3_
3010: 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28 5c 22 25  open_interop(\"%
3020: 73 5c 22 2c 20 5c 22 25 73 5c 22 2c 20 25 64 2c  s\", \"%s\", %d,
3030: 20 25 64 2c 20 25 70 29 20 72 65 74 75 72 6e 65   %d, %p) returne
3040: 64 20 25 64 2e 5c 6e 22 2c 20 66 69 6c 65 6e 61  d %d.\n", filena
3050: 6d 65 2c 20 76 66 73 4e 61 6d 65 2c 20 66 6c 61  me, vfsName, fla
3060: 67 73 2c 20 65 78 74 46 75 6e 63 73 2c 20 70 70  gs, extFuncs, pp
3070: 64 62 2c 20 72 65 74 29 3b 0d 0a 23 65 6e 64 69  db, ret);..#endi
3080: 66 0d 0a 0d 0a 20 20 69 66 20 28 28 72 65 74 20  f....  if ((ret 
3090: 3d 3d 20 53 51 4c 49 54 45 5f 4f 4b 29 20 26 26  == SQLITE_OK) &&
30a0: 20 70 70 64 62 20 26 26 20 21 44 62 48 61 73 50   ppdb && !DbHasP
30b0: 72 6f 70 65 72 74 79 28 2a 70 70 64 62 2c 20 30  roperty(*ppdb, 0
30c0: 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  , DB_SchemaLoade
30d0: 64 29 29 0d 0a 20 20 7b 0d 0a 20 20 20 20 45 4e  d))..  {..    EN
30e0: 43 28 2a 70 70 64 62 29 20 3d 20 53 51 4c 49 54  C(*ppdb) = SQLIT
30f0: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3b 0d 0a  E_UTF16NATIVE;..
3100: 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52  ..#if SQLITE_VER
3110: 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33  SION_NUMBER >= 3
3120: 30 30 38 30 30 38 0d 0a 20 20 20 20 2f 2f 0d 0a  008008..    //..
3130: 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 53      // BUGFIX: S
3140: 65 65 20 74 69 63 6b 65 74 20 5b 37 63 31 35 31  ee ticket [7c151
3150: 61 32 66 30 65 32 32 38 30 34 63 5d 2e 0d 0a 20  a2f0e22804c]... 
3160: 20 20 20 2f 2f 0d 0a 20 20 20 20 53 43 48 45 4d     //..    SCHEM
3170: 41 5f 45 4e 43 28 2a 70 70 64 62 29 20 3d 20 53  A_ENC(*ppdb) = S
3180: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
3190: 45 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 7d 0d  E;..#endif..  }.
31a0: 0a 0d 0a 20 20 72 65 74 75 72 6e 20 72 65 74 3b  ...  return ret;
31b0: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
31c0: 49 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 57 49  I const char *WI
31d0: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 65 72 72  NAPI sqlite3_err
31e0: 6d 73 67 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  msg_interop(sqli
31f0: 74 65 33 20 2a 64 62 2c 20 69 6e 74 20 2a 70 6c  te3 *db, int *pl
3200: 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20  en)..{..  const 
3210: 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73 71 6c  char *pval = sql
3220: 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 3b  ite3_errmsg(db);
3230: 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70  ..  if (plen) *p
3240: 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20 73 74 72  len = pval ? str
3250: 6c 65 6e 28 70 76 61 6c 29 20 3a 20 30 3b 0d 0a  len(pval) : 0;..
3260: 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a    return pval;..
3270: 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20  }....SQLITE_API 
3280: 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74  int WINAPI sqlit
3290: 65 33 5f 63 68 61 6e 67 65 73 5f 69 6e 74 65 72  e3_changes_inter
32a0: 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62 29 0d  op(sqlite3 *db).
32b0: 0a 7b 0d 0a 20 20 69 6e 74 20 72 65 73 75 6c 74  .{..  int result
32c0: 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64  ;....#if defined
32d0: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20  (INTEROP_DEBUG) 
32e0: 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  && (INTEROP_DEBU
32f0: 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55  G & INTEROP_DEBU
3300: 47 5f 43 48 41 4e 47 45 53 29 0d 0a 20 20 73 71  G_CHANGES)..  sq
3310: 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75  lite3InteropDebu
3320: 67 28 22 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  g("sqlite3_chang
3330: 65 73 5f 69 6e 74 65 72 6f 70 28 29 3a 20 63 61  es_interop(): ca
3340: 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f 63 68  lling sqlite3_ch
3350: 61 6e 67 65 73 28 25 70 29 2e 2e 2e 5c 6e 22 2c  anges(%p)...\n",
3360: 20 64 62 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d   db);..#endif...
3370: 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0d  .#ifndef NDEBUG.
3380: 0a 20 20 69 66 20 28 21 64 62 29 0d 0a 20 20 20  .  if (!db)..   
3390: 20 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f     sqlite3Intero
33a0: 70 42 72 65 61 6b 28 22 6e 75 6c 6c 20 64 61 74  pBreak("null dat
33b0: 61 62 61 73 65 20 68 61 6e 64 6c 65 20 66 6f 72  abase handle for
33c0: 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73   sqlite3_changes
33d0: 28 29 22 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  ()");..#endif...
33e0: 0a 20 20 72 65 73 75 6c 74 20 3d 20 73 71 6c 69  .  result = sqli
33f0: 74 65 33 5f 63 68 61 6e 67 65 73 28 64 62 29 3b  te3_changes(db);
3400: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
3410: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26  INTEROP_DEBUG) &
3420: 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  & (INTEROP_DEBUG
3430: 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47   & INTEROP_DEBUG
3440: 5f 43 48 41 4e 47 45 53 29 0d 0a 20 20 73 71 6c  _CHANGES)..  sql
3450: 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67  ite3InteropDebug
3460: 28 22 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  ("sqlite3_change
3470: 73 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c  s_interop(): sql
3480: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 25 70 29  ite3_changes(%p)
3490: 20 72 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22   returned %d.\n"
34a0: 2c 20 64 62 2c 20 72 65 73 75 6c 74 29 3b 0d 0a  , db, result);..
34b0: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 75  #endif....  retu
34c0: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 7d 0d 0a 0d  rn result;..}...
34d0: 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20  .SQLITE_API int 
34e0: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 70  WINAPI sqlite3_p
34f0: 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 73  repare_interop(s
3500: 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73  qlite3 *db, cons
3510: 74 20 63 68 61 72 20 2a 73 71 6c 2c 20 69 6e 74  t char *sql, int
3520: 20 6e 62 79 74 65 73 2c 20 73 71 6c 69 74 65 33   nbytes, sqlite3
3530: 5f 73 74 6d 74 20 2a 2a 70 70 73 74 6d 74 2c 20  _stmt **ppstmt, 
3540: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 70 7a 74  const char **pzt
3550: 61 69 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d  ail, int *plen).
3560: 0a 7b 0d 0a 20 20 69 6e 74 20 6e 3b 0d 0a 0d 0a  .{..  int n;....
3570: 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45  #if defined(INTE
3580: 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28 49  ROP_DEBUG) && (I
3590: 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49  NTEROP_DEBUG & I
35a0: 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 50 52 45  NTEROP_DEBUG_PRE
35b0: 50 41 52 45 29 0d 0a 20 20 73 71 6c 69 74 65 33  PARE)..  sqlite3
35c0: 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71  InteropDebug("sq
35d0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 69 6e  lite3_prepare_in
35e0: 74 65 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67  terop(): calling
35f0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
3600: 28 25 70 2c 20 5c 22 25 73 5c 22 2c 20 25 64 2c  (%p, \"%s\", %d,
3610: 20 25 70 29 2e 2e 2e 5c 6e 22 2c 20 64 62 2c 20   %p)...\n", db, 
3620: 73 71 6c 2c 20 6e 62 79 74 65 73 2c 20 70 70 73  sql, nbytes, pps
3630: 74 6d 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  tmt);..#endif...
3640: 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53  .#if SQLITE_VERS
3650: 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30  ION_NUMBER >= 30
3660: 30 33 30 30 39 0d 0a 20 20 6e 20 3d 20 73 71 6c  03009..  n = sql
3670: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
3680: 64 62 2c 20 73 71 6c 2c 20 6e 62 79 74 65 73 2c  db, sql, nbytes,
3690: 20 70 70 73 74 6d 74 2c 20 70 7a 74 61 69 6c 29   ppstmt, pztail)
36a0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 6e 20 3d 20  ;..#else..  n = 
36b0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
36c0: 64 62 2c 20 73 71 6c 2c 20 6e 62 79 74 65 73 2c  db, sql, nbytes,
36d0: 20 70 70 73 74 6d 74 2c 20 70 7a 74 61 69 6c 29   ppstmt, pztail)
36e0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66  ;..#endif....#if
36f0: 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50   defined(INTEROP
3700: 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e 54 45  _DEBUG) && (INTE
3710: 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45  ROP_DEBUG & INTE
3720: 52 4f 50 5f 44 45 42 55 47 5f 50 52 45 50 41 52  ROP_DEBUG_PREPAR
3730: 45 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74  E)..  sqlite3Int
3740: 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74  eropDebug("sqlit
3750: 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72  e3_prepare_inter
3760: 6f 70 28 29 3a 20 73 71 6c 69 74 65 33 5f 70 72  op(): sqlite3_pr
3770: 65 70 61 72 65 28 25 70 2c 20 5c 22 25 73 5c 22  epare(%p, \"%s\"
3780: 2c 20 25 64 2c 20 25 70 29 20 72 65 74 75 72 6e  , %d, %p) return
3790: 65 64 20 25 64 2e 5c 6e 22 2c 20 64 62 2c 20 73  ed %d.\n", db, s
37a0: 71 6c 2c 20 6e 62 79 74 65 73 2c 20 70 70 73 74  ql, nbytes, ppst
37b0: 6d 74 2c 20 6e 29 3b 0d 0a 23 65 6e 64 69 66 0d  mt, n);..#endif.
37c0: 0a 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a  ...  if (plen) *
37d0: 70 6c 65 6e 20 3d 20 28 70 7a 74 61 69 6c 20 26  plen = (pztail &
37e0: 26 20 2a 70 7a 74 61 69 6c 29 20 3f 20 73 74 72  & *pztail) ? str
37f0: 6c 65 6e 28 2a 70 7a 74 61 69 6c 29 20 3a 20 30  len(*pztail) : 0
3800: 3b 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 6e 3b  ;....  return n;
3810: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
3820: 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c  I int WINAPI sql
3830: 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 5f 69  ite3_prepare16_i
3840: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 20 2a  nterop(sqlite3 *
3850: 64 62 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  db, const void *
3860: 73 71 6c 2c 20 69 6e 74 20 6e 63 68 61 72 73 2c  sql, int nchars,
3870: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a   sqlite3_stmt **
3880: 70 70 73 74 6d 74 2c 20 63 6f 6e 73 74 20 76 6f  ppstmt, const vo
3890: 69 64 20 2a 2a 70 7a 74 61 69 6c 2c 20 69 6e 74  id **pztail, int
38a0: 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 69 6e   *plen)..{..  in
38b0: 74 20 6e 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69  t n;....#if defi
38c0: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  ned(INTEROP_DEBU
38d0: 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44  G) && (INTEROP_D
38e0: 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44  EBUG & INTEROP_D
38f0: 45 42 55 47 5f 50 52 45 50 41 52 45 31 36 29 0d  EBUG_PREPARE16).
3900: 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f  .  sqlite3Intero
3910: 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f  pDebug("sqlite3_
3920: 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70 28  prepare_interop(
3930: 29 3a 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74  ): calling sqlit
3940: 65 33 5f 70 72 65 70 61 72 65 31 36 28 25 70 2c  e3_prepare16(%p,
3950: 20 5c 22 25 73 5c 22 2c 20 25 64 2c 20 25 70 29   \"%s\", %d, %p)
3960: 2e 2e 2e 5c 6e 22 2c 20 64 62 2c 20 73 71 6c 2c  ...\n", db, sql,
3970: 20 6e 63 68 61 72 73 2c 20 70 70 73 74 6d 74 29   nchars, ppstmt)
3980: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66  ;..#endif....#if
3990: 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f   SQLITE_VERSION_
39a0: 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 33 30 30  NUMBER >= 300300
39b0: 39 0d 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33  9..  n = sqlite3
39c0: 5f 70 72 65 70 61 72 65 31 36 5f 76 32 28 64 62  _prepare16_v2(db
39d0: 2c 20 73 71 6c 2c 20 6e 63 68 61 72 73 20 2a 20  , sql, nchars * 
39e0: 73 69 7a 65 6f 66 28 77 63 68 61 72 5f 74 29 2c  sizeof(wchar_t),
39f0: 20 70 70 73 74 6d 74 2c 20 70 7a 74 61 69 6c 29   ppstmt, pztail)
3a00: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 6e 20 3d 20  ;..#else..  n = 
3a10: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31  sqlite3_prepare1
3a20: 36 28 64 62 2c 20 73 71 6c 2c 20 6e 63 68 61 72  6(db, sql, nchar
3a30: 73 20 2a 20 73 69 7a 65 6f 66 28 77 63 68 61 72  s * sizeof(wchar
3a40: 5f 74 29 2c 20 70 70 73 74 6d 74 2c 20 70 7a 74  _t), ppstmt, pzt
3a50: 61 69 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  ail);..#endif...
3a60: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54  .#if defined(INT
3a70: 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28  EROP_DEBUG) && (
3a80: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20  INTEROP_DEBUG & 
3a90: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 50 52  INTEROP_DEBUG_PR
3aa0: 45 50 41 52 45 31 36 29 0d 0a 20 20 73 71 6c 69  EPARE16)..  sqli
3ab0: 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28  te3InteropDebug(
3ac0: 22 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  "sqlite3_prepare
3ad0: 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c 69  _interop(): sqli
3ae0: 74 65 33 5f 70 72 65 70 61 72 65 31 36 28 25 70  te3_prepare16(%p
3af0: 2c 20 5c 22 25 73 5c 22 2c 20 25 64 2c 20 25 70  , \"%s\", %d, %p
3b00: 29 20 72 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e  ) returned %d.\n
3b10: 22 2c 20 64 62 2c 20 73 71 6c 2c 20 6e 63 68 61  ", db, sql, ncha
3b20: 72 73 2c 20 70 70 73 74 6d 74 2c 20 6e 29 3b 0d  rs, ppstmt, n);.
3b30: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 69 66 20  .#endif....  if 
3b40: 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 28  (plen) *plen = (
3b50: 70 7a 74 61 69 6c 20 26 26 20 2a 70 7a 74 61 69  pztail && *pztai
3b60: 6c 29 20 3f 20 77 63 73 6c 65 6e 28 28 77 63 68  l) ? wcslen((wch
3b70: 61 72 5f 74 20 2a 29 2a 70 7a 74 61 69 6c 29 20  ar_t *)*pztail) 
3b80: 2a 20 73 69 7a 65 6f 66 28 77 63 68 61 72 5f 74  * sizeof(wchar_t
3b90: 29 20 3a 20 30 3b 0d 0a 0d 0a 20 20 72 65 74 75  ) : 0;....  retu
3ba0: 72 6e 20 6e 3b 0d 0a 7d 0d 0a 0d 0a 23 69 66 20  rn n;..}....#if 
3bb0: 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f  defined(INTEROP_
3bc0: 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 29 20 26  VIRTUAL_TABLE) &
3bd0: 26 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  & SQLITE_VERSION
3be0: 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 34 30  _NUMBER >= 30040
3bf0: 30 31 0d 0a 23 69 66 64 65 66 20 5f 57 49 4e 33  01..#ifdef _WIN3
3c00: 32 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c  2.__declspec(dll
3c10: 65 78 70 6f 72 74 29 0a 23 65 6e 64 69 66 0a 76  export).#endif.v
3c20: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 72 65  oid *sqlite3_cre
3c30: 61 74 65 5f 64 69 73 70 6f 73 61 62 6c 65 5f 6d  ate_disposable_m
3c40: 6f 64 75 6c 65 28 0d 0a 20 20 73 71 6c 69 74 65  odule(..  sqlite
3c50: 33 20 2a 64 62 2c 0d 0a 20 20 63 6f 6e 73 74 20  3 *db,..  const 
3c60: 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 0d 0a 20 20  char *zName,..  
3c70: 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
3c80: 64 75 6c 65 20 2a 70 2c 0d 0a 20 20 76 6f 69 64  dule *p,..  void
3c90: 20 2a 70 43 6c 69 65 6e 74 44 61 74 61 2c 0d 0a   *pClientData,..
3ca0: 20 20 76 6f 69 64 28 2a 78 44 65 73 74 72 6f 79    void(*xDestroy
3cb0: 29 28 76 6f 69 64 2a 29 0d 0a 29 3b 20 2f 2a 20  )(void*)..); /* 
3cc0: 64 65 66 69 6e 65 64 20 69 6e 20 22 73 72 63 2f  defined in "src/
3cd0: 65 78 74 2f 76 74 73 68 69 6d 2e 63 22 20 28 69  ext/vtshim.c" (i
3ce0: 6e 63 6c 75 64 65 64 20 62 65 6c 6f 77 29 20 2a  ncluded below) *
3cf0: 2f 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20  /....SQLITE_API 
3d00: 76 6f 69 64 20 2a 57 49 4e 41 50 49 20 73 71 6c  void *WINAPI sql
3d10: 69 74 65 33 5f 63 72 65 61 74 65 5f 64 69 73 70  ite3_create_disp
3d20: 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c 65 5f 69 6e  osable_module_in
3d30: 74 65 72 6f 70 28 0d 0a 20 20 73 71 6c 69 74 65  terop(..  sqlite
3d40: 33 20 2a 64 62 2c 0d 0a 20 20 63 6f 6e 73 74 20  3 *db,..  const 
3d50: 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 0d 0a 20 20  char *zName,..  
3d60: 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
3d70: 70 4d 6f 64 75 6c 65 2c 0d 0a 20 20 69 6e 74 20  pModule,..  int 
3d80: 69 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 69 6e 74  iVersion,..  int
3d90: 20 28 2a 78 43 72 65 61 74 65 29 28 73 71 6c 69   (*xCreate)(sqli
3da0: 74 65 33 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e  te3*, void *, in
3db0: 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63  t, const char *c
3dc0: 6f 6e 73 74 2a 2c 20 73 71 6c 69 74 65 33 5f 76  onst*, sqlite3_v
3dd0: 74 61 62 20 2a 2a 2c 20 63 68 61 72 2a 2a 29 2c  tab **, char**),
3de0: 0d 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6e 6e 65  ..  int (*xConne
3df0: 63 74 29 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ct)(sqlite3*, vo
3e00: 69 64 20 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  id *, int, const
3e10: 20 63 68 61 72 20 2a 63 6f 6e 73 74 2a 2c 20 73   char *const*, s
3e20: 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 2a 2c 20  qlite3_vtab **, 
3e30: 63 68 61 72 2a 2a 29 2c 0d 0a 20 20 69 6e 74 20  char**),..  int 
3e40: 28 2a 78 42 65 73 74 49 6e 64 65 78 29 28 73 71  (*xBestIndex)(sq
3e50: 6c 69 74 65 33 5f 76 74 61 62 20 2a 2c 20 73 71  lite3_vtab *, sq
3e60: 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f  lite3_index_info
3e70: 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 44 69  *),..  int (*xDi
3e80: 73 63 6f 6e 6e 65 63 74 29 28 73 71 6c 69 74 65  sconnect)(sqlite
3e90: 33 5f 76 74 61 62 20 2a 29 2c 0d 0a 20 20 69 6e  3_vtab *),..  in
3ea0: 74 20 28 2a 78 44 65 73 74 72 6f 79 29 28 73 71  t (*xDestroy)(sq
3eb0: 6c 69 74 65 33 5f 76 74 61 62 20 2a 29 2c 0d 0a  lite3_vtab *),..
3ec0: 20 20 69 6e 74 20 28 2a 78 4f 70 65 6e 29 28 73    int (*xOpen)(s
3ed0: 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 2c 20 73  qlite3_vtab *, s
3ee0: 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
3ef0: 6f 72 20 2a 2a 29 2c 0d 0a 20 20 69 6e 74 20 28  or **),..  int (
3f00: 2a 78 43 6c 6f 73 65 29 28 73 71 6c 69 74 65 33  *xClose)(sqlite3
3f10: 5f 76 74 61 62 5f 63 75 72 73 6f 72 2a 29 2c 0d  _vtab_cursor*),.
3f20: 0a 20 20 69 6e 74 20 28 2a 78 46 69 6c 74 65 72  .  int (*xFilter
3f30: 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  )(sqlite3_vtab_c
3f40: 75 72 73 6f 72 2a 2c 20 69 6e 74 2c 20 63 6f 6e  ursor*, int, con
3f50: 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20  st char *, int, 
3f60: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
3f70: 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 4e 65 78  ),..  int (*xNex
3f80: 74 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  t)(sqlite3_vtab_
3f90: 63 75 72 73 6f 72 2a 29 2c 0d 0a 20 20 69 6e 74  cursor*),..  int
3fa0: 20 28 2a 78 45 6f 66 29 28 73 71 6c 69 74 65 33   (*xEof)(sqlite3
3fb0: 5f 76 74 61 62 5f 63 75 72 73 6f 72 2a 29 2c 0d  _vtab_cursor*),.
3fc0: 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6c 75 6d 6e  .  int (*xColumn
3fd0: 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  )(sqlite3_vtab_c
3fe0: 75 72 73 6f 72 2a 2c 20 73 71 6c 69 74 65 33 5f  ursor*, sqlite3_
3ff0: 63 6f 6e 74 65 78 74 2a 2c 20 69 6e 74 29 2c 0d  context*, int),.
4000: 0a 20 20 69 6e 74 20 28 2a 78 52 6f 77 69 64 29  .  int (*xRowid)
4010: 28 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75  (sqlite3_vtab_cu
4020: 72 73 6f 72 2a 2c 20 73 71 6c 69 74 65 33 5f 69  rsor*, sqlite3_i
4030: 6e 74 36 34 20 2a 29 2c 0d 0a 20 20 69 6e 74 20  nt64 *),..  int 
4040: 28 2a 78 55 70 64 61 74 65 29 28 73 71 6c 69 74  (*xUpdate)(sqlit
4050: 65 33 5f 76 74 61 62 20 2a 2c 20 69 6e 74 2c 20  e3_vtab *, int, 
4060: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
4070: 2c 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20  , sqlite3_int64 
4080: 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 42 65  *),..  int (*xBe
4090: 67 69 6e 29 28 73 71 6c 69 74 65 33 5f 76 74 61  gin)(sqlite3_vta
40a0: 62 20 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78  b *),..  int (*x
40b0: 53 79 6e 63 29 28 73 71 6c 69 74 65 33 5f 76 74  Sync)(sqlite3_vt
40c0: 61 62 20 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a  ab *),..  int (*
40d0: 78 43 6f 6d 6d 69 74 29 28 73 71 6c 69 74 65 33  xCommit)(sqlite3
40e0: 5f 76 74 61 62 20 2a 29 2c 0d 0a 20 20 69 6e 74  _vtab *),..  int
40f0: 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 29 28 73 71   (*xRollback)(sq
4100: 6c 69 74 65 33 5f 76 74 61 62 20 2a 29 2c 0d 0a  lite3_vtab *),..
4110: 20 20 69 6e 74 20 28 2a 78 46 69 6e 64 46 75 6e    int (*xFindFun
4120: 63 74 69 6f 6e 29 28 73 71 6c 69 74 65 33 5f 76  ction)(sqlite3_v
4130: 74 61 62 20 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  tab *, int, cons
4140: 74 20 63 68 61 72 20 2a 2c 20 76 6f 69 64 20 28  t char *, void (
4150: 2a 2a 70 78 46 75 6e 63 29 28 73 71 6c 69 74 65  **pxFunc)(sqlite
4160: 33 5f 63 6f 6e 74 65 78 74 2a 2c 20 69 6e 74 2c  3_context*, int,
4170: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a   sqlite3_value**
4180: 29 2c 20 76 6f 69 64 20 2a 2a 70 70 41 72 67 29  ), void **ppArg)
4190: 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 52 65 6e 61  ,..  int (*xRena
41a0: 6d 65 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62  me)(sqlite3_vtab
41b0: 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
41c0: 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 53 61 76  ),..  int (*xSav
41d0: 65 70 6f 69 6e 74 29 28 73 71 6c 69 74 65 33 5f  epoint)(sqlite3_
41e0: 76 74 61 62 20 2a 2c 20 69 6e 74 29 2c 0d 0a 20  vtab *, int),.. 
41f0: 20 69 6e 74 20 28 2a 78 52 65 6c 65 61 73 65 29   int (*xRelease)
4200: 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 2c  (sqlite3_vtab *,
4210: 20 69 6e 74 29 2c 0d 0a 20 20 69 6e 74 20 28 2a   int),..  int (*
4220: 78 52 6f 6c 6c 62 61 63 6b 54 6f 29 28 73 71 6c  xRollbackTo)(sql
4230: 69 74 65 33 5f 76 74 61 62 20 2a 2c 20 69 6e 74  ite3_vtab *, int
4240: 29 2c 0d 0a 20 20 76 6f 69 64 20 2a 70 43 6c 69  ),..  void *pCli
4250: 65 6e 74 44 61 74 61 2c 0d 0a 20 20 76 6f 69 64  entData,..  void
4260: 28 2a 78 44 65 73 74 72 6f 79 4d 6f 64 75 6c 65  (*xDestroyModule
4270: 29 28 76 6f 69 64 2a 29 0d 0a 29 7b 0d 0a 20 20  )(void*)..){..  
4280: 69 66 20 28 21 70 4d 6f 64 75 6c 65 29 20 72 65  if (!pModule) re
4290: 74 75 72 6e 20 30 3b 0d 0a 20 20 6d 65 6d 73 65  turn 0;..  memse
42a0: 74 28 70 4d 6f 64 75 6c 65 2c 20 30 2c 20 73 69  t(pModule, 0, si
42b0: 7a 65 6f 66 28 2a 70 4d 6f 64 75 6c 65 29 29 3b  zeof(*pModule));
42c0: 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 69 56 65  ..  pModule->iVe
42d0: 72 73 69 6f 6e 20 3d 20 69 56 65 72 73 69 6f 6e  rsion = iVersion
42e0: 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  ;..  pModule->xC
42f0: 72 65 61 74 65 20 3d 20 78 43 72 65 61 74 65 3b  reate = xCreate;
4300: 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f  ..  pModule->xCo
4310: 6e 6e 65 63 74 20 3d 20 78 43 6f 6e 6e 65 63 74  nnect = xConnect
4320: 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 42  ;..  pModule->xB
4330: 65 73 74 49 6e 64 65 78 20 3d 20 78 42 65 73 74  estIndex = xBest
4340: 49 6e 64 65 78 3b 0d 0a 20 20 70 4d 6f 64 75 6c  Index;..  pModul
4350: 65 2d 3e 78 44 69 73 63 6f 6e 6e 65 63 74 20 3d  e->xDisconnect =
4360: 20 78 44 69 73 63 6f 6e 6e 65 63 74 3b 0d 0a 20   xDisconnect;.. 
4370: 20 70 4d 6f 64 75 6c 65 2d 3e 78 44 65 73 74 72   pModule->xDestr
4380: 6f 79 20 3d 20 78 44 65 73 74 72 6f 79 3b 0d 0a  oy = xDestroy;..
4390: 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e    pModule->xOpen
43a0: 20 3d 20 78 4f 70 65 6e 3b 0d 0a 20 20 70 4d 6f   = xOpen;..  pMo
43b0: 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 20 3d 20 78  dule->xClose = x
43c0: 43 6c 6f 73 65 3b 0d 0a 20 20 70 4d 6f 64 75 6c  Close;..  pModul
43d0: 65 2d 3e 78 46 69 6c 74 65 72 20 3d 20 78 46 69  e->xFilter = xFi
43e0: 6c 74 65 72 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65  lter;..  pModule
43f0: 2d 3e 78 4e 65 78 74 20 3d 20 78 4e 65 78 74 3b  ->xNext = xNext;
4400: 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f  ..  pModule->xEo
4410: 66 20 3d 20 78 45 6f 66 3b 0d 0a 20 20 70 4d 6f  f = xEof;..  pMo
4420: 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 3d 20  dule->xColumn = 
4430: 78 43 6f 6c 75 6d 6e 3b 0d 0a 20 20 70 4d 6f 64  xColumn;..  pMod
4440: 75 6c 65 2d 3e 78 52 6f 77 69 64 20 3d 20 78 52  ule->xRowid = xR
4450: 6f 77 69 64 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65  owid;..  pModule
4460: 2d 3e 78 55 70 64 61 74 65 20 3d 20 78 55 70 64  ->xUpdate = xUpd
4470: 61 74 65 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d  ate;..  pModule-
4480: 3e 78 42 65 67 69 6e 20 3d 20 78 42 65 67 69 6e  >xBegin = xBegin
4490: 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 53  ;..  pModule->xS
44a0: 79 6e 63 20 3d 20 78 53 79 6e 63 3b 0d 0a 20 20  ync = xSync;..  
44b0: 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6d 6d 69 74  pModule->xCommit
44c0: 20 3d 20 78 43 6f 6d 6d 69 74 3b 0d 0a 20 20 70   = xCommit;..  p
44d0: 4d 6f 64 75 6c 65 2d 3e 78 52 6f 6c 6c 62 61 63  Module->xRollbac
44e0: 6b 20 3d 20 78 52 6f 6c 6c 62 61 63 6b 3b 0d 0a  k = xRollback;..
44f0: 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6e 64    pModule->xFind
4500: 46 75 6e 63 74 69 6f 6e 20 3d 20 78 46 69 6e 64  Function = xFind
4510: 46 75 6e 63 74 69 6f 6e 3b 0d 0a 20 20 70 4d 6f  Function;..  pMo
4520: 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 3d 20  dule->xRename = 
4530: 78 52 65 6e 61 6d 65 3b 0d 0a 20 20 70 4d 6f 64  xRename;..  pMod
4540: 75 6c 65 2d 3e 78 53 61 76 65 70 6f 69 6e 74 20  ule->xSavepoint 
4550: 3d 20 78 53 61 76 65 70 6f 69 6e 74 3b 0d 0a 20  = xSavepoint;.. 
4560: 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6c 65 61   pModule->xRelea
4570: 73 65 20 3d 20 78 52 65 6c 65 61 73 65 3b 0d 0a  se = xRelease;..
4580: 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 6c 6c    pModule->xRoll
4590: 62 61 63 6b 54 6f 20 3d 20 78 52 6f 6c 6c 62 61  backTo = xRollba
45a0: 63 6b 54 6f 3b 0d 0a 20 20 72 65 74 75 72 6e 20  ckTo;..  return 
45b0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 64  sqlite3_create_d
45c0: 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c 65  isposable_module
45d0: 28 64 62 2c 20 7a 4e 61 6d 65 2c 20 70 4d 6f 64  (db, zName, pMod
45e0: 75 6c 65 2c 20 70 43 6c 69 65 6e 74 44 61 74 61  ule, pClientData
45f0: 2c 20 78 44 65 73 74 72 6f 79 4d 6f 64 75 6c 65  , xDestroyModule
4600: 29 3b 0d 0a 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d  );..}..#endif...
4610: 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20  .SQLITE_API int 
4620: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 62  WINAPI sqlite3_b
4630: 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72  ind_double_inter
4640: 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  op(sqlite3_stmt 
4650: 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c  *stmt, int iCol,
4660: 20 64 6f 75 62 6c 65 20 2a 76 61 6c 29 0d 0a 7b   double *val)..{
4670: 0d 0a 20 20 69 66 20 28 21 76 61 6c 29 20 72 65  ..  if (!val) re
4680: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
4690: 52 3b 0d 0a 20 20 72 65 74 75 72 6e 20 73 71 6c  R;..  return sql
46a0: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
46b0: 28 73 74 6d 74 2c 69 43 6f 6c 2c 2a 76 61 6c 29  (stmt,iCol,*val)
46c0: 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  ;..}....SQLITE_A
46d0: 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71  PI int WINAPI sq
46e0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
46f0: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
4700: 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74  _stmt *stmt, int
4710: 20 69 43 6f 6c 2c 20 73 71 6c 69 74 65 5f 69 6e   iCol, sqlite_in
4720: 74 36 34 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 20 20  t64 *val)..{..  
4730: 69 66 20 28 21 76 61 6c 29 20 72 65 74 75 72 6e  if (!val) return
4740: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0d 0a   SQLITE_ERROR;..
4750: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
4760: 5f 62 69 6e 64 5f 69 6e 74 36 34 28 73 74 6d 74  _bind_int64(stmt
4770: 2c 69 43 6f 6c 2c 2a 76 61 6c 29 3b 0d 0a 7d 0d  ,iCol,*val);..}.
4780: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f  ...SQLITE_API co
4790: 6e 73 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50  nst char * WINAP
47a0: 49 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  I sqlite3_bind_p
47b0: 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 5f 69 6e  arameter_name_in
47c0: 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74  terop(sqlite3_st
47d0: 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43  mt *stmt, int iC
47e0: 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a  ol, int *plen)..
47f0: 7b 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  {..  const char 
4800: 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f  *pval = sqlite3_
4810: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
4820: 61 6d 65 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b  ame(stmt, iCol);
4830: 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70  ..  if (plen) *p
4840: 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20 73 74 72  len = pval ? str
4850: 6c 65 6e 28 70 76 61 6c 29 20 3a 20 30 3b 0d 0a  len(pval) : 0;..
4860: 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a    return pval;..
4870: 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20  }....SQLITE_API 
4880: 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 57 49 4e  const char * WIN
4890: 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  API sqlite3_colu
48a0: 6d 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28  mn_name_interop(
48b0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74  sqlite3_stmt *st
48c0: 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e  mt, int iCol, in
48d0: 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63  t *plen)..{..  c
48e0: 6f 6e 73 74 20 63 68 61 72 20 2a 70 76 61 6c 20  onst char *pval 
48f0: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
4900: 5f 6e 61 6d 65 28 73 74 6d 74 2c 20 69 43 6f 6c  _name(stmt, iCol
4910: 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20  );..  if (plen) 
4920: 2a 70 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20 73  *plen = pval ? s
4930: 74 72 6c 65 6e 28 70 76 61 6c 29 20 3a 20 30 3b  trlen(pval) : 0;
4940: 0d 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b  ..  return pval;
4950: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
4960: 49 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 20 57  I const void * W
4970: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f  INAPI sqlite3_co
4980: 6c 75 6d 6e 5f 6e 61 6d 65 31 36 5f 69 6e 74 65  lumn_name16_inte
4990: 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  rop(sqlite3_stmt
49a0: 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c   *stmt, int iCol
49b0: 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d  , int *plen)..{.
49c0: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  .  const void *p
49d0: 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  val = sqlite3_co
49e0: 6c 75 6d 6e 5f 6e 61 6d 65 31 36 28 73 74 6d 74  lumn_name16(stmt
49f0: 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 69 66 20 28  , iCol);..  if (
4a00: 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 70 76  plen) *plen = pv
4a10: 61 6c 20 3f 20 77 63 73 6c 65 6e 28 28 77 63 68  al ? wcslen((wch
4a20: 61 72 5f 74 20 2a 29 70 76 61 6c 29 20 2a 20 73  ar_t *)pval) * s
4a30: 69 7a 65 6f 66 28 77 63 68 61 72 5f 74 29 20 3a  izeof(wchar_t) :
4a40: 20 30 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70 76   0;..  return pv
4a50: 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45  al;..}....SQLITE
4a60: 5f 41 50 49 20 63 6f 6e 73 74 20 63 68 61 72 20  _API const char 
4a70: 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  * WINAPI sqlite3
4a80: 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65  _column_decltype
4a90: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
4aa0: 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74  _stmt *stmt, int
4ab0: 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e   iCol, int *plen
4ac0: 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 63 68  )..{..  const ch
4ad0: 61 72 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74  ar *pval = sqlit
4ae0: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  e3_column_declty
4af0: 70 65 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d  pe(stmt, iCol);.
4b00: 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c  .  if (plen) *pl
4b10: 65 6e 20 3d 20 70 76 61 6c 20 3f 20 73 74 72 6c  en = pval ? strl
4b20: 65 6e 28 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20  en(pval) : 0;.. 
4b30: 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d   return pval;..}
4b40: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63  ....SQLITE_API c
4b50: 6f 6e 73 74 20 76 6f 69 64 20 2a 20 57 49 4e 41  onst void * WINA
4b60: 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  PI sqlite3_colum
4b70: 6e 5f 64 65 63 6c 74 79 70 65 31 36 5f 69 6e 74  n_decltype16_int
4b80: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
4b90: 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f  t *stmt, int iCo
4ba0: 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b  l, int *plen)..{
4bb0: 0d 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ..  const void *
4bc0: 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  pval = sqlite3_c
4bd0: 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36  olumn_decltype16
4be0: 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20  (stmt, iCol);.. 
4bf0: 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e   if (plen) *plen
4c00: 20 3d 20 70 76 61 6c 20 3f 20 77 63 73 6c 65 6e   = pval ? wcslen
4c10: 28 28 77 63 68 61 72 5f 74 20 2a 29 70 76 61 6c  ((wchar_t *)pval
4c20: 29 20 2a 20 73 69 7a 65 6f 66 28 77 63 68 61 72  ) * sizeof(wchar
4c30: 5f 74 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75  _t) : 0;..  retu
4c40: 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53  rn pval;..}....S
4c50: 51 4c 49 54 45 5f 41 50 49 20 76 6f 69 64 20 57  QLITE_API void W
4c60: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f  INAPI sqlite3_co
4c70: 6c 75 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74 65  lumn_double_inte
4c80: 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  rop(sqlite3_stmt
4c90: 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c   *stmt, int iCol
4ca0: 2c 20 64 6f 75 62 6c 65 20 2a 76 61 6c 29 0d 0a  , double *val)..
4cb0: 7b 0d 0a 20 20 69 66 20 28 21 76 61 6c 29 20 72  {..  if (!val) r
4cc0: 65 74 75 72 6e 3b 0d 0a 20 20 2a 76 61 6c 20 3d  eturn;..  *val =
4cd0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4ce0: 64 6f 75 62 6c 65 28 73 74 6d 74 2c 69 43 6f 6c  double(stmt,iCol
4cf0: 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f  );..}....SQLITE_
4d00: 41 50 49 20 76 6f 69 64 20 57 49 4e 41 50 49 20  API void WINAPI 
4d10: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
4d20: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 73 71 6c  nt64_interop(sql
4d30: 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c  ite3_stmt *stmt,
4d40: 20 69 6e 74 20 69 43 6f 6c 2c 20 73 71 6c 69 74   int iCol, sqlit
4d50: 65 5f 69 6e 74 36 34 20 2a 76 61 6c 29 0d 0a 7b  e_int64 *val)..{
4d60: 0d 0a 20 20 69 66 20 28 21 76 61 6c 29 20 72 65  ..  if (!val) re
4d70: 74 75 72 6e 3b 0d 0a 20 20 2a 76 61 6c 20 3d 20  turn;..  *val = 
4d80: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
4d90: 6e 74 36 34 28 73 74 6d 74 2c 69 43 6f 6c 29 3b  nt64(stmt,iCol);
4da0: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
4db0: 49 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71  I void WINAPI sq
4dc0: 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
4dd0: 74 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f 70 28  t_rowid_interop(
4de0: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 73 71 6c  sqlite3 *db, sql
4df0: 69 74 65 5f 69 6e 74 36 34 20 2a 72 6f 77 49 64  ite_int64 *rowId
4e00: 29 0d 0a 7b 0d 0a 20 20 69 66 20 28 21 72 6f 77  )..{..  if (!row
4e10: 49 64 29 20 72 65 74 75 72 6e 3b 0d 0a 20 20 2a  Id) return;..  *
4e20: 72 6f 77 49 64 20 3d 20 73 71 6c 69 74 65 33 5f  rowId = sqlite3_
4e30: 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
4e40: 64 28 64 62 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c  d(db);..}....SQL
4e50: 49 54 45 5f 41 50 49 20 76 6f 69 64 20 57 49 4e  ITE_API void WIN
4e60: 41 50 49 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f  API sqlite3_memo
4e70: 72 79 5f 75 73 65 64 5f 69 6e 74 65 72 6f 70 28  ry_used_interop(
4e80: 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a 6e 42  sqlite_int64 *nB
4e90: 79 74 65 73 29 0d 0a 7b 0d 0a 20 20 69 66 20 28  ytes)..{..  if (
4ea0: 21 6e 42 79 74 65 73 29 20 72 65 74 75 72 6e 3b  !nBytes) return;
4eb0: 0d 0a 20 20 2a 6e 42 79 74 65 73 20 3d 20 73 71  ..  *nBytes = sq
4ec0: 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65  lite3_memory_use
4ed0: 64 28 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  d();..}....SQLIT
4ee0: 45 5f 41 50 49 20 76 6f 69 64 20 57 49 4e 41 50  E_API void WINAP
4ef0: 49 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79  I sqlite3_memory
4f00: 5f 68 69 67 68 77 61 74 65 72 5f 69 6e 74 65 72  _highwater_inter
4f10: 6f 70 28 69 6e 74 20 72 65 73 65 74 46 6c 61 67  op(int resetFlag
4f20: 2c 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a  , sqlite_int64 *
4f30: 6e 42 79 74 65 73 29 0d 0a 7b 0d 0a 20 20 69 66  nBytes)..{..  if
4f40: 20 28 21 6e 42 79 74 65 73 29 20 72 65 74 75 72   (!nBytes) retur
4f50: 6e 3b 0d 0a 20 20 2a 6e 42 79 74 65 73 20 3d 20  n;..  *nBytes = 
4f60: 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68  sqlite3_memory_h
4f70: 69 67 68 77 61 74 65 72 28 72 65 73 65 74 46 6c  ighwater(resetFl
4f80: 61 67 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  ag);..}....SQLIT
4f90: 45 5f 41 50 49 20 63 6f 6e 73 74 20 75 6e 73 69  E_API const unsi
4fa0: 67 6e 65 64 20 63 68 61 72 20 2a 20 57 49 4e 41  gned char * WINA
4fb0: 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  PI sqlite3_colum
4fc0: 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 73  n_text_interop(s
4fd0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d  qlite3_stmt *stm
4fe0: 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74  t, int iCol, int
4ff0: 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f   *plen)..{..  co
5000: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
5010: 72 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65  r *pval = sqlite
5020: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74  3_column_text(st
5030: 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 69 66  mt, iCol);..  if
5040: 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20   (plen) *plen = 
5050: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
5060: 79 74 65 73 28 73 74 6d 74 2c 20 69 43 6f 6c 29  ytes(stmt, iCol)
5070: 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c  ;..  return pval
5080: 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  ;..}....SQLITE_A
5090: 50 49 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 20  PI const void * 
50a0: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63  WINAPI sqlite3_c
50b0: 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 5f 69 6e 74  olumn_text16_int
50c0: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
50d0: 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f  t *stmt, int iCo
50e0: 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b  l, int *plen)..{
50f0: 0d 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ..  const void *
5100: 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  pval = sqlite3_c
5110: 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 73 74 6d  olumn_text16(stm
5120: 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 69 66 20  t, iCol);..  if 
5130: 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 73  (plen) *plen = s
5140: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
5150: 74 65 73 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c  tes16(stmt, iCol
5160: 29 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70 76 61  );..  return pva
5170: 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f  l;..}....SQLITE_
5180: 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73  API int WINAPI s
5190: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 5f  qlite3_finalize_
51a0: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f  interop(sqlite3_
51b0: 73 74 6d 74 20 2a 73 74 6d 74 29 0d 0a 7b 0d 0a  stmt *stmt)..{..
51c0: 20 20 69 6e 74 20 72 65 74 3b 0d 0a 23 69 66 20    int ret;..#if 
51d0: 21 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50  !defined(INTEROP
51e0: 5f 4c 45 47 41 43 59 5f 43 4c 4f 53 45 29 20 26  _LEGACY_CLOSE) &
51f0: 26 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  & SQLITE_VERSION
5200: 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 37 30  _NUMBER >= 30070
5210: 31 34 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65  14....#if define
5220: 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29  d(INTEROP_DEBUG)
5230: 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42   && (INTEROP_DEB
5240: 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42  UG & INTEROP_DEB
5250: 55 47 5f 46 49 4e 41 4c 49 5a 45 29 0d 0a 20 20  UG_FINALIZE)..  
5260: 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65 20  Vdbe *p = (Vdbe 
5270: 2a 29 73 74 6d 74 3b 0d 0a 20 20 73 71 6c 69 74  *)stmt;..  sqlit
5280: 65 33 20 2a 64 62 20 3d 20 70 20 3f 20 70 2d 3e  e3 *db = p ? p->
5290: 64 62 20 3a 20 30 3b 0d 0a 20 20 73 71 6c 69 74  db : 0;..  sqlit
52a0: 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22  e3InteropDebug("
52b0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
52c0: 5f 69 6e 74 65 72 6f 70 28 29 3a 20 63 61 6c 6c  _interop(): call
52d0: 69 6e 67 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  ing sqlite3_fina
52e0: 6c 69 7a 65 28 25 70 2c 20 25 70 29 2e 2e 2e 5c  lize(%p, %p)...\
52f0: 6e 22 2c 20 64 62 2c 20 73 74 6d 74 29 3b 0d 0a  n", db, stmt);..
5300: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 20  #endif....  ret 
5310: 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  = sqlite3_finali
5320: 7a 65 28 73 74 6d 74 29 3b 0d 0a 0d 0a 23 69 66  ze(stmt);....#if
5330: 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50   defined(INTEROP
5340: 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e 54 45  _DEBUG) && (INTE
5350: 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45  ROP_DEBUG & INTE
5360: 52 4f 50 5f 44 45 42 55 47 5f 46 49 4e 41 4c 49  ROP_DEBUG_FINALI
5370: 5a 45 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e  ZE)..  sqlite3In
5380: 74 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69  teropDebug("sqli
5390: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 5f 69 6e 74  te3_finalize_int
53a0: 65 72 6f 70 28 29 3a 20 73 71 6c 69 74 65 33 5f  erop(): sqlite3_
53b0: 66 69 6e 61 6c 69 7a 65 28 25 70 2c 20 25 70 29  finalize(%p, %p)
53c0: 20 72 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22   returned %d.\n"
53d0: 2c 20 64 62 2c 20 73 74 6d 74 2c 20 72 65 74 29  , db, stmt, ret)
53e0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72  ;..#endif....  r
53f0: 65 74 75 72 6e 20 72 65 74 3b 0d 0a 23 65 6c 73  eturn ret;..#els
5400: 65 0d 0a 20 20 56 64 62 65 20 2a 70 3b 0d 0a 20  e..  Vdbe *p;.. 
5410: 20 72 65 74 20 3d 20 53 51 4c 49 54 45 5f 4f 4b   ret = SQLITE_OK
5420: 3b 0d 0a 0d 0a 20 20 70 20 3d 20 28 56 64 62 65  ;....  p = (Vdbe
5430: 20 2a 29 73 74 6d 74 3b 0d 0a 20 20 69 66 20 28   *)stmt;..  if (
5440: 70 29 0d 0a 20 20 7b 0d 0a 20 20 20 20 73 71 6c  p)..  {..    sql
5450: 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62  ite3 *db = p->db
5460: 3b 0d 0a 0d 0a 20 20 20 20 69 66 20 28 64 62 20  ;....    if (db 
5470: 21 3d 20 4e 55 4c 4c 29 0d 0a 20 20 20 20 20 20  != NULL)..      
5480: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e  sqlite3_mutex_en
5490: 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d  ter(db->mutex);.
54a0: 0a 0d 0a 20 20 20 20 69 66 20 28 28 70 2d 3e 6d  ...    if ((p->m
54b0: 61 67 69 63 20 3d 3d 20 56 44 42 45 5f 4d 41 47  agic == VDBE_MAG
54c0: 49 43 5f 44 45 41 44 29 20 26 26 20 28 64 62 20  IC_DEAD) && (db 
54d0: 3d 3d 20 4e 55 4c 4c 29 29 0d 0a 20 20 20 20 7b  == NULL))..    {
54e0: 0d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  ..      sqlite3D
54f0: 62 46 72 65 65 5f 69 6e 74 65 72 6f 70 28 64 62  bFree_interop(db
5500: 2c 20 70 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20  , p);..    }..  
5510: 20 20 65 6c 73 65 0d 0a 20 20 20 20 7b 0d 0a 20    else..    {.. 
5520: 20 20 20 20 20 72 65 74 20 3d 20 73 71 6c 69 74       ret = sqlit
5530: 65 33 5f 66 69 6e 61 6c 69 7a 65 28 73 74 6d 74  e3_finalize(stmt
5540: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
5550: 20 69 66 20 28 64 62 20 21 3d 20 4e 55 4c 4c 29   if (db != NULL)
5560: 0d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ..      sqlite3_
5570: 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e  mutex_leave(db->
5580: 6d 75 74 65 78 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a  mutex);..  }....
5590: 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 23    return ret;..#
55a0: 65 6e 64 69 66 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49  endif..}....SQLI
55b0: 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41 50  TE_API int WINAP
55c0: 49 20 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  I sqlite3_backup
55d0: 5f 66 69 6e 69 73 68 5f 69 6e 74 65 72 6f 70 28  _finish_interop(
55e0: 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a  sqlite3_backup *
55f0: 70 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72 65 74  p)..{..  int ret
5600: 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64  ;....#if defined
5610: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20  (INTEROP_DEBUG) 
5620: 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  && (INTEROP_DEBU
5630: 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55  G & INTEROP_DEBU
5640: 47 5f 42 41 43 4b 55 50 5f 46 49 4e 49 53 48 29  G_BACKUP_FINISH)
5650: 0d 0a 20 20 73 71 6c 69 74 65 33 2a 20 70 44 65  ..  sqlite3* pDe
5660: 73 74 44 62 20 3d 20 70 20 3f 20 70 2d 3e 70 44  stDb = p ? p->pD
5670: 65 73 74 44 62 20 3a 20 30 3b 0d 0a 20 20 73 71  estDb : 0;..  sq
5680: 6c 69 74 65 33 2a 20 70 53 72 63 44 62 20 3d 20  lite3* pSrcDb = 
5690: 70 20 3f 20 70 2d 3e 70 53 72 63 44 62 20 3a 20  p ? p->pSrcDb : 
56a0: 30 3b 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74  0;..  sqlite3Int
56b0: 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74  eropDebug("sqlit
56c0: 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68  e3_backup_finish
56d0: 5f 69 6e 74 65 72 6f 70 28 29 3a 20 63 61 6c 6c  _interop(): call
56e0: 69 6e 67 20 73 71 6c 69 74 65 33 5f 62 61 63 6b  ing sqlite3_back
56f0: 75 70 5f 66 69 6e 69 73 68 28 25 70 2c 20 25 70  up_finish(%p, %p
5700: 2c 20 25 70 29 2e 2e 2e 5c 6e 22 2c 20 70 44 65  , %p)...\n", pDe
5710: 73 74 44 62 2c 20 70 53 72 63 44 62 2c 20 70 29  stDb, pSrcDb, p)
5720: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72  ;..#endif....  r
5730: 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 62 61 63  et = sqlite3_bac
5740: 6b 75 70 5f 66 69 6e 69 73 68 28 70 29 3b 0d 0a  kup_finish(p);..
5750: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
5760: 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20  TEROP_DEBUG) && 
5770: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26  (INTEROP_DEBUG &
5780: 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 42   INTEROP_DEBUG_B
5790: 41 43 4b 55 50 5f 46 49 4e 49 53 48 29 0d 0a 20  ACKUP_FINISH).. 
57a0: 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44   sqlite3InteropD
57b0: 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 62 61  ebug("sqlite3_ba
57c0: 63 6b 75 70 5f 66 69 6e 69 73 68 5f 69 6e 74 65  ckup_finish_inte
57d0: 72 6f 70 28 29 3a 20 73 71 6c 69 74 65 33 5f 62  rop(): sqlite3_b
57e0: 61 63 6b 75 70 5f 66 69 6e 69 73 68 28 25 70 2c  ackup_finish(%p,
57f0: 20 25 70 2c 20 25 70 29 20 72 65 74 75 72 6e 65   %p, %p) returne
5800: 64 20 25 64 2e 5c 6e 22 2c 20 70 44 65 73 74 44  d %d.\n", pDestD
5810: 62 2c 20 70 53 72 63 44 62 2c 20 70 2c 20 72 65  b, pSrcDb, p, re
5820: 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  t);..#endif.... 
5830: 20 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d   return ret;..}.
5840: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e  ...SQLITE_API in
5850: 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  t WINAPI sqlite3
5860: 5f 72 65 73 65 74 5f 69 6e 74 65 72 6f 70 28 73  _reset_interop(s
5870: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d  qlite3_stmt *stm
5880: 74 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72 65 74  t)..{..  int ret
5890: 3b 0d 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
58a0: 49 4e 54 45 52 4f 50 5f 4c 45 47 41 43 59 5f 43  INTEROP_LEGACY_C
58b0: 4c 4f 53 45 29 20 26 26 20 53 51 4c 49 54 45 5f  LOSE) && SQLITE_
58c0: 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e  VERSION_NUMBER >
58d0: 3d 20 33 30 30 37 30 31 34 0d 0a 0d 0a 23 69 66  = 3007014....#if
58e0: 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50   defined(INTEROP
58f0: 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e 54 45  _DEBUG) && (INTE
5900: 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45  ROP_DEBUG & INTE
5910: 52 4f 50 5f 44 45 42 55 47 5f 52 45 53 45 54 29  ROP_DEBUG_RESET)
5920: 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72  ..  sqlite3Inter
5930: 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33  opDebug("sqlite3
5940: 5f 72 65 73 65 74 5f 69 6e 74 65 72 6f 70 28 29  _reset_interop()
5950: 3a 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65  : calling sqlite
5960: 33 5f 72 65 73 65 74 28 25 70 29 2e 2e 2e 5c 6e  3_reset(%p)...\n
5970: 22 2c 20 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69  ", stmt);..#endi
5980: 66 0d 0a 0d 0a 20 20 72 65 74 20 3d 20 73 71 6c  f....  ret = sql
5990: 69 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74 29  ite3_reset(stmt)
59a0: 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64  ;....#if defined
59b0: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20  (INTEROP_DEBUG) 
59c0: 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  && (INTEROP_DEBU
59d0: 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55  G & INTEROP_DEBU
59e0: 47 5f 52 45 53 45 54 29 0d 0a 20 20 73 71 6c 69  G_RESET)..  sqli
59f0: 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28  te3InteropDebug(
5a00: 22 73 71 6c 69 74 65 33 5f 72 65 73 65 74 5f 69  "sqlite3_reset_i
5a10: 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c 69 74 65  nterop(): sqlite
5a20: 33 5f 72 65 73 65 74 28 25 70 29 20 72 65 74 75  3_reset(%p) retu
5a30: 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 73 74 6d  rned %d.\n", stm
5a40: 74 2c 20 72 65 74 29 3b 0d 0a 23 65 6e 64 69 66  t, ret);..#endif
5a50: 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 72 65 74  ....  return ret
5a60: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 69 66 20 28  ;..#else..  if (
5a70: 73 74 6d 74 20 26 26 20 28 28 56 64 62 65 20 2a  stmt && ((Vdbe *
5a80: 29 73 74 6d 74 29 2d 3e 6d 61 67 69 63 20 3d 3d  )stmt)->magic ==
5a90: 20 56 44 42 45 5f 4d 41 47 49 43 5f 44 45 41 44   VDBE_MAGIC_DEAD
5aa0: 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ) return SQLITE_
5ab0: 53 43 48 45 4d 41 3b 0d 0a 20 20 72 65 74 20 3d  SCHEMA;..  ret =
5ac0: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 73   sqlite3_reset(s
5ad0: 74 6d 74 29 3b 0d 0a 20 20 72 65 74 75 72 6e 20  tmt);..  return 
5ae0: 72 65 74 3b 0d 0a 23 65 6e 64 69 66 0d 0a 7d 0d  ret;..#endif..}.
5af0: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e  ...SQLITE_API in
5b00: 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  t WINAPI sqlite3
5b10: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
5b20: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
5b30: 20 2a 70 73 71 6c 2c 20 63 6f 6e 73 74 20 63 68   *psql, const ch
5b40: 61 72 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d  ar *zFunctionNam
5b50: 65 2c 20 69 6e 74 20 6e 41 72 67 2c 20 69 6e 74  e, int nArg, int
5b60: 20 65 54 65 78 74 52 65 70 2c 20 76 6f 69 64 20   eTextRep, void 
5b70: 2a 70 76 55 73 65 72 2c 20 53 51 4c 49 54 45 55  *pvUser, SQLITEU
5b80: 53 45 52 46 55 4e 43 20 66 75 6e 63 2c 20 53 51  SERFUNC func, SQ
5b90: 4c 49 54 45 55 53 45 52 46 55 4e 43 20 66 75 6e  LITEUSERFUNC fun
5ba0: 63 73 74 65 70 2c 20 53 51 4c 49 54 45 46 55 4e  cstep, SQLITEFUN
5bb0: 43 46 49 4e 41 4c 20 66 75 6e 63 66 69 6e 61 6c  CFINAL funcfinal
5bc0: 2c 20 69 6e 74 20 6e 65 65 64 43 6f 6c 6c 53 65  , int needCollSe
5bd0: 71 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 6e 3b 0d  q)..{..  int n;.
5be0: 0a 0d 0a 20 20 69 66 20 28 65 54 65 78 74 52 65  ...  if (eTextRe
5bf0: 70 20 3d 3d 20 53 51 4c 49 54 45 5f 55 54 46 31  p == SQLITE_UTF1
5c00: 36 29 0d 0a 20 20 20 20 65 54 65 78 74 52 65 70  6)..    eTextRep
5c10: 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e   = SQLITE_UTF16N
5c20: 41 54 49 56 45 3b 0d 0a 0d 0a 20 20 6e 20 3d 20  ATIVE;....  n = 
5c30: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
5c40: 75 6e 63 74 69 6f 6e 28 70 73 71 6c 2c 20 7a 46  unction(psql, zF
5c50: 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41 72  unctionName, nAr
5c60: 67 2c 20 65 54 65 78 74 52 65 70 2c 20 70 76 55  g, eTextRep, pvU
5c70: 73 65 72 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73  ser, func, funcs
5c80: 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b  tep, funcfinal);
5c90: 0d 0a 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c  ..  if (n == SQL
5ca0: 49 54 45 5f 4f 4b 29 0d 0a 20 20 7b 0d 0a 20 20  ITE_OK)..  {..  
5cb0: 20 20 69 66 20 28 6e 65 65 64 43 6f 6c 6c 53 65    if (needCollSe
5cc0: 71 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  q)..    {..     
5cd0: 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 20   FuncDef *pFunc 
5ce0: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e  = sqlite3FindFun
5cf0: 63 74 69 6f 6e 28 70 73 71 6c 2c 20 7a 46 75 6e  ction(psql, zFun
5d00: 63 74 69 6f 6e 4e 61 6d 65 2c 20 73 74 72 6c 65  ctionName, strle
5d10: 6e 28 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 29  n(zFunctionName)
5d20: 2c 20 6e 41 72 67 2c 20 65 54 65 78 74 52 65 70  , nArg, eTextRep
5d30: 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20 69 66 28  , 0);..      if(
5d40: 20 70 46 75 6e 63 20 29 0d 0a 20 20 20 20 20 20   pFunc )..      
5d50: 7b 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45  {..#if SQLITE_VE
5d60: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20  RSION_NUMBER >= 
5d70: 33 30 30 38 30 30 31 0d 0a 20 20 20 20 20 20 20  3008001..       
5d80: 20 70 46 75 6e 63 2d 3e 66 75 6e 63 46 6c 61 67   pFunc->funcFlag
5d90: 73 20 7c 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43  s |= SQLITE_FUNC
5da0: 5f 4e 45 45 44 43 4f 4c 4c 3b 0d 0a 23 65 6c 73  _NEEDCOLL;..#els
5db0: 65 0d 0a 20 20 20 20 20 20 20 20 70 46 75 6e 63  e..        pFunc
5dc0: 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54  ->flags |= SQLIT
5dd0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 3b  E_FUNC_NEEDCOLL;
5de0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
5df0: 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d  }..    }..  }...
5e00: 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 7d 0d  .  return n;..}.
5e10: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76 6f  ...SQLITE_API vo
5e20: 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  id WINAPI sqlite
5e30: 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69  3_value_double_i
5e40: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 76  nterop(sqlite3_v
5e50: 61 6c 75 65 20 2a 70 76 61 6c 2c 20 64 6f 75 62  alue *pval, doub
5e60: 6c 65 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 20 20 69  le *val)..{..  i
5e70: 66 20 28 21 76 61 6c 29 20 72 65 74 75 72 6e 3b  f (!val) return;
5e80: 0d 0a 20 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74  ..  *val = sqlit
5e90: 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28  e3_value_double(
5ea0: 70 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c  pval);..}....SQL
5eb0: 49 54 45 5f 41 50 49 20 76 6f 69 64 20 57 49 4e  ITE_API void WIN
5ec0: 41 50 49 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  API sqlite3_valu
5ed0: 65 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  e_int64_interop(
5ee0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
5ef0: 76 61 6c 2c 20 73 71 6c 69 74 65 5f 69 6e 74 36  val, sqlite_int6
5f00: 34 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 20 20 69 66  4 *val)..{..  if
5f10: 20 28 21 76 61 6c 29 20 72 65 74 75 72 6e 3b 0d   (!val) return;.
5f20: 0a 20 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74 65  .  *val = sqlite
5f30: 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28 70 76  3_value_int64(pv
5f40: 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  al);..}....SQLIT
5f50: 45 5f 41 50 49 20 63 6f 6e 73 74 20 75 6e 73 69  E_API const unsi
5f60: 67 6e 65 64 20 63 68 61 72 20 2a 20 57 49 4e 41  gned char * WINA
5f70: 50 49 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  PI sqlite3_value
5f80: 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 71  _text_interop(sq
5f90: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 76 61 6c  lite3_value *val
5fa0: 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d  , int *plen)..{.
5fb0: 0a 20 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  .  const unsigne
5fc0: 64 20 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73  d char *pval = s
5fd0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
5fe0: 74 28 76 61 6c 29 3b 0d 0a 20 20 69 66 20 28 70  t(val);..  if (p
5ff0: 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 73 71 6c  len) *plen = sql
6000: 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73  ite3_value_bytes
6010: 28 76 61 6c 29 3b 0d 0a 20 20 72 65 74 75 72 6e  (val);..  return
6020: 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c   pval;..}....SQL
6030: 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 76 6f  ITE_API const vo
6040: 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69  id * WINAPI sqli
6050: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36  te3_value_text16
6060: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
6070: 5f 76 61 6c 75 65 20 2a 76 61 6c 2c 20 69 6e 74  _value *val, int
6080: 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f   *plen)..{..  co
6090: 6e 73 74 20 76 6f 69 64 20 2a 70 76 61 6c 20 3d  nst void *pval =
60a0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
60b0: 65 78 74 31 36 28 76 61 6c 29 3b 0d 0a 20 20 69  ext16(val);..  i
60c0: 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d  f (plen) *plen =
60d0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62   sqlite3_value_b
60e0: 79 74 65 73 31 36 28 76 61 6c 29 3b 0d 0a 20 20  ytes16(val);..  
60f0: 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d  return pval;..}.
6100: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76 6f  ...SQLITE_API vo
6110: 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  id WINAPI sqlite
6120: 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 5f  3_result_double_
6130: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f  interop(sqlite3_
6140: 63 6f 6e 74 65 78 74 20 2a 70 63 74 78 2c 20 64  context *pctx, d
6150: 6f 75 62 6c 65 20 2a 76 61 6c 29 0d 0a 7b 0d 0a  ouble *val)..{..
6160: 20 20 69 66 20 28 21 76 61 6c 29 20 72 65 74 75    if (!val) retu
6170: 72 6e 3b 0d 0a 20 20 73 71 6c 69 74 65 33 5f 72  rn;..  sqlite3_r
6180: 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 70 63 74  esult_double(pct
6190: 78 2c 20 2a 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a  x, *val);..}....
61a0: 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69 64 20  SQLITE_API void 
61b0: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 72  WINAPI sqlite3_r
61c0: 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e 74 65  esult_int64_inte
61d0: 72 6f 70 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  rop(sqlite3_cont
61e0: 65 78 74 20 2a 70 63 74 78 2c 20 73 71 6c 69 74  ext *pctx, sqlit
61f0: 65 5f 69 6e 74 36 34 20 2a 76 61 6c 29 0d 0a 7b  e_int64 *val)..{
6200: 0d 0a 20 20 69 66 20 28 21 76 61 6c 29 20 72 65  ..  if (!val) re
6210: 74 75 72 6e 3b 0d 0a 20 20 73 71 6c 69 74 65 33  turn;..  sqlite3
6220: 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 70 63  _result_int64(pc
6230: 74 78 2c 20 2a 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d  tx, *val);..}...
6240: 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20  .SQLITE_API int 
6250: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63  WINAPI sqlite3_c
6260: 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61  ontext_collcompa
6270: 72 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  re_interop(sqlit
6280: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 74 78 2c  e3_context *ctx,
6290: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 31 2c   const void *p1,
62a0: 20 69 6e 74 20 70 31 6c 65 6e 2c 20 63 6f 6e 73   int p1len, cons
62b0: 74 20 76 6f 69 64 20 2a 70 32 2c 20 69 6e 74 20  t void *p2, int 
62c0: 70 32 6c 65 6e 29 0d 0a 7b 0d 0a 23 69 66 20 53  p2len)..{..#if S
62d0: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
62e0: 4d 42 45 52 20 3e 3d 20 33 30 30 38 30 30 37 0d  MBER >= 3008007.
62f0: 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c  .  CollSeq *pCol
6300: 6c 20 3d 20 63 74 78 20 3f 20 73 71 6c 69 74 65  l = ctx ? sqlite
6310: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
6320: 63 74 78 29 20 3a 20 30 3b 0d 0a 23 65 6c 73 65  ctx) : 0;..#else
6330: 0d 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f  ..  CollSeq *pCo
6340: 6c 6c 20 3d 20 63 74 78 20 3f 20 63 74 78 2d 3e  ll = ctx ? ctx->
6350: 70 43 6f 6c 6c 20 3a 20 30 3b 0d 0a 23 65 6e 64  pColl : 0;..#end
6360: 69 66 0d 0a 20 20 69 66 20 28 21 63 74 78 20 7c  if..  if (!ctx |
6370: 7c 20 21 63 74 78 2d 3e 70 46 75 6e 63 29 20 72  | !ctx->pFunc) r
6380: 65 74 75 72 6e 20 34 3b 20 2f 2a 20 45 52 52 4f  eturn 4; /* ERRO
6390: 52 20 2a 2f 0d 0a 20 20 69 66 20 28 21 70 43 6f  R */..  if (!pCo
63a0: 6c 6c 20 7c 7c 20 21 70 43 6f 6c 6c 2d 3e 78 43  ll || !pColl->xC
63b0: 6d 70 29 20 72 65 74 75 72 6e 20 33 3b 20 2f 2a  mp) return 3; /*
63c0: 20 45 52 52 4f 52 20 2a 2f 0d 0a 23 69 66 20 53   ERROR */..#if S
63d0: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
63e0: 4d 42 45 52 20 3e 3d 20 33 30 30 38 30 30 31 0d  MBER >= 3008001.
63f0: 0a 20 20 69 66 20 28 28 63 74 78 2d 3e 70 46 75  .  if ((ctx->pFu
6400: 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26 20  nc->funcFlags & 
6410: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
6420: 43 4f 4c 4c 29 20 3d 3d 20 30 29 20 72 65 74 75  COLL) == 0) retu
6430: 72 6e 20 32 3b 20 2f 2a 20 45 52 52 4f 52 20 2a  rn 2; /* ERROR *
6440: 2f 0d 0a 23 65 6c 73 65 0d 0a 20 20 69 66 20 28  /..#else..  if (
6450: 28 63 74 78 2d 3e 70 46 75 6e 63 2d 3e 66 6c 61  (ctx->pFunc->fla
6460: 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43  gs & SQLITE_FUNC
6470: 5f 4e 45 45 44 43 4f 4c 4c 29 20 3d 3d 20 30 29  _NEEDCOLL) == 0)
6480: 20 72 65 74 75 72 6e 20 32 3b 20 2f 2a 20 45 52   return 2; /* ER
6490: 52 4f 52 20 2a 2f 0d 0a 23 65 6e 64 69 66 0d 0a  ROR */..#endif..
64a0: 20 20 72 65 74 75 72 6e 20 70 43 6f 6c 6c 2d 3e    return pColl->
64b0: 78 43 6d 70 28 70 43 6f 6c 6c 2d 3e 70 55 73 65  xCmp(pColl->pUse
64c0: 72 2c 20 70 31 6c 65 6e 2c 20 70 31 2c 20 70 32  r, p1len, p1, p2
64d0: 6c 65 6e 2c 20 70 32 29 3b 0d 0a 7d 0d 0a 0d 0a  len, p2);..}....
64e0: 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74  SQLITE_API const
64f0: 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49 20 73   char * WINAPI s
6500: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63  qlite3_context_c
6510: 6f 6c 6c 73 65 71 5f 69 6e 74 65 72 6f 70 28 73  ollseq_interop(s
6520: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
6530: 63 74 78 2c 20 69 6e 74 20 2a 70 74 79 70 65 2c  ctx, int *ptype,
6540: 20 69 6e 74 20 2a 65 6e 63 2c 20 69 6e 74 20 2a   int *enc, int *
6550: 70 6c 65 6e 29 0d 0a 7b 0d 0a 23 69 66 20 53 51  plen)..{..#if SQ
6560: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
6570: 42 45 52 20 3e 3d 20 33 30 30 38 30 30 37 0d 0a  BER >= 3008007..
6580: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c    CollSeq *pColl
6590: 20 3d 20 63 74 78 20 3f 20 73 71 6c 69 74 65 33   = ctx ? sqlite3
65a0: 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 63  GetFuncCollSeq(c
65b0: 74 78 29 20 3a 20 30 3b 0d 0a 23 65 6c 73 65 0d  tx) : 0;..#else.
65c0: 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c  .  CollSeq *pCol
65d0: 6c 20 3d 20 63 74 78 20 3f 20 63 74 78 2d 3e 70  l = ctx ? ctx->p
65e0: 43 6f 6c 6c 20 3a 20 30 3b 0d 0a 23 65 6e 64 69  Coll : 0;..#endi
65f0: 66 0d 0a 20 20 69 66 20 28 70 74 79 70 65 29 20  f..  if (ptype) 
6600: 2a 70 74 79 70 65 20 3d 20 30 3b 0d 0a 20 20 69  *ptype = 0;..  i
6610: 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d  f (plen) *plen =
6620: 20 30 3b 0d 0a 20 20 69 66 20 28 65 6e 63 29 20   0;..  if (enc) 
6630: 2a 65 6e 63 20 3d 20 30 3b 0d 0a 0d 0a 20 20 69  *enc = 0;....  i
6640: 66 20 28 21 63 74 78 20 7c 7c 20 21 63 74 78 2d  f (!ctx || !ctx-
6650: 3e 70 46 75 6e 63 29 20 72 65 74 75 72 6e 20 4e  >pFunc) return N
6660: 55 4c 4c 3b 0d 0a 23 69 66 20 53 51 4c 49 54 45  ULL;..#if SQLITE
6670: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20  _VERSION_NUMBER 
6680: 3e 3d 20 33 30 30 38 30 30 31 0d 0a 20 20 69 66  >= 3008001..  if
6690: 20 28 28 63 74 78 2d 3e 70 46 75 6e 63 2d 3e 66   ((ctx->pFunc->f
66a0: 75 6e 63 46 6c 61 67 73 20 26 20 53 51 4c 49 54  uncFlags & SQLIT
66b0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
66c0: 20 3d 3d 20 30 29 20 72 65 74 75 72 6e 20 4e 55   == 0) return NU
66d0: 4c 4c 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 69 66  LL;..#else..  if
66e0: 20 28 28 63 74 78 2d 3e 70 46 75 6e 63 2d 3e 66   ((ctx->pFunc->f
66f0: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55  lags & SQLITE_FU
6700: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 20 3d 3d 20  NC_NEEDCOLL) == 
6710: 30 29 20 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d  0) return NULL;.
6720: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 69 66 20  .#endif....  if 
6730: 28 70 43 6f 6c 6c 29 0d 0a 20 20 7b 0d 0a 20 20  (pColl)..  {..  
6740: 20 20 69 66 20 28 65 6e 63 29 20 2a 65 6e 63 20    if (enc) *enc 
6750: 3d 20 70 43 6f 6c 6c 2d 3e 65 6e 63 3b 0d 0a 23  = pColl->enc;..#
6760: 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  if SQLITE_VERSIO
6770: 4e 5f 4e 55 4d 42 45 52 20 3c 20 33 30 30 37 30  N_NUMBER < 30070
6780: 31 30 0d 0a 20 20 20 20 69 66 20 28 70 74 79 70  10..    if (ptyp
6790: 65 29 20 2a 70 74 79 70 65 20 3d 20 70 43 6f 6c  e) *ptype = pCol
67a0: 6c 2d 3e 74 79 70 65 3b 0d 0a 23 65 6e 64 69 66  l->type;..#endif
67b0: 0d 0a 20 20 20 20 69 66 20 28 70 6c 65 6e 29 20  ..    if (plen) 
67c0: 2a 70 6c 65 6e 20 3d 20 70 43 6f 6c 6c 2d 3e 7a  *plen = pColl->z
67d0: 4e 61 6d 65 20 3f 20 73 74 72 6c 65 6e 28 70 43  Name ? strlen(pC
67e0: 6f 6c 6c 2d 3e 7a 4e 61 6d 65 29 20 3a 20 30 3b  oll->zName) : 0;
67f0: 0d 0a 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 70  ....    return p
6800: 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 3b 0d 0a 20 20  Coll->zName;..  
6810: 7d 0d 0a 20 20 72 65 74 75 72 6e 20 4e 55 4c 4c  }..  return NULL
6820: 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  ;..}....SQLITE_A
6830: 50 49 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20  PI const char * 
6840: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63  WINAPI sqlite3_c
6850: 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e  olumn_database_n
6860: 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  ame_interop(sqli
6870: 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20  te3_stmt *stmt, 
6880: 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70  int iCol, int *p
6890: 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74  len)..{..  const
68a0: 20 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73 71   char *pval = sq
68b0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74  lite3_column_dat
68c0: 61 62 61 73 65 5f 6e 61 6d 65 28 73 74 6d 74 2c  abase_name(stmt,
68d0: 20 69 43 6f 6c 29 3b 0d 0a 20 20 69 66 20 28 70   iCol);..  if (p
68e0: 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 70 76 61  len) *plen = pva
68f0: 6c 20 3f 20 73 74 72 6c 65 6e 28 70 76 61 6c 29  l ? strlen(pval)
6900: 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72 6e 20   : 0;..  return 
6910: 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49  pval;..}....SQLI
6920: 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 76 6f 69  TE_API const voi
6930: 64 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74  d * WINAPI sqlit
6940: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61  e3_column_databa
6950: 73 65 5f 6e 61 6d 65 31 36 5f 69 6e 74 65 72 6f  se_name16_intero
6960: 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  p(sqlite3_stmt *
6970: 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20  stmt, int iCol, 
6980: 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20  int *plen)..{.. 
6990: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 61   const void *pva
69a0: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  l = sqlite3_colu
69b0: 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65  mn_database_name
69c0: 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d  16(stmt, iCol);.
69d0: 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c  .  if (plen) *pl
69e0: 65 6e 20 3d 20 70 76 61 6c 20 3f 20 77 63 73 6c  en = pval ? wcsl
69f0: 65 6e 28 28 77 63 68 61 72 5f 74 20 2a 29 70 76  en((wchar_t *)pv
6a00: 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77 63 68  al) * sizeof(wch
6a10: 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 20 20 72 65  ar_t) : 0;..  re
6a20: 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d  turn pval;..}...
6a30: 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73  .SQLITE_API cons
6a40: 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49 20  t char * WINAPI 
6a50: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
6a60: 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f  able_name_intero
6a70: 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  p(sqlite3_stmt *
6a80: 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20  stmt, int iCol, 
6a90: 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20  int *plen)..{.. 
6aa0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 76 61   const char *pva
6ab0: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  l = sqlite3_colu
6ac0: 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73 74  mn_table_name(st
6ad0: 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 69 66  mt, iCol);..  if
6ae0: 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20   (plen) *plen = 
6af0: 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e 28 70 76  pval ? strlen(pv
6b00: 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75  al) : 0;..  retu
6b10: 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53  rn pval;..}....S
6b20: 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20  QLITE_API const 
6b30: 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71  void * WINAPI sq
6b40: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62  lite3_column_tab
6b50: 6c 65 5f 6e 61 6d 65 31 36 5f 69 6e 74 65 72 6f  le_name16_intero
6b60: 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  p(sqlite3_stmt *
6b70: 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20  stmt, int iCol, 
6b80: 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20  int *plen)..{.. 
6b90: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 61   const void *pva
6ba0: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  l = sqlite3_colu
6bb0: 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31 36 28  mn_table_name16(
6bc0: 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20  stmt, iCol);..  
6bd0: 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20  if (plen) *plen 
6be0: 3d 20 70 76 61 6c 20 3f 20 77 63 73 6c 65 6e 28  = pval ? wcslen(
6bf0: 28 77 63 68 61 72 5f 74 20 2a 29 70 76 61 6c 29  (wchar_t *)pval)
6c00: 20 2a 20 73 69 7a 65 6f 66 28 77 63 68 61 72 5f   * sizeof(wchar_
6c10: 74 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72  t) : 0;..  retur
6c20: 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51  n pval;..}....SQ
6c30: 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 63  LITE_API const c
6c40: 68 61 72 20 2a 20 57 49 4e 41 50 49 20 73 71 6c  har * WINAPI sql
6c50: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
6c60: 69 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28  in_name_interop(
6c70: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74  sqlite3_stmt *st
6c80: 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e  mt, int iCol, in
6c90: 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63  t *plen)..{..  c
6ca0: 6f 6e 73 74 20 63 68 61 72 20 2a 70 76 61 6c 20  onst char *pval 
6cb0: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
6cc0: 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 28 73 74 6d  _origin_name(stm
6cd0: 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 69 66 20  t, iCol);..  if 
6ce0: 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 70  (plen) *plen = p
6cf0: 76 61 6c 20 3f 20 73 74 72 6c 65 6e 28 70 76 61  val ? strlen(pva
6d00: 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72  l) : 0;..  retur
6d10: 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51  n pval;..}....SQ
6d20: 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 76  LITE_API const v
6d30: 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71 6c  oid * WINAPI sql
6d40: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
6d50: 69 6e 5f 6e 61 6d 65 31 36 5f 69 6e 74 65 72 6f  in_name16_intero
6d60: 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  p(sqlite3_stmt *
6d70: 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20  stmt, int iCol, 
6d80: 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20  int *plen)..{.. 
6d90: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 61   const void *pva
6da0: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  l = sqlite3_colu
6db0: 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 31 36  mn_origin_name16
6dc0: 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20  (stmt, iCol);.. 
6dd0: 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e   if (plen) *plen
6de0: 20 3d 20 70 76 61 6c 20 3f 20 77 63 73 6c 65 6e   = pval ? wcslen
6df0: 28 28 77 63 68 61 72 5f 74 20 2a 29 70 76 61 6c  ((wchar_t *)pval
6e00: 29 20 2a 20 73 69 7a 65 6f 66 28 77 63 68 61 72  ) * sizeof(wchar
6e10: 5f 74 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75  _t) : 0;..  retu
6e20: 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53  rn pval;..}....S
6e30: 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49  QLITE_API int WI
6e40: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 74 61 62  NAPI sqlite3_tab
6e50: 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
6e60: 74 61 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  ta_interop(sqlit
6e70: 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68  e3 *db, const ch
6e80: 61 72 20 2a 7a 44 62 4e 61 6d 65 2c 20 63 6f 6e  ar *zDbName, con
6e90: 73 74 20 63 68 61 72 20 2a 7a 54 61 62 6c 65 4e  st char *zTableN
6ea0: 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  ame, const char 
6eb0: 2a 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 63 68  *zColumnName, ch
6ec0: 61 72 20 2a 2a 70 7a 44 61 74 61 54 79 70 65 2c  ar **pzDataType,
6ed0: 20 63 68 61 72 20 2a 2a 70 7a 43 6f 6c 6c 53 65   char **pzCollSe
6ee0: 71 2c 20 69 6e 74 20 2a 70 4e 6f 74 4e 75 6c 6c  q, int *pNotNull
6ef0: 2c 20 69 6e 74 20 2a 70 50 72 69 6d 61 72 79 4b  , int *pPrimaryK
6f00: 65 79 2c 20 69 6e 74 20 2a 70 41 75 74 6f 69 6e  ey, int *pAutoin
6f10: 63 2c 20 69 6e 74 20 2a 70 64 74 4c 65 6e 2c 20  c, int *pdtLen, 
6f20: 69 6e 74 20 2a 70 63 73 4c 65 6e 29 0d 0a 7b 0d  int *pcsLen)..{.
6f30: 0a 20 20 69 6e 74 20 6e 3b 0d 0a 0d 0a 20 20 6e  .  int n;....  n
6f40: 20 3d 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65   = sqlite3_table
6f50: 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61  _column_metadata
6f60: 28 64 62 2c 20 7a 44 62 4e 61 6d 65 2c 20 7a 54  (db, zDbName, zT
6f70: 61 62 6c 65 4e 61 6d 65 2c 20 7a 43 6f 6c 75 6d  ableName, zColum
6f80: 6e 4e 61 6d 65 2c 20 70 7a 44 61 74 61 54 79 70  nName, pzDataTyp
6f90: 65 2c 20 70 7a 43 6f 6c 6c 53 65 71 2c 20 70 4e  e, pzCollSeq, pN
6fa0: 6f 74 4e 75 6c 6c 2c 20 70 50 72 69 6d 61 72 79  otNull, pPrimary
6fb0: 4b 65 79 2c 20 70 41 75 74 6f 69 6e 63 29 3b 0d  Key, pAutoinc);.
6fc0: 0a 0d 0a 20 20 69 66 20 28 70 64 74 4c 65 6e 29  ...  if (pdtLen)
6fd0: 20 2a 70 64 74 4c 65 6e 20 3d 20 28 70 7a 44 61   *pdtLen = (pzDa
6fe0: 74 61 54 79 70 65 20 26 26 20 2a 70 7a 44 61 74  taType && *pzDat
6ff0: 61 54 79 70 65 29 20 3f 20 73 74 72 6c 65 6e 28  aType) ? strlen(
7000: 2a 70 7a 44 61 74 61 54 79 70 65 29 20 3a 20 30  *pzDataType) : 0
7010: 3b 0d 0a 20 20 69 66 20 28 70 63 73 4c 65 6e 29  ;..  if (pcsLen)
7020: 20 2a 70 63 73 4c 65 6e 20 3d 20 28 70 7a 43 6f   *pcsLen = (pzCo
7030: 6c 6c 53 65 71 20 26 26 20 2a 70 7a 43 6f 6c 6c  llSeq && *pzColl
7040: 53 65 71 29 20 3f 20 73 74 72 6c 65 6e 28 2a 70  Seq) ? strlen(*p
7050: 7a 43 6f 6c 6c 53 65 71 29 20 3a 20 30 3b 0d 0a  zCollSeq) : 0;..
7060: 0d 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 7d  ..  return n;..}
7070: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69  ....SQLITE_API i
7080: 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  nt WINAPI sqlite
7090: 33 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69  3_index_column_i
70a0: 6e 66 6f 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  nfo_interop(sqli
70b0: 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63  te3 *db, const c
70c0: 68 61 72 20 2a 7a 44 62 2c 20 63 6f 6e 73 74 20  har *zDb, const 
70d0: 63 68 61 72 20 2a 7a 49 6e 64 65 78 4e 61 6d 65  char *zIndexName
70e0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43  , const char *zC
70f0: 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 69 6e 74 20 2a  olumnName, int *
7100: 73 6f 72 74 4f 72 64 65 72 2c 20 69 6e 74 20 2a  sortOrder, int *
7110: 6f 6e 45 72 72 6f 72 2c 20 63 6f 6e 73 74 20 63  onError, const c
7120: 68 61 72 20 2a 2a 70 7a 43 6f 6c 6c 2c 20 69 6e  har **pzColl, in
7130: 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 49  t *plen)..{..  I
7140: 6e 64 65 78 20 2a 70 49 64 78 3b 0d 0a 20 20 54  ndex *pIdx;..  T
7150: 61 62 6c 65 20 2a 70 54 61 62 3b 0d 0a 20 20 69  able *pTab;..  i
7160: 6e 74 20 6e 3b 0d 0a 0d 0a 20 20 69 66 20 28 21  nt n;....  if (!
7170: 64 62 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54  db) return SQLIT
7180: 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 73 71 6c 69  E_ERROR;..  sqli
7190: 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28  te3_mutex_enter(
71a0: 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 73  db->mutex);..  s
71b0: 71 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65 72  qlite3BtreeEnter
71c0: 41 6c 6c 28 64 62 29 3b 0d 0a 0d 0a 20 20 70 49  All(db);....  pI
71d0: 64 78 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  dx = sqlite3Find
71e0: 49 6e 64 65 78 28 64 62 2c 20 7a 49 6e 64 65 78  Index(db, zIndex
71f0: 4e 61 6d 65 2c 20 7a 44 62 29 3b 0d 0a 0d 0a 20  Name, zDb);.... 
7200: 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 65 61   sqlite3BtreeLea
7210: 76 65 41 6c 6c 28 64 62 29 3b 0d 0a 20 20 73 71  veAll(db);..  sq
7220: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76  lite3_mutex_leav
7230: 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d  e(db->mutex);...
7240: 0a 20 20 69 66 20 28 21 70 49 64 78 29 20 72 65  .  if (!pIdx) re
7250: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
7260: 52 3b 0d 0a 0d 0a 20 20 70 54 61 62 20 3d 20 70  R;....  pTab = p
7270: 49 64 78 2d 3e 70 54 61 62 6c 65 3b 0d 0a 20 20  Idx->pTable;..  
7280: 66 6f 72 20 28 6e 20 3d 20 30 3b 20 6e 20 3c 20  for (n = 0; n < 
7290: 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 3b 20 6e  pIdx->nColumn; n
72a0: 2b 2b 29 0d 0a 20 20 7b 0d 0a 20 20 20 20 69 6e  ++)..  {..    in
72b0: 74 20 63 6e 75 6d 20 3d 20 70 49 64 78 2d 3e 61  t cnum = pIdx->a
72c0: 69 43 6f 6c 75 6d 6e 5b 6e 5d 3b 0d 0a 20 20 20  iColumn[n];..   
72d0: 20 69 66 20 28 73 71 6c 69 74 65 33 53 74 72 49   if (sqlite3StrI
72e0: 43 6d 70 28 70 54 61 62 2d 3e 61 43 6f 6c 5b 63  Cmp(pTab->aCol[c
72f0: 6e 75 6d 5d 2e 7a 4e 61 6d 65 2c 20 7a 43 6f 6c  num].zName, zCol
7300: 75 6d 6e 4e 61 6d 65 29 20 3d 3d 20 30 29 0d 0a  umnName) == 0)..
7310: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20      {..      if 
7320: 28 20 73 6f 72 74 4f 72 64 65 72 20 29 20 2a 73  ( sortOrder ) *s
7330: 6f 72 74 4f 72 64 65 72 20 3d 20 70 49 64 78 2d  ortOrder = pIdx-
7340: 3e 61 53 6f 72 74 4f 72 64 65 72 5b 6e 5d 3b 0d  >aSortOrder[n];.
7350: 0a 20 20 20 20 20 20 69 66 20 28 20 70 7a 43 6f  .      if ( pzCo
7360: 6c 6c 20 29 20 2a 70 7a 43 6f 6c 6c 20 3d 20 70  ll ) *pzColl = p
7370: 49 64 78 2d 3e 61 7a 43 6f 6c 6c 5b 6e 5d 3b 0d  Idx->azColl[n];.
7380: 0a 20 20 20 20 20 20 69 66 20 28 20 70 6c 65 6e  .      if ( plen
7390: 20 29 20 2a 70 6c 65 6e 20 3d 20 73 74 72 6c 65   ) *plen = strle
73a0: 6e 28 2a 70 7a 43 6f 6c 6c 29 3b 0d 0a 20 20 20  n(*pzColl);..   
73b0: 20 20 20 69 66 20 28 20 6f 6e 45 72 72 6f 72 20     if ( onError 
73c0: 29 20 2a 6f 6e 45 72 72 6f 72 20 3d 20 70 49 64  ) *onError = pId
73d0: 78 2d 3e 6f 6e 45 72 72 6f 72 3b 0d 0a 0d 0a 20  x->onError;.... 
73e0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
73f0: 54 45 5f 4f 4b 3b 0d 0a 20 20 20 20 7d 0d 0a 20  TE_OK;..    }.. 
7400: 20 7d 0d 0a 20 20 72 65 74 75 72 6e 20 53 51 4c   }..  return SQL
7410: 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 7d 0d 0a 0d  ITE_ERROR;..}...
7420: 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20  .SQLITE_API int 
7430: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 74  WINAPI sqlite3_t
7440: 61 62 6c 65 5f 63 75 72 73 6f 72 5f 69 6e 74 65  able_cursor_inte
7450: 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  rop(sqlite3_stmt
7460: 20 2a 70 73 74 6d 74 2c 20 69 6e 74 20 69 44 62   *pstmt, int iDb
7470: 2c 20 50 67 6e 6f 20 74 61 62 6c 65 52 6f 6f 74  , Pgno tableRoot
7480: 50 61 67 65 29 0d 0a 7b 0d 0a 20 20 56 64 62 65  Page)..{..  Vdbe
7490: 20 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70 73   *p = (Vdbe *)ps
74a0: 74 6d 74 3b 0d 0a 20 20 73 71 6c 69 74 65 33 20  tmt;..  sqlite3 
74b0: 2a 64 62 20 3d 20 28 70 20 3d 3d 20 4e 55 4c 4c  *db = (p == NULL
74c0: 29 20 3f 20 4e 55 4c 4c 20 3a 20 70 2d 3e 64 62  ) ? NULL : p->db
74d0: 3b 0d 0a 20 20 69 6e 74 20 6e 3b 0d 0a 20 20 69  ;..  int n;..  i
74e0: 6e 74 20 72 65 74 20 3d 20 2d 31 3b 20 2f 2a 20  nt ret = -1; /* 
74f0: 4e 4f 54 20 46 4f 55 4e 44 20 2a 2f 0d 0a 0d 0a  NOT FOUND */....
7500: 20 20 69 66 20 28 21 70 20 7c 7c 20 21 64 62 29    if (!p || !db)
7510: 20 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 20 20   return ret;..  
7520: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e  sqlite3_mutex_en
7530: 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d  ter(db->mutex);.
7540: 0a 20 20 66 6f 72 20 28 6e 20 3d 20 30 3b 20 6e  .  for (n = 0; n
7550: 20 3c 20 70 2d 3e 6e 43 75 72 73 6f 72 20 26 26   < p->nCursor &&
7560: 20 70 2d 3e 61 70 43 73 72 5b 6e 5d 20 21 3d 20   p->apCsr[n] != 
7570: 4e 55 4c 4c 3b 20 6e 2b 2b 29 0d 0a 20 20 7b 0d  NULL; n++)..  {.
7580: 0a 20 20 20 20 69 66 20 28 70 2d 3e 61 70 43 73  .    if (p->apCs
7590: 72 5b 6e 5d 2d 3e 69 73 54 61 62 6c 65 20 3d 3d  r[n]->isTable ==
75a0: 20 46 41 4c 53 45 29 20 63 6f 6e 74 69 6e 75 65   FALSE) continue
75b0: 3b 0d 0a 20 20 20 20 69 66 20 28 70 2d 3e 61 70  ;..    if (p->ap
75c0: 43 73 72 5b 6e 5d 2d 3e 69 44 62 20 21 3d 20 69  Csr[n]->iDb != i
75d0: 44 62 29 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 23  Db) continue;..#
75e0: 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  if SQLITE_VERSIO
75f0: 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 31 30  N_NUMBER >= 3010
7600: 30 30 30 0d 0a 20 20 20 20 69 66 20 28 70 2d 3e  000..    if (p->
7610: 61 70 43 73 72 5b 6e 5d 2d 3e 75 63 2e 70 43 75  apCsr[n]->uc.pCu
7620: 72 73 6f 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d  rsor->pgnoRoot =
7630: 3d 20 74 61 62 6c 65 52 6f 6f 74 50 61 67 65 29  = tableRootPage)
7640: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 69 66 20  ..#else..    if 
7650: 28 70 2d 3e 61 70 43 73 72 5b 6e 5d 2d 3e 70 43  (p->apCsr[n]->pC
7660: 75 72 73 6f 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20  ursor->pgnoRoot 
7670: 3d 3d 20 74 61 62 6c 65 52 6f 6f 74 50 61 67 65  == tableRootPage
7680: 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7b  )..#endif..    {
7690: 0d 0a 20 20 20 20 20 20 72 65 74 20 3d 20 6e 3b  ..      ret = n;
76a0: 0d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a  ..      break;..
76b0: 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 20 20 73 71      }..  }..  sq
76c0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76  lite3_mutex_leav
76d0: 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d  e(db->mutex);...
76e0: 0a 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a  .  return ret;..
76f0: 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20  }....SQLITE_API 
7700: 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74  int WINAPI sqlit
7710: 65 33 5f 63 75 72 73 6f 72 5f 72 6f 77 69 64 5f  e3_cursor_rowid_
7720: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f  interop(sqlite3_
7730: 73 74 6d 74 20 2a 70 73 74 6d 74 2c 20 69 6e 74  stmt *pstmt, int
7740: 20 63 75 72 73 6f 72 2c 20 73 71 6c 69 74 65 5f   cursor, sqlite_
7750: 69 6e 74 36 34 20 2a 70 72 6f 77 69 64 29 0d 0a  int64 *prowid)..
7760: 7b 0d 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28  {..  Vdbe *p = (
7770: 56 64 62 65 20 2a 29 70 73 74 6d 74 3b 0d 0a 20  Vdbe *)pstmt;.. 
7780: 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 28   sqlite3 *db = (
7790: 70 20 3d 3d 20 4e 55 4c 4c 29 20 3f 20 4e 55 4c  p == NULL) ? NUL
77a0: 4c 20 3a 20 70 2d 3e 64 62 3b 0d 0a 20 20 56 64  L : p->db;..  Vd
77b0: 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0d 0a 23  beCursor *pC;..#
77c0: 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  if SQLITE_VERSIO
77d0: 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 31 31  N_NUMBER >= 3011
77e0: 30 30 30 0d 0a 20 20 69 6e 74 20 70 32 20 3d 20  000..  int p2 = 
77f0: 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 69 6e  0;..#endif..  in
7800: 74 20 72 65 74 20 3d 20 53 51 4c 49 54 45 5f 4f  t ret = SQLITE_O
7810: 4b 3b 0d 0a 0d 0a 20 20 69 66 20 28 21 70 20 7c  K;....  if (!p |
7820: 7c 20 21 64 62 29 20 72 65 74 75 72 6e 20 53 51  | !db) return SQ
7830: 4c 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 73  LITE_ERROR;..  s
7840: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
7850: 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a  er(db->mutex);..
7860: 20 20 77 68 69 6c 65 20 28 31 29 0d 0a 20 20 7b    while (1)..  {
7870: 0d 0a 20 20 20 20 69 66 20 28 63 75 72 73 6f 72  ..    if (cursor
7880: 20 3c 20 30 20 7c 7c 20 63 75 72 73 6f 72 20 3e   < 0 || cursor >
7890: 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 0d 0a 20  = p->nCursor).. 
78a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 20     {..      ret 
78b0: 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0d  = SQLITE_ERROR;.
78c0: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20  .      break;.. 
78d0: 20 20 20 7d 0d 0a 20 20 20 20 69 66 20 28 70 2d     }..    if (p-
78e0: 3e 61 70 43 73 72 5b 63 75 72 73 6f 72 5d 20 3d  >apCsr[cursor] =
78f0: 3d 20 4e 55 4c 4c 29 0d 0a 20 20 20 20 7b 0d 0a  = NULL)..    {..
7900: 20 20 20 20 20 20 72 65 74 20 3d 20 53 51 4c 49        ret = SQLI
7910: 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 20 20 20  TE_ERROR;..     
7920: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 7d 0d 0a   break;..    }..
7930: 0d 0a 20 20 20 20 70 43 20 3d 20 70 2d 3e 61 70  ..    pC = p->ap
7940: 43 73 72 5b 63 75 72 73 6f 72 5d 3b 0d 0a 0d 0a  Csr[cursor];....
7950: 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49  #if SQLITE_VERSI
7960: 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 31  ON_NUMBER >= 301
7970: 31 30 30 30 0d 0a 20 20 20 20 72 65 74 20 3d 20  1000..    ret = 
7980: 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
7990: 72 4d 6f 76 65 74 6f 28 26 70 43 2c 20 26 70 32  rMoveto(&pC, &p2
79a0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 72  );..#else..    r
79b0: 65 74 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  et = sqlite3Vdbe
79c0: 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
79d0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 69  ;..#endif..    i
79e0: 66 28 72 65 74 29 0d 0a 20 20 20 20 20 20 62 72  f(ret)..      br
79f0: 65 61 6b 3b 0d 0a 0d 0a 23 69 66 20 53 51 4c 49  eak;....#if SQLI
7a00: 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45  TE_VERSION_NUMBE
7a10: 52 20 3c 20 33 30 30 38 30 30 37 0d 0a 20 20 20  R < 3008007..   
7a20: 20 69 66 28 70 43 2d 3e 72 6f 77 69 64 49 73 56   if(pC->rowidIsV
7a30: 61 6c 69 64 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alid)..    {..  
7a40: 20 20 20 20 69 66 20 28 70 72 6f 77 69 64 29 20      if (prowid) 
7a50: 2a 70 72 6f 77 69 64 20 3d 20 70 43 2d 3e 6c 61  *prowid = pC->la
7a60: 73 74 52 6f 77 69 64 3b 0d 0a 20 20 20 20 7d 0d  stRowid;..    }.
7a70: 0a 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69  .    else..#endi
7a80: 66 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45  f..#if SQLITE_VE
7a90: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20  RSION_NUMBER >= 
7aa0: 33 30 31 30 30 30 30 0d 0a 20 20 20 20 69 66 28  3010000..    if(
7ab0: 70 43 2d 3e 75 63 2e 70 73 65 75 64 6f 54 61 62  pC->uc.pseudoTab
7ac0: 6c 65 52 65 67 20 3e 20 30 29 0d 0a 23 65 6c 73  leReg > 0)..#els
7ad0: 65 0d 0a 20 20 20 20 69 66 28 70 43 2d 3e 70 73  e..    if(pC->ps
7ae0: 65 75 64 6f 54 61 62 6c 65 52 65 67 20 3e 20 30  eudoTableReg > 0
7af0: 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7b  )..#endif..    {
7b00: 0d 0a 20 20 20 20 20 20 72 65 74 20 3d 20 53 51  ..      ret = SQ
7b10: 4c 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 20  LITE_ERROR;..   
7b20: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 7d     break;..    }
7b30: 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52  ..#if SQLITE_VER
7b40: 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33  SION_NUMBER >= 3
7b50: 30 31 30 30 30 30 0d 0a 20 20 20 20 65 6c 73 65  010000..    else
7b60: 20 69 66 28 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20   if(pC->nullRow 
7b70: 7c 7c 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  || pC->uc.pCurso
7b80: 72 3d 3d 30 29 0d 0a 23 65 6c 73 65 0d 0a 20 20  r==0)..#else..  
7b90: 20 20 65 6c 73 65 20 69 66 28 70 43 2d 3e 6e 75    else if(pC->nu
7ba0: 6c 6c 52 6f 77 20 7c 7c 20 70 43 2d 3e 70 43 75  llRow || pC->pCu
7bb0: 72 73 6f 72 3d 3d 30 29 0d 0a 23 65 6e 64 69 66  rsor==0)..#endif
7bc0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
7bd0: 65 74 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  et = SQLITE_ERRO
7be0: 52 3b 0d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  R;..      break;
7bf0: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 65 6c 73  ..    }..    els
7c00: 65 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 53 51  e..    {..#if SQ
7c10: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
7c20: 42 45 52 20 3e 3d 20 33 30 31 30 30 30 30 0d 0a  BER >= 3010000..
7c30: 20 20 20 20 20 20 69 66 20 28 70 43 2d 3e 75 63        if (pC->uc
7c40: 2e 70 43 75 72 73 6f 72 20 3d 3d 20 4e 55 4c 4c  .pCursor == NULL
7c50: 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  )..#else..      
7c60: 69 66 20 28 70 43 2d 3e 70 43 75 72 73 6f 72 20  if (pC->pCursor 
7c70: 3d 3d 20 4e 55 4c 4c 29 0d 0a 23 65 6e 64 69 66  == NULL)..#endif
7c80: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
7c90: 20 20 20 72 65 74 20 3d 20 53 51 4c 49 54 45 5f     ret = SQLITE_
7ca0: 45 52 52 4f 52 3b 0d 0a 20 20 20 20 20 20 20 20  ERROR;..        
7cb0: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d  break;..      }.
7cc0: 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53  .#if SQLITE_VERS
7cd0: 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30  ION_NUMBER >= 30
7ce0: 31 30 30 30 30 0d 0a 20 20 20 20 20 20 73 71 6c  10000..      sql
7cf0: 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
7d00: 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
7d10: 20 70 72 6f 77 69 64 29 3b 0d 0a 23 65 6c 73 65   prowid);..#else
7d20: 0d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ..      sqlite3B
7d30: 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e  treeKeySize(pC->
7d40: 70 43 75 72 73 6f 72 2c 20 70 72 6f 77 69 64 29  pCursor, prowid)
7d50: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
7d60: 20 69 66 20 28 70 72 6f 77 69 64 29 20 2a 70 72   if (prowid) *pr
7d70: 6f 77 69 64 20 3d 20 2a 70 72 6f 77 69 64 3b 0d  owid = *prowid;.
7d80: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 62 72 65 61  .    }..    brea
7d90: 6b 3b 0d 0a 20 20 7d 0d 0a 20 20 73 71 6c 69 74  k;..  }..  sqlit
7da0: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64  e3_mutex_leave(d
7db0: 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20 20  b->mutex);....  
7dc0: 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a  return ret;..}..
7dd0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
7de0: 5f 4f 53 5f 57 49 4e 20 2a 2f 0d 0a 0d 0a 2f 2a  _OS_WIN */..../*
7df0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7e00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7e10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7e20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7e30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0d 0a 0d  ************/...
7e40: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
7e50: 49 54 45 5f 43 4f 52 45 29 0d 0a 23 75 6e 64 65  ITE_CORE)..#unde
7e60: 66 20 53 51 4c 49 54 45 5f 43 4f 52 45 0d 0a 23  f SQLITE_CORE..#
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 56 49 52  ined(INTEROP_VIR
7e90: 54 55 41 4c 5f 54 41 42 4c 45 29 20 26 26 20 53  TUAL_TABLE) && S
7ea0: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
7eb0: 4d 42 45 52 20 3e 3d 20 33 30 30 34 30 30 31 0d  MBER >= 3004001.
7ec0: 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 65 78  .#include "../ex
7ed0: 74 2f 76 74 73 68 69 6d 2e 63 22 0d 0a 23 65 6e  t/vtshim.c"..#en
7ee0: 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e  dif....#if defin
7ef0: 65 64 28 49 4e 54 45 52 4f 50 5f 46 54 53 35 5f  ed(INTEROP_FTS5_
7f00: 45 58 54 45 4e 53 49 4f 4e 29 0d 0a 23 69 6e 63  EXTENSION)..#inc
7f10: 6c 75 64 65 20 22 2e 2e 2f 65 78 74 2f 66 74 73  lude "../ext/fts
7f20: 35 2e 63 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  5.c"..#endif....
7f30: 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45  #if defined(INTE
7f40: 52 4f 50 5f 4a 53 4f 4e 31 5f 45 58 54 45 4e 53  ROP_JSON1_EXTENS
7f50: 49 4f 4e 29 0d 0a 23 69 6e 63 6c 75 64 65 20 22  ION)..#include "
7f60: 2e 2e 2f 65 78 74 2f 6a 73 6f 6e 31 2e 63 22 0d  ../ext/json1.c".
7f70: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64  .#endif....#if d
7f80: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 50  efined(INTEROP_P
7f90: 45 52 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e 53  ERCENTILE_EXTENS
7fa0: 49 4f 4e 29 0d 0a 23 69 6e 63 6c 75 64 65 20 22  ION)..#include "
7fb0: 2e 2e 2f 65 78 74 2f 70 65 72 63 65 6e 74 69 6c  ../ext/percentil
7fc0: 65 2e 63 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  e.c"..#endif....
7fd0: 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45  #if defined(INTE
7fe0: 52 4f 50 5f 52 45 47 45 58 50 5f 45 58 54 45 4e  ROP_REGEXP_EXTEN
7ff0: 53 49 4f 4e 29 0d 0a 23 69 6e 63 6c 75 64 65 20  SION)..#include 
8000: 22 2e 2e 2f 65 78 74 2f 72 65 67 65 78 70 2e 63  "../ext/regexp.c
8010: 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66  "..#endif....#if
8020: 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50   defined(INTEROP
8030: 5f 54 4f 54 59 50 45 5f 45 58 54 45 4e 53 49 4f  _TOTYPE_EXTENSIO
8040: 4e 29 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e  N)..#include "..
8050: 2f 65 78 74 2f 74 6f 74 79 70 65 2e 63 22 0d 0a  /ext/totype.c"..
8060: 23 65 6e 64 69 66 0d 0a 0d 0a 2f 2a 2a 2a 2a 2a  #endif..../*****
8070: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8080: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8090: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
80a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
80b0: 2a 2a 2a 2a 2a 2a 2a 2a 2f 0d 0a 0d 0a 2f 2a 0d  ********/..../*.
80c0: 0a 2a 2a 20 54 68 65 20 49 4e 54 45 52 4f 50 5f  .** The INTEROP_
80d0: 54 45 53 54 5f 45 58 54 45 4e 53 49 4f 4e 20 62  TEST_EXTENSION b
80e0: 6c 6f 63 6b 20 6d 75 73 74 20 62 65 20 61 74 20  lock must be at 
80f0: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 69 73 20  the end of this 
8100: 73 6f 75 72 63 65 20 66 69 6c 65 0d 0a 2a 2a 20  source file..** 
8110: 62 65 63 61 75 73 65 20 69 74 20 69 6e 63 6c 75  because it inclu
8120: 64 65 73 20 74 68 65 20 22 73 71 6c 69 74 65 33  des the "sqlite3
8130: 65 78 74 2e 68 22 20 66 69 6c 65 2c 20 77 68 69  ext.h" file, whi
8140: 63 68 20 64 65 66 69 6e 65 73 20 74 68 65 20 73  ch defines the s
8150: 71 6c 69 74 65 33 0d 0a 2a 2a 20 70 75 62 6c 69  qlite3..** publi
8160: 63 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 20 6e  c API function n
8170: 61 6d 65 73 20 74 6f 20 62 65 20 6d 61 63 72 6f  ames to be macro
8180: 73 20 61 6e 64 20 74 68 61 74 20 77 6f 75 6c 64  s and that would
8190: 20 63 61 75 73 65 20 74 68 65 20 63 6f 64 65 0d   cause the code.
81a0: 0a 2a 2a 20 61 62 6f 76 65 20 74 68 69 73 20 70  .** above this p
81b0: 6f 69 6e 74 20 74 6f 20 6d 61 6c 66 75 6e 63 74  oint to malfunct
81c0: 69 6f 6e 2e 0d 0a 2a 2f 0d 0a 23 69 66 20 64 65  ion...*/..#if de
81d0: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 54 45  fined(INTEROP_TE
81e0: 53 54 5f 45 58 54 45 4e 53 49 4f 4e 29 0d 0a 23  ST_EXTENSION)..#
81f0: 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 63 6f 72 65  include "../core
8200: 2f 73 71 6c 69 74 65 33 65 78 74 2e 68 22 0d 0a  /sqlite3ext.h"..
8210: 53 51 4c 49 54 45 5f 45 58 54 45 4e 53 49 4f 4e  SQLITE_EXTENSION
8220: 5f 49 4e 49 54 31 0d 0a 0d 0a 2f 2a 0d 0a 2a 2a  _INIT1..../*..**
8230: 20 54 68 65 20 69 6e 74 65 72 6f 70 54 65 73 74   The interopTest
8240: 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  () SQL function 
8250: 72 65 74 75 72 6e 73 20 69 74 73 20 66 69 72 73  returns its firs
8260: 74 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 72 61  t argument or ra
8270: 69 73 65 73 20 61 6e 0d 0a 2a 2a 20 65 72 72 6f  ises an..** erro
8280: 72 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  r if there are n
8290: 6f 74 20 65 6e 6f 75 67 68 20 61 72 67 75 6d 65  ot enough argume
82a0: 6e 74 73 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49 54 45  nts...*/..SQLITE
82b0: 5f 50 52 49 56 41 54 45 20 76 6f 69 64 20 69 6e  _PRIVATE void in
82c0: 74 65 72 6f 70 54 65 73 74 46 75 6e 63 28 0d 0a  teropTestFunc(..
82d0: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
82e0: 74 20 2a 63 6f 6e 74 65 78 74 2c 0d 0a 20 20 69  t *context,..  i
82f0: 6e 74 20 61 72 67 63 2c 0d 0a 20 20 73 71 6c 69  nt argc,..  sqli
8300: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76  te3_value **argv
8310: 0d 0a 29 7b 0d 0a 20 20 63 6f 6e 73 74 20 75 6e  ..){..  const un
8320: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 7a 3b 0d  signed char *z;.
8330: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 31 20 29  .  if( argc!=1 )
8340: 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72  {..    sqlite3_r
8350: 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74  esult_error(cont
8360: 65 78 74 2c 20 22 6e 65 65 64 20 65 78 61 63 74  ext, "need exact
8370: 6c 79 20 6f 6e 65 20 61 72 67 75 6d 65 6e 74 22  ly one argument"
8380: 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 72 65 74 75  , -1);..    retu
8390: 72 6e 3b 0d 0a 20 20 7d 0d 0a 20 20 7a 20 3d 20  rn;..  }..  z = 
83a0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
83b0: 78 74 28 61 72 67 76 5b 30 5d 29 3b 0d 0a 20 20  xt(argv[0]);..  
83c0: 69 66 28 20 7a 20 29 7b 0d 0a 20 20 20 20 73 71  if( z ){..    sq
83d0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
83e0: 74 28 63 6f 6e 74 65 78 74 2c 20 28 63 68 61 72  t(context, (char
83f0: 2a 29 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f  *)z, -1, SQLITE_
8400: 53 54 41 54 49 43 29 3b 0d 0a 20 20 7d 65 6c 73  STATIC);..  }els
8410: 65 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  e{..    sqlite3_
8420: 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74  result_null(cont
8430: 65 78 74 29 3b 0d 0a 20 20 7d 0d 0a 7d 0d 0a 0d  ext);..  }..}...
8440: 0a 2f 2a 0d 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ./*..** The inte
8450: 72 6f 70 53 6c 65 65 70 28 29 20 53 51 4c 20 66  ropSleep() SQL f
8460: 75 6e 63 74 69 6f 6e 20 77 61 69 74 73 20 74 68  unction waits th
8470: 65 20 73 70 65 63 69 66 69 65 64 20 6e 75 6d 62  e specified numb
8480: 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e  er of millisecon
8490: 64 73 0d 0a 2a 2a 20 6f 72 20 72 61 69 73 65 73  ds..** or raises
84a0: 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65   an error if the
84b0: 72 65 20 61 72 65 20 6e 6f 74 20 65 6e 6f 75 67  re are not enoug
84c0: 68 20 61 72 67 75 6d 65 6e 74 73 2e 0d 0a 2a 2f  h arguments...*/
84d0: 0d 0a 53 51 4c 49 54 45 5f 50 52 49 56 41 54 45  ..SQLITE_PRIVATE
84e0: 20 76 6f 69 64 20 69 6e 74 65 72 6f 70 53 6c 65   void interopSle
84f0: 65 70 46 75 6e 63 28 0d 0a 20 20 73 71 6c 69 74  epFunc(..  sqlit
8500: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74  e3_context *cont
8510: 65 78 74 2c 0d 0a 20 20 69 6e 74 20 61 72 67 63  ext,..  int argc
8520: 2c 0d 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  ,..  sqlite3_val
8530: 75 65 20 2a 2a 61 72 67 76 0d 0a 29 7b 0d 0a 20  ue **argv..){.. 
8540: 20 69 6e 74 20 6d 3b 0d 0a 20 20 69 66 28 20 61   int m;..  if( a
8550: 72 67 63 21 3d 31 20 29 7b 0d 0a 20 20 20 20 73  rgc!=1 ){..    s
8560: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72  qlite3_result_er
8570: 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 22 6e 65  ror(context, "ne
8580: 65 64 20 65 78 61 63 74 6c 79 20 6f 6e 65 20 61  ed exactly one a
8590: 72 67 75 6d 65 6e 74 22 2c 20 2d 31 29 3b 0d 0a  rgument", -1);..
85a0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 7d      return;..  }
85b0: 0d 0a 20 20 6d 20 3d 20 73 71 6c 69 74 65 33 5f  ..  m = sqlite3_
85c0: 76 61 6c 75 65 5f 69 6e 74 28 61 72 67 76 5b 30  value_int(argv[0
85d0: 5d 29 3b 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f  ]);..#if SQLITE_
85e0: 4f 53 5f 57 49 4e 43 45 0d 0a 20 20 53 6c 65 65  OS_WINCE..  Slee
85f0: 70 28 6d 29 3b 0d 0a 20 20 73 71 6c 69 74 65 33  p(m);..  sqlite3
8600: 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74  _result_int(cont
8610: 65 78 74 2c 20 57 41 49 54 5f 4f 42 4a 45 43 54  ext, WAIT_OBJECT
8620: 5f 30 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 73  _0);..#else..  s
8630: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e  qlite3_result_in
8640: 74 28 63 6f 6e 74 65 78 74 2c 20 53 6c 65 65 70  t(context, Sleep
8650: 45 78 28 6d 2c 20 54 52 55 45 29 29 3b 0d 0a 23  Ex(m, TRUE));..#
8660: 65 6e 64 69 66 0d 0a 7d 0d 0a 0d 0a 2f 2a 20 53  endif..}..../* S
8670: 51 4c 69 74 65 20 69 6e 76 6f 6b 65 73 20 74 68  QLite invokes th
8680: 69 73 20 72 6f 75 74 69 6e 65 20 6f 6e 63 65 20  is routine once 
8690: 77 68 65 6e 20 69 74 20 6c 6f 61 64 73 20 74 68  when it loads th
86a0: 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 2a 2a  e extension...**
86b0: 20 43 72 65 61 74 65 20 6e 65 77 20 66 75 6e 63   Create new func
86c0: 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6e 67  tions, collating
86d0: 20 73 65 71 75 65 6e 63 65 73 2c 20 61 6e 64 20   sequences, and 
86e0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 2a  virtual table..*
86f0: 2a 20 6d 6f 64 75 6c 65 73 20 68 65 72 65 2e 20  * modules here. 
8700: 20 54 68 69 73 20 69 73 20 75 73 75 61 6c 6c 79   This is usually
8710: 20 74 68 65 20 6f 6e 6c 79 20 65 78 70 6f 72 74   the only export
8720: 65 64 20 73 79 6d 62 6f 6c 20 69 6e 0d 0a 2a 2a  ed symbol in..**
8730: 20 74 68 65 20 73 68 61 72 65 64 20 6c 69 62 72   the shared libr
8740: 61 72 79 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49 54 45  ary...*/..SQLITE
8750: 5f 41 50 49 20 69 6e 74 20 69 6e 74 65 72 6f 70  _API int interop
8760: 5f 74 65 73 74 5f 65 78 74 65 6e 73 69 6f 6e 5f  _test_extension_
8770: 69 6e 69 74 28 0d 0a 20 20 73 71 6c 69 74 65 33  init(..  sqlite3
8780: 20 2a 64 62 2c 0d 0a 20 20 63 68 61 72 20 2a 2a   *db,..  char **
8790: 70 7a 45 72 72 4d 73 67 2c 0d 0a 20 20 63 6f 6e  pzErrMsg,..  con
87a0: 73 74 20 73 71 6c 69 74 65 33 5f 61 70 69 5f 72  st sqlite3_api_r
87b0: 6f 75 74 69 6e 65 73 20 2a 70 41 70 69 0d 0a 29  outines *pApi..)
87c0: 7b 0d 0a 20 20 69 6e 74 20 72 63 3b 0d 0a 20 20  {..  int rc;..  
87d0: 53 51 4c 49 54 45 5f 45 58 54 45 4e 53 49 4f 4e  SQLITE_EXTENSION
87e0: 5f 49 4e 49 54 32 28 70 41 70 69 29 0d 0a 20 20  _INIT2(pApi)..  
87f0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65  rc = sqlite3_cre
8800: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c  ate_function(db,
8810: 20 22 69 6e 74 65 72 6f 70 54 65 73 74 22 2c 20   "interopTest", 
8820: 2d 31 2c 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20  -1, SQLITE_ANY, 
8830: 30 2c 0d 0a 20 20 20 20 20 20 69 6e 74 65 72 6f  0,..      intero
8840: 70 54 65 73 74 46 75 6e 63 2c 20 30 2c 20 30 29  pTestFunc, 0, 0)
8850: 3b 0d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  ;..  if( rc==SQL
8860: 49 54 45 5f 4f 4b 20 29 7b 0d 0a 20 20 20 20 72  ITE_OK ){..    r
8870: 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61  c = sqlite3_crea
8880: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20  te_function(db, 
8890: 22 69 6e 74 65 72 6f 70 53 6c 65 65 70 22 2c 20  "interopSleep", 
88a0: 31 2c 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20 30  1, SQLITE_ANY, 0
88b0: 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72  ,..        inter
88c0: 6f 70 53 6c 65 65 70 46 75 6e 63 2c 20 30 2c 20  opSleepFunc, 0, 
88d0: 30 29 3b 0d 0a 20 20 7d 0d 0a 20 20 72 65 74 75  0);..  }..  retu
88e0: 72 6e 20 72 63 3b 0d 0a 7d 0d 0a 23 65 6e 64 69  rn rc;..}..#endi
88f0: 66 20 2f 2a 20 64 65 66 69 6e 65 64 28 53 51 4c  f /* defined(SQL
8900: 49 54 45 5f 4f 53 5f 57 49 4e 29 20 2a 2f 0d 0a  ITE_OS_WIN) */..