System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact ae053062150c68ad5c7a0078e49783ac44cbaaa3:


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 0d 0a 20 20 20 20 20 20 20 20  ction(..        
5d00: 20 20 70 73 71 6c 2c 20 7a 46 75 6e 63 74 69 6f    psql, zFunctio
5d10: 6e 4e 61 6d 65 2c 0d 0a 23 69 66 20 53 51 4c 49  nName,..#if SQLI
5d20: 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45  TE_VERSION_NUMBE
5d30: 52 20 3c 20 33 30 31 32 30 30 30 0d 0a 20 20 20  R < 3012000..   
5d40: 20 20 20 20 20 20 20 73 74 72 6c 65 6e 28 7a 46         strlen(zF
5d50: 75 6e 63 74 69 6f 6e 4e 61 6d 65 29 2c 0d 0a 23  unctionName),..#
5d60: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
5d70: 20 6e 41 72 67 2c 20 65 54 65 78 74 52 65 70 2c   nArg, eTextRep,
5d80: 20 30 29 3b 0d 0a 20 20 20 20 20 20 69 66 28 20   0);..      if( 
5d90: 70 46 75 6e 63 20 29 0d 0a 20 20 20 20 20 20 7b  pFunc )..      {
5da0: 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52  ..#if SQLITE_VER
5db0: 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33  SION_NUMBER >= 3
5dc0: 30 30 38 30 30 31 0d 0a 20 20 20 20 20 20 20 20  008001..        
5dd0: 70 46 75 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73  pFunc->funcFlags
5de0: 20 7c 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f   |= SQLITE_FUNC_
5df0: 4e 45 45 44 43 4f 4c 4c 3b 0d 0a 23 65 6c 73 65  NEEDCOLL;..#else
5e00: 0d 0a 20 20 20 20 20 20 20 20 70 46 75 6e 63 2d  ..        pFunc-
5e10: 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45  >flags |= SQLITE
5e20: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 3b 0d  _FUNC_NEEDCOLL;.
5e30: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d  .#endif..      }
5e40: 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a  ..    }..  }....
5e50: 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 7d 0d 0a    return n;..}..
5e60: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69  ..SQLITE_API voi
5e70: 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  d WINAPI sqlite3
5e80: 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69 6e  _value_double_in
5e90: 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 76 61  terop(sqlite3_va
5ea0: 6c 75 65 20 2a 70 76 61 6c 2c 20 64 6f 75 62 6c  lue *pval, doubl
5eb0: 65 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 20 20 69 66  e *val)..{..  if
5ec0: 20 28 21 76 61 6c 29 20 72 65 74 75 72 6e 3b 0d   (!val) return;.
5ed0: 0a 20 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74 65  .  *val = sqlite
5ee0: 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28 70  3_value_double(p
5ef0: 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49  val);..}....SQLI
5f00: 54 45 5f 41 50 49 20 76 6f 69 64 20 57 49 4e 41  TE_API void WINA
5f10: 50 49 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  PI sqlite3_value
5f20: 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 73  _int64_interop(s
5f30: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 76  qlite3_value *pv
5f40: 61 6c 2c 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  al, sqlite_int64
5f50: 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 20 20 69 66 20   *val)..{..  if 
5f60: 28 21 76 61 6c 29 20 72 65 74 75 72 6e 3b 0d 0a  (!val) return;..
5f70: 20 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74 65 33    *val = sqlite3
5f80: 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28 70 76 61  _value_int64(pva
5f90: 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45  l);..}....SQLITE
5fa0: 5f 41 50 49 20 63 6f 6e 73 74 20 75 6e 73 69 67  _API const unsig
5fb0: 6e 65 64 20 63 68 61 72 20 2a 20 57 49 4e 41 50  ned char * WINAP
5fc0: 49 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  I sqlite3_value_
5fd0: 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 71 6c  text_interop(sql
5fe0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 76 61 6c 2c  ite3_value *val,
5ff0: 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a   int *plen)..{..
6000: 20 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64    const unsigned
6010: 20 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73 71   char *pval = sq
6020: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
6030: 28 76 61 6c 29 3b 0d 0a 20 20 69 66 20 28 70 6c  (val);..  if (pl
6040: 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 73 71 6c 69  en) *plen = sqli
6050: 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28  te3_value_bytes(
6060: 76 61 6c 29 3b 0d 0a 20 20 72 65 74 75 72 6e 20  val);..  return 
6070: 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49  pval;..}....SQLI
6080: 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 76 6f 69  TE_API const voi
6090: 64 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74  d * WINAPI sqlit
60a0: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 5f  e3_value_text16_
60b0: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f  interop(sqlite3_
60c0: 76 61 6c 75 65 20 2a 76 61 6c 2c 20 69 6e 74 20  value *val, int 
60d0: 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e  *plen)..{..  con
60e0: 73 74 20 76 6f 69 64 20 2a 70 76 61 6c 20 3d 20  st void *pval = 
60f0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
6100: 78 74 31 36 28 76 61 6c 29 3b 0d 0a 20 20 69 66  xt16(val);..  if
6110: 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20   (plen) *plen = 
6120: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
6130: 74 65 73 31 36 28 76 61 6c 29 3b 0d 0a 20 20 72  tes16(val);..  r
6140: 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a  eturn pval;..}..
6150: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69  ..SQLITE_API voi
6160: 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  d WINAPI sqlite3
6170: 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 5f 69  _result_double_i
6180: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 63  nterop(sqlite3_c
6190: 6f 6e 74 65 78 74 20 2a 70 63 74 78 2c 20 64 6f  ontext *pctx, do
61a0: 75 62 6c 65 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 20  uble *val)..{.. 
61b0: 20 69 66 20 28 21 76 61 6c 29 20 72 65 74 75 72   if (!val) retur
61c0: 6e 3b 0d 0a 20 20 73 71 6c 69 74 65 33 5f 72 65  n;..  sqlite3_re
61d0: 73 75 6c 74 5f 64 6f 75 62 6c 65 28 70 63 74 78  sult_double(pctx
61e0: 2c 20 2a 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53  , *val);..}....S
61f0: 51 4c 49 54 45 5f 41 50 49 20 76 6f 69 64 20 57  QLITE_API void W
6200: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 72 65  INAPI sqlite3_re
6210: 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e 74 65 72  sult_int64_inter
6220: 6f 70 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  op(sqlite3_conte
6230: 78 74 20 2a 70 63 74 78 2c 20 73 71 6c 69 74 65  xt *pctx, sqlite
6240: 5f 69 6e 74 36 34 20 2a 76 61 6c 29 0d 0a 7b 0d  _int64 *val)..{.
6250: 0a 20 20 69 66 20 28 21 76 61 6c 29 20 72 65 74  .  if (!val) ret
6260: 75 72 6e 3b 0d 0a 20 20 73 71 6c 69 74 65 33 5f  urn;..  sqlite3_
6270: 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 70 63 74  result_int64(pct
6280: 78 2c 20 2a 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a  x, *val);..}....
6290: 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57  SQLITE_API int W
62a0: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f  INAPI sqlite3_co
62b0: 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72  ntext_collcompar
62c0: 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  e_interop(sqlite
62d0: 33 5f 63 6f 6e 74 65 78 74 20 2a 63 74 78 2c 20  3_context *ctx, 
62e0: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 31 2c 20  const void *p1, 
62f0: 69 6e 74 20 70 31 6c 65 6e 2c 20 63 6f 6e 73 74  int p1len, const
6300: 20 76 6f 69 64 20 2a 70 32 2c 20 69 6e 74 20 70   void *p2, int p
6310: 32 6c 65 6e 29 0d 0a 7b 0d 0a 23 69 66 20 53 51  2len)..{..#if SQ
6320: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
6330: 42 45 52 20 3e 3d 20 33 30 30 38 30 30 37 0d 0a  BER >= 3008007..
6340: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c    CollSeq *pColl
6350: 20 3d 20 63 74 78 20 3f 20 73 71 6c 69 74 65 33   = ctx ? sqlite3
6360: 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 63  GetFuncCollSeq(c
6370: 74 78 29 20 3a 20 30 3b 0d 0a 23 65 6c 73 65 0d  tx) : 0;..#else.
6380: 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c  .  CollSeq *pCol
6390: 6c 20 3d 20 63 74 78 20 3f 20 63 74 78 2d 3e 70  l = ctx ? ctx->p
63a0: 43 6f 6c 6c 20 3a 20 30 3b 0d 0a 23 65 6e 64 69  Coll : 0;..#endi
63b0: 66 0d 0a 20 20 69 66 20 28 21 63 74 78 20 7c 7c  f..  if (!ctx ||
63c0: 20 21 63 74 78 2d 3e 70 46 75 6e 63 29 20 72 65   !ctx->pFunc) re
63d0: 74 75 72 6e 20 34 3b 20 2f 2a 20 45 52 52 4f 52  turn 4; /* ERROR
63e0: 20 2a 2f 0d 0a 20 20 69 66 20 28 21 70 43 6f 6c   */..  if (!pCol
63f0: 6c 20 7c 7c 20 21 70 43 6f 6c 6c 2d 3e 78 43 6d  l || !pColl->xCm
6400: 70 29 20 72 65 74 75 72 6e 20 33 3b 20 2f 2a 20  p) return 3; /* 
6410: 45 52 52 4f 52 20 2a 2f 0d 0a 23 69 66 20 53 51  ERROR */..#if SQ
6420: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
6430: 42 45 52 20 3e 3d 20 33 30 30 38 30 30 31 0d 0a  BER >= 3008001..
6440: 20 20 69 66 20 28 28 63 74 78 2d 3e 70 46 75 6e    if ((ctx->pFun
6450: 63 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26 20 53  c->funcFlags & S
6460: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
6470: 4f 4c 4c 29 20 3d 3d 20 30 29 20 72 65 74 75 72  OLL) == 0) retur
6480: 6e 20 32 3b 20 2f 2a 20 45 52 52 4f 52 20 2a 2f  n 2; /* ERROR */
6490: 0d 0a 23 65 6c 73 65 0d 0a 20 20 69 66 20 28 28  ..#else..  if ((
64a0: 63 74 78 2d 3e 70 46 75 6e 63 2d 3e 66 6c 61 67  ctx->pFunc->flag
64b0: 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  s & SQLITE_FUNC_
64c0: 4e 45 45 44 43 4f 4c 4c 29 20 3d 3d 20 30 29 20  NEEDCOLL) == 0) 
64d0: 72 65 74 75 72 6e 20 32 3b 20 2f 2a 20 45 52 52  return 2; /* ERR
64e0: 4f 52 20 2a 2f 0d 0a 23 65 6e 64 69 66 0d 0a 20  OR */..#endif.. 
64f0: 20 72 65 74 75 72 6e 20 70 43 6f 6c 6c 2d 3e 78   return pColl->x
6500: 43 6d 70 28 70 43 6f 6c 6c 2d 3e 70 55 73 65 72  Cmp(pColl->pUser
6510: 2c 20 70 31 6c 65 6e 2c 20 70 31 2c 20 70 32 6c  , p1len, p1, p2l
6520: 65 6e 2c 20 70 32 29 3b 0d 0a 7d 0d 0a 0d 0a 53  en, p2);..}....S
6530: 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20  QLITE_API const 
6540: 63 68 61 72 20 2a 20 57 49 4e 41 50 49 20 73 71  char * WINAPI sq
6550: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f  lite3_context_co
6560: 6c 6c 73 65 71 5f 69 6e 74 65 72 6f 70 28 73 71  llseq_interop(sq
6570: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63  lite3_context *c
6580: 74 78 2c 20 69 6e 74 20 2a 70 74 79 70 65 2c 20  tx, int *ptype, 
6590: 69 6e 74 20 2a 65 6e 63 2c 20 69 6e 74 20 2a 70  int *enc, int *p
65a0: 6c 65 6e 29 0d 0a 7b 0d 0a 23 69 66 20 53 51 4c  len)..{..#if SQL
65b0: 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  ITE_VERSION_NUMB
65c0: 45 52 20 3e 3d 20 33 30 30 38 30 30 37 0d 0a 20  ER >= 3008007.. 
65d0: 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20   CollSeq *pColl 
65e0: 3d 20 63 74 78 20 3f 20 73 71 6c 69 74 65 33 47  = ctx ? sqlite3G
65f0: 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 63 74  etFuncCollSeq(ct
6600: 78 29 20 3a 20 30 3b 0d 0a 23 65 6c 73 65 0d 0a  x) : 0;..#else..
6610: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c    CollSeq *pColl
6620: 20 3d 20 63 74 78 20 3f 20 63 74 78 2d 3e 70 43   = ctx ? ctx->pC
6630: 6f 6c 6c 20 3a 20 30 3b 0d 0a 23 65 6e 64 69 66  oll : 0;..#endif
6640: 0d 0a 20 20 69 66 20 28 70 74 79 70 65 29 20 2a  ..  if (ptype) *
6650: 70 74 79 70 65 20 3d 20 30 3b 0d 0a 20 20 69 66  ptype = 0;..  if
6660: 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20   (plen) *plen = 
6670: 30 3b 0d 0a 20 20 69 66 20 28 65 6e 63 29 20 2a  0;..  if (enc) *
6680: 65 6e 63 20 3d 20 30 3b 0d 0a 0d 0a 20 20 69 66  enc = 0;....  if
6690: 20 28 21 63 74 78 20 7c 7c 20 21 63 74 78 2d 3e   (!ctx || !ctx->
66a0: 70 46 75 6e 63 29 20 72 65 74 75 72 6e 20 4e 55  pFunc) return NU
66b0: 4c 4c 3b 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f  LL;..#if SQLITE_
66c0: 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e  VERSION_NUMBER >
66d0: 3d 20 33 30 30 38 30 30 31 0d 0a 20 20 69 66 20  = 3008001..  if 
66e0: 28 28 63 74 78 2d 3e 70 46 75 6e 63 2d 3e 66 75  ((ctx->pFunc->fu
66f0: 6e 63 46 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ncFlags & SQLITE
6700: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 20  _FUNC_NEEDCOLL) 
6710: 3d 3d 20 30 29 20 72 65 74 75 72 6e 20 4e 55 4c  == 0) return NUL
6720: 4c 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 69 66 20  L;..#else..  if 
6730: 28 28 63 74 78 2d 3e 70 46 75 6e 63 2d 3e 66 6c  ((ctx->pFunc->fl
6740: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e  ags & SQLITE_FUN
6750: 43 5f 4e 45 45 44 43 4f 4c 4c 29 20 3d 3d 20 30  C_NEEDCOLL) == 0
6760: 29 20 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a  ) return NULL;..
6770: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 69 66 20 28  #endif....  if (
6780: 70 43 6f 6c 6c 29 0d 0a 20 20 7b 0d 0a 20 20 20  pColl)..  {..   
6790: 20 69 66 20 28 65 6e 63 29 20 2a 65 6e 63 20 3d   if (enc) *enc =
67a0: 20 70 43 6f 6c 6c 2d 3e 65 6e 63 3b 0d 0a 23 69   pColl->enc;..#i
67b0: 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
67c0: 5f 4e 55 4d 42 45 52 20 3c 20 33 30 30 37 30 31  _NUMBER < 300701
67d0: 30 0d 0a 20 20 20 20 69 66 20 28 70 74 79 70 65  0..    if (ptype
67e0: 29 20 2a 70 74 79 70 65 20 3d 20 70 43 6f 6c 6c  ) *ptype = pColl
67f0: 2d 3e 74 79 70 65 3b 0d 0a 23 65 6e 64 69 66 0d  ->type;..#endif.
6800: 0a 20 20 20 20 69 66 20 28 70 6c 65 6e 29 20 2a  .    if (plen) *
6810: 70 6c 65 6e 20 3d 20 70 43 6f 6c 6c 2d 3e 7a 4e  plen = pColl->zN
6820: 61 6d 65 20 3f 20 73 74 72 6c 65 6e 28 70 43 6f  ame ? strlen(pCo
6830: 6c 6c 2d 3e 7a 4e 61 6d 65 29 20 3a 20 30 3b 0d  ll->zName) : 0;.
6840: 0a 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 70 43  ...    return pC
6850: 6f 6c 6c 2d 3e 7a 4e 61 6d 65 3b 0d 0a 20 20 7d  oll->zName;..  }
6860: 0d 0a 20 20 72 65 74 75 72 6e 20 4e 55 4c 4c 3b  ..  return NULL;
6870: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
6880: 49 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 57  I const char * W
6890: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f  INAPI sqlite3_co
68a0: 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61  lumn_database_na
68b0: 6d 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  me_interop(sqlit
68c0: 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69  e3_stmt *stmt, i
68d0: 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c  nt iCol, int *pl
68e0: 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20  en)..{..  const 
68f0: 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73 71 6c  char *pval = sql
6900: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61  ite3_column_data
6910: 62 61 73 65 5f 6e 61 6d 65 28 73 74 6d 74 2c 20  base_name(stmt, 
6920: 69 43 6f 6c 29 3b 0d 0a 20 20 69 66 20 28 70 6c  iCol);..  if (pl
6930: 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 70 76 61 6c  en) *plen = pval
6940: 20 3f 20 73 74 72 6c 65 6e 28 70 76 61 6c 29 20   ? strlen(pval) 
6950: 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70  : 0;..  return p
6960: 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  val;..}....SQLIT
6970: 45 5f 41 50 49 20 63 6f 6e 73 74 20 76 6f 69 64  E_API const void
6980: 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65   * WINAPI sqlite
6990: 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73  3_column_databas
69a0: 65 5f 6e 61 6d 65 31 36 5f 69 6e 74 65 72 6f 70  e_name16_interop
69b0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73  (sqlite3_stmt *s
69c0: 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69  tmt, int iCol, i
69d0: 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20  nt *plen)..{..  
69e0: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 61 6c  const void *pval
69f0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
6a00: 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 31  n_database_name1
6a10: 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a  6(stmt, iCol);..
6a20: 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65    if (plen) *ple
6a30: 6e 20 3d 20 70 76 61 6c 20 3f 20 77 63 73 6c 65  n = pval ? wcsle
6a40: 6e 28 28 77 63 68 61 72 5f 74 20 2a 29 70 76 61  n((wchar_t *)pva
6a50: 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77 63 68 61  l) * sizeof(wcha
6a60: 72 5f 74 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74  r_t) : 0;..  ret
6a70: 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a  urn pval;..}....
6a80: 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74  SQLITE_API const
6a90: 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49 20 73   char * WINAPI s
6aa0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61  qlite3_column_ta
6ab0: 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70  ble_name_interop
6ac0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73  (sqlite3_stmt *s
6ad0: 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69  tmt, int iCol, i
6ae0: 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20  nt *plen)..{..  
6af0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 76 61 6c  const char *pval
6b00: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
6b10: 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 73 74 6d  n_table_name(stm
6b20: 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 69 66 20  t, iCol);..  if 
6b30: 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 70  (plen) *plen = p
6b40: 76 61 6c 20 3f 20 73 74 72 6c 65 6e 28 70 76 61  val ? strlen(pva
6b50: 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72  l) : 0;..  retur
6b60: 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51  n pval;..}....SQ
6b70: 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 76  LITE_API const v
6b80: 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71 6c  oid * WINAPI sql
6b90: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c  ite3_column_tabl
6ba0: 65 5f 6e 61 6d 65 31 36 5f 69 6e 74 65 72 6f 70  e_name16_interop
6bb0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73  (sqlite3_stmt *s
6bc0: 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69  tmt, int iCol, i
6bd0: 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20  nt *plen)..{..  
6be0: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 61 6c  const void *pval
6bf0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
6c00: 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31 36 28 73  n_table_name16(s
6c10: 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 69  tmt, iCol);..  i
6c20: 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d  f (plen) *plen =
6c30: 20 70 76 61 6c 20 3f 20 77 63 73 6c 65 6e 28 28   pval ? wcslen((
6c40: 77 63 68 61 72 5f 74 20 2a 29 70 76 61 6c 29 20  wchar_t *)pval) 
6c50: 2a 20 73 69 7a 65 6f 66 28 77 63 68 61 72 5f 74  * sizeof(wchar_t
6c60: 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72 6e  ) : 0;..  return
6c70: 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c   pval;..}....SQL
6c80: 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 63 68  ITE_API const ch
6c90: 61 72 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69  ar * WINAPI sqli
6ca0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69  te3_column_origi
6cb0: 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73  n_name_interop(s
6cc0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d  qlite3_stmt *stm
6cd0: 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74  t, int iCol, int
6ce0: 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f   *plen)..{..  co
6cf0: 6e 73 74 20 63 68 61 72 20 2a 70 76 61 6c 20 3d  nst char *pval =
6d00: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
6d10: 6f 72 69 67 69 6e 5f 6e 61 6d 65 28 73 74 6d 74  origin_name(stmt
6d20: 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 69 66 20 28  , iCol);..  if (
6d30: 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 70 76  plen) *plen = pv
6d40: 61 6c 20 3f 20 73 74 72 6c 65 6e 28 70 76 61 6c  al ? strlen(pval
6d50: 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72 6e  ) : 0;..  return
6d60: 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c   pval;..}....SQL
6d70: 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 76 6f  ITE_API const vo
6d80: 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69  id * WINAPI sqli
6d90: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69  te3_column_origi
6da0: 6e 5f 6e 61 6d 65 31 36 5f 69 6e 74 65 72 6f 70  n_name16_interop
6db0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73  (sqlite3_stmt *s
6dc0: 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69  tmt, int iCol, i
6dd0: 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20  nt *plen)..{..  
6de0: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 61 6c  const void *pval
6df0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
6e00: 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 31 36 28  n_origin_name16(
6e10: 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20  stmt, iCol);..  
6e20: 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20  if (plen) *plen 
6e30: 3d 20 70 76 61 6c 20 3f 20 77 63 73 6c 65 6e 28  = pval ? wcslen(
6e40: 28 77 63 68 61 72 5f 74 20 2a 29 70 76 61 6c 29  (wchar_t *)pval)
6e50: 20 2a 20 73 69 7a 65 6f 66 28 77 63 68 61 72 5f   * sizeof(wchar_
6e60: 74 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72  t) : 0;..  retur
6e70: 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51  n pval;..}....SQ
6e80: 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e  LITE_API int WIN
6e90: 41 50 49 20 73 71 6c 69 74 65 33 5f 74 61 62 6c  API sqlite3_tabl
6ea0: 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74  e_column_metadat
6eb0: 61 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  a_interop(sqlite
6ec0: 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61  3 *db, const cha
6ed0: 72 20 2a 7a 44 62 4e 61 6d 65 2c 20 63 6f 6e 73  r *zDbName, cons
6ee0: 74 20 63 68 61 72 20 2a 7a 54 61 62 6c 65 4e 61  t char *zTableNa
6ef0: 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  me, const char *
6f00: 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 63 68 61  zColumnName, cha
6f10: 72 20 2a 2a 70 7a 44 61 74 61 54 79 70 65 2c 20  r **pzDataType, 
6f20: 63 68 61 72 20 2a 2a 70 7a 43 6f 6c 6c 53 65 71  char **pzCollSeq
6f30: 2c 20 69 6e 74 20 2a 70 4e 6f 74 4e 75 6c 6c 2c  , int *pNotNull,
6f40: 20 69 6e 74 20 2a 70 50 72 69 6d 61 72 79 4b 65   int *pPrimaryKe
6f50: 79 2c 20 69 6e 74 20 2a 70 41 75 74 6f 69 6e 63  y, int *pAutoinc
6f60: 2c 20 69 6e 74 20 2a 70 64 74 4c 65 6e 2c 20 69  , int *pdtLen, i
6f70: 6e 74 20 2a 70 63 73 4c 65 6e 29 0d 0a 7b 0d 0a  nt *pcsLen)..{..
6f80: 20 20 69 6e 74 20 6e 3b 0d 0a 0d 0a 20 20 6e 20    int n;....  n 
6f90: 3d 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f  = sqlite3_table_
6fa0: 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28  column_metadata(
6fb0: 64 62 2c 20 7a 44 62 4e 61 6d 65 2c 20 7a 54 61  db, zDbName, zTa
6fc0: 62 6c 65 4e 61 6d 65 2c 20 7a 43 6f 6c 75 6d 6e  bleName, zColumn
6fd0: 4e 61 6d 65 2c 20 70 7a 44 61 74 61 54 79 70 65  Name, pzDataType
6fe0: 2c 20 70 7a 43 6f 6c 6c 53 65 71 2c 20 70 4e 6f  , pzCollSeq, pNo
6ff0: 74 4e 75 6c 6c 2c 20 70 50 72 69 6d 61 72 79 4b  tNull, pPrimaryK
7000: 65 79 2c 20 70 41 75 74 6f 69 6e 63 29 3b 0d 0a  ey, pAutoinc);..
7010: 0d 0a 20 20 69 66 20 28 70 64 74 4c 65 6e 29 20  ..  if (pdtLen) 
7020: 2a 70 64 74 4c 65 6e 20 3d 20 28 70 7a 44 61 74  *pdtLen = (pzDat
7030: 61 54 79 70 65 20 26 26 20 2a 70 7a 44 61 74 61  aType && *pzData
7040: 54 79 70 65 29 20 3f 20 73 74 72 6c 65 6e 28 2a  Type) ? strlen(*
7050: 70 7a 44 61 74 61 54 79 70 65 29 20 3a 20 30 3b  pzDataType) : 0;
7060: 0d 0a 20 20 69 66 20 28 70 63 73 4c 65 6e 29 20  ..  if (pcsLen) 
7070: 2a 70 63 73 4c 65 6e 20 3d 20 28 70 7a 43 6f 6c  *pcsLen = (pzCol
7080: 6c 53 65 71 20 26 26 20 2a 70 7a 43 6f 6c 6c 53  lSeq && *pzCollS
7090: 65 71 29 20 3f 20 73 74 72 6c 65 6e 28 2a 70 7a  eq) ? strlen(*pz
70a0: 43 6f 6c 6c 53 65 71 29 20 3a 20 30 3b 0d 0a 0d  CollSeq) : 0;...
70b0: 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 7d 0d  .  return n;..}.
70c0: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e  ...SQLITE_API in
70d0: 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  t WINAPI sqlite3
70e0: 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69 6e  _index_column_in
70f0: 66 6f 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  fo_interop(sqlit
7100: 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68  e3 *db, const ch
7110: 61 72 20 2a 7a 44 62 2c 20 63 6f 6e 73 74 20 63  ar *zDb, const c
7120: 68 61 72 20 2a 7a 49 6e 64 65 78 4e 61 6d 65 2c  har *zIndexName,
7130: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f   const char *zCo
7140: 6c 75 6d 6e 4e 61 6d 65 2c 20 69 6e 74 20 2a 73  lumnName, int *s
7150: 6f 72 74 4f 72 64 65 72 2c 20 69 6e 74 20 2a 6f  ortOrder, int *o
7160: 6e 45 72 72 6f 72 2c 20 63 6f 6e 73 74 20 63 68  nError, const ch
7170: 61 72 20 2a 2a 70 7a 43 6f 6c 6c 2c 20 69 6e 74  ar **pzColl, int
7180: 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 49 6e   *plen)..{..  In
7190: 64 65 78 20 2a 70 49 64 78 3b 0d 0a 20 20 54 61  dex *pIdx;..  Ta
71a0: 62 6c 65 20 2a 70 54 61 62 3b 0d 0a 20 20 69 6e  ble *pTab;..  in
71b0: 74 20 6e 3b 0d 0a 0d 0a 20 20 69 66 20 28 21 64  t n;....  if (!d
71c0: 62 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  b) return SQLITE
71d0: 5f 45 52 52 4f 52 3b 0d 0a 20 20 73 71 6c 69 74  _ERROR;..  sqlit
71e0: 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64  e3_mutex_enter(d
71f0: 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 73 71  b->mutex);..  sq
7200: 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65 72 41  lite3BtreeEnterA
7210: 6c 6c 28 64 62 29 3b 0d 0a 0d 0a 20 20 70 49 64  ll(db);....  pId
7220: 78 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 49  x = sqlite3FindI
7230: 6e 64 65 78 28 64 62 2c 20 7a 49 6e 64 65 78 4e  ndex(db, zIndexN
7240: 61 6d 65 2c 20 7a 44 62 29 3b 0d 0a 0d 0a 20 20  ame, zDb);....  
7250: 73 71 6c 69 74 65 33 42 74 72 65 65 4c 65 61 76  sqlite3BtreeLeav
7260: 65 41 6c 6c 28 64 62 29 3b 0d 0a 20 20 73 71 6c  eAll(db);..  sql
7270: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
7280: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a  (db->mutex);....
7290: 20 20 69 66 20 28 21 70 49 64 78 29 20 72 65 74    if (!pIdx) ret
72a0: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
72b0: 3b 0d 0a 0d 0a 20 20 70 54 61 62 20 3d 20 70 49  ;....  pTab = pI
72c0: 64 78 2d 3e 70 54 61 62 6c 65 3b 0d 0a 20 20 66  dx->pTable;..  f
72d0: 6f 72 20 28 6e 20 3d 20 30 3b 20 6e 20 3c 20 70  or (n = 0; n < p
72e0: 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 3b 20 6e 2b  Idx->nColumn; n+
72f0: 2b 29 0d 0a 20 20 7b 0d 0a 20 20 20 20 69 6e 74  +)..  {..    int
7300: 20 63 6e 75 6d 20 3d 20 70 49 64 78 2d 3e 61 69   cnum = pIdx->ai
7310: 43 6f 6c 75 6d 6e 5b 6e 5d 3b 0d 0a 20 20 20 20  Column[n];..    
7320: 69 66 20 28 73 71 6c 69 74 65 33 53 74 72 49 43  if (sqlite3StrIC
7330: 6d 70 28 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e  mp(pTab->aCol[cn
7340: 75 6d 5d 2e 7a 4e 61 6d 65 2c 20 7a 43 6f 6c 75  um].zName, zColu
7350: 6d 6e 4e 61 6d 65 29 20 3d 3d 20 30 29 0d 0a 20  mnName) == 0).. 
7360: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28     {..      if (
7370: 20 73 6f 72 74 4f 72 64 65 72 20 29 20 2a 73 6f   sortOrder ) *so
7380: 72 74 4f 72 64 65 72 20 3d 20 70 49 64 78 2d 3e  rtOrder = pIdx->
7390: 61 53 6f 72 74 4f 72 64 65 72 5b 6e 5d 3b 0d 0a  aSortOrder[n];..
73a0: 20 20 20 20 20 20 69 66 20 28 20 70 7a 43 6f 6c        if ( pzCol
73b0: 6c 20 29 20 2a 70 7a 43 6f 6c 6c 20 3d 20 70 49  l ) *pzColl = pI
73c0: 64 78 2d 3e 61 7a 43 6f 6c 6c 5b 6e 5d 3b 0d 0a  dx->azColl[n];..
73d0: 20 20 20 20 20 20 69 66 20 28 20 70 6c 65 6e 20        if ( plen 
73e0: 29 20 2a 70 6c 65 6e 20 3d 20 73 74 72 6c 65 6e  ) *plen = strlen
73f0: 28 2a 70 7a 43 6f 6c 6c 29 3b 0d 0a 20 20 20 20  (*pzColl);..    
7400: 20 20 69 66 20 28 20 6f 6e 45 72 72 6f 72 20 29    if ( onError )
7410: 20 2a 6f 6e 45 72 72 6f 72 20 3d 20 70 49 64 78   *onError = pIdx
7420: 2d 3e 6f 6e 45 72 72 6f 72 3b 0d 0a 0d 0a 20 20  ->onError;....  
7430: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
7440: 45 5f 4f 4b 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20  E_OK;..    }..  
7450: 7d 0d 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49  }..  return SQLI
7460: 54 45 5f 45 52 52 4f 52 3b 0d 0a 7d 0d 0a 0d 0a  TE_ERROR;..}....
7470: 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57  SQLITE_API int W
7480: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 74 61  INAPI sqlite3_ta
7490: 62 6c 65 5f 63 75 72 73 6f 72 5f 69 6e 74 65 72  ble_cursor_inter
74a0: 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  op(sqlite3_stmt 
74b0: 2a 70 73 74 6d 74 2c 20 69 6e 74 20 69 44 62 2c  *pstmt, int iDb,
74c0: 20 50 67 6e 6f 20 74 61 62 6c 65 52 6f 6f 74 50   Pgno tableRootP
74d0: 61 67 65 29 0d 0a 7b 0d 0a 20 20 56 64 62 65 20  age)..{..  Vdbe 
74e0: 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70 73 74  *p = (Vdbe *)pst
74f0: 6d 74 3b 0d 0a 20 20 73 71 6c 69 74 65 33 20 2a  mt;..  sqlite3 *
7500: 64 62 20 3d 20 28 70 20 3d 3d 20 4e 55 4c 4c 29  db = (p == NULL)
7510: 20 3f 20 4e 55 4c 4c 20 3a 20 70 2d 3e 64 62 3b   ? NULL : p->db;
7520: 0d 0a 20 20 69 6e 74 20 6e 3b 0d 0a 20 20 69 6e  ..  int n;..  in
7530: 74 20 72 65 74 20 3d 20 2d 31 3b 20 2f 2a 20 4e  t ret = -1; /* N
7540: 4f 54 20 46 4f 55 4e 44 20 2a 2f 0d 0a 0d 0a 20  OT FOUND */.... 
7550: 20 69 66 20 28 21 70 20 7c 7c 20 21 64 62 29 20   if (!p || !db) 
7560: 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 20 20 73  return ret;..  s
7570: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
7580: 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a  er(db->mutex);..
7590: 20 20 66 6f 72 20 28 6e 20 3d 20 30 3b 20 6e 20    for (n = 0; n 
75a0: 3c 20 70 2d 3e 6e 43 75 72 73 6f 72 20 26 26 20  < p->nCursor && 
75b0: 70 2d 3e 61 70 43 73 72 5b 6e 5d 20 21 3d 20 4e  p->apCsr[n] != N
75c0: 55 4c 4c 3b 20 6e 2b 2b 29 0d 0a 20 20 7b 0d 0a  ULL; n++)..  {..
75d0: 20 20 20 20 69 66 20 28 70 2d 3e 61 70 43 73 72      if (p->apCsr
75e0: 5b 6e 5d 2d 3e 69 73 54 61 62 6c 65 20 3d 3d 20  [n]->isTable == 
75f0: 46 41 4c 53 45 29 20 63 6f 6e 74 69 6e 75 65 3b  FALSE) continue;
7600: 0d 0a 20 20 20 20 69 66 20 28 70 2d 3e 61 70 43  ..    if (p->apC
7610: 73 72 5b 6e 5d 2d 3e 69 44 62 20 21 3d 20 69 44  sr[n]->iDb != iD
7620: 62 29 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 23 69  b) continue;..#i
7630: 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
7640: 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 31 30 30  _NUMBER >= 30100
7650: 30 30 0d 0a 20 20 20 20 69 66 20 28 70 2d 3e 61  00..    if (p->a
7660: 70 43 73 72 5b 6e 5d 2d 3e 75 63 2e 70 43 75 72  pCsr[n]->uc.pCur
7670: 73 6f 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 3d  sor->pgnoRoot ==
7680: 20 74 61 62 6c 65 52 6f 6f 74 50 61 67 65 29 0d   tableRootPage).
7690: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 69 66 20 28  .#else..    if (
76a0: 70 2d 3e 61 70 43 73 72 5b 6e 5d 2d 3e 70 43 75  p->apCsr[n]->pCu
76b0: 72 73 6f 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d  rsor->pgnoRoot =
76c0: 3d 20 74 61 62 6c 65 52 6f 6f 74 50 61 67 65 29  = tableRootPage)
76d0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7b 0d  ..#endif..    {.
76e0: 0a 20 20 20 20 20 20 72 65 74 20 3d 20 6e 3b 0d  .      ret = n;.
76f0: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20  .      break;.. 
7700: 20 20 20 7d 0d 0a 20 20 7d 0d 0a 20 20 73 71 6c     }..  }..  sql
7710: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
7720: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a  (db->mutex);....
7730: 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d    return ret;..}
7740: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69  ....SQLITE_API i
7750: 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  nt WINAPI sqlite
7760: 33 5f 63 75 72 73 6f 72 5f 72 6f 77 69 64 5f 69  3_cursor_rowid_i
7770: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73  nterop(sqlite3_s
7780: 74 6d 74 20 2a 70 73 74 6d 74 2c 20 69 6e 74 20  tmt *pstmt, int 
7790: 63 75 72 73 6f 72 2c 20 73 71 6c 69 74 65 5f 69  cursor, sqlite_i
77a0: 6e 74 36 34 20 2a 70 72 6f 77 69 64 29 0d 0a 7b  nt64 *prowid)..{
77b0: 0d 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56  ..  Vdbe *p = (V
77c0: 64 62 65 20 2a 29 70 73 74 6d 74 3b 0d 0a 20 20  dbe *)pstmt;..  
77d0: 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 28 70  sqlite3 *db = (p
77e0: 20 3d 3d 20 4e 55 4c 4c 29 20 3f 20 4e 55 4c 4c   == NULL) ? NULL
77f0: 20 3a 20 70 2d 3e 64 62 3b 0d 0a 20 20 56 64 62   : p->db;..  Vdb
7800: 65 43 75 72 73 6f 72 20 2a 70 43 3b 0d 0a 23 69  eCursor *pC;..#i
7810: 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
7820: 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 31 31 30  _NUMBER >= 30110
7830: 30 30 0d 0a 20 20 69 6e 74 20 70 32 20 3d 20 30  00..  int p2 = 0
7840: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 69 6e 74  ;..#endif..  int
7850: 20 72 65 74 20 3d 20 53 51 4c 49 54 45 5f 4f 4b   ret = SQLITE_OK
7860: 3b 0d 0a 0d 0a 20 20 69 66 20 28 21 70 20 7c 7c  ;....  if (!p ||
7870: 20 21 64 62 29 20 72 65 74 75 72 6e 20 53 51 4c   !db) return SQL
7880: 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 73 71  ITE_ERROR;..  sq
7890: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
78a0: 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20  r(db->mutex);.. 
78b0: 20 77 68 69 6c 65 20 28 31 29 0d 0a 20 20 7b 0d   while (1)..  {.
78c0: 0a 20 20 20 20 69 66 20 28 63 75 72 73 6f 72 20  .    if (cursor 
78d0: 3c 20 30 20 7c 7c 20 63 75 72 73 6f 72 20 3e 3d  < 0 || cursor >=
78e0: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 0d 0a 20 20   p->nCursor)..  
78f0: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 20 3d    {..      ret =
7900: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0d 0a   SQLITE_ERROR;..
7910: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
7920: 20 20 7d 0d 0a 20 20 20 20 69 66 20 28 70 2d 3e    }..    if (p->
7930: 61 70 43 73 72 5b 63 75 72 73 6f 72 5d 20 3d 3d  apCsr[cursor] ==
7940: 20 4e 55 4c 4c 29 0d 0a 20 20 20 20 7b 0d 0a 20   NULL)..    {.. 
7950: 20 20 20 20 20 72 65 74 20 3d 20 53 51 4c 49 54       ret = SQLIT
7960: 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 20 20 20 20  E_ERROR;..      
7970: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  break;..    }...
7980: 0a 20 20 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  .    pC = p->apC
7990: 73 72 5b 63 75 72 73 6f 72 5d 3b 0d 0a 0d 0a 23  sr[cursor];....#
79a0: 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  if SQLITE_VERSIO
79b0: 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 31 31  N_NUMBER >= 3011
79c0: 30 30 30 0d 0a 20 20 20 20 72 65 74 20 3d 20 73  000..    ret = s
79d0: 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
79e0: 4d 6f 76 65 74 6f 28 26 70 43 2c 20 26 70 32 29  Moveto(&pC, &p2)
79f0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 72 65  ;..#else..    re
7a00: 74 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  t = sqlite3VdbeC
7a10: 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
7a20: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 69 66  ..#endif..    if
7a30: 28 72 65 74 29 0d 0a 20 20 20 20 20 20 62 72 65  (ret)..      bre
7a40: 61 6b 3b 0d 0a 0d 0a 23 69 66 20 53 51 4c 49 54  ak;....#if SQLIT
7a50: 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52  E_VERSION_NUMBER
7a60: 20 3c 20 33 30 30 38 30 30 37 0d 0a 20 20 20 20   < 3008007..    
7a70: 69 66 28 70 43 2d 3e 72 6f 77 69 64 49 73 56 61  if(pC->rowidIsVa
7a80: 6c 69 64 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lid)..    {..   
7a90: 20 20 20 69 66 20 28 70 72 6f 77 69 64 29 20 2a     if (prowid) *
7aa0: 70 72 6f 77 69 64 20 3d 20 70 43 2d 3e 6c 61 73  prowid = pC->las
7ab0: 74 52 6f 77 69 64 3b 0d 0a 20 20 20 20 7d 0d 0a  tRowid;..    }..
7ac0: 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66      else..#endif
7ad0: 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52  ..#if SQLITE_VER
7ae0: 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33  SION_NUMBER >= 3
7af0: 30 31 30 30 30 30 0d 0a 20 20 20 20 69 66 28 70  010000..    if(p
7b00: 43 2d 3e 75 63 2e 70 73 65 75 64 6f 54 61 62 6c  C->uc.pseudoTabl
7b10: 65 52 65 67 20 3e 20 30 29 0d 0a 23 65 6c 73 65  eReg > 0)..#else
7b20: 0d 0a 20 20 20 20 69 66 28 70 43 2d 3e 70 73 65  ..    if(pC->pse
7b30: 75 64 6f 54 61 62 6c 65 52 65 67 20 3e 20 30 29  udoTableReg > 0)
7b40: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7b 0d  ..#endif..    {.
7b50: 0a 20 20 20 20 20 20 72 65 74 20 3d 20 53 51 4c  .      ret = SQL
7b60: 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 20 20  ITE_ERROR;..    
7b70: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 7d 0d    break;..    }.
7b80: 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53  .#if SQLITE_VERS
7b90: 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30  ION_NUMBER >= 30
7ba0: 31 30 30 30 30 0d 0a 20 20 20 20 65 6c 73 65 20  10000..    else 
7bb0: 69 66 28 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c  if(pC->nullRow |
7bc0: 7c 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  | pC->uc.pCursor
7bd0: 3d 3d 30 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ==0)..#else..   
7be0: 20 65 6c 73 65 20 69 66 28 70 43 2d 3e 6e 75 6c   else if(pC->nul
7bf0: 6c 52 6f 77 20 7c 7c 20 70 43 2d 3e 70 43 75 72  lRow || pC->pCur
7c00: 73 6f 72 3d 3d 30 29 0d 0a 23 65 6e 64 69 66 0d  sor==0)..#endif.
7c10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
7c20: 74 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  t = SQLITE_ERROR
7c30: 3b 0d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0d  ;..      break;.
7c40: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 65 6c 73 65  .    }..    else
7c50: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 53 51 4c  ..    {..#if SQL
7c60: 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  ITE_VERSION_NUMB
7c70: 45 52 20 3e 3d 20 33 30 31 30 30 30 30 0d 0a 20  ER >= 3010000.. 
7c80: 20 20 20 20 20 69 66 20 28 70 43 2d 3e 75 63 2e       if (pC->uc.
7c90: 70 43 75 72 73 6f 72 20 3d 3d 20 4e 55 4c 4c 29  pCursor == NULL)
7ca0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 69  ..#else..      i
7cb0: 66 20 28 70 43 2d 3e 70 43 75 72 73 6f 72 20 3d  f (pC->pCursor =
7cc0: 3d 20 4e 55 4c 4c 29 0d 0a 23 65 6e 64 69 66 0d  = NULL)..#endif.
7cd0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
7ce0: 20 20 72 65 74 20 3d 20 53 51 4c 49 54 45 5f 45    ret = SQLITE_E
7cf0: 52 52 4f 52 3b 0d 0a 20 20 20 20 20 20 20 20 62  RROR;..        b
7d00: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  reak;..      }..
7d10: 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49  #if SQLITE_VERSI
7d20: 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 31  ON_NUMBER >= 301
7d30: 30 30 30 30 0d 0a 20 20 20 20 20 20 73 71 6c 69  0000..      sqli
7d40: 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
7d50: 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
7d60: 70 72 6f 77 69 64 29 3b 0d 0a 23 65 6c 73 65 0d  prowid);..#else.
7d70: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74  .      sqlite3Bt
7d80: 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70  reeKeySize(pC->p
7d90: 43 75 72 73 6f 72 2c 20 70 72 6f 77 69 64 29 3b  Cursor, prowid);
7da0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
7db0: 69 66 20 28 70 72 6f 77 69 64 29 20 2a 70 72 6f  if (prowid) *pro
7dc0: 77 69 64 20 3d 20 2a 70 72 6f 77 69 64 3b 0d 0a  wid = *prowid;..
7dd0: 20 20 20 20 7d 0d 0a 20 20 20 20 62 72 65 61 6b      }..    break
7de0: 3b 0d 0a 20 20 7d 0d 0a 20 20 73 71 6c 69 74 65  ;..  }..  sqlite
7df0: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62  3_mutex_leave(db
7e00: 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20 20 72  ->mutex);....  r
7e10: 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a 23  eturn ret;..}..#
7e20: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
7e30: 4f 53 5f 57 49 4e 20 2a 2f 0d 0a 0d 0a 2f 2a 2a  OS_WIN */..../**
7e40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7e50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7e60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7e70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7e80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0d 0a 0d 0a  ***********/....
7e90: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
7ea0: 54 45 5f 43 4f 52 45 29 0d 0a 23 75 6e 64 65 66  TE_CORE)..#undef
7eb0: 20 53 51 4c 49 54 45 5f 43 4f 52 45 0d 0a 23 65   SQLITE_CORE..#e
7ec0: 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69  ndif....#if defi
7ed0: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 56 49 52 54  ned(INTEROP_VIRT
7ee0: 55 41 4c 5f 54 41 42 4c 45 29 20 26 26 20 53 51  UAL_TABLE) && SQ
7ef0: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
7f00: 42 45 52 20 3e 3d 20 33 30 30 34 30 30 31 0d 0a  BER >= 3004001..
7f10: 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 65 78 74  #include "../ext
7f20: 2f 76 74 73 68 69 6d 2e 63 22 0d 0a 23 65 6e 64  /vtshim.c"..#end
7f30: 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65  if....#if define
7f40: 64 28 49 4e 54 45 52 4f 50 5f 46 54 53 35 5f 45  d(INTEROP_FTS5_E
7f50: 58 54 45 4e 53 49 4f 4e 29 0d 0a 23 69 6e 63 6c  XTENSION)..#incl
7f60: 75 64 65 20 22 2e 2e 2f 65 78 74 2f 66 74 73 35  ude "../ext/fts5
7f70: 2e 63 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23  .c"..#endif....#
7f80: 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52  if defined(INTER
7f90: 4f 50 5f 4a 53 4f 4e 31 5f 45 58 54 45 4e 53 49  OP_JSON1_EXTENSI
7fa0: 4f 4e 29 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e  ON)..#include ".
7fb0: 2e 2f 65 78 74 2f 6a 73 6f 6e 31 2e 63 22 0d 0a  ./ext/json1.c"..
7fc0: 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65  #endif....#if de
7fd0: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 50 45  fined(INTEROP_PE
7fe0: 52 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e 53 49  RCENTILE_EXTENSI
7ff0: 4f 4e 29 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e  ON)..#include ".
8000: 2e 2f 65 78 74 2f 70 65 72 63 65 6e 74 69 6c 65  ./ext/percentile
8010: 2e 63 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23  .c"..#endif....#
8020: 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52  if defined(INTER
8030: 4f 50 5f 52 45 47 45 58 50 5f 45 58 54 45 4e 53  OP_REGEXP_EXTENS
8040: 49 4f 4e 29 0d 0a 23 69 6e 63 6c 75 64 65 20 22  ION)..#include "
8050: 2e 2e 2f 65 78 74 2f 72 65 67 65 78 70 2e 63 22  ../ext/regexp.c"
8060: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20  ..#endif....#if 
8070: 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f  defined(INTEROP_
8080: 54 4f 54 59 50 45 5f 45 58 54 45 4e 53 49 4f 4e  TOTYPE_EXTENSION
8090: 29 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f  )..#include "../
80a0: 65 78 74 2f 74 6f 74 79 70 65 2e 63 22 0d 0a 23  ext/totype.c"..#
80b0: 65 6e 64 69 66 0d 0a 0d 0a 2f 2a 2a 2a 2a 2a 2a  endif..../******
80c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
80d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
80e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
80f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8100: 2a 2a 2a 2a 2a 2a 2a 2f 0d 0a 0d 0a 2f 2a 0d 0a  *******/..../*..
8110: 2a 2a 20 54 68 65 20 49 4e 54 45 52 4f 50 5f 54  ** The INTEROP_T
8120: 45 53 54 5f 45 58 54 45 4e 53 49 4f 4e 20 62 6c  EST_EXTENSION bl
8130: 6f 63 6b 20 6d 75 73 74 20 62 65 20 61 74 20 74  ock must be at t
8140: 68 65 20 65 6e 64 20 6f 66 20 74 68 69 73 20 73  he end of this s
8150: 6f 75 72 63 65 20 66 69 6c 65 0d 0a 2a 2a 20 62  ource file..** b
8160: 65 63 61 75 73 65 20 69 74 20 69 6e 63 6c 75 64  ecause it includ
8170: 65 73 20 74 68 65 20 22 73 71 6c 69 74 65 33 65  es the "sqlite3e
8180: 78 74 2e 68 22 20 66 69 6c 65 2c 20 77 68 69 63  xt.h" file, whic
8190: 68 20 64 65 66 69 6e 65 73 20 74 68 65 20 73 71  h defines the sq
81a0: 6c 69 74 65 33 0d 0a 2a 2a 20 70 75 62 6c 69 63  lite3..** public
81b0: 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 20 6e 61   API function na
81c0: 6d 65 73 20 74 6f 20 62 65 20 6d 61 63 72 6f 73  mes to be macros
81d0: 20 61 6e 64 20 74 68 61 74 20 77 6f 75 6c 64 20   and that would 
81e0: 63 61 75 73 65 20 74 68 65 20 63 6f 64 65 0d 0a  cause the code..
81f0: 2a 2a 20 61 62 6f 76 65 20 74 68 69 73 20 70 6f  ** above this po
8200: 69 6e 74 20 74 6f 20 6d 61 6c 66 75 6e 63 74 69  int to malfuncti
8210: 6f 6e 2e 0d 0a 2a 2f 0d 0a 23 69 66 20 64 65 66  on...*/..#if def
8220: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 54 45 53  ined(INTEROP_TES
8230: 54 5f 45 58 54 45 4e 53 49 4f 4e 29 0d 0a 23 69  T_EXTENSION)..#i
8240: 6e 63 6c 75 64 65 20 22 2e 2e 2f 63 6f 72 65 2f  nclude "../core/
8250: 73 71 6c 69 74 65 33 65 78 74 2e 68 22 0d 0a 53  sqlite3ext.h"..S
8260: 51 4c 49 54 45 5f 45 58 54 45 4e 53 49 4f 4e 5f  QLITE_EXTENSION_
8270: 49 4e 49 54 31 0d 0a 0d 0a 2f 2a 0d 0a 2a 2a 20  INIT1..../*..** 
8280: 54 68 65 20 69 6e 74 65 72 6f 70 54 65 73 74 28  The interopTest(
8290: 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 72  ) SQL function r
82a0: 65 74 75 72 6e 73 20 69 74 73 20 66 69 72 73 74  eturns its first
82b0: 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 72 61 69   argument or rai
82c0: 73 65 73 20 61 6e 0d 0a 2a 2a 20 65 72 72 6f 72  ses an..** error
82d0: 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
82e0: 74 20 65 6e 6f 75 67 68 20 61 72 67 75 6d 65 6e  t enough argumen
82f0: 74 73 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49 54 45 5f  ts...*/..SQLITE_
8300: 50 52 49 56 41 54 45 20 76 6f 69 64 20 69 6e 74  PRIVATE void int
8310: 65 72 6f 70 54 65 73 74 46 75 6e 63 28 0d 0a 20  eropTestFunc(.. 
8320: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
8330: 20 2a 63 6f 6e 74 65 78 74 2c 0d 0a 20 20 69 6e   *context,..  in
8340: 74 20 61 72 67 63 2c 0d 0a 20 20 73 71 6c 69 74  t argc,..  sqlit
8350: 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0d  e3_value **argv.
8360: 0a 29 7b 0d 0a 20 20 63 6f 6e 73 74 20 75 6e 73  .){..  const uns
8370: 69 67 6e 65 64 20 63 68 61 72 20 2a 7a 3b 0d 0a  igned char *z;..
8380: 20 20 69 66 28 20 61 72 67 63 21 3d 31 20 29 7b    if( argc!=1 ){
8390: 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65  ..    sqlite3_re
83a0: 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65  sult_error(conte
83b0: 78 74 2c 20 22 6e 65 65 64 20 65 78 61 63 74 6c  xt, "need exactl
83c0: 79 20 6f 6e 65 20 61 72 67 75 6d 65 6e 74 22 2c  y one argument",
83d0: 20 2d 31 29 3b 0d 0a 20 20 20 20 72 65 74 75 72   -1);..    retur
83e0: 6e 3b 0d 0a 20 20 7d 0d 0a 20 20 7a 20 3d 20 73  n;..  }..  z = s
83f0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
8400: 74 28 61 72 67 76 5b 30 5d 29 3b 0d 0a 20 20 69  t(argv[0]);..  i
8410: 66 28 20 7a 20 29 7b 0d 0a 20 20 20 20 73 71 6c  f( z ){..    sql
8420: 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
8430: 28 63 6f 6e 74 65 78 74 2c 20 28 63 68 61 72 2a  (context, (char*
8440: 29 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 53  )z, -1, SQLITE_S
8450: 54 41 54 49 43 29 3b 0d 0a 20 20 7d 65 6c 73 65  TATIC);..  }else
8460: 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72  {..    sqlite3_r
8470: 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65  esult_null(conte
8480: 78 74 29 3b 0d 0a 20 20 7d 0d 0a 7d 0d 0a 0d 0a  xt);..  }..}....
8490: 2f 2a 0d 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  /*..** The inter
84a0: 6f 70 53 6c 65 65 70 28 29 20 53 51 4c 20 66 75  opSleep() SQL fu
84b0: 6e 63 74 69 6f 6e 20 77 61 69 74 73 20 74 68 65  nction waits the
84c0: 20 73 70 65 63 69 66 69 65 64 20 6e 75 6d 62 65   specified numbe
84d0: 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64  r of millisecond
84e0: 73 0d 0a 2a 2a 20 6f 72 20 72 61 69 73 65 73 20  s..** or raises 
84f0: 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65 72  an error if ther
8500: 65 20 61 72 65 20 6e 6f 74 20 65 6e 6f 75 67 68  e are not enough
8510: 20 61 72 67 75 6d 65 6e 74 73 2e 0d 0a 2a 2f 0d   arguments...*/.
8520: 0a 53 51 4c 49 54 45 5f 50 52 49 56 41 54 45 20  .SQLITE_PRIVATE 
8530: 76 6f 69 64 20 69 6e 74 65 72 6f 70 53 6c 65 65  void interopSlee
8540: 70 46 75 6e 63 28 0d 0a 20 20 73 71 6c 69 74 65  pFunc(..  sqlite
8550: 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65  3_context *conte
8560: 78 74 2c 0d 0a 20 20 69 6e 74 20 61 72 67 63 2c  xt,..  int argc,
8570: 0d 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ..  sqlite3_valu
8580: 65 20 2a 2a 61 72 67 76 0d 0a 29 7b 0d 0a 20 20  e **argv..){..  
8590: 69 6e 74 20 6d 3b 0d 0a 20 20 69 66 28 20 61 72  int m;..  if( ar
85a0: 67 63 21 3d 31 20 29 7b 0d 0a 20 20 20 20 73 71  gc!=1 ){..    sq
85b0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72  lite3_result_err
85c0: 6f 72 28 63 6f 6e 74 65 78 74 2c 20 22 6e 65 65  or(context, "nee
85d0: 64 20 65 78 61 63 74 6c 79 20 6f 6e 65 20 61 72  d exactly one ar
85e0: 67 75 6d 65 6e 74 22 2c 20 2d 31 29 3b 0d 0a 20  gument", -1);.. 
85f0: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 7d 0d     return;..  }.
8600: 0a 20 20 6d 20 3d 20 73 71 6c 69 74 65 33 5f 76  .  m = sqlite3_v
8610: 61 6c 75 65 5f 69 6e 74 28 61 72 67 76 5b 30 5d  alue_int(argv[0]
8620: 29 3b 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f  );..#if SQLITE_O
8630: 53 5f 57 49 4e 43 45 0d 0a 20 20 53 6c 65 65 70  S_WINCE..  Sleep
8640: 28 6d 29 3b 0d 0a 20 20 73 71 6c 69 74 65 33 5f  (m);..  sqlite3_
8650: 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65  result_int(conte
8660: 78 74 2c 20 57 41 49 54 5f 4f 42 4a 45 43 54 5f  xt, WAIT_OBJECT_
8670: 30 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 73 71  0);..#else..  sq
8680: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
8690: 28 63 6f 6e 74 65 78 74 2c 20 53 6c 65 65 70 45  (context, SleepE
86a0: 78 28 6d 2c 20 54 52 55 45 29 29 3b 0d 0a 23 65  x(m, TRUE));..#e
86b0: 6e 64 69 66 0d 0a 7d 0d 0a 0d 0a 2f 2a 20 53 51  ndif..}..../* SQ
86c0: 4c 69 74 65 20 69 6e 76 6f 6b 65 73 20 74 68 69  Lite invokes thi
86d0: 73 20 72 6f 75 74 69 6e 65 20 6f 6e 63 65 20 77  s routine once w
86e0: 68 65 6e 20 69 74 20 6c 6f 61 64 73 20 74 68 65  hen it loads the
86f0: 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 2a 2a 20   extension...** 
8700: 43 72 65 61 74 65 20 6e 65 77 20 66 75 6e 63 74  Create new funct
8710: 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74 69 6e 67 20  ions, collating 
8720: 73 65 71 75 65 6e 63 65 73 2c 20 61 6e 64 20 76  sequences, and v
8730: 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 2a 2a  irtual table..**
8740: 20 6d 6f 64 75 6c 65 73 20 68 65 72 65 2e 20 20   modules here.  
8750: 54 68 69 73 20 69 73 20 75 73 75 61 6c 6c 79 20  This is usually 
8760: 74 68 65 20 6f 6e 6c 79 20 65 78 70 6f 72 74 65  the only exporte
8770: 64 20 73 79 6d 62 6f 6c 20 69 6e 0d 0a 2a 2a 20  d symbol in..** 
8780: 74 68 65 20 73 68 61 72 65 64 20 6c 69 62 72 61  the shared libra
8790: 72 79 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49 54 45 5f  ry...*/..SQLITE_
87a0: 41 50 49 20 69 6e 74 20 69 6e 74 65 72 6f 70 5f  API int interop_
87b0: 74 65 73 74 5f 65 78 74 65 6e 73 69 6f 6e 5f 69  test_extension_i
87c0: 6e 69 74 28 0d 0a 20 20 73 71 6c 69 74 65 33 20  nit(..  sqlite3 
87d0: 2a 64 62 2c 0d 0a 20 20 63 68 61 72 20 2a 2a 70  *db,..  char **p
87e0: 7a 45 72 72 4d 73 67 2c 0d 0a 20 20 63 6f 6e 73  zErrMsg,..  cons
87f0: 74 20 73 71 6c 69 74 65 33 5f 61 70 69 5f 72 6f  t sqlite3_api_ro
8800: 75 74 69 6e 65 73 20 2a 70 41 70 69 0d 0a 29 7b  utines *pApi..){
8810: 0d 0a 20 20 69 6e 74 20 72 63 3b 0d 0a 20 20 53  ..  int rc;..  S
8820: 51 4c 49 54 45 5f 45 58 54 45 4e 53 49 4f 4e 5f  QLITE_EXTENSION_
8830: 49 4e 49 54 32 28 70 41 70 69 29 0d 0a 20 20 72  INIT2(pApi)..  r
8840: 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61  c = sqlite3_crea
8850: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20  te_function(db, 
8860: 22 69 6e 74 65 72 6f 70 54 65 73 74 22 2c 20 2d  "interopTest", -
8870: 31 2c 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20 30  1, SQLITE_ANY, 0
8880: 2c 0d 0a 20 20 20 20 20 20 69 6e 74 65 72 6f 70  ,..      interop
8890: 54 65 73 74 46 75 6e 63 2c 20 30 2c 20 30 29 3b  TestFunc, 0, 0);
88a0: 0d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ..  if( rc==SQLI
88b0: 54 45 5f 4f 4b 20 29 7b 0d 0a 20 20 20 20 72 63  TE_OK ){..    rc
88c0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
88d0: 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22  e_function(db, "
88e0: 69 6e 74 65 72 6f 70 53 6c 65 65 70 22 2c 20 31  interopSleep", 1
88f0: 2c 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20 30 2c  , SQLITE_ANY, 0,
8900: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6f  ..        intero
8910: 70 53 6c 65 65 70 46 75 6e 63 2c 20 30 2c 20 30  pSleepFunc, 0, 0
8920: 29 3b 0d 0a 20 20 7d 0d 0a 20 20 72 65 74 75 72  );..  }..  retur
8930: 6e 20 72 63 3b 0d 0a 7d 0d 0a 23 65 6e 64 69 66  n rc;..}..#endif
8940: 20 2f 2a 20 64 65 66 69 6e 65 64 28 53 51 4c 49   /* defined(SQLI
8950: 54 45 5f 4f 53 5f 57 49 4e 29 20 2a 2f 0d 0a     TE_OS_WIN) */..