System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 40079e0eb751c4075964c5d0318eb98db06b1ba9:


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 65 6e 64 69 66  ipvfs.c"..#endif
0290: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
02a0: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
02b0: 54 41 42 4c 45 29 20 26 26 20 53 51 4c 49 54 45  TABLE) && SQLITE
02c0: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20  _VERSION_NUMBER 
02d0: 3e 3d 20 33 30 30 34 30 30 31 0d 0a 23 69 6e 63  >= 3004001..#inc
02e0: 6c 75 64 65 20 22 2e 2e 2f 65 78 74 2f 76 74 73  lude "../ext/vts
02f0: 68 69 6d 2e 63 22 0d 0a 23 65 6e 64 69 66 0d 0a  him.c"..#endif..
0300: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
0310: 54 45 52 4f 50 5f 50 45 52 43 45 4e 54 49 4c 45  TEROP_PERCENTILE
0320: 5f 45 58 54 45 4e 53 49 4f 4e 29 0d 0a 23 69 6e  _EXTENSION)..#in
0330: 63 6c 75 64 65 20 22 2e 2e 2f 65 78 74 2f 70 65  clude "../ext/pe
0340: 72 63 65 6e 74 69 6c 65 2e 63 22 0d 0a 23 65 6e  rcentile.c"..#en
0350: 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e  dif....#if defin
0360: 65 64 28 49 4e 54 45 52 4f 50 5f 54 4f 54 59 50  ed(INTEROP_TOTYP
0370: 45 5f 45 58 54 45 4e 53 49 4f 4e 29 0d 0a 23 69  E_EXTENSION)..#i
0380: 6e 63 6c 75 64 65 20 22 2e 2e 2f 65 78 74 2f 74  nclude "../ext/t
0390: 6f 74 79 70 65 2e 63 22 0d 0a 23 65 6e 64 69 66  otype.c"..#endif
03a0: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
03b0: 49 4e 54 45 52 4f 50 5f 52 45 47 45 58 50 5f 45  INTEROP_REGEXP_E
03c0: 58 54 45 4e 53 49 4f 4e 29 0d 0a 23 69 6e 63 6c  XTENSION)..#incl
03d0: 75 64 65 20 22 2e 2e 2f 65 78 74 2f 72 65 67 65  ude "../ext/rege
03e0: 78 70 2e 63 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d  xp.c"..#endif...
03f0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54  .#if defined(INT
0400: 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f 46  EROP_EXTENSION_F
0410: 55 4e 43 54 49 4f 4e 53 29 0d 0a 23 69 6e 63 6c  UNCTIONS)..#incl
0420: 75 64 65 20 22 2e 2e 2f 63 6f 6e 74 72 69 62 2f  ude "../contrib/
0430: 65 78 74 65 6e 73 69 6f 6e 2d 66 75 6e 63 74 69  extension-functi
0440: 6f 6e 73 2e 63 22 0d 0a 65 78 74 65 72 6e 20 69  ons.c"..extern i
0450: 6e 74 20 52 65 67 69 73 74 65 72 45 78 74 65 6e  nt RegisterExten
0460: 73 69 6f 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71  sionFunctions(sq
0470: 6c 69 74 65 33 20 2a 64 62 29 3b 0d 0a 23 65 6e  lite3 *db);..#en
0480: 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e  dif....#if defin
0490: 65 64 28 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  ed(SQLITE_OS_WIN
04a0: 29 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49  )..#if defined(I
04b0: 4e 54 45 52 4f 50 5f 43 4f 44 45 43 29 20 26 26  NTEROP_CODEC) &&
04c0: 20 21 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f   !defined(INTERO
04d0: 50 5f 49 4e 43 4c 55 44 45 5f 53 45 45 29 0d 0a  P_INCLUDE_SEE)..
04e0: 23 69 6e 63 6c 75 64 65 20 22 63 72 79 70 74 2e  #include "crypt.
04f0: 63 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69  c"..#endif....#i
0500: 6e 63 6c 75 64 65 20 22 69 6e 74 65 72 6f 70 2e  nclude "interop.
0510: 68 22 0d 0a 0d 0a 23 64 65 66 69 6e 65 20 49 4e  h"....#define IN
0520: 54 45 52 4f 50 5f 44 45 42 55 47 5f 4e 4f 4e 45  TEROP_DEBUG_NONE
0530: 20 20 20 20 20 20 20 20 20 20 20 28 30 78 30 30             (0x00
0540: 30 30 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54  00)..#define INT
0550: 45 52 4f 50 5f 44 45 42 55 47 5f 43 4c 4f 53 45  EROP_DEBUG_CLOSE
0560: 20 20 20 20 20 20 20 20 20 20 28 30 78 30 30 30            (0x000
0570: 31 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54 45  1)..#define INTE
0580: 52 4f 50 5f 44 45 42 55 47 5f 46 49 4e 41 4c 49  ROP_DEBUG_FINALI
0590: 5a 45 20 20 20 20 20 20 20 28 30 78 30 30 30 32  ZE       (0x0002
05a0: 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52  )..#define INTER
05b0: 4f 50 5f 44 45 42 55 47 5f 42 41 43 4b 55 50 5f  OP_DEBUG_BACKUP_
05c0: 46 49 4e 49 53 48 20 20 28 30 78 30 30 30 34 29  FINISH  (0x0004)
05d0: 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52 4f  ..#define INTERO
05e0: 50 5f 44 45 42 55 47 5f 4f 50 45 4e 20 20 20 20  P_DEBUG_OPEN    
05f0: 20 20 20 20 20 20 20 28 30 78 30 30 30 38 29 0d         (0x0008).
0600: 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52 4f 50  .#define INTEROP
0610: 5f 44 45 42 55 47 5f 4f 50 45 4e 31 36 20 20 20  _DEBUG_OPEN16   
0620: 20 20 20 20 20 20 28 30 78 30 30 31 30 29 0d 0a        (0x0010)..
0630: 23 64 65 66 69 6e 65 20 49 4e 54 45 52 4f 50 5f  #define INTEROP_
0640: 44 45 42 55 47 5f 50 52 45 50 41 52 45 20 20 20  DEBUG_PREPARE   
0650: 20 20 20 20 20 28 30 78 30 30 32 30 29 0d 0a 23       (0x0020)..#
0660: 64 65 66 69 6e 65 20 49 4e 54 45 52 4f 50 5f 44  define INTEROP_D
0670: 45 42 55 47 5f 50 52 45 50 41 52 45 31 36 20 20  EBUG_PREPARE16  
0680: 20 20 20 20 28 30 78 30 30 34 30 29 0d 0a 23 64      (0x0040)..#d
0690: 65 66 69 6e 65 20 49 4e 54 45 52 4f 50 5f 44 45  efine INTEROP_DE
06a0: 42 55 47 5f 52 45 53 45 54 20 20 20 20 20 20 20  BUG_RESET       
06b0: 20 20 20 28 30 78 30 30 38 30 29 0d 0a 23 64 65     (0x0080)..#de
06c0: 66 69 6e 65 20 49 4e 54 45 52 4f 50 5f 44 45 42  fine INTEROP_DEB
06d0: 55 47 5f 43 48 41 4e 47 45 53 20 20 20 20 20 20  UG_CHANGES      
06e0: 20 20 28 30 78 30 31 30 30 29 0d 0a 23 64 65 66    (0x0100)..#def
06f0: 69 6e 65 20 49 4e 54 45 52 4f 50 5f 44 45 42 55  ine INTEROP_DEBU
0700: 47 5f 42 52 45 41 4b 20 20 20 20 20 20 20 20 20  G_BREAK         
0710: 20 28 30 78 30 32 30 30 29 0d 0a 0d 0a 23 69 66   (0x0200)....#if
0720: 20 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45   defined(_MSC_VE
0730: 52 29 20 26 26 20 64 65 66 69 6e 65 64 28 49 4e  R) && defined(IN
0740: 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20  TEROP_DEBUG) && 
0750: 5c 0d 0a 20 20 20 20 28 49 4e 54 45 52 4f 50 5f  \..    (INTEROP_
0760: 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f  DEBUG & INTEROP_
0770: 44 45 42 55 47 5f 42 52 45 41 4b 29 0d 0a 23 64  DEBUG_BREAK)..#d
0780: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 6e 74  efine sqlite3Int
0790: 65 72 6f 70 42 72 65 61 6b 28 61 29 20 7b 20 73  eropBreak(a) { s
07a0: 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62  qlite3InteropDeb
07b0: 75 67 28 22 25 73 5c 6e 22 2c 20 28 61 29 29 3b  ug("%s\n", (a));
07c0: 20 5f 5f 64 65 62 75 67 62 72 65 61 6b 28 29 3b   __debugbreak();
07d0: 20 7d 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69   }..#else..#defi
07e0: 6e 65 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f  ne sqlite3Intero
07f0: 70 42 72 65 61 6b 28 61 29 0d 0a 23 65 6e 64 69  pBreak(a)..#endi
0800: 66 0d 0a 0d 0a 74 79 70 65 64 65 66 20 76 6f 69  f....typedef voi
0810: 64 20 28 2a 53 51 4c 49 54 45 55 53 45 52 46 55  d (*SQLITEUSERFU
0820: 4e 43 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  NC)(sqlite3_cont
0830: 65 78 74 20 2a 2c 20 69 6e 74 2c 20 73 71 6c 69  ext *, int, sqli
0840: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0d 0a  te3_value **);..
0850: 74 79 70 65 64 65 66 20 76 6f 69 64 20 28 2a 53  typedef void (*S
0860: 51 4c 49 54 45 46 55 4e 43 46 49 4e 41 4c 29 28  QLITEFUNCFINAL)(
0870: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
0880: 2a 29 3b 0d 0a 0d 0a 2f 2a 0d 0a 2a 2a 20 41 6e  *);..../*..** An
0890: 20 61 72 72 61 79 20 6f 66 20 6e 61 6d 65 73 20   array of names 
08a0: 6f 66 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 2d 74  of all compile-t
08b0: 69 6d 65 20 6f 70 74 69 6f 6e 73 2e 20 20 54 68  ime options.  Th
08c0: 69 73 20 61 72 72 61 79 20 73 68 6f 75 6c 64 0d  is array should.
08d0: 0a 2a 2a 20 62 65 20 73 6f 72 74 65 64 20 41 2d  .** be sorted A-
08e0: 5a 2e 0d 0a 2a 2a 0d 0a 2a 2a 20 54 68 69 73 20  Z...**..** This 
08f0: 61 72 72 61 79 20 6c 6f 6f 6b 73 20 6c 61 72 67  array looks larg
0900: 65 2c 20 62 75 74 20 69 6e 20 61 20 74 79 70 69  e, but in a typi
0910: 63 61 6c 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e  cal installation
0920: 20 61 63 74 75 61 6c 6c 79 20 75 73 65 73 0d 0a   actually uses..
0930: 2a 2a 20 6f 6e 6c 79 20 61 20 68 61 6e 64 66 75  ** only a handfu
0940: 6c 20 6f 66 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  l of compile-tim
0950: 65 20 6f 70 74 69 6f 6e 73 2c 20 73 6f 20 6d 6f  e options, so mo
0960: 73 74 20 74 69 6d 65 73 20 74 68 69 73 20 61 72  st times this ar
0970: 72 61 79 20 69 73 20 75 73 75 61 6c 6c 79 0d 0a  ray is usually..
0980: 2a 2a 20 72 61 74 68 65 72 20 73 68 6f 72 74 20  ** rather short 
0990: 61 6e 64 20 75 73 65 73 20 6c 69 74 74 6c 65 20  and uses little 
09a0: 6d 65 6d 6f 72 79 20 73 70 61 63 65 2e 0d 0a 2a  memory space...*
09b0: 2f 0d 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20  /..static const 
09c0: 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 49  char * const azI
09d0: 6e 74 65 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74  nteropCompileOpt
09e0: 5b 5d 20 3d 20 7b 0d 0a 0d 0a 2f 2a 20 54 68 65  [] = {..../* The
09f0: 73 65 20 6d 61 63 72 6f 73 20 61 72 65 20 70 72  se macros are pr
0a00: 6f 76 69 64 65 64 20 74 6f 20 22 73 74 72 69 6e  ovided to "strin
0a10: 67 69 66 79 22 20 74 68 65 20 76 61 6c 75 65 20  gify" the value 
0a20: 6f 66 20 74 68 65 20 64 65 66 69 6e 65 0d 0a 2a  of the define..*
0a30: 2a 20 66 6f 72 20 74 68 6f 73 65 20 6f 70 74 69  * for those opti
0a40: 6f 6e 73 20 69 6e 20 77 68 69 63 68 20 74 68 65  ons in which the
0a50: 20 76 61 6c 75 65 20 69 73 20 6d 65 61 6e 69 6e   value is meanin
0a60: 67 66 75 6c 2e 20 2a 2f 0d 0a 23 69 66 6e 64 65  gful. */..#ifnde
0a70: 66 20 43 54 49 4d 45 4f 50 54 5f 56 41 4c 5f 0d  f CTIMEOPT_VAL_.
0a80: 0a 23 64 65 66 69 6e 65 20 43 54 49 4d 45 4f 50  .#define CTIMEOP
0a90: 54 5f 56 41 4c 5f 28 6f 70 74 29 20 23 6f 70 74  T_VAL_(opt) #opt
0aa0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 6e  ..#endif....#ifn
0ab0: 64 65 66 20 43 54 49 4d 45 4f 50 54 5f 56 41 4c  def CTIMEOPT_VAL
0ac0: 0d 0a 23 64 65 66 69 6e 65 20 43 54 49 4d 45 4f  ..#define CTIMEO
0ad0: 50 54 5f 56 41 4c 28 6f 70 74 29 20 43 54 49 4d  PT_VAL(opt) CTIM
0ae0: 45 4f 50 54 5f 56 41 4c 5f 28 6f 70 74 29 0d 0a  EOPT_VAL_(opt)..
0af0: 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 64 65 66  #endif....#ifdef
0b00: 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 0d 0a   INTEROP_CODEC..
0b10: 20 20 22 43 4f 44 45 43 22 2c 0d 0a 23 65 6e 64    "CODEC",..#end
0b20: 69 66 0d 0a 23 69 66 64 65 66 20 49 4e 54 45 52  if..#ifdef INTER
0b30: 4f 50 5f 44 45 42 55 47 0d 0a 20 20 22 44 45 42  OP_DEBUG..  "DEB
0b40: 55 47 3d 22 20 43 54 49 4d 45 4f 50 54 5f 56 41  UG=" CTIMEOPT_VA
0b50: 4c 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29  L(INTEROP_DEBUG)
0b60: 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65  ,..#endif..#ifde
0b70: 66 20 49 4e 54 45 52 4f 50 5f 45 58 54 45 4e 53  f INTEROP_EXTENS
0b80: 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53 0d 0a 20  ION_FUNCTIONS.. 
0b90: 20 22 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43   "EXTENSION_FUNC
0ba0: 54 49 4f 4e 53 22 2c 0d 0a 23 65 6e 64 69 66 0d  TIONS",..#endif.
0bb0: 0a 23 69 66 64 65 66 20 49 4e 54 45 52 4f 50 5f  .#ifdef INTEROP_
0bc0: 49 4e 43 4c 55 44 45 5f 43 45 52 4f 44 0d 0a 20  INCLUDE_CEROD.. 
0bd0: 20 22 49 4e 43 4c 55 44 45 5f 43 45 52 4f 44 22   "INCLUDE_CEROD"
0be0: 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65  ,..#endif..#ifde
0bf0: 66 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44  f INTEROP_INCLUD
0c00: 45 5f 45 58 54 52 41 0d 0a 20 20 22 49 4e 43 4c  E_EXTRA..  "INCL
0c10: 55 44 45 5f 45 58 54 52 41 22 2c 0d 0a 23 65 6e  UDE_EXTRA",..#en
0c20: 64 69 66 0d 0a 23 69 66 64 65 66 20 49 4e 54 45  dif..#ifdef INTE
0c30: 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 53 45 45 0d  ROP_INCLUDE_SEE.
0c40: 0a 20 20 22 49 4e 43 4c 55 44 45 5f 53 45 45 22  .  "INCLUDE_SEE"
0c50: 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65  ,..#endif..#ifde
0c60: 66 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44  f INTEROP_INCLUD
0c70: 45 5f 5a 49 50 56 46 53 0d 0a 20 20 22 49 4e 43  E_ZIPVFS..  "INC
0c80: 4c 55 44 45 5f 5a 49 50 56 46 53 22 2c 0d 0a 23  LUDE_ZIPVFS",..#
0c90: 65 6e 64 69 66 0d 0a 23 69 66 64 65 66 20 49 4e  endif..#ifdef IN
0ca0: 54 45 52 4f 50 5f 4c 45 47 41 43 59 5f 43 4c 4f  TEROP_LEGACY_CLO
0cb0: 53 45 0d 0a 20 20 22 4c 45 47 41 43 59 5f 43 4c  SE..  "LEGACY_CL
0cc0: 4f 53 45 22 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23  OSE",..#endif..#
0cd0: 69 66 64 65 66 20 49 4e 54 45 52 4f 50 5f 4c 4f  ifdef INTEROP_LO
0ce0: 47 0d 0a 20 20 22 4c 4f 47 22 2c 0d 0a 23 65 6e  G..  "LOG",..#en
0cf0: 64 69 66 0d 0a 23 69 66 64 65 66 20 49 4e 54 45  dif..#ifdef INTE
0d00: 52 4f 50 5f 50 45 52 43 45 4e 54 49 4c 45 5f 45  ROP_PERCENTILE_E
0d10: 58 54 45 4e 53 49 4f 4e 0d 0a 20 20 22 50 45 52  XTENSION..  "PER
0d20: 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e 53 49 4f  CENTILE_EXTENSIO
0d30: 4e 22 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66  N",..#endif..#if
0d40: 64 65 66 20 49 4e 54 45 52 4f 50 5f 52 45 47 45  def INTEROP_REGE
0d50: 58 50 5f 45 58 54 45 4e 53 49 4f 4e 0d 0a 20 20  XP_EXTENSION..  
0d60: 22 52 45 47 45 58 50 5f 45 58 54 45 4e 53 49 4f  "REGEXP_EXTENSIO
0d70: 4e 22 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66  N",..#endif..#if
0d80: 64 65 66 20 49 4e 54 45 52 4f 50 5f 54 45 53 54  def INTEROP_TEST
0d90: 5f 45 58 54 45 4e 53 49 4f 4e 0d 0a 20 20 22 54  _EXTENSION..  "T
0da0: 45 53 54 5f 45 58 54 45 4e 53 49 4f 4e 22 2c 0d  EST_EXTENSION",.
0db0: 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
0dc0: 49 4e 54 45 52 4f 50 5f 54 4f 54 59 50 45 5f 45  INTEROP_TOTYPE_E
0dd0: 58 54 45 4e 53 49 4f 4e 0d 0a 20 20 22 54 4f 54  XTENSION..  "TOT
0de0: 59 50 45 5f 45 58 54 45 4e 53 49 4f 4e 22 2c 0d  YPE_EXTENSION",.
0df0: 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
0e00: 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e  SQLITE_VERSION_N
0e10: 55 4d 42 45 52 0d 0a 20 20 22 56 45 52 53 49 4f  UMBER..  "VERSIO
0e20: 4e 5f 4e 55 4d 42 45 52 3d 22 20 43 54 49 4d 45  N_NUMBER=" CTIME
0e30: 4f 50 54 5f 56 41 4c 28 53 51 4c 49 54 45 5f 56  OPT_VAL(SQLITE_V
0e40: 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 29 2c 0d  ERSION_NUMBER),.
0e50: 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
0e60: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
0e70: 54 41 42 4c 45 0d 0a 20 20 22 56 49 52 54 55 41  TABLE..  "VIRTUA
0e80: 4c 5f 54 41 42 4c 45 22 2c 0d 0a 23 65 6e 64 69  L_TABLE",..#endi
0e90: 66 0d 0a 7d 3b 0d 0a 0d 0a 2f 2a 0d 0a 2a 2a 20  f..};..../*..** 
0ea0: 47 69 76 65 6e 20 74 68 65 20 6e 61 6d 65 20 6f  Given the name o
0eb0: 66 20 61 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  f a compile-time
0ec0: 20 6f 70 74 69 6f 6e 2c 20 72 65 74 75 72 6e 20   option, return 
0ed0: 74 72 75 65 20 69 66 20 74 68 61 74 20 6f 70 74  true if that opt
0ee0: 69 6f 6e 0d 0a 2a 2a 20 77 61 73 20 75 73 65 64  ion..** was used
0ef0: 20 61 6e 64 20 66 61 6c 73 65 20 69 66 20 6e 6f   and false if no
0f00: 74 2e 0d 0a 2a 2a 0d 0a 2a 2a 20 54 68 65 20 6e  t...**..** The n
0f10: 61 6d 65 20 63 61 6e 20 6f 70 74 69 6f 6e 61 6c  ame can optional
0f20: 6c 79 20 62 65 67 69 6e 20 77 69 74 68 20 22 53  ly begin with "S
0f30: 51 4c 49 54 45 5f 22 20 6f 72 20 22 49 4e 54 45  QLITE_" or "INTE
0f40: 52 4f 50 5f 22 20 62 75 74 20 74 68 6f 73 65 0d  ROP_" but those.
0f50: 0a 2a 2a 20 70 72 65 66 69 78 65 73 20 61 72 65  .** prefixes are
0f60: 20 6e 6f 74 20 72 65 71 75 69 72 65 64 20 66 6f   not required fo
0f70: 72 20 61 20 6d 61 74 63 68 2e 0d 0a 2a 2f 0d 0a  r a match...*/..
0f80: 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57  SQLITE_API int W
0f90: 49 4e 41 50 49 20 69 6e 74 65 72 6f 70 5f 63 6f  INAPI interop_co
0fa0: 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64  mpileoption_used
0fb0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70  (const char *zOp
0fc0: 74 4e 61 6d 65 29 7b 0d 0a 20 20 69 6e 74 20 69  tName){..  int i
0fd0: 2c 20 6e 3b 0d 0a 20 20 69 66 28 20 73 71 6c 69  , n;..  if( sqli
0fe0: 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 4f 70 74  te3StrNICmp(zOpt
0ff0: 4e 61 6d 65 2c 20 22 53 51 4c 49 54 45 5f 22 2c  Name, "SQLITE_",
1000: 20 37 29 3d 3d 30 20 29 20 7a 4f 70 74 4e 61 6d   7)==0 ) zOptNam
1010: 65 20 2b 3d 20 37 3b 0d 0a 20 20 69 66 28 20 73  e += 7;..  if( s
1020: 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a  qlite3StrNICmp(z
1030: 4f 70 74 4e 61 6d 65 2c 20 22 49 4e 54 45 52 4f  OptName, "INTERO
1040: 50 5f 22 2c 20 38 29 3d 3d 30 20 29 20 7a 4f 70  P_", 8)==0 ) zOp
1050: 74 4e 61 6d 65 20 2b 3d 20 38 3b 0d 0a 20 20 6e  tName += 8;..  n
1060: 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
1070: 33 30 28 7a 4f 70 74 4e 61 6d 65 29 3b 0d 0a 0d  30(zOptName);...
1080: 0a 20 20 2f 2a 20 53 69 6e 63 65 20 41 72 72 61  .  /* Since Arra
1090: 79 53 69 7a 65 28 61 7a 49 6e 74 65 72 6f 70 43  ySize(azInteropC
10a0: 6f 6d 70 69 6c 65 4f 70 74 29 20 69 73 20 6e 6f  ompileOpt) is no
10b0: 72 6d 61 6c 6c 79 20 69 6e 20 73 69 6e 67 6c 65  rmally in single
10c0: 20 64 69 67 69 74 73 2c 20 61 0d 0a 20 20 2a 2a   digits, a..  **
10d0: 20 6c 69 6e 65 61 72 20 73 65 61 72 63 68 20 69   linear search i
10e0: 73 20 61 64 65 71 75 61 74 65 2e 20 20 4e 6f 20  s adequate.  No 
10f0: 6e 65 65 64 20 66 6f 72 20 61 20 62 69 6e 61 72  need for a binar
1100: 79 20 73 65 61 72 63 68 2e 20 2a 2f 0d 0a 20 20  y search. */..  
1110: 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79  for(i=0; i<Array
1120: 53 69 7a 65 28 61 7a 49 6e 74 65 72 6f 70 43 6f  Size(azInteropCo
1130: 6d 70 69 6c 65 4f 70 74 29 3b 20 69 2b 2b 29 7b  mpileOpt); i++){
1140: 0d 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  ..    if( sqlite
1150: 33 53 74 72 4e 49 43 6d 70 28 7a 4f 70 74 4e 61  3StrNICmp(zOptNa
1160: 6d 65 2c 20 61 7a 49 6e 74 65 72 6f 70 43 6f 6d  me, azInteropCom
1170: 70 69 6c 65 4f 70 74 5b 69 5d 2c 20 6e 29 3d 3d  pileOpt[i], n)==
1180: 30 0d 0a 20 20 20 20 20 26 26 20 73 71 6c 69 74  0..     && sqlit
1190: 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
11a0: 67 6e 65 64 20 63 68 61 72 29 61 7a 49 6e 74 65  gned char)azInte
11b0: 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 5b 69 5d  ropCompileOpt[i]
11c0: 5b 6e 5d 5d 3d 3d 30 0d 0a 20 20 20 20 29 7b 0d  [n]]==0..    ){.
11d0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b  .      return 1;
11e0: 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 20 20  ..    }..  }..  
11f0: 72 65 74 75 72 6e 20 30 3b 0d 0a 7d 0d 0a 0d 0a  return 0;..}....
1200: 2f 2a 0d 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  /*..** Return th
1210: 65 20 4e 2d 74 68 20 63 6f 6d 70 69 6c 65 2d 74  e N-th compile-t
1220: 69 6d 65 20 6f 70 74 69 6f 6e 20 73 74 72 69 6e  ime option strin
1230: 67 2e 20 20 49 66 20 4e 20 69 73 20 6f 75 74 20  g.  If N is out 
1240: 6f 66 20 72 61 6e 67 65 2c 0d 0a 2a 2a 20 72 65  of range,..** re
1250: 74 75 72 6e 20 61 20 4e 55 4c 4c 20 70 6f 69 6e  turn a NULL poin
1260: 74 65 72 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49 54 45  ter...*/..SQLITE
1270: 5f 41 50 49 20 63 6f 6e 73 74 20 63 68 61 72 20  _API const char 
1280: 2a 57 49 4e 41 50 49 20 69 6e 74 65 72 6f 70 5f  *WINAPI interop_
1290: 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
12a0: 74 28 69 6e 74 20 4e 29 7b 0d 0a 20 20 69 66 28  t(int N){..  if(
12b0: 20 4e 3e 3d 30 20 26 26 20 4e 3c 41 72 72 61 79   N>=0 && N<Array
12c0: 53 69 7a 65 28 61 7a 49 6e 74 65 72 6f 70 43 6f  Size(azInteropCo
12d0: 6d 70 69 6c 65 4f 70 74 29 20 29 7b 0d 0a 20 20  mpileOpt) ){..  
12e0: 20 20 72 65 74 75 72 6e 20 61 7a 49 6e 74 65 72    return azInter
12f0: 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 5b 4e 5d 3b  opCompileOpt[N];
1300: 0d 0a 20 20 7d 0d 0a 20 20 72 65 74 75 72 6e 20  ..  }..  return 
1310: 30 3b 0d 0a 7d 0d 0a 0d 0a 23 69 66 20 64 65 66  0;..}....#if def
1320: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42  ined(INTEROP_DEB
1330: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 49  UG) || defined(I
1340: 4e 54 45 52 4f 50 5f 4c 4f 47 29 0d 0a 53 51 4c  NTEROP_LOG)..SQL
1350: 49 54 45 5f 50 52 49 56 41 54 45 20 76 6f 69 64  ITE_PRIVATE void
1360: 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44   sqlite3InteropD
1370: 65 62 75 67 28 63 6f 6e 73 74 20 63 68 61 72 20  ebug(const char 
1380: 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0d  *zFormat, ...){.
1390: 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 20 20  .  va_list ap;  
13a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b0: 20 20 20 20 20 20 20 2f 2a 20 56 61 72 61 72 67         /* Vararg
13c0: 20 6c 69 73 74 20 2a 2f 0d 0a 20 20 53 74 72 41   list */..  StrA
13d0: 63 63 75 6d 20 61 63 63 3b 20 20 20 20 20 20 20  ccum acc;       
13e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f0: 2f 2a 20 53 74 72 69 6e 67 20 61 63 63 75 6d 75  /* String accumu
1400: 6c 61 74 6f 72 20 2a 2f 0d 0a 20 20 63 68 61 72  lator */..  char
1410: 20 7a 4d 73 67 5b 53 51 4c 49 54 45 5f 50 52 49   zMsg[SQLITE_PRI
1420: 4e 54 5f 42 55 46 5f 53 49 5a 45 2a 33 5d 3b 20  NT_BUF_SIZE*3]; 
1430: 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 6c 6f 67 20  /* Complete log 
1440: 6d 65 73 73 61 67 65 20 2a 2f 0d 0a 20 20 76 61  message */..  va
1450: 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d  _start(ap, zForm
1460: 61 74 29 3b 0d 0a 23 69 66 20 53 51 4c 49 54 45  at);..#if SQLITE
1470: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20  _VERSION_NUMBER 
1480: 3e 3d 20 33 30 30 38 30 31 30 0d 0a 20 20 73 71  >= 3008010..  sq
1490: 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69  lite3StrAccumIni
14a0: 74 28 26 61 63 63 2c 20 30 2c 20 7a 4d 73 67 2c  t(&acc, 0, zMsg,
14b0: 20 73 69 7a 65 6f 66 28 7a 4d 73 67 29 2c 20 30   sizeof(zMsg), 0
14c0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 73 71 6c  );..#else..  sql
14d0: 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74  ite3StrAccumInit
14e0: 28 26 61 63 63 2c 20 7a 4d 73 67 2c 20 73 69 7a  (&acc, zMsg, siz
14f0: 65 6f 66 28 7a 4d 73 67 29 2c 20 30 29 3b 0d 0a  eof(zMsg), 0);..
1500: 20 20 61 63 63 2e 75 73 65 4d 61 6c 6c 6f 63 20    acc.useMalloc 
1510: 3d 20 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  = 0;..#endif..  
1520: 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28  sqlite3VXPrintf(
1530: 26 61 63 63 2c 20 30 2c 20 7a 46 6f 72 6d 61 74  &acc, 0, zFormat
1540: 2c 20 61 70 29 3b 0d 0a 20 20 76 61 5f 65 6e 64  , ap);..  va_end
1550: 28 61 70 29 3b 0d 0a 23 69 66 20 53 51 4c 49 54  (ap);..#if SQLIT
1560: 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52  E_VERSION_NUMBER
1570: 20 3e 3d 20 33 30 30 37 30 31 33 0d 0a 20 20 73   >= 3007013..  s
1580: 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 77 72 69  qlite3_win32_wri
1590: 74 65 5f 64 65 62 75 67 28 73 71 6c 69 74 65 33  te_debug(sqlite3
15a0: 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 26  StrAccumFinish(&
15b0: 61 63 63 29 2c 20 2d 31 29 3b 0d 0a 23 65 6c 69  acc), -1);..#eli
15c0: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
15d0: 5f 57 49 4e 33 32 5f 48 41 53 5f 41 4e 53 49 29  _WIN32_HAS_ANSI)
15e0: 0d 0a 20 20 4f 75 74 70 75 74 44 65 62 75 67 53  ..  OutputDebugS
15f0: 74 72 69 6e 67 41 28 73 71 6c 69 74 65 33 53 74  tringA(sqlite3St
1600: 72 41 63 63 75 6d 46 69 6e 69 73 68 28 26 61 63  rAccumFinish(&ac
1610: 63 29 29 3b 0d 0a 23 65 6c 69 66 20 64 65 66 69  c));..#elif defi
1620: 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32  ned(SQLITE_WIN32
1630: 5f 48 41 53 5f 57 49 44 45 29 0d 0a 20 20 7b 0d  _HAS_WIDE)..  {.
1640: 0a 20 20 20 20 4c 50 57 53 54 52 20 7a 57 69 64  .    LPWSTR zWid
1650: 65 4d 73 67 20 3d 20 75 74 66 38 54 6f 55 6e 69  eMsg = utf8ToUni
1660: 63 6f 64 65 28 73 71 6c 69 74 65 33 53 74 72 41  code(sqlite3StrA
1670: 63 63 75 6d 46 69 6e 69 73 68 28 26 61 63 63 29  ccumFinish(&acc)
1680: 29 3b 0d 0a 20 20 20 20 69 66 28 20 7a 57 69 64  );..    if( zWid
1690: 65 4d 73 67 20 29 7b 0d 0a 20 20 20 20 20 20 4f  eMsg ){..      O
16a0: 75 74 70 75 74 44 65 62 75 67 53 74 72 69 6e 67  utputDebugString
16b0: 57 28 7a 57 69 64 65 4d 73 67 29 3b 0d 0a 20 20  W(zWideMsg);..  
16c0: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
16d0: 28 7a 57 69 64 65 4d 73 67 29 3b 0d 0a 20 20 20  (zWideMsg);..   
16e0: 20 7d 0d 0a 20 20 7d 0d 0a 23 65 6c 73 65 0d 0a   }..  }..#else..
16f0: 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72    fprintf(stderr
1700: 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 53  , "%s", sqlite3S
1710: 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 26 61  trAccumFinish(&a
1720: 63 63 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 7d  cc));..#endif..}
1730: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20  ..#endif....#if 
1740: 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f  defined(INTEROP_
1750: 4c 4f 47 29 0d 0a 53 51 4c 49 54 45 5f 50 52 49  LOG)..SQLITE_PRI
1760: 56 41 54 45 20 69 6e 74 20 6c 6f 67 43 6f 6e 66  VATE int logConf
1770: 69 67 75 72 65 64 20 3d 20 30 3b 0d 0a 0d 0a 53  igured = 0;....S
1780: 51 4c 49 54 45 5f 50 52 49 56 41 54 45 20 76 6f  QLITE_PRIVATE vo
1790: 69 64 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f  id sqlite3Intero
17a0: 70 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 76 6f 69  pLogCallback(voi
17b0: 64 20 2a 70 41 72 67 2c 20 69 6e 74 20 69 43 6f  d *pArg, int iCo
17c0: 64 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  de, const char *
17d0: 7a 4d 73 67 29 7b 0d 0a 20 20 73 71 6c 69 74 65  zMsg){..  sqlite
17e0: 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 49  3InteropDebug("I
17f0: 4e 54 45 52 4f 50 5f 4c 4f 47 20 28 25 64 29 20  NTEROP_LOG (%d) 
1800: 25 73 5c 6e 22 2c 20 69 43 6f 64 65 2c 20 7a 4d  %s\n", iCode, zM
1810: 73 67 29 3b 0d 0a 7d 0d 0a 23 65 6e 64 69 66 0d  sg);..}..#endif.
1820: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e  ...SQLITE_API in
1830: 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  t WINAPI sqlite3
1840: 5f 6d 61 6c 6c 6f 63 5f 73 69 7a 65 5f 69 6e 74  _malloc_size_int
1850: 65 72 6f 70 28 76 6f 69 64 20 2a 70 29 7b 0d 0a  erop(void *p){..
1860: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
1870: 4d 61 6c 6c 6f 63 53 69 7a 65 28 70 29 3b 0d 0a  MallocSize(p);..
1880: 7d 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64  }....#if defined
1890: 28 49 4e 54 45 52 4f 50 5f 4c 45 47 41 43 59 5f  (INTEROP_LEGACY_
18a0: 43 4c 4f 53 45 29 20 7c 7c 20 53 51 4c 49 54 45  CLOSE) || SQLITE
18b0: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20  _VERSION_NUMBER 
18c0: 3c 20 33 30 30 37 30 31 34 0d 0a 53 51 4c 49 54  < 3007014..SQLIT
18d0: 45 5f 50 52 49 56 41 54 45 20 76 6f 69 64 20 2a  E_PRIVATE void *
18e0: 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
18f0: 5a 65 72 6f 5f 69 6e 74 65 72 6f 70 28 73 71 6c  Zero_interop(sql
1900: 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 20 6e 29  ite3 *db, int n)
1910: 0d 0a 7b 0d 0a 20 20 76 6f 69 64 20 2a 70 3b 0d  ..{..  void *p;.
1920: 0a 20 20 69 66 20 28 64 62 29 20 7b 0d 0a 20 20  .  if (db) {..  
1930: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
1940: 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29  enter(db->mutex)
1950: 3b 0d 0a 20 20 7d 0d 0a 20 20 70 20 3d 20 73 71  ;..  }..  p = sq
1960: 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
1970: 6f 28 64 62 2c 6e 29 3b 0d 0a 20 20 69 66 20 28  o(db,n);..  if (
1980: 64 62 29 20 7b 0d 0a 20 20 20 20 73 71 6c 69 74  db) {..    sqlit
1990: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64  e3_mutex_leave(d
19a0: 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 7d 0d  b->mutex);..  }.
19b0: 0a 20 20 72 65 74 75 72 6e 20 70 3b 0d 0a 7d 0d  .  return p;..}.
19c0: 0a 0d 0a 53 51 4c 49 54 45 5f 50 52 49 56 41 54  ...SQLITE_PRIVAT
19d0: 45 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62  E void sqlite3Db
19e0: 46 72 65 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c  Free_interop(sql
19f0: 69 74 65 33 20 2a 64 62 2c 20 76 6f 69 64 20 2a  ite3 *db, void *
1a00: 70 29 0d 0a 7b 0d 0a 20 20 69 66 20 28 64 62 29  p)..{..  if (db)
1a10: 20 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   {..    sqlite3_
1a20: 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e  mutex_enter(db->
1a30: 6d 75 74 65 78 29 3b 0d 0a 20 20 7d 0d 0a 20 20  mutex);..  }..  
1a40: 69 66 20 28 70 29 20 7b 0d 0a 20 20 20 20 73 71  if (p) {..    sq
1a50: 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
1a60: 54 79 70 65 28 70 2c 20 4d 45 4d 54 59 50 45 5f  Type(p, MEMTYPE_
1a70: 44 42 7c 4d 45 4d 54 59 50 45 5f 48 45 41 50 29  DB|MEMTYPE_HEAP)
1a80: 3b 0d 0a 20 20 7d 0d 0a 20 20 73 71 6c 69 74 65  ;..  }..  sqlite
1a90: 33 44 62 46 72 65 65 28 64 62 2c 70 29 3b 0d 0a  3DbFree(db,p);..
1aa0: 20 20 69 66 20 28 64 62 29 20 7b 0d 0a 20 20 20    if (db) {..   
1ab0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c   sqlite3_mutex_l
1ac0: 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b  eave(db->mutex);
1ad0: 0d 0a 20 20 7d 0d 0a 7d 0d 0a 23 65 6e 64 69 66  ..  }..}..#endif
1ae0: 0d 0a 0d 0a 2f 2a 0d 0a 20 20 20 20 54 68 65 20  ..../*..    The 
1af0: 67 6f 61 6c 20 6f 66 20 74 68 69 73 20 76 65 72  goal of this ver
1b00: 73 69 6f 6e 20 6f 66 20 63 6c 6f 73 65 20 69 73  sion of close is
1b10: 20 64 69 66 66 65 72 65 6e 74 20 74 68 61 6e 20   different than 
1b20: 74 68 61 74 20 6f 66 20 73 71 6c 69 74 65 33 5f  that of sqlite3_
1b30: 63 6c 6f 73 65 28 29 2c 20 61 6e 64 20 69 73 20  close(), and is 
1b40: 64 65 73 69 67 6e 65 64 20 74 6f 20 6c 65 6e 64  designed to lend
1b50: 20 69 74 73 65 6c 66 20 62 65 74 74 65 72 20 74   itself better t
1b60: 6f 20 2e 4e 45 54 27 73 20 6e 6f 6e 2d 64 65 74  o .NET's non-det
1b70: 65 72 6d 69 6e 69 73 74 69 63 20 66 69 6e 61 6c  erministic final
1b80: 69 7a 65 72 73 20 61 6e 64 0d 0a 20 20 20 20 74  izers and..    t
1b90: 68 65 20 47 43 20 74 68 72 65 61 64 2e 20 20 53  he GC thread.  S
1ba0: 51 4c 69 74 65 20 77 69 6c 6c 20 6e 6f 74 20 63  QLite will not c
1bb0: 6c 6f 73 65 20 61 20 64 61 74 61 62 61 73 65 20  lose a database 
1bc0: 69 66 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72  if statements ar
1bd0: 65 20 6f 70 65 6e 20 6f 6e 20 69 74 20 2d 2d 20  e open on it -- 
1be0: 62 75 74 20 66 6f 72 20 6f 75 72 20 70 75 72 70  but for our purp
1bf0: 6f 73 65 73 2c 20 77 65 27 64 20 72 61 74 68 65  oses, we'd rathe
1c00: 72 20 66 69 6e 61 6c 69 7a 65 20 61 6c 6c 20 61  r finalize all a
1c10: 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73  ctive statements
1c20: 0d 0a 20 20 20 20 61 6e 64 20 66 6f 72 63 69 62  ..    and forcib
1c30: 6c 79 20 63 6c 6f 73 65 20 74 68 65 20 64 61 74  ly close the dat
1c40: 61 62 61 73 65 2e 20 20 54 68 65 20 72 65 61 73  abase.  The reas
1c50: 6f 6e 20 69 73 20 73 69 6d 70 6c 65 20 2d 2d 20  on is simple -- 
1c60: 61 20 6c 6f 74 20 6f 66 20 70 65 6f 70 6c 65 20  a lot of people 
1c70: 64 6f 6e 27 74 20 44 69 73 70 6f 73 65 28 29 20  don't Dispose() 
1c80: 6f 66 20 74 68 65 69 72 20 6f 62 6a 65 63 74 73  of their objects
1c90: 20 63 6f 72 72 65 63 74 6c 79 20 61 6e 64 20 6c   correctly and l
1ca0: 65 74 20 74 68 65 20 67 61 72 62 61 67 65 20 63  et the garbage c
1cb0: 6f 6c 6c 65 63 74 6f 72 0d 0a 20 20 20 20 64 6f  ollector..    do
1cc0: 20 69 74 2e 20 20 54 68 69 73 20 6c 65 61 64 73   it.  This leads
1cd0: 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20 62   to unexpected b
1ce0: 65 68 61 76 69 6f 72 20 77 68 65 6e 20 61 20 75  ehavior when a u
1cf0: 73 65 72 20 74 68 69 6e 6b 73 20 74 68 65 79 27  ser thinks they'
1d00: 76 65 20 63 6c 6f 73 65 64 20 61 20 64 61 74 61  ve closed a data
1d10: 62 61 73 65 2c 20 62 75 74 20 69 74 27 73 20 73  base, but it's s
1d20: 74 69 6c 6c 20 6f 70 65 6e 20 62 65 63 61 75 73  till open becaus
1d30: 65 20 6e 6f 74 20 61 6c 6c 20 74 68 65 20 73 74  e not all the st
1d40: 61 74 65 6d 65 6e 74 73 20 68 61 76 65 0d 0a 20  atements have.. 
1d50: 20 20 20 68 69 74 20 74 68 65 20 47 43 20 79 65     hit the GC ye
1d60: 74 2e 0d 0a 0d 0a 20 20 20 20 53 6f 2c 20 68 65  t.....    So, he
1d70: 72 65 20 77 65 20 68 61 76 65 20 61 20 70 72 6f  re we have a pro
1d80: 62 6c 65 6d 20 2e 2e 2e 20 2e 4e 45 54 20 68 61  blem ... .NET ha
1d90: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
1da0: 6e 79 20 6e 75 6d 62 65 72 20 6f 66 20 73 71 6c  ny number of sql
1db0: 69 74 65 33 5f 73 74 6d 74 20 6f 62 6a 65 63 74  ite3_stmt object
1dc0: 73 2e 20 20 57 65 20 63 61 6e 27 74 20 63 61 6c  s.  We can't cal
1dd0: 6c 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  l sqlite3_finali
1de0: 7a 65 28 29 20 6f 6e 20 74 68 65 73 65 20 62 65  ze() on these be
1df0: 63 61 75 73 65 0d 0a 20 20 20 20 74 68 65 69 72  cause..    their
1e00: 20 6d 65 6d 6f 72 79 20 69 73 20 66 72 65 65 64   memory is freed
1e10: 20 61 6e 64 20 63 61 6e 20 62 65 20 75 73 65 64   and can be used
1e20: 20 66 6f 72 20 73 6f 6d 65 74 68 69 6e 67 20 65   for something e
1e30: 6c 73 65 2e 20 20 54 68 65 20 47 43 20 74 68 72  lse.  The GC thr
1e40: 65 61 64 20 63 6f 75 6c 64 20 70 6f 74 65 6e 74  ead could potent
1e50: 69 61 6c 6c 79 20 74 72 79 20 61 6e 64 20 63 61  ially try and ca
1e60: 6c 6c 20 66 69 6e 61 6c 69 7a 65 20 61 67 61 69  ll finalize agai
1e70: 6e 20 6f 6e 20 74 68 65 20 73 74 61 74 65 6d 65  n on the stateme
1e80: 6e 74 20 61 66 74 65 72 0d 0a 20 20 20 20 74 68  nt after..    th
1e90: 61 74 20 6d 65 6d 6f 72 79 20 77 61 73 20 64 65  at memory was de
1ea0: 61 6c 6c 6f 63 61 74 65 64 2e 20 20 42 41 44 2e  allocated.  BAD.
1eb0: 20 20 53 6f 2c 20 77 68 61 74 20 77 65 20 6e 65    So, what we ne
1ec0: 65 64 20 74 6f 20 64 6f 20 69 73 20 6d 61 6b 65  ed to do is make
1ed0: 20 61 20 63 6f 70 79 20 6f 66 20 65 61 63 68 20   a copy of each 
1ee0: 73 74 61 74 65 6d 65 6e 74 2c 20 61 6e 64 20 63  statement, and c
1ef0: 61 6c 6c 20 66 69 6e 61 6c 69 7a 65 28 29 20 6f  all finalize() o
1f00: 6e 20 74 68 65 20 63 6f 70 79 20 2d 2d 20 73 6f  n the copy -- so
1f10: 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e   that the origin
1f20: 61 6c 0d 0a 20 20 20 20 73 74 61 74 65 6d 65 6e  al..    statemen
1f30: 74 27 73 20 6d 65 6d 6f 72 79 20 69 73 20 70 72  t's memory is pr
1f40: 65 73 65 72 76 65 64 2c 20 61 6e 64 20 6d 61 72  eserved, and mar
1f50: 6b 65 64 20 61 73 20 42 41 44 2c 20 62 75 74 20  ked as BAD, but 
1f60: 77 65 20 63 61 6e 20 73 74 69 6c 6c 20 6d 61 6e  we can still man
1f70: 61 67 65 20 74 6f 20 66 69 6e 61 6c 69 7a 65 20  age to finalize 
1f80: 65 76 65 72 79 74 68 69 6e 67 20 61 6e 64 20 66  everything and f
1f90: 6f 72 63 69 62 6c 79 20 63 6c 6f 73 65 20 74 68  orcibly close th
1fa0: 65 20 64 61 74 61 62 61 73 65 2e 20 20 4c 61 74  e database.  Lat
1fb0: 65 72 20 77 68 65 6e 20 74 68 65 0d 0a 20 20 20  er when the..   
1fc0: 20 47 43 20 67 65 74 73 20 61 72 6f 75 6e 64 20   GC gets around 
1fd0: 74 6f 20 63 61 6c 6c 69 6e 67 20 66 69 6e 61 6c  to calling final
1fe0: 69 7a 65 5f 69 6e 74 65 72 6f 70 28 29 20 6f 6e  ize_interop() on
1ff0: 20 74 68 65 20 22 62 61 64 22 20 73 74 61 74 65   the "bad" state
2000: 6d 65 6e 74 2c 20 77 65 20 64 65 74 65 63 74 20  ment, we detect 
2010: 74 68 61 74 20 61 6e 64 20 66 69 6e 69 73 68 20  that and finish 
2020: 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65  deallocating the
2030: 20 70 6f 69 6e 74 65 72 2e 0d 0a 2a 2f 0d 0a 53   pointer...*/..S
2040: 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49  QLITE_API int WI
2050: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6c 6f  NAPI sqlite3_clo
2060: 73 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  se_interop(sqlit
2070: 65 33 20 2a 64 62 29 0d 0a 7b 0d 0a 20 20 69 6e  e3 *db)..{..  in
2080: 74 20 72 65 74 3b 0d 0a 23 69 66 20 21 64 65 66  t ret;..#if !def
2090: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 4c 45 47  ined(INTEROP_LEG
20a0: 41 43 59 5f 43 4c 4f 53 45 29 20 26 26 20 53 51  ACY_CLOSE) && SQ
20b0: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
20c0: 42 45 52 20 3e 3d 20 33 30 30 37 30 31 34 0d 0a  BER >= 3007014..
20d0: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
20e0: 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20  TEROP_DEBUG) && 
20f0: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26  (INTEROP_DEBUG &
2100: 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 43   INTEROP_DEBUG_C
2110: 4c 4f 53 45 29 0d 0a 20 20 73 71 6c 69 74 65 33  LOSE)..  sqlite3
2120: 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71  InteropDebug("sq
2130: 6c 69 74 65 33 5f 63 6c 6f 73 65 5f 69 6e 74 65  lite3_close_inte
2140: 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73  rop(): calling s
2150: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 5f 76 32 28  qlite3_close_v2(
2160: 25 70 29 2e 2e 2e 5c 6e 22 2c 20 64 62 29 3b 0d  %p)...\n", db);.
2170: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74  .#endif....  ret
2180: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65   = sqlite3_close
2190: 5f 76 32 28 64 62 29 3b 0d 0a 0d 0a 23 69 66 20  _v2(db);....#if 
21a0: 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f  defined(INTEROP_
21b0: 44 45 42 55 47 29 20 26 26 20 28 49 4e 54 45 52  DEBUG) && (INTER
21c0: 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52  OP_DEBUG & INTER
21d0: 4f 50 5f 44 45 42 55 47 5f 43 4c 4f 53 45 29 0d  OP_DEBUG_CLOSE).
21e0: 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f  .  sqlite3Intero
21f0: 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f  pDebug("sqlite3_
2200: 63 6c 6f 73 65 5f 69 6e 74 65 72 6f 70 28 29 3a  close_interop():
2210: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 5f 76   sqlite3_close_v
2220: 32 28 25 70 29 20 72 65 74 75 72 6e 65 64 20 25  2(%p) returned %
2230: 64 2e 5c 6e 22 2c 20 64 62 2c 20 72 65 74 29 3b  d.\n", db, ret);
2240: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65  ..#endif....  re
2250: 74 75 72 6e 20 72 65 74 3b 0d 0a 23 65 6c 73 65  turn ret;..#else
2260: 0d 0a 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65  ..  ret = sqlite
2270: 33 5f 63 6c 6f 73 65 28 64 62 29 3b 0d 0a 0d 0a  3_close(db);....
2280: 20 20 69 66 20 28 72 65 74 20 3d 3d 20 53 51 4c    if (ret == SQL
2290: 49 54 45 5f 42 55 53 59 29 0d 0a 20 20 7b 0d 0a  ITE_BUSY)..  {..
22a0: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
22b0: 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65  x_enter(db->mute
22c0: 78 29 3b 0d 0a 0d 0a 20 20 20 20 69 66 20 28 21  x);....    if (!
22d0: 64 62 2d 3e 70 56 64 62 65 29 0d 0a 20 20 20 20  db->pVdbe)..    
22e0: 7b 0d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  {..      sqlite3
22f0: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d  _mutex_leave(db-
2300: 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 20 20 20 20  >mutex);..      
2310: 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 20 20 20  return ret;..   
2320: 20 7d 0d 0a 0d 0a 20 20 20 20 77 68 69 6c 65 20   }....    while 
2330: 28 64 62 2d 3e 70 56 64 62 65 29 0d 0a 20 20 20  (db->pVdbe)..   
2340: 20 7b 0d 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b   {..      /* Mak
2350: 65 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20  e a copy of the 
2360: 66 69 72 73 74 20 70 72 65 70 61 72 65 64 20 73  first prepared s
2370: 74 61 74 65 6d 65 6e 74 20 2a 2f 0d 0a 20 20 20  tatement */..   
2380: 20 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64     Vdbe *p = (Vd
2390: 62 65 20 2a 29 73 71 6c 69 74 65 33 44 62 4d 61  be *)sqlite3DbMa
23a0: 6c 6c 6f 63 5a 65 72 6f 5f 69 6e 74 65 72 6f 70  llocZero_interop
23b0: 28 64 62 2c 20 73 69 7a 65 6f 66 28 56 64 62 65  (db, sizeof(Vdbe
23c0: 29 29 3b 0d 0a 20 20 20 20 20 20 56 64 62 65 20  ));..      Vdbe 
23d0: 2a 70 6f 20 3d 20 64 62 2d 3e 70 56 64 62 65 3b  *po = db->pVdbe;
23e0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 21 70  ....      if (!p
23f0: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
2400: 20 20 20 20 72 65 74 20 3d 20 53 51 4c 49 54 45      ret = SQLITE
2410: 5f 4e 4f 4d 45 4d 3b 0d 0a 20 20 20 20 20 20 20  _NOMEM;..       
2420: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d   break;..      }
2430: 0d 0a 0d 0a 20 20 20 20 20 20 43 6f 70 79 4d 65  ....      CopyMe
2440: 6d 6f 72 79 28 70 2c 20 70 6f 2c 20 73 69 7a 65  mory(p, po, size
2450: 6f 66 28 56 64 62 65 29 29 3b 0d 0a 0d 0a 20 20  of(Vdbe));....  
2460: 20 20 20 20 2f 2a 20 50 75 74 20 69 74 20 6f 6e      /* Put it on
2470: 20 74 68 65 20 63 68 61 69 6e 20 73 6f 20 77 65   the chain so we
2480: 20 63 61 6e 20 66 72 65 65 20 69 74 20 2a 2f 0d   can free it */.
2490: 0a 20 20 20 20 20 20 64 62 2d 3e 70 56 64 62 65  .      db->pVdbe
24a0: 20 3d 20 70 3b 0d 0a 20 20 20 20 20 20 72 65 74   = p;..      ret
24b0: 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c   = sqlite3_final
24c0: 69 7a 65 28 28 73 71 6c 69 74 65 33 5f 73 74 6d  ize((sqlite3_stm
24d0: 74 20 2a 29 70 29 3b 20 2f 2a 20 54 68 69 73 20  t *)p); /* This 
24e0: 77 69 6c 6c 20 61 6c 73 6f 20 66 72 65 65 20 74  will also free t
24f0: 68 65 20 63 6f 70 79 27 73 20 6d 65 6d 6f 72 79  he copy's memory
2500: 20 2a 2f 0d 0a 20 20 20 20 20 20 69 66 20 28 72   */..      if (r
2510: 65 74 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  et)..      {..  
2520: 20 20 20 20 20 20 2f 2a 20 66 69 6e 61 6c 69 7a        /* finaliz
2530: 65 20 66 61 69 6c 65 64 20 2d 2d 20 73 6f 20 77  e failed -- so w
2540: 65 20 6d 75 73 74 20 70 75 74 20 62 61 63 6b 20  e must put back 
2550: 61 6e 79 74 68 69 6e 67 20 77 65 20 6d 75 6e 67  anything we mung
2560: 65 64 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 43  ed */..        C
2570: 6f 70 79 4d 65 6d 6f 72 79 28 70 6f 2c 20 70 2c  opyMemory(po, p,
2580: 20 73 69 7a 65 6f 66 28 56 64 62 65 29 29 3b 0d   sizeof(Vdbe));.
2590: 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 56 64  .        db->pVd
25a0: 62 65 20 3d 20 70 6f 3b 0d 0a 0d 0a 20 20 20 20  be = po;....    
25b0: 20 20 20 20 2f 2a 0d 0a 20 20 20 20 20 20 20 20      /*..        
25c0: 2a 2a 20 4e 4f 54 45 3a 20 4f 6b 2c 20 77 65 20  ** NOTE: Ok, we 
25d0: 6d 75 73 74 20 66 72 65 65 20 74 68 69 73 20 62  must free this b
25e0: 6c 6f 63 6b 20 74 68 61 74 20 2a 77 65 2a 20 61  lock that *we* a
25f0: 6c 6c 6f 63 61 74 65 64 20 28 61 62 6f 76 65 29  llocated (above)
2600: 20 73 69 6e 63 65 0d 0a 20 20 20 20 20 20 20 20   since..        
2610: 2a 2a 20 20 20 20 20 20 20 66 69 6e 61 6c 69 7a  **       finaliz
2620: 65 20 64 69 64 20 6e 6f 74 20 64 6f 20 73 6f 2e  e did not do so.
2630: 0d 0a 20 20 20 20 20 20 20 20 2a 2f 0d 0a 20 20  ..        */..  
2640: 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
2650: 72 65 65 5f 69 6e 74 65 72 6f 70 28 64 62 2c 20  ree_interop(db, 
2660: 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 72 65  p);..        bre
2670: 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  ak;..      }..  
2680: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
2690: 7b 0d 0a 20 20 20 20 20 20 20 20 5a 65 72 6f 4d  {..        ZeroM
26a0: 65 6d 6f 72 79 28 70 6f 2c 20 73 69 7a 65 6f 66  emory(po, sizeof
26b0: 28 56 64 62 65 29 29 3b 0d 0a 20 20 20 20 20 20  (Vdbe));..      
26c0: 20 20 70 6f 2d 3e 6d 61 67 69 63 20 3d 20 56 44    po->magic = VD
26d0: 42 45 5f 4d 41 47 49 43 5f 44 45 41 44 3b 0d 0a  BE_MAGIC_DEAD;..
26e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
26f0: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
2700: 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65  x_leave(db->mute
2710: 78 29 3b 0d 0a 20 20 20 20 72 65 74 20 3d 20 73  x);..    ret = s
2720: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64 62 29  qlite3_close(db)
2730: 3b 0d 0a 20 20 7d 0d 0a 20 20 72 65 74 75 72 6e  ;..  }..  return
2740: 20 72 65 74 3b 0d 0a 23 65 6e 64 69 66 0d 0a 7d   ret;..#endif..}
2750: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
2760: 49 4e 54 45 52 4f 50 5f 4c 4f 47 29 0d 0a 53 51  INTEROP_LOG)..SQ
2770: 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e  LITE_API int WIN
2780: 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66  API sqlite3_conf
2790: 69 67 5f 6c 6f 67 5f 69 6e 74 65 72 6f 70 28 29  ig_log_interop()
27a0: 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72 65 74 3b 0d  ..{..  int ret;.
27b0: 0a 20 20 69 66 28 20 21 6c 6f 67 43 6f 6e 66 69  .  if( !logConfi
27c0: 67 75 72 65 64 20 29 7b 0d 0a 20 20 20 20 72 65  gured ){..    re
27d0: 74 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66  t = sqlite3_conf
27e0: 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  ig(SQLITE_CONFIG
27f0: 5f 4c 4f 47 2c 20 73 71 6c 69 74 65 33 49 6e 74  _LOG, sqlite3Int
2800: 65 72 6f 70 4c 6f 67 43 61 6c 6c 62 61 63 6b 2c  eropLogCallback,
2810: 20 30 29 3b 0d 0a 20 20 20 20 69 66 28 20 72 65   0);..    if( re
2820: 74 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0d  t==SQLITE_OK ){.
2830: 0a 20 20 20 20 20 20 6c 6f 67 43 6f 6e 66 69 67  .      logConfig
2840: 75 72 65 64 20 3d 20 31 3b 0d 0a 20 20 20 20 7d  ured = 1;..    }
2850: 65 6c 73 65 7b 0d 0a 20 20 20 20 20 20 73 71 6c  else{..      sql
2860: 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67  ite3InteropDebug
2870: 28 22 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67  ("sqlite3_config
2880: 5f 6c 6f 67 5f 69 6e 74 65 72 6f 70 28 29 3a 20  _log_interop(): 
2890: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53  sqlite3_config(S
28a0: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47  QLITE_CONFIG_LOG
28b0: 29 20 72 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e  ) returned %d.\n
28c0: 22 2c 20 72 65 74 29 3b 0d 0a 20 20 20 20 7d 0d  ", ret);..    }.
28d0: 0a 20 20 7d 65 6c 73 65 7b 0d 0a 20 20 20 20 72  .  }else{..    r
28e0: 65 74 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0d  et = SQLITE_OK;.
28f0: 0a 20 20 7d 0d 0a 20 20 72 65 74 75 72 6e 20 72  .  }..  return r
2900: 65 74 3b 0d 0a 7d 0d 0a 23 65 6e 64 69 66 0d 0a  et;..}..#endif..
2910: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e  ..SQLITE_API con
2920: 73 74 20 63 68 61 72 20 2a 57 49 4e 41 50 49 20  st char *WINAPI 
2930: 69 6e 74 65 72 6f 70 5f 6c 69 62 76 65 72 73 69  interop_libversi
2940: 6f 6e 28 76 6f 69 64 29 0d 0a 7b 0d 0a 20 20 72  on(void)..{..  r
2950: 65 74 75 72 6e 20 49 4e 54 45 52 4f 50 5f 56 45  eturn INTEROP_VE
2960: 52 53 49 4f 4e 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c  RSION;..}....SQL
2970: 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 63 68  ITE_API const ch
2980: 61 72 20 2a 57 49 4e 41 50 49 20 69 6e 74 65 72  ar *WINAPI inter
2990: 6f 70 5f 73 6f 75 72 63 65 69 64 28 76 6f 69 64  op_sourceid(void
29a0: 29 0d 0a 7b 0d 0a 20 20 72 65 74 75 72 6e 20 49  )..{..  return I
29b0: 4e 54 45 52 4f 50 5f 53 4f 55 52 43 45 5f 49 44  NTEROP_SOURCE_ID
29c0: 20 22 20 22 20 49 4e 54 45 52 4f 50 5f 53 4f 55   " " INTEROP_SOU
29d0: 52 43 45 5f 54 49 4d 45 53 54 41 4d 50 3b 0d 0a  RCE_TIMESTAMP;..
29e0: 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20  }....SQLITE_API 
29f0: 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74  int WINAPI sqlit
2a00: 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28  e3_open_interop(
2a10: 63 6f 6e 73 74 20 63 68 61 72 20 2a 66 69 6c 65  const char *file
2a20: 6e 61 6d 65 2c 20 69 6e 74 20 66 6c 61 67 73 2c  name, int flags,
2a30: 20 73 71 6c 69 74 65 33 20 2a 2a 70 70 64 62 29   sqlite3 **ppdb)
2a40: 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72 65 74 3b 0d  ..{..  int ret;.
2a50: 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49  ...#if defined(I
2a60: 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26  NTEROP_DEBUG) &&
2a70: 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20   (INTEROP_DEBUG 
2a80: 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f  & INTEROP_DEBUG_
2a90: 4f 50 45 4e 29 0d 0a 20 20 73 71 6c 69 74 65 33  OPEN)..  sqlite3
2aa0: 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71  InteropDebug("sq
2ab0: 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72  lite3_open_inter
2ac0: 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73 71  op(): calling sq
2ad0: 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 5c 22  lite3_open_v2(\"
2ae0: 25 73 5c 22 2c 20 25 64 2c 20 25 70 29 2e 2e 2e  %s\", %d, %p)...
2af0: 5c 6e 22 2c 20 66 69 6c 65 6e 61 6d 65 2c 20 66  \n", filename, f
2b00: 6c 61 67 73 2c 20 70 70 64 62 29 3b 0d 0a 23 65  lags, ppdb);..#e
2b10: 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 20 3d 20  ndif....  ret = 
2b20: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28  sqlite3_open_v2(
2b30: 66 69 6c 65 6e 61 6d 65 2c 20 70 70 64 62 2c 20  filename, ppdb, 
2b40: 66 6c 61 67 73 2c 20 4e 55 4c 4c 29 3b 0d 0a 0d  flags, NULL);...
2b50: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54  .#if defined(INT
2b60: 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28  EROP_DEBUG) && (
2b70: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20  INTEROP_DEBUG & 
2b80: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 4f 50  INTEROP_DEBUG_OP
2b90: 45 4e 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e  EN)..  sqlite3In
2ba0: 74 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69  teropDebug("sqli
2bb0: 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70  te3_open_interop
2bc0: 28 29 3a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  (): sqlite3_open
2bd0: 5f 76 32 28 5c 22 25 73 5c 22 2c 20 25 64 2c 20  _v2(\"%s\", %d, 
2be0: 25 70 29 20 72 65 74 75 72 6e 65 64 20 25 64 2e  %p) returned %d.
2bf0: 5c 6e 22 2c 20 66 69 6c 65 6e 61 6d 65 2c 20 66  \n", filename, f
2c00: 6c 61 67 73 2c 20 70 70 64 62 2c 20 72 65 74 29  lags, ppdb, ret)
2c10: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66  ;..#endif....#if
2c20: 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50   defined(INTEROP
2c30: 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54  _EXTENSION_FUNCT
2c40: 49 4f 4e 53 29 0d 0a 20 20 69 66 20 28 28 72 65  IONS)..  if ((re
2c50: 74 20 3d 3d 20 53 51 4c 49 54 45 5f 4f 4b 29 20  t == SQLITE_OK) 
2c60: 26 26 20 70 70 64 62 29 0d 0a 20 20 20 20 52 65  && ppdb)..    Re
2c70: 67 69 73 74 65 72 45 78 74 65 6e 73 69 6f 6e 46  gisterExtensionF
2c80: 75 6e 63 74 69 6f 6e 73 28 2a 70 70 64 62 29 3b  unctions(*ppdb);
2c90: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65  ..#endif....  re
2ca0: 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a 0d 0a  turn ret;..}....
2cb0: 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57  SQLITE_API int W
2cc0: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 6f 70  INAPI sqlite3_op
2cd0: 65 6e 31 36 5f 69 6e 74 65 72 6f 70 28 63 6f 6e  en16_interop(con
2ce0: 73 74 20 63 68 61 72 20 2a 66 69 6c 65 6e 61 6d  st char *filenam
2cf0: 65 2c 20 69 6e 74 20 66 6c 61 67 73 2c 20 73 71  e, int flags, sq
2d00: 6c 69 74 65 33 20 2a 2a 70 70 64 62 29 0d 0a 7b  lite3 **ppdb)..{
2d10: 0d 0a 20 20 69 6e 74 20 72 65 74 3b 0d 0a 0d 0a  ..  int ret;....
2d20: 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45  #if defined(INTE
2d30: 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28 49  ROP_DEBUG) && (I
2d40: 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49  NTEROP_DEBUG & I
2d50: 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 4f 50 45  NTEROP_DEBUG_OPE
2d60: 4e 31 36 29 0d 0a 20 20 73 71 6c 69 74 65 33 49  N16)..  sqlite3I
2d70: 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c  nteropDebug("sql
2d80: 69 74 65 33 5f 6f 70 65 6e 31 36 5f 69 6e 74 65  ite3_open16_inte
2d90: 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73  rop(): calling s
2da0: 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65  qlite3_open_inte
2db0: 72 6f 70 28 5c 22 25 73 5c 22 2c 20 25 64 2c 20  rop(\"%s\", %d, 
2dc0: 25 70 29 2e 2e 2e 5c 6e 22 2c 20 66 69 6c 65 6e  %p)...\n", filen
2dd0: 61 6d 65 2c 20 66 6c 61 67 73 2c 20 70 70 64 62  ame, flags, ppdb
2de0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
2df0: 72 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70  ret = sqlite3_op
2e00: 65 6e 5f 69 6e 74 65 72 6f 70 28 66 69 6c 65 6e  en_interop(filen
2e10: 61 6d 65 2c 20 66 6c 61 67 73 2c 20 70 70 64 62  ame, flags, ppdb
2e20: 29 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65  );....#if define
2e30: 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29  d(INTEROP_DEBUG)
2e40: 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42   && (INTEROP_DEB
2e50: 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42  UG & INTEROP_DEB
2e60: 55 47 5f 4f 50 45 4e 31 36 29 0d 0a 20 20 73 71  UG_OPEN16)..  sq
2e70: 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75  lite3InteropDebu
2e80: 67 28 22 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31  g("sqlite3_open1
2e90: 36 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c  6_interop(): sql
2ea0: 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f  ite3_open_intero
2eb0: 70 28 5c 22 25 73 5c 22 2c 20 25 64 2c 20 25 70  p(\"%s\", %d, %p
2ec0: 29 20 72 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e  ) returned %d.\n
2ed0: 22 2c 20 66 69 6c 65 6e 61 6d 65 2c 20 66 6c 61  ", filename, fla
2ee0: 67 73 2c 20 70 70 64 62 2c 20 72 65 74 29 3b 0d  gs, ppdb, ret);.
2ef0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 69 66 20  .#endif....  if 
2f00: 28 28 72 65 74 20 3d 3d 20 53 51 4c 49 54 45 5f  ((ret == SQLITE_
2f10: 4f 4b 29 20 26 26 20 70 70 64 62 20 26 26 20 21  OK) && ppdb && !
2f20: 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 2a 70  DbHasProperty(*p
2f30: 70 64 62 2c 20 30 2c 20 44 42 5f 53 63 68 65 6d  pdb, 0, DB_Schem
2f40: 61 4c 6f 61 64 65 64 29 29 0d 0a 20 20 7b 0d 0a  aLoaded))..  {..
2f50: 20 20 20 20 45 4e 43 28 2a 70 70 64 62 29 20 3d      ENC(*ppdb) =
2f60: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
2f70: 49 56 45 3b 0d 0a 0d 0a 23 69 66 20 53 51 4c 49  IVE;....#if SQLI
2f80: 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45  TE_VERSION_NUMBE
2f90: 52 20 3e 3d 20 33 30 30 38 30 30 38 0d 0a 20 20  R >= 3008008..  
2fa0: 20 20 2f 2f 0d 0a 20 20 20 20 2f 2f 20 42 55 47    //..    // BUG
2fb0: 46 49 58 3a 20 53 65 65 20 74 69 63 6b 65 74 20  FIX: See ticket 
2fc0: 5b 37 63 31 35 31 61 32 66 30 65 32 32 38 30 34  [7c151a2f0e22804
2fd0: 63 5d 2e 0d 0a 20 20 20 20 2f 2f 0d 0a 20 20 20  c]...    //..   
2fe0: 20 53 43 48 45 4d 41 5f 45 4e 43 28 2a 70 70 64   SCHEMA_ENC(*ppd
2ff0: 62 29 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 31  b) = SQLITE_UTF1
3000: 36 4e 41 54 49 56 45 3b 0d 0a 23 65 6e 64 69 66  6NATIVE;..#endif
3010: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 72 65 74 75 72  ..  }....  retur
3020: 6e 20 72 65 74 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c  n ret;..}....SQL
3030: 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 63 68  ITE_API const ch
3040: 61 72 20 2a 57 49 4e 41 50 49 20 73 71 6c 69 74  ar *WINAPI sqlit
3050: 65 33 5f 65 72 72 6d 73 67 5f 69 6e 74 65 72 6f  e3_errmsg_intero
3060: 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69  p(sqlite3 *db, i
3070: 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20  nt *plen)..{..  
3080: 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 76 61 6c  const char *pval
3090: 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73   = sqlite3_errms
30a0: 67 28 64 62 29 3b 0d 0a 20 20 69 66 20 28 70 6c  g(db);..  if (pl
30b0: 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 70 76 61 6c  en) *plen = pval
30c0: 20 3f 20 73 74 72 6c 65 6e 28 70 76 61 6c 29 20   ? strlen(pval) 
30d0: 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70  : 0;..  return p
30e0: 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  val;..}....SQLIT
30f0: 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49  E_API int WINAPI
3100: 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73   sqlite3_changes
3110: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
3120: 20 2a 64 62 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20   *db)..{..  int 
3130: 72 65 73 75 6c 74 3b 0d 0a 0d 0a 23 69 66 20 64  result;....#if d
3140: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44  efined(INTEROP_D
3150: 45 42 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f  EBUG) && (INTERO
3160: 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f  P_DEBUG & INTERO
3170: 50 5f 44 45 42 55 47 5f 43 48 41 4e 47 45 53 29  P_DEBUG_CHANGES)
3180: 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72  ..  sqlite3Inter
3190: 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33  opDebug("sqlite3
31a0: 5f 63 68 61 6e 67 65 73 5f 69 6e 74 65 72 6f 70  _changes_interop
31b0: 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69  (): calling sqli
31c0: 74 65 33 5f 63 68 61 6e 67 65 73 28 25 70 29 2e  te3_changes(%p).
31d0: 2e 2e 5c 6e 22 2c 20 64 62 29 3b 0d 0a 23 65 6e  ..\n", db);..#en
31e0: 64 69 66 0d 0a 0d 0a 23 69 66 6e 64 65 66 20 4e  dif....#ifndef N
31f0: 44 45 42 55 47 0d 0a 20 20 69 66 20 28 21 64 62  DEBUG..  if (!db
3200: 29 0d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  )..      sqlite3
3210: 49 6e 74 65 72 6f 70 42 72 65 61 6b 28 22 6e 75  InteropBreak("nu
3220: 6c 6c 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  ll database hand
3230: 6c 65 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 63  le for sqlite3_c
3240: 68 61 6e 67 65 73 28 29 22 29 3b 0d 0a 23 65 6e  hanges()");..#en
3250: 64 69 66 0d 0a 0d 0a 20 20 72 65 73 75 6c 74 20  dif....  result 
3260: 3d 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  = sqlite3_change
3270: 73 28 64 62 29 3b 0d 0a 0d 0a 23 69 66 20 64 65  s(db);....#if de
3280: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45  fined(INTEROP_DE
3290: 42 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50  BUG) && (INTEROP
32a0: 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50  _DEBUG & INTEROP
32b0: 5f 44 45 42 55 47 5f 43 48 41 4e 47 45 53 29 0d  _DEBUG_CHANGES).
32c0: 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f  .  sqlite3Intero
32d0: 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f  pDebug("sqlite3_
32e0: 63 68 61 6e 67 65 73 5f 69 6e 74 65 72 6f 70 28  changes_interop(
32f0: 29 3a 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  ): sqlite3_chang
3300: 65 73 28 25 70 29 20 72 65 74 75 72 6e 65 64 20  es(%p) returned 
3310: 25 64 2e 5c 6e 22 2c 20 64 62 2c 20 72 65 73 75  %d.\n", db, resu
3320: 6c 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  lt);..#endif....
3330: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
3340: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
3350: 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c  I int WINAPI sql
3360: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74  ite3_prepare_int
3370: 65 72 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62  erop(sqlite3 *db
3380: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  , const char *sq
3390: 6c 2c 20 69 6e 74 20 6e 62 79 74 65 73 2c 20 73  l, int nbytes, s
33a0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a 70 70  qlite3_stmt **pp
33b0: 73 74 6d 74 2c 20 63 6f 6e 73 74 20 63 68 61 72  stmt, const char
33c0: 20 2a 2a 70 7a 74 61 69 6c 2c 20 69 6e 74 20 2a   **pztail, int *
33d0: 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20  plen)..{..  int 
33e0: 6e 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65  n;....#if define
33f0: 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29  d(INTEROP_DEBUG)
3400: 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42   && (INTEROP_DEB
3410: 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42  UG & INTEROP_DEB
3420: 55 47 5f 50 52 45 50 41 52 45 29 0d 0a 20 20 73  UG_PREPARE)..  s
3430: 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62  qlite3InteropDeb
3440: 75 67 28 22 73 71 6c 69 74 65 33 5f 70 72 65 70  ug("sqlite3_prep
3450: 61 72 65 5f 69 6e 74 65 72 6f 70 28 29 3a 20 63  are_interop(): c
3460: 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f 70  alling sqlite3_p
3470: 72 65 70 61 72 65 28 25 70 2c 20 5c 22 25 73 5c  repare(%p, \"%s\
3480: 22 2c 20 25 64 2c 20 25 70 29 2e 2e 2e 5c 6e 22  ", %d, %p)...\n"
3490: 2c 20 64 62 2c 20 73 71 6c 2c 20 6e 62 79 74 65  , db, sql, nbyte
34a0: 73 2c 20 70 70 73 74 6d 74 29 3b 0d 0a 23 65 6e  s, ppstmt);..#en
34b0: 64 69 66 0d 0a 0d 0a 23 69 66 20 53 51 4c 49 54  dif....#if SQLIT
34c0: 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52  E_VERSION_NUMBER
34d0: 20 3e 3d 20 33 30 30 33 30 30 39 0d 0a 20 20 6e   >= 3003009..  n
34e0: 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61   = sqlite3_prepa
34f0: 72 65 5f 76 32 28 64 62 2c 20 73 71 6c 2c 20 6e  re_v2(db, sql, n
3500: 62 79 74 65 73 2c 20 70 70 73 74 6d 74 2c 20 70  bytes, ppstmt, p
3510: 7a 74 61 69 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a  ztail);..#else..
3520: 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 70 72    n = sqlite3_pr
3530: 65 70 61 72 65 28 64 62 2c 20 73 71 6c 2c 20 6e  epare(db, sql, n
3540: 62 79 74 65 73 2c 20 70 70 73 74 6d 74 2c 20 70  bytes, ppstmt, p
3550: 7a 74 61 69 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d  ztail);..#endif.
3560: 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49  ...#if defined(I
3570: 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26  NTEROP_DEBUG) &&
3580: 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20   (INTEROP_DEBUG 
3590: 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f  & INTEROP_DEBUG_
35a0: 50 52 45 50 41 52 45 29 0d 0a 20 20 73 71 6c 69  PREPARE)..  sqli
35b0: 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28  te3InteropDebug(
35c0: 22 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  "sqlite3_prepare
35d0: 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c 69  _interop(): sqli
35e0: 74 65 33 5f 70 72 65 70 61 72 65 28 25 70 2c 20  te3_prepare(%p, 
35f0: 5c 22 25 73 5c 22 2c 20 25 64 2c 20 25 70 29 20  \"%s\", %d, %p) 
3600: 72 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c  returned %d.\n",
3610: 20 64 62 2c 20 73 71 6c 2c 20 6e 62 79 74 65 73   db, sql, nbytes
3620: 2c 20 70 70 73 74 6d 74 2c 20 6e 29 3b 0d 0a 23  , ppstmt, n);..#
3630: 65 6e 64 69 66 0d 0a 0d 0a 20 20 69 66 20 28 70  endif....  if (p
3640: 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 28 70 7a  len) *plen = (pz
3650: 74 61 69 6c 20 26 26 20 2a 70 7a 74 61 69 6c 29  tail && *pztail)
3660: 20 3f 20 73 74 72 6c 65 6e 28 2a 70 7a 74 61 69   ? strlen(*pztai
3670: 6c 29 20 3a 20 30 3b 0d 0a 0d 0a 20 20 72 65 74  l) : 0;....  ret
3680: 75 72 6e 20 6e 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c  urn n;..}....SQL
3690: 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41  ITE_API int WINA
36a0: 50 49 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  PI sqlite3_prepa
36b0: 72 65 31 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c  re16_interop(sql
36c0: 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20  ite3 *db, const 
36d0: 76 6f 69 64 20 2a 73 71 6c 2c 20 69 6e 74 20 6e  void *sql, int n
36e0: 63 68 61 72 73 2c 20 73 71 6c 69 74 65 33 5f 73  chars, sqlite3_s
36f0: 74 6d 74 20 2a 2a 70 70 73 74 6d 74 2c 20 63 6f  tmt **ppstmt, co
3700: 6e 73 74 20 76 6f 69 64 20 2a 2a 70 7a 74 61 69  nst void **pztai
3710: 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b  l, int *plen)..{
3720: 0d 0a 20 20 69 6e 74 20 6e 3b 0d 0a 0d 0a 23 69  ..  int n;....#i
3730: 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f  f defined(INTERO
3740: 50 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e 54  P_DEBUG) && (INT
3750: 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54  EROP_DEBUG & INT
3760: 45 52 4f 50 5f 44 45 42 55 47 5f 50 52 45 50 41  EROP_DEBUG_PREPA
3770: 52 45 31 36 29 0d 0a 20 20 73 71 6c 69 74 65 33  RE16)..  sqlite3
3780: 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71  InteropDebug("sq
3790: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 69 6e  lite3_prepare_in
37a0: 74 65 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67  terop(): calling
37b0: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
37c0: 31 36 28 25 70 2c 20 5c 22 25 73 5c 22 2c 20 25  16(%p, \"%s\", %
37d0: 64 2c 20 25 70 29 2e 2e 2e 5c 6e 22 2c 20 64 62  d, %p)...\n", db
37e0: 2c 20 73 71 6c 2c 20 6e 63 68 61 72 73 2c 20 70  , sql, nchars, p
37f0: 70 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69 66 0d  pstmt);..#endif.
3800: 0a 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45  ...#if SQLITE_VE
3810: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20  RSION_NUMBER >= 
3820: 33 30 30 33 30 30 39 0d 0a 20 20 6e 20 3d 20 73  3003009..  n = s
3830: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36  qlite3_prepare16
3840: 5f 76 32 28 64 62 2c 20 73 71 6c 2c 20 6e 63 68  _v2(db, sql, nch
3850: 61 72 73 20 2a 20 73 69 7a 65 6f 66 28 77 63 68  ars * sizeof(wch
3860: 61 72 5f 74 29 2c 20 70 70 73 74 6d 74 2c 20 70  ar_t), ppstmt, p
3870: 7a 74 61 69 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a  ztail);..#else..
3880: 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 70 72    n = sqlite3_pr
3890: 65 70 61 72 65 31 36 28 64 62 2c 20 73 71 6c 2c  epare16(db, sql,
38a0: 20 6e 63 68 61 72 73 20 2a 20 73 69 7a 65 6f 66   nchars * sizeof
38b0: 28 77 63 68 61 72 5f 74 29 2c 20 70 70 73 74 6d  (wchar_t), ppstm
38c0: 74 2c 20 70 7a 74 61 69 6c 29 3b 0d 0a 23 65 6e  t, pztail);..#en
38d0: 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e  dif....#if defin
38e0: 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  ed(INTEROP_DEBUG
38f0: 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45  ) && (INTEROP_DE
3900: 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45  BUG & INTEROP_DE
3910: 42 55 47 5f 50 52 45 50 41 52 45 31 36 29 0d 0a  BUG_PREPARE16)..
3920: 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70    sqlite3Interop
3930: 44 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 70  Debug("sqlite3_p
3940: 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 29  repare_interop()
3950: 3a 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  : sqlite3_prepar
3960: 65 31 36 28 25 70 2c 20 5c 22 25 73 5c 22 2c 20  e16(%p, \"%s\", 
3970: 25 64 2c 20 25 70 29 20 72 65 74 75 72 6e 65 64  %d, %p) returned
3980: 20 25 64 2e 5c 6e 22 2c 20 64 62 2c 20 73 71 6c   %d.\n", db, sql
3990: 2c 20 6e 63 68 61 72 73 2c 20 70 70 73 74 6d 74  , nchars, ppstmt
39a0: 2c 20 6e 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  , n);..#endif...
39b0: 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c  .  if (plen) *pl
39c0: 65 6e 20 3d 20 28 70 7a 74 61 69 6c 20 26 26 20  en = (pztail && 
39d0: 2a 70 7a 74 61 69 6c 29 20 3f 20 77 63 73 6c 65  *pztail) ? wcsle
39e0: 6e 28 28 77 63 68 61 72 5f 74 20 2a 29 2a 70 7a  n((wchar_t *)*pz
39f0: 74 61 69 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77  tail) * sizeof(w
3a00: 63 68 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 0d 0a  char_t) : 0;....
3a10: 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 7d 0d 0a    return n;..}..
3a20: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
3a30: 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
3a40: 42 4c 45 29 20 26 26 20 53 51 4c 49 54 45 5f 56  BLE) && SQLITE_V
3a50: 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d  ERSION_NUMBER >=
3a60: 20 33 30 30 34 30 30 31 0d 0a 53 51 4c 49 54 45   3004001..SQLITE
3a70: 5f 41 50 49 20 76 6f 69 64 20 2a 57 49 4e 41 50  _API void *WINAP
3a80: 49 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  I sqlite3_create
3a90: 5f 64 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75  _disposable_modu
3aa0: 6c 65 5f 69 6e 74 65 72 6f 70 28 0d 0a 20 20 73  le_interop(..  s
3ab0: 71 6c 69 74 65 33 20 2a 64 62 2c 0d 0a 20 20 63  qlite3 *db,..  c
3ac0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
3ad0: 2c 0d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64  ,..  sqlite3_mod
3ae0: 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 2c 0d 0a 20  ule *pModule,.. 
3af0: 20 69 6e 74 20 69 56 65 72 73 69 6f 6e 2c 0d 0a   int iVersion,..
3b00: 20 20 69 6e 74 20 28 2a 78 43 72 65 61 74 65 29    int (*xCreate)
3b10: 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 20  (sqlite3*, void 
3b20: 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
3b30: 61 72 20 2a 63 6f 6e 73 74 2a 2c 20 73 71 6c 69  ar *const*, sqli
3b40: 74 65 33 5f 76 74 61 62 20 2a 2a 2c 20 63 68 61  te3_vtab **, cha
3b50: 72 2a 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78  r**),..  int (*x
3b60: 43 6f 6e 6e 65 63 74 29 28 73 71 6c 69 74 65 33  Connect)(sqlite3
3b70: 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 2c 20  *, void *, int, 
3b80: 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73  const char *cons
3b90: 74 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62  t*, sqlite3_vtab
3ba0: 20 2a 2a 2c 20 63 68 61 72 2a 2a 29 2c 0d 0a 20   **, char**),.. 
3bb0: 20 69 6e 74 20 28 2a 78 42 65 73 74 49 6e 64 65   int (*xBestInde
3bc0: 78 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20  x)(sqlite3_vtab 
3bd0: 2a 2c 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  *, sqlite3_index
3be0: 5f 69 6e 66 6f 2a 29 2c 0d 0a 20 20 69 6e 74 20  _info*),..  int 
3bf0: 28 2a 78 44 69 73 63 6f 6e 6e 65 63 74 29 28 73  (*xDisconnect)(s
3c00: 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 29 2c 0d  qlite3_vtab *),.
3c10: 0a 20 20 69 6e 74 20 28 2a 78 44 65 73 74 72 6f  .  int (*xDestro
3c20: 79 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20  y)(sqlite3_vtab 
3c30: 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 4f 70  *),..  int (*xOp
3c40: 65 6e 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62  en)(sqlite3_vtab
3c50: 20 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62   *, sqlite3_vtab
3c60: 5f 63 75 72 73 6f 72 20 2a 2a 29 2c 0d 0a 20 20  _cursor **),..  
3c70: 69 6e 74 20 28 2a 78 43 6c 6f 73 65 29 28 73 71  int (*xClose)(sq
3c80: 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
3c90: 72 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 46  r*),..  int (*xF
3ca0: 69 6c 74 65 72 29 28 73 71 6c 69 74 65 33 5f 76  ilter)(sqlite3_v
3cb0: 74 61 62 5f 63 75 72 73 6f 72 2a 2c 20 69 6e 74  tab_cursor*, int
3cc0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
3cd0: 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  int, sqlite3_val
3ce0: 75 65 20 2a 2a 29 2c 0d 0a 20 20 69 6e 74 20 28  ue **),..  int (
3cf0: 2a 78 4e 65 78 74 29 28 73 71 6c 69 74 65 33 5f  *xNext)(sqlite3_
3d00: 76 74 61 62 5f 63 75 72 73 6f 72 2a 29 2c 0d 0a  vtab_cursor*),..
3d10: 20 20 69 6e 74 20 28 2a 78 45 6f 66 29 28 73 71    int (*xEof)(sq
3d20: 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
3d30: 72 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 43  r*),..  int (*xC
3d40: 6f 6c 75 6d 6e 29 28 73 71 6c 69 74 65 33 5f 76  olumn)(sqlite3_v
3d50: 74 61 62 5f 63 75 72 73 6f 72 2a 2c 20 73 71 6c  tab_cursor*, sql
3d60: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 20 69  ite3_context*, i
3d70: 6e 74 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 52  nt),..  int (*xR
3d80: 6f 77 69 64 29 28 73 71 6c 69 74 65 33 5f 76 74  owid)(sqlite3_vt
3d90: 61 62 5f 63 75 72 73 6f 72 2a 2c 20 73 71 6c 69  ab_cursor*, sqli
3da0: 74 65 33 5f 69 6e 74 36 34 20 2a 29 2c 0d 0a 20  te3_int64 *),.. 
3db0: 20 69 6e 74 20 28 2a 78 55 70 64 61 74 65 29 28   int (*xUpdate)(
3dc0: 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 2c 20  sqlite3_vtab *, 
3dd0: 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  int, sqlite3_val
3de0: 75 65 20 2a 2a 2c 20 73 71 6c 69 74 65 33 5f 69  ue **, sqlite3_i
3df0: 6e 74 36 34 20 2a 29 2c 0d 0a 20 20 69 6e 74 20  nt64 *),..  int 
3e00: 28 2a 78 42 65 67 69 6e 29 28 73 71 6c 69 74 65  (*xBegin)(sqlite
3e10: 33 5f 76 74 61 62 20 2a 29 2c 0d 0a 20 20 69 6e  3_vtab *),..  in
3e20: 74 20 28 2a 78 53 79 6e 63 29 28 73 71 6c 69 74  t (*xSync)(sqlit
3e30: 65 33 5f 76 74 61 62 20 2a 29 2c 0d 0a 20 20 69  e3_vtab *),..  i
3e40: 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 29 28 73 71  nt (*xCommit)(sq
3e50: 6c 69 74 65 33 5f 76 74 61 62 20 2a 29 2c 0d 0a  lite3_vtab *),..
3e60: 20 20 69 6e 74 20 28 2a 78 52 6f 6c 6c 62 61 63    int (*xRollbac
3e70: 6b 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20  k)(sqlite3_vtab 
3e80: 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 46 69  *),..  int (*xFi
3e90: 6e 64 46 75 6e 63 74 69 6f 6e 29 28 73 71 6c 69  ndFunction)(sqli
3ea0: 74 65 33 5f 76 74 61 62 20 2a 2c 20 69 6e 74 2c  te3_vtab *, int,
3eb0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 76   const char *, v
3ec0: 6f 69 64 20 28 2a 2a 70 78 46 75 6e 63 29 28 73  oid (**pxFunc)(s
3ed0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
3ee0: 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61   int, sqlite3_va
3ef0: 6c 75 65 2a 2a 29 2c 20 76 6f 69 64 20 2a 2a 70  lue**), void **p
3f00: 70 41 72 67 29 2c 0d 0a 20 20 69 6e 74 20 28 2a  pArg),..  int (*
3f10: 78 52 65 6e 61 6d 65 29 28 73 71 6c 69 74 65 33  xRename)(sqlite3
3f20: 5f 76 74 61 62 20 2a 2c 20 63 6f 6e 73 74 20 63  _vtab *, const c
3f30: 68 61 72 20 2a 29 2c 0d 0a 20 20 69 6e 74 20 28  har *),..  int (
3f40: 2a 78 53 61 76 65 70 6f 69 6e 74 29 28 73 71 6c  *xSavepoint)(sql
3f50: 69 74 65 33 5f 76 74 61 62 20 2a 2c 20 69 6e 74  ite3_vtab *, int
3f60: 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 52 65 6c  ),..  int (*xRel
3f70: 65 61 73 65 29 28 73 71 6c 69 74 65 33 5f 76 74  ease)(sqlite3_vt
3f80: 61 62 20 2a 2c 20 69 6e 74 29 2c 0d 0a 20 20 69  ab *, int),..  i
3f90: 6e 74 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 54 6f  nt (*xRollbackTo
3fa0: 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a  )(sqlite3_vtab *
3fb0: 2c 20 69 6e 74 29 2c 0d 0a 20 20 76 6f 69 64 20  , int),..  void 
3fc0: 2a 70 43 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20  *pClientData,.. 
3fd0: 20 76 6f 69 64 28 2a 78 44 65 73 74 72 6f 79 4d   void(*xDestroyM
3fe0: 6f 64 75 6c 65 29 28 76 6f 69 64 2a 29 0d 0a 29  odule)(void*)..)
3ff0: 7b 0d 0a 20 20 69 66 20 28 21 70 4d 6f 64 75 6c  {..  if (!pModul
4000: 65 29 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20  e) return 0;..  
4010: 6d 65 6d 73 65 74 28 70 4d 6f 64 75 6c 65 2c 20  memset(pModule, 
4020: 30 2c 20 73 69 7a 65 6f 66 28 2a 70 4d 6f 64 75  0, sizeof(*pModu
4030: 6c 65 29 29 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65  le));..  pModule
4040: 2d 3e 69 56 65 72 73 69 6f 6e 20 3d 20 69 56 65  ->iVersion = iVe
4050: 72 73 69 6f 6e 3b 0d 0a 20 20 70 4d 6f 64 75 6c  rsion;..  pModul
4060: 65 2d 3e 78 43 72 65 61 74 65 20 3d 20 78 43 72  e->xCreate = xCr
4070: 65 61 74 65 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65  eate;..  pModule
4080: 2d 3e 78 43 6f 6e 6e 65 63 74 20 3d 20 78 43 6f  ->xConnect = xCo
4090: 6e 6e 65 63 74 3b 0d 0a 20 20 70 4d 6f 64 75 6c  nnect;..  pModul
40a0: 65 2d 3e 78 42 65 73 74 49 6e 64 65 78 20 3d 20  e->xBestIndex = 
40b0: 78 42 65 73 74 49 6e 64 65 78 3b 0d 0a 20 20 70  xBestIndex;..  p
40c0: 4d 6f 64 75 6c 65 2d 3e 78 44 69 73 63 6f 6e 6e  Module->xDisconn
40d0: 65 63 74 20 3d 20 78 44 69 73 63 6f 6e 6e 65 63  ect = xDisconnec
40e0: 74 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78  t;..  pModule->x
40f0: 44 65 73 74 72 6f 79 20 3d 20 78 44 65 73 74 72  Destroy = xDestr
4100: 6f 79 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e  oy;..  pModule->
4110: 78 4f 70 65 6e 20 3d 20 78 4f 70 65 6e 3b 0d 0a  xOpen = xOpen;..
4120: 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73    pModule->xClos
4130: 65 20 3d 20 78 43 6c 6f 73 65 3b 0d 0a 20 20 70  e = xClose;..  p
4140: 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 20  Module->xFilter 
4150: 3d 20 78 46 69 6c 74 65 72 3b 0d 0a 20 20 70 4d  = xFilter;..  pM
4160: 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 3d 20 78  odule->xNext = x
4170: 4e 65 78 74 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65  Next;..  pModule
4180: 2d 3e 78 45 6f 66 20 3d 20 78 45 6f 66 3b 0d 0a  ->xEof = xEof;..
4190: 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75    pModule->xColu
41a0: 6d 6e 20 3d 20 78 43 6f 6c 75 6d 6e 3b 0d 0a 20  mn = xColumn;.. 
41b0: 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
41c0: 20 3d 20 78 52 6f 77 69 64 3b 0d 0a 20 20 70 4d   = xRowid;..  pM
41d0: 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 20 3d  odule->xUpdate =
41e0: 20 78 55 70 64 61 74 65 3b 0d 0a 20 20 70 4d 6f   xUpdate;..  pMo
41f0: 64 75 6c 65 2d 3e 78 42 65 67 69 6e 20 3d 20 78  dule->xBegin = x
4200: 42 65 67 69 6e 3b 0d 0a 20 20 70 4d 6f 64 75 6c  Begin;..  pModul
4210: 65 2d 3e 78 53 79 6e 63 20 3d 20 78 53 79 6e 63  e->xSync = xSync
4220: 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  ;..  pModule->xC
4230: 6f 6d 6d 69 74 20 3d 20 78 43 6f 6d 6d 69 74 3b  ommit = xCommit;
4240: 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f  ..  pModule->xRo
4250: 6c 6c 62 61 63 6b 20 3d 20 78 52 6f 6c 6c 62 61  llback = xRollba
4260: 63 6b 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e  ck;..  pModule->
4270: 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 20 3d 20  xFindFunction = 
4280: 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 3b 0d 0a  xFindFunction;..
4290: 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61    pModule->xRena
42a0: 6d 65 20 3d 20 78 52 65 6e 61 6d 65 3b 0d 0a 20  me = xRename;.. 
42b0: 20 70 4d 6f 64 75 6c 65 2d 3e 78 53 61 76 65 70   pModule->xSavep
42c0: 6f 69 6e 74 20 3d 20 78 53 61 76 65 70 6f 69 6e  oint = xSavepoin
42d0: 74 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78  t;..  pModule->x
42e0: 52 65 6c 65 61 73 65 20 3d 20 78 52 65 6c 65 61  Release = xRelea
42f0: 73 65 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e  se;..  pModule->
4300: 78 52 6f 6c 6c 62 61 63 6b 54 6f 20 3d 20 78 52  xRollbackTo = xR
4310: 6f 6c 6c 62 61 63 6b 54 6f 3b 0d 0a 20 20 72 65  ollbackTo;..  re
4320: 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 63 72 65  turn sqlite3_cre
4330: 61 74 65 5f 64 69 73 70 6f 73 61 62 6c 65 5f 6d  ate_disposable_m
4340: 6f 64 75 6c 65 28 64 62 2c 20 7a 4e 61 6d 65 2c  odule(db, zName,
4350: 20 70 4d 6f 64 75 6c 65 2c 20 70 43 6c 69 65 6e   pModule, pClien
4360: 74 44 61 74 61 2c 20 78 44 65 73 74 72 6f 79 4d  tData, xDestroyM
4370: 6f 64 75 6c 65 29 3b 0d 0a 7d 0d 0a 23 65 6e 64  odule);..}..#end
4380: 69 66 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  if....SQLITE_API
4390: 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69   int WINAPI sqli
43a0: 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 5f  te3_bind_double_
43b0: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f  interop(sqlite3_
43c0: 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20  stmt *stmt, int 
43d0: 69 43 6f 6c 2c 20 64 6f 75 62 6c 65 20 2a 76 61  iCol, double *va
43e0: 6c 29 0d 0a 7b 0d 0a 20 20 69 66 20 28 21 76 61  l)..{..  if (!va
43f0: 6c 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  l) return SQLITE
4400: 5f 45 52 52 4f 52 3b 0d 0a 20 20 72 65 74 75 72  _ERROR;..  retur
4410: 6e 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64  n sqlite3_bind_d
4420: 6f 75 62 6c 65 28 73 74 6d 74 2c 69 43 6f 6c 2c  ouble(stmt,iCol,
4430: 2a 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c  *val);..}....SQL
4440: 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41  ITE_API int WINA
4450: 50 49 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  PI sqlite3_bind_
4460: 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 73 71  int64_interop(sq
4470: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74  lite3_stmt *stmt
4480: 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 73 71 6c 69  , int iCol, sqli
4490: 74 65 5f 69 6e 74 36 34 20 2a 76 61 6c 29 0d 0a  te_int64 *val)..
44a0: 7b 0d 0a 20 20 69 66 20 28 21 76 61 6c 29 20 72  {..  if (!val) r
44b0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
44c0: 4f 52 3b 0d 0a 20 20 72 65 74 75 72 6e 20 73 71  OR;..  return sq
44d0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
44e0: 28 73 74 6d 74 2c 69 43 6f 6c 2c 2a 76 61 6c 29  (stmt,iCol,*val)
44f0: 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  ;..}....SQLITE_A
4500: 50 49 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20  PI const char * 
4510: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 62  WINAPI sqlite3_b
4520: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
4530: 6d 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  me_interop(sqlit
4540: 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69  e3_stmt *stmt, i
4550: 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c  nt iCol, int *pl
4560: 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20  en)..{..  const 
4570: 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73 71 6c  char *pval = sql
4580: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
4590: 74 65 72 5f 6e 61 6d 65 28 73 74 6d 74 2c 20 69  ter_name(stmt, i
45a0: 43 6f 6c 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65  Col);..  if (ple
45b0: 6e 29 20 2a 70 6c 65 6e 20 3d 20 70 76 61 6c 20  n) *plen = pval 
45c0: 3f 20 73 74 72 6c 65 6e 28 70 76 61 6c 29 20 3a  ? strlen(pval) :
45d0: 20 30 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70 76   0;..  return pv
45e0: 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45  al;..}....SQLITE
45f0: 5f 41 50 49 20 63 6f 6e 73 74 20 63 68 61 72 20  _API const char 
4600: 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  * WINAPI sqlite3
4610: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e 74  _column_name_int
4620: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
4630: 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f  t *stmt, int iCo
4640: 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b  l, int *plen)..{
4650: 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ..  const char *
4660: 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  pval = sqlite3_c
4670: 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2c  olumn_name(stmt,
4680: 20 69 43 6f 6c 29 3b 0d 0a 20 20 69 66 20 28 70   iCol);..  if (p
4690: 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 70 76 61  len) *plen = pva
46a0: 6c 20 3f 20 73 74 72 6c 65 6e 28 70 76 61 6c 29  l ? strlen(pval)
46b0: 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72 6e 20   : 0;..  return 
46c0: 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49  pval;..}....SQLI
46d0: 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 76 6f 69  TE_API const voi
46e0: 64 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74  d * WINAPI sqlit
46f0: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36  e3_column_name16
4700: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
4710: 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74  _stmt *stmt, int
4720: 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e   iCol, int *plen
4730: 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 76 6f  )..{..  const vo
4740: 69 64 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74  id *pval = sqlit
4750: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36  e3_column_name16
4760: 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20  (stmt, iCol);.. 
4770: 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e   if (plen) *plen
4780: 20 3d 20 70 76 61 6c 20 3f 20 77 63 73 6c 65 6e   = pval ? wcslen
4790: 28 28 77 63 68 61 72 5f 74 20 2a 29 70 76 61 6c  ((wchar_t *)pval
47a0: 29 20 2a 20 73 69 7a 65 6f 66 28 77 63 68 61 72  ) * sizeof(wchar
47b0: 5f 74 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75  _t) : 0;..  retu
47c0: 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53  rn pval;..}....S
47d0: 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20  QLITE_API const 
47e0: 63 68 61 72 20 2a 20 57 49 4e 41 50 49 20 73 71  char * WINAPI sq
47f0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
4800: 6c 74 79 70 65 5f 69 6e 74 65 72 6f 70 28 73 71  ltype_interop(sq
4810: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74  lite3_stmt *stmt
4820: 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20  , int iCol, int 
4830: 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e  *plen)..{..  con
4840: 73 74 20 63 68 61 72 20 2a 70 76 61 6c 20 3d 20  st char *pval = 
4850: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
4860: 65 63 6c 74 79 70 65 28 73 74 6d 74 2c 20 69 43  ecltype(stmt, iC
4870: 6f 6c 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e  ol);..  if (plen
4880: 29 20 2a 70 6c 65 6e 20 3d 20 70 76 61 6c 20 3f  ) *plen = pval ?
4890: 20 73 74 72 6c 65 6e 28 70 76 61 6c 29 20 3a 20   strlen(pval) : 
48a0: 30 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70 76 61  0;..  return pva
48b0: 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f  l;..}....SQLITE_
48c0: 41 50 49 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  API const void *
48d0: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
48e0: 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31  column_decltype1
48f0: 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  6_interop(sqlite
4900: 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e  3_stmt *stmt, in
4910: 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65  t iCol, int *ple
4920: 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 76  n)..{..  const v
4930: 6f 69 64 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69  oid *pval = sqli
4940: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
4950: 79 70 65 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c  ype16(stmt, iCol
4960: 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20  );..  if (plen) 
4970: 2a 70 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20 77  *plen = pval ? w
4980: 63 73 6c 65 6e 28 28 77 63 68 61 72 5f 74 20 2a  cslen((wchar_t *
4990: 29 70 76 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28  )pval) * sizeof(
49a0: 77 63 68 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 20  wchar_t) : 0;.. 
49b0: 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d   return pval;..}
49c0: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76  ....SQLITE_API v
49d0: 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74  oid WINAPI sqlit
49e0: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65  e3_column_double
49f0: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
4a00: 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74  _stmt *stmt, int
4a10: 20 69 43 6f 6c 2c 20 64 6f 75 62 6c 65 20 2a 76   iCol, double *v
4a20: 61 6c 29 0d 0a 7b 0d 0a 20 20 69 66 20 28 21 76  al)..{..  if (!v
4a30: 61 6c 29 20 72 65 74 75 72 6e 3b 0d 0a 20 20 2a  al) return;..  *
4a40: 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  val = sqlite3_co
4a50: 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 74 6d 74  lumn_double(stmt
4a60: 2c 69 43 6f 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51  ,iCol);..}....SQ
4a70: 4c 49 54 45 5f 41 50 49 20 76 6f 69 64 20 57 49  LITE_API void WI
4a80: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c  NAPI sqlite3_col
4a90: 75 6d 6e 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f  umn_int64_intero
4aa0: 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  p(sqlite3_stmt *
4ab0: 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20  stmt, int iCol, 
4ac0: 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a 76 61  sqlite_int64 *va
4ad0: 6c 29 0d 0a 7b 0d 0a 20 20 69 66 20 28 21 76 61  l)..{..  if (!va
4ae0: 6c 29 20 72 65 74 75 72 6e 3b 0d 0a 20 20 2a 76  l) return;..  *v
4af0: 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  al = sqlite3_col
4b00: 75 6d 6e 5f 69 6e 74 36 34 28 73 74 6d 74 2c 69  umn_int64(stmt,i
4b10: 43 6f 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49  Col);..}....SQLI
4b20: 54 45 5f 41 50 49 20 76 6f 69 64 20 57 49 4e 41  TE_API void WINA
4b30: 50 49 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  PI sqlite3_last_
4b40: 69 6e 73 65 72 74 5f 72 6f 77 69 64 5f 69 6e 74  insert_rowid_int
4b50: 65 72 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62  erop(sqlite3 *db
4b60: 2c 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a  , sqlite_int64 *
4b70: 72 6f 77 49 64 29 0d 0a 7b 0d 0a 20 20 69 66 20  rowId)..{..  if 
4b80: 28 21 72 6f 77 49 64 29 20 72 65 74 75 72 6e 3b  (!rowId) return;
4b90: 0d 0a 20 20 2a 72 6f 77 49 64 20 3d 20 73 71 6c  ..  *rowId = sql
4ba0: 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74  ite3_last_insert
4bb0: 5f 72 6f 77 69 64 28 64 62 29 3b 0d 0a 7d 0d 0a  _rowid(db);..}..
4bc0: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69  ..SQLITE_API voi
4bd0: 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  d WINAPI sqlite3
4be0: 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 5f 69 6e 74  _memory_used_int
4bf0: 65 72 6f 70 28 73 71 6c 69 74 65 5f 69 6e 74 36  erop(sqlite_int6
4c00: 34 20 2a 6e 42 79 74 65 73 29 0d 0a 7b 0d 0a 20  4 *nBytes)..{.. 
4c10: 20 69 66 20 28 21 6e 42 79 74 65 73 29 20 72 65   if (!nBytes) re
4c20: 74 75 72 6e 3b 0d 0a 20 20 2a 6e 42 79 74 65 73  turn;..  *nBytes
4c30: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72   = sqlite3_memor
4c40: 79 5f 75 73 65 64 28 29 3b 0d 0a 7d 0d 0a 0d 0a  y_used();..}....
4c50: 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69 64 20  SQLITE_API void 
4c60: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 6d  WINAPI sqlite3_m
4c70: 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72 5f  emory_highwater_
4c80: 69 6e 74 65 72 6f 70 28 69 6e 74 20 72 65 73 65  interop(int rese
4c90: 74 46 6c 61 67 2c 20 73 71 6c 69 74 65 5f 69 6e  tFlag, sqlite_in
4ca0: 74 36 34 20 2a 6e 42 79 74 65 73 29 0d 0a 7b 0d  t64 *nBytes)..{.
4cb0: 0a 20 20 69 66 20 28 21 6e 42 79 74 65 73 29 20  .  if (!nBytes) 
4cc0: 72 65 74 75 72 6e 3b 0d 0a 20 20 2a 6e 42 79 74  return;..  *nByt
4cd0: 65 73 20 3d 20 73 71 6c 69 74 65 33 5f 6d 65 6d  es = sqlite3_mem
4ce0: 6f 72 79 5f 68 69 67 68 77 61 74 65 72 28 72 65  ory_highwater(re
4cf0: 73 65 74 46 6c 61 67 29 3b 0d 0a 7d 0d 0a 0d 0a  setFlag);..}....
4d00: 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74  SQLITE_API const
4d10: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
4d20: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
4d30: 63 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65  column_text_inte
4d40: 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  rop(sqlite3_stmt
4d50: 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c   *stmt, int iCol
4d60: 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d  , int *plen)..{.
4d70: 0a 20 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  .  const unsigne
4d80: 64 20 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73  d char *pval = s
4d90: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
4da0: 78 74 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d  xt(stmt, iCol);.
4db0: 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c  .  if (plen) *pl
4dc0: 65 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  en = sqlite3_col
4dd0: 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2c 20  umn_bytes(stmt, 
4de0: 69 43 6f 6c 29 3b 0d 0a 20 20 72 65 74 75 72 6e  iCol);..  return
4df0: 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c   pval;..}....SQL
4e00: 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 76 6f  ITE_API const vo
4e10: 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69  id * WINAPI sqli
4e20: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31  te3_column_text1
4e30: 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  6_interop(sqlite
4e40: 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e  3_stmt *stmt, in
4e50: 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65  t iCol, int *ple
4e60: 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 76  n)..{..  const v
4e70: 6f 69 64 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69  oid *pval = sqli
4e80: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31  te3_column_text1
4e90: 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a  6(stmt, iCol);..
4ea0: 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65    if (plen) *ple
4eb0: 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  n = sqlite3_colu
4ec0: 6d 6e 5f 62 79 74 65 73 31 36 28 73 74 6d 74 2c  mn_bytes16(stmt,
4ed0: 20 69 43 6f 6c 29 3b 0d 0a 20 20 72 65 74 75 72   iCol);..  retur
4ee0: 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51  n pval;..}....SQ
4ef0: 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e  LITE_API int WIN
4f00: 41 50 49 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  API sqlite3_fina
4f10: 6c 69 7a 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c  lize_interop(sql
4f20: 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 29  ite3_stmt *stmt)
4f30: 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72 65 74 3b 0d  ..{..  int ret;.
4f40: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 49 4e  .#if !defined(IN
4f50: 54 45 52 4f 50 5f 4c 45 47 41 43 59 5f 43 4c 4f  TEROP_LEGACY_CLO
4f60: 53 45 29 20 26 26 20 53 51 4c 49 54 45 5f 56 45  SE) && SQLITE_VE
4f70: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20  RSION_NUMBER >= 
4f80: 33 30 30 37 30 31 34 0d 0a 0d 0a 23 69 66 20 64  3007014....#if d
4f90: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44  efined(INTEROP_D
4fa0: 45 42 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f  EBUG) && (INTERO
4fb0: 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f  P_DEBUG & INTERO
4fc0: 50 5f 44 45 42 55 47 5f 46 49 4e 41 4c 49 5a 45  P_DEBUG_FINALIZE
4fd0: 29 0d 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28  )..  Vdbe *p = (
4fe0: 56 64 62 65 20 2a 29 73 74 6d 74 3b 0d 0a 20 20  Vdbe *)stmt;..  
4ff0: 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 20  sqlite3 *db = p 
5000: 3f 20 70 2d 3e 64 62 20 3a 20 30 3b 0d 0a 20 20  ? p->db : 0;..  
5010: 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65  sqlite3InteropDe
5020: 62 75 67 28 22 73 71 6c 69 74 65 33 5f 66 69 6e  bug("sqlite3_fin
5030: 61 6c 69 7a 65 5f 69 6e 74 65 72 6f 70 28 29 3a  alize_interop():
5040: 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33   calling sqlite3
5050: 5f 66 69 6e 61 6c 69 7a 65 28 25 70 2c 20 25 70  _finalize(%p, %p
5060: 29 2e 2e 2e 5c 6e 22 2c 20 64 62 2c 20 73 74 6d  )...\n", db, stm
5070: 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  t);..#endif.... 
5080: 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 66   ret = sqlite3_f
5090: 69 6e 61 6c 69 7a 65 28 73 74 6d 74 29 3b 0d 0a  inalize(stmt);..
50a0: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
50b0: 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20  TEROP_DEBUG) && 
50c0: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26  (INTEROP_DEBUG &
50d0: 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 46   INTEROP_DEBUG_F
50e0: 49 4e 41 4c 49 5a 45 29 0d 0a 20 20 73 71 6c 69  INALIZE)..  sqli
50f0: 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28  te3InteropDebug(
5100: 22 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a  "sqlite3_finaliz
5110: 65 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c  e_interop(): sql
5120: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 25 70  ite3_finalize(%p
5130: 2c 20 25 70 29 20 72 65 74 75 72 6e 65 64 20 25  , %p) returned %
5140: 64 2e 5c 6e 22 2c 20 64 62 2c 20 73 74 6d 74 2c  d.\n", db, stmt,
5150: 20 72 65 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a   ret);..#endif..
5160: 0d 0a 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0d  ..  return ret;.
5170: 0a 23 65 6c 73 65 0d 0a 20 20 56 64 62 65 20 2a  .#else..  Vdbe *
5180: 70 3b 0d 0a 20 20 72 65 74 20 3d 20 53 51 4c 49  p;..  ret = SQLI
5190: 54 45 5f 4f 4b 3b 0d 0a 0d 0a 20 20 70 20 3d 20  TE_OK;....  p = 
51a0: 28 56 64 62 65 20 2a 29 73 74 6d 74 3b 0d 0a 20  (Vdbe *)stmt;.. 
51b0: 20 69 66 20 28 70 29 0d 0a 20 20 7b 0d 0a 20 20   if (p)..  {..  
51c0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20    sqlite3 *db = 
51d0: 70 2d 3e 64 62 3b 0d 0a 0d 0a 20 20 20 20 69 66  p->db;....    if
51e0: 20 28 64 62 20 21 3d 20 4e 55 4c 4c 29 0d 0a 20   (db != NULL).. 
51f0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74       sqlite3_mut
5200: 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74  ex_enter(db->mut
5210: 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 69 66 20 28  ex);....    if (
5220: 28 70 2d 3e 6d 61 67 69 63 20 3d 3d 20 56 44 42  (p->magic == VDB
5230: 45 5f 4d 41 47 49 43 5f 44 45 41 44 29 20 26 26  E_MAGIC_DEAD) &&
5240: 20 28 64 62 20 3d 3d 20 4e 55 4c 4c 29 29 0d 0a   (db == NULL))..
5250: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 73 71 6c      {..      sql
5260: 69 74 65 33 44 62 46 72 65 65 5f 69 6e 74 65 72  ite3DbFree_inter
5270: 6f 70 28 64 62 2c 20 70 29 3b 0d 0a 20 20 20 20  op(db, p);..    
5280: 7d 0d 0a 20 20 20 20 65 6c 73 65 0d 0a 20 20 20  }..    else..   
5290: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 20 3d 20   {..      ret = 
52a0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
52b0: 28 73 74 6d 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a  (stmt);..    }..
52c0: 0d 0a 20 20 20 20 69 66 20 28 64 62 20 21 3d 20  ..    if (db != 
52d0: 4e 55 4c 4c 29 0d 0a 20 20 20 20 20 20 73 71 6c  NULL)..      sql
52e0: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
52f0: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20  (db->mutex);..  
5300: 7d 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 72 65  }....  return re
5310: 74 3b 0d 0a 23 65 6e 64 69 66 0d 0a 7d 0d 0a 0d  t;..#endif..}...
5320: 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20  .SQLITE_API int 
5330: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 62  WINAPI sqlite3_b
5340: 61 63 6b 75 70 5f 66 69 6e 69 73 68 5f 69 6e 74  ackup_finish_int
5350: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 62 61 63  erop(sqlite3_bac
5360: 6b 75 70 20 2a 70 29 0d 0a 7b 0d 0a 20 20 69 6e  kup *p)..{..  in
5370: 74 20 72 65 74 3b 0d 0a 0d 0a 23 69 66 20 64 65  t ret;....#if de
5380: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45  fined(INTEROP_DE
5390: 42 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50  BUG) && (INTEROP
53a0: 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50  _DEBUG & INTEROP
53b0: 5f 44 45 42 55 47 5f 42 41 43 4b 55 50 5f 46 49  _DEBUG_BACKUP_FI
53c0: 4e 49 53 48 29 0d 0a 20 20 73 71 6c 69 74 65 33  NISH)..  sqlite3
53d0: 2a 20 70 44 65 73 74 44 62 20 3d 20 70 20 3f 20  * pDestDb = p ? 
53e0: 70 2d 3e 70 44 65 73 74 44 62 20 3a 20 30 3b 0d  p->pDestDb : 0;.
53f0: 0a 20 20 73 71 6c 69 74 65 33 2a 20 70 53 72 63  .  sqlite3* pSrc
5400: 44 62 20 3d 20 70 20 3f 20 70 2d 3e 70 53 72 63  Db = p ? p->pSrc
5410: 44 62 20 3a 20 30 3b 0d 0a 20 20 73 71 6c 69 74  Db : 0;..  sqlit
5420: 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22  e3InteropDebug("
5430: 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66  sqlite3_backup_f
5440: 69 6e 69 73 68 5f 69 6e 74 65 72 6f 70 28 29 3a  inish_interop():
5450: 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33   calling sqlite3
5460: 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28 25  _backup_finish(%
5470: 70 2c 20 25 70 2c 20 25 70 29 2e 2e 2e 5c 6e 22  p, %p, %p)...\n"
5480: 2c 20 70 44 65 73 74 44 62 2c 20 70 53 72 63 44  , pDestDb, pSrcD
5490: 62 2c 20 70 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  b, p);..#endif..
54a0: 0d 0a 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65  ..  ret = sqlite
54b0: 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28  3_backup_finish(
54c0: 70 29 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e  p);....#if defin
54d0: 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  ed(INTEROP_DEBUG
54e0: 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45  ) && (INTEROP_DE
54f0: 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45  BUG & INTEROP_DE
5500: 42 55 47 5f 42 41 43 4b 55 50 5f 46 49 4e 49 53  BUG_BACKUP_FINIS
5510: 48 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74  H)..  sqlite3Int
5520: 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74  eropDebug("sqlit
5530: 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68  e3_backup_finish
5540: 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c 69  _interop(): sqli
5550: 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73  te3_backup_finis
5560: 68 28 25 70 2c 20 25 70 2c 20 25 70 29 20 72 65  h(%p, %p, %p) re
5570: 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 70  turned %d.\n", p
5580: 44 65 73 74 44 62 2c 20 70 53 72 63 44 62 2c 20  DestDb, pSrcDb, 
5590: 70 2c 20 72 65 74 29 3b 0d 0a 23 65 6e 64 69 66  p, ret);..#endif
55a0: 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 72 65 74  ....  return ret
55b0: 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  ;..}....SQLITE_A
55c0: 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71  PI int WINAPI sq
55d0: 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65  lite3_reset_inte
55e0: 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  rop(sqlite3_stmt
55f0: 20 2a 73 74 6d 74 29 0d 0a 7b 0d 0a 20 20 69 6e   *stmt)..{..  in
5600: 74 20 72 65 74 3b 0d 0a 23 69 66 20 21 64 65 66  t ret;..#if !def
5610: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 4c 45 47  ined(INTEROP_LEG
5620: 41 43 59 5f 43 4c 4f 53 45 29 20 26 26 20 53 51  ACY_CLOSE) && SQ
5630: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
5640: 42 45 52 20 3e 3d 20 33 30 30 37 30 31 34 0d 0a  BER >= 3007014..
5650: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
5660: 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20  TEROP_DEBUG) && 
5670: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26  (INTEROP_DEBUG &
5680: 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 52   INTEROP_DEBUG_R
5690: 45 53 45 54 29 0d 0a 20 20 73 71 6c 69 74 65 33  ESET)..  sqlite3
56a0: 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71  InteropDebug("sq
56b0: 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65  lite3_reset_inte
56c0: 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73  rop(): calling s
56d0: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 25 70 29  qlite3_reset(%p)
56e0: 2e 2e 2e 5c 6e 22 2c 20 73 74 6d 74 29 3b 0d 0a  ...\n", stmt);..
56f0: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 20  #endif....  ret 
5700: 3d 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28  = sqlite3_reset(
5710: 73 74 6d 74 29 3b 0d 0a 0d 0a 23 69 66 20 64 65  stmt);....#if de
5720: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45  fined(INTEROP_DE
5730: 42 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50  BUG) && (INTEROP
5740: 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50  _DEBUG & INTEROP
5750: 5f 44 45 42 55 47 5f 52 45 53 45 54 29 0d 0a 20  _DEBUG_RESET).. 
5760: 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44   sqlite3InteropD
5770: 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 72 65  ebug("sqlite3_re
5780: 73 65 74 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73  set_interop(): s
5790: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 25 70 29  qlite3_reset(%p)
57a0: 20 72 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22   returned %d.\n"
57b0: 2c 20 73 74 6d 74 2c 20 72 65 74 29 3b 0d 0a 23  , stmt, ret);..#
57c0: 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 75 72  endif....  retur
57d0: 6e 20 72 65 74 3b 0d 0a 23 65 6c 73 65 0d 0a 20  n ret;..#else.. 
57e0: 20 69 66 20 28 73 74 6d 74 20 26 26 20 28 28 56   if (stmt && ((V
57f0: 64 62 65 20 2a 29 73 74 6d 74 29 2d 3e 6d 61 67  dbe *)stmt)->mag
5800: 69 63 20 3d 3d 20 56 44 42 45 5f 4d 41 47 49 43  ic == VDBE_MAGIC
5810: 5f 44 45 41 44 29 20 72 65 74 75 72 6e 20 53 51  _DEAD) return SQ
5820: 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0d 0a 20 20  LITE_SCHEMA;..  
5830: 72 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 72 65  ret = sqlite3_re
5840: 73 65 74 28 73 74 6d 74 29 3b 0d 0a 20 20 72 65  set(stmt);..  re
5850: 74 75 72 6e 20 72 65 74 3b 0d 0a 23 65 6e 64 69  turn ret;..#endi
5860: 66 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  f..}....SQLITE_A
5870: 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71  PI int WINAPI sq
5880: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
5890: 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 73 71  ction_interop(sq
58a0: 6c 69 74 65 33 20 2a 70 73 71 6c 2c 20 63 6f 6e  lite3 *psql, con
58b0: 73 74 20 63 68 61 72 20 2a 7a 46 75 6e 63 74 69  st char *zFuncti
58c0: 6f 6e 4e 61 6d 65 2c 20 69 6e 74 20 6e 41 72 67  onName, int nArg
58d0: 2c 20 69 6e 74 20 65 54 65 78 74 52 65 70 2c 20  , int eTextRep, 
58e0: 76 6f 69 64 20 2a 70 76 55 73 65 72 2c 20 53 51  void *pvUser, SQ
58f0: 4c 49 54 45 55 53 45 52 46 55 4e 43 20 66 75 6e  LITEUSERFUNC fun
5900: 63 2c 20 53 51 4c 49 54 45 55 53 45 52 46 55 4e  c, SQLITEUSERFUN
5910: 43 20 66 75 6e 63 73 74 65 70 2c 20 53 51 4c 49  C funcstep, SQLI
5920: 54 45 46 55 4e 43 46 49 4e 41 4c 20 66 75 6e 63  TEFUNCFINAL func
5930: 66 69 6e 61 6c 2c 20 69 6e 74 20 6e 65 65 64 43  final, int needC
5940: 6f 6c 6c 53 65 71 29 0d 0a 7b 0d 0a 20 20 69 6e  ollSeq)..{..  in
5950: 74 20 6e 3b 0d 0a 0d 0a 20 20 69 66 20 28 65 54  t n;....  if (eT
5960: 65 78 74 52 65 70 20 3d 3d 20 53 51 4c 49 54 45  extRep == SQLITE
5970: 5f 55 54 46 31 36 29 0d 0a 20 20 20 20 65 54 65  _UTF16)..    eTe
5980: 78 74 52 65 70 20 3d 20 53 51 4c 49 54 45 5f 55  xtRep = SQLITE_U
5990: 54 46 31 36 4e 41 54 49 56 45 3b 0d 0a 0d 0a 20  TF16NATIVE;.... 
59a0: 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65   n = sqlite3_cre
59b0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 70 73 71  ate_function(psq
59c0: 6c 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65  l, zFunctionName
59d0: 2c 20 6e 41 72 67 2c 20 65 54 65 78 74 52 65 70  , nArg, eTextRep
59e0: 2c 20 70 76 55 73 65 72 2c 20 66 75 6e 63 2c 20  , pvUser, func, 
59f0: 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69  funcstep, funcfi
5a00: 6e 61 6c 29 3b 0d 0a 20 20 69 66 20 28 6e 20 3d  nal);..  if (n =
5a10: 3d 20 53 51 4c 49 54 45 5f 4f 4b 29 0d 0a 20 20  = SQLITE_OK)..  
5a20: 7b 0d 0a 20 20 20 20 69 66 20 28 6e 65 65 64 43  {..    if (needC
5a30: 6f 6c 6c 53 65 71 29 0d 0a 20 20 20 20 7b 0d 0a  ollSeq)..    {..
5a40: 20 20 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70        FuncDef *p
5a50: 46 75 6e 63 20 3d 20 73 71 6c 69 74 65 33 46 69  Func = sqlite3Fi
5a60: 6e 64 46 75 6e 63 74 69 6f 6e 28 70 73 71 6c 2c  ndFunction(psql,
5a70: 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20   zFunctionName, 
5a80: 73 74 72 6c 65 6e 28 7a 46 75 6e 63 74 69 6f 6e  strlen(zFunction
5a90: 4e 61 6d 65 29 2c 20 6e 41 72 67 2c 20 65 54 65  Name), nArg, eTe
5aa0: 78 74 52 65 70 2c 20 30 29 3b 0d 0a 20 20 20 20  xtRep, 0);..    
5ab0: 20 20 69 66 28 20 70 46 75 6e 63 20 29 0d 0a 20    if( pFunc ).. 
5ac0: 20 20 20 20 20 7b 0d 0a 23 69 66 20 53 51 4c 49       {..#if SQLI
5ad0: 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45  TE_VERSION_NUMBE
5ae0: 52 20 3e 3d 20 33 30 30 38 30 30 31 0d 0a 20 20  R >= 3008001..  
5af0: 20 20 20 20 20 20 70 46 75 6e 63 2d 3e 66 75 6e        pFunc->fun
5b00: 63 46 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45  cFlags |= SQLITE
5b10: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 3b 0d  _FUNC_NEEDCOLL;.
5b20: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
5b30: 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20 7c 3d 20  pFunc->flags |= 
5b40: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
5b50: 43 4f 4c 4c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  COLL;..#endif.. 
5b60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
5b70: 20 7d 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 6e   }....  return n
5b80: 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  ;..}....SQLITE_A
5b90: 50 49 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73  PI void WINAPI s
5ba0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75  qlite3_value_dou
5bb0: 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  ble_interop(sqli
5bc0: 74 65 33 5f 76 61 6c 75 65 20 2a 70 76 61 6c 2c  te3_value *pval,
5bd0: 20 64 6f 75 62 6c 65 20 2a 76 61 6c 29 0d 0a 7b   double *val)..{
5be0: 0d 0a 20 20 69 66 20 28 21 76 61 6c 29 20 72 65  ..  if (!val) re
5bf0: 74 75 72 6e 3b 0d 0a 20 20 2a 76 61 6c 20 3d 20  turn;..  *val = 
5c00: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f  sqlite3_value_do
5c10: 75 62 6c 65 28 70 76 61 6c 29 3b 0d 0a 7d 0d 0a  uble(pval);..}..
5c20: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69  ..SQLITE_API voi
5c30: 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  d WINAPI sqlite3
5c40: 5f 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e 74  _value_int64_int
5c50: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 76 61 6c  erop(sqlite3_val
5c60: 75 65 20 2a 70 76 61 6c 2c 20 73 71 6c 69 74 65  ue *pval, sqlite
5c70: 5f 69 6e 74 36 34 20 2a 76 61 6c 29 0d 0a 7b 0d  _int64 *val)..{.
5c80: 0a 20 20 69 66 20 28 21 76 61 6c 29 20 72 65 74  .  if (!val) ret
5c90: 75 72 6e 3b 0d 0a 20 20 2a 76 61 6c 20 3d 20 73  urn;..  *val = s
5ca0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74  qlite3_value_int
5cb0: 36 34 28 70 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a  64(pval);..}....
5cc0: 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74  SQLITE_API const
5cd0: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
5ce0: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
5cf0: 76 61 6c 75 65 5f 74 65 78 74 5f 69 6e 74 65 72  value_text_inter
5d00: 6f 70 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  op(sqlite3_value
5d10: 20 2a 76 61 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e   *val, int *plen
5d20: 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 75 6e  )..{..  const un
5d30: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70 76 61  signed char *pva
5d40: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  l = sqlite3_valu
5d50: 65 5f 74 65 78 74 28 76 61 6c 29 3b 0d 0a 20 20  e_text(val);..  
5d60: 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20  if (plen) *plen 
5d70: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
5d80: 62 79 74 65 73 28 76 61 6c 29 3b 0d 0a 20 20 72  bytes(val);..  r
5d90: 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a  eturn pval;..}..
5da0: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e  ..SQLITE_API con
5db0: 73 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49  st void * WINAPI
5dc0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
5dd0: 65 78 74 31 36 5f 69 6e 74 65 72 6f 70 28 73 71  ext16_interop(sq
5de0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 76 61 6c  lite3_value *val
5df0: 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d  , int *plen)..{.
5e00: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  .  const void *p
5e10: 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61  val = sqlite3_va
5e20: 6c 75 65 5f 74 65 78 74 31 36 28 76 61 6c 29 3b  lue_text16(val);
5e30: 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70  ..  if (plen) *p
5e40: 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 5f 76 61  len = sqlite3_va
5e50: 6c 75 65 5f 62 79 74 65 73 31 36 28 76 61 6c 29  lue_bytes16(val)
5e60: 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c  ;..  return pval
5e70: 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  ;..}....SQLITE_A
5e80: 50 49 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73  PI void WINAPI s
5e90: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f  qlite3_result_do
5ea0: 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c  uble_interop(sql
5eb0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 63  ite3_context *pc
5ec0: 74 78 2c 20 64 6f 75 62 6c 65 20 2a 76 61 6c 29  tx, double *val)
5ed0: 0d 0a 7b 0d 0a 20 20 69 66 20 28 21 76 61 6c 29  ..{..  if (!val)
5ee0: 20 72 65 74 75 72 6e 3b 0d 0a 20 20 73 71 6c 69   return;..  sqli
5ef0: 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c  te3_result_doubl
5f00: 65 28 70 63 74 78 2c 20 2a 76 61 6c 29 3b 0d 0a  e(pctx, *val);..
5f10: 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20  }....SQLITE_API 
5f20: 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69  void WINAPI sqli
5f30: 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34  te3_result_int64
5f40: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
5f50: 5f 63 6f 6e 74 65 78 74 20 2a 70 63 74 78 2c 20  _context *pctx, 
5f60: 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a 76 61  sqlite_int64 *va
5f70: 6c 29 0d 0a 7b 0d 0a 20 20 69 66 20 28 21 76 61  l)..{..  if (!va
5f80: 6c 29 20 72 65 74 75 72 6e 3b 0d 0a 20 20 73 71  l) return;..  sq
5f90: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
5fa0: 36 34 28 70 63 74 78 2c 20 2a 76 61 6c 29 3b 0d  64(pctx, *val);.
5fb0: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
5fc0: 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69   int WINAPI sqli
5fd0: 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c  te3_context_coll
5fe0: 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70 28  compare_interop(
5ff0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
6000: 2a 63 74 78 2c 20 63 6f 6e 73 74 20 76 6f 69 64  *ctx, const void
6010: 20 2a 70 31 2c 20 69 6e 74 20 70 31 6c 65 6e 2c   *p1, int p1len,
6020: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 32 2c   const void *p2,
6030: 20 69 6e 74 20 70 32 6c 65 6e 29 0d 0a 7b 0d 0a   int p2len)..{..
6040: 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49  #if SQLITE_VERSI
6050: 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30  ON_NUMBER >= 300
6060: 38 30 30 37 0d 0a 20 20 43 6f 6c 6c 53 65 71 20  8007..  CollSeq 
6070: 2a 70 43 6f 6c 6c 20 3d 20 63 74 78 20 3f 20 73  *pColl = ctx ? s
6080: 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c  qlite3GetFuncCol
6090: 6c 53 65 71 28 63 74 78 29 20 3a 20 30 3b 0d 0a  lSeq(ctx) : 0;..
60a0: 23 65 6c 73 65 0d 0a 20 20 43 6f 6c 6c 53 65 71  #else..  CollSeq
60b0: 20 2a 70 43 6f 6c 6c 20 3d 20 63 74 78 20 3f 20   *pColl = ctx ? 
60c0: 63 74 78 2d 3e 70 43 6f 6c 6c 20 3a 20 30 3b 0d  ctx->pColl : 0;.
60d0: 0a 23 65 6e 64 69 66 0d 0a 20 20 69 66 20 28 21  .#endif..  if (!
60e0: 63 74 78 20 7c 7c 20 21 63 74 78 2d 3e 70 46 75  ctx || !ctx->pFu
60f0: 6e 63 29 20 72 65 74 75 72 6e 20 34 3b 20 2f 2a  nc) return 4; /*
6100: 20 45 52 52 4f 52 20 2a 2f 0d 0a 20 20 69 66 20   ERROR */..  if 
6110: 28 21 70 43 6f 6c 6c 20 7c 7c 20 21 70 43 6f 6c  (!pColl || !pCol
6120: 6c 2d 3e 78 43 6d 70 29 20 72 65 74 75 72 6e 20  l->xCmp) return 
6130: 33 3b 20 2f 2a 20 45 52 52 4f 52 20 2a 2f 0d 0a  3; /* ERROR */..
6140: 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49  #if SQLITE_VERSI
6150: 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30  ON_NUMBER >= 300
6160: 38 30 30 31 0d 0a 20 20 69 66 20 28 28 63 74 78  8001..  if ((ctx
6170: 2d 3e 70 46 75 6e 63 2d 3e 66 75 6e 63 46 6c 61  ->pFunc->funcFla
6180: 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43  gs & SQLITE_FUNC
6190: 5f 4e 45 45 44 43 4f 4c 4c 29 20 3d 3d 20 30 29  _NEEDCOLL) == 0)
61a0: 20 72 65 74 75 72 6e 20 32 3b 20 2f 2a 20 45 52   return 2; /* ER
61b0: 52 4f 52 20 2a 2f 0d 0a 23 65 6c 73 65 0d 0a 20  ROR */..#else.. 
61c0: 20 69 66 20 28 28 63 74 78 2d 3e 70 46 75 6e 63   if ((ctx->pFunc
61d0: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
61e0: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 20  _FUNC_NEEDCOLL) 
61f0: 3d 3d 20 30 29 20 72 65 74 75 72 6e 20 32 3b 20  == 0) return 2; 
6200: 2f 2a 20 45 52 52 4f 52 20 2a 2f 0d 0a 23 65 6e  /* ERROR */..#en
6210: 64 69 66 0d 0a 20 20 72 65 74 75 72 6e 20 70 43  dif..  return pC
6220: 6f 6c 6c 2d 3e 78 43 6d 70 28 70 43 6f 6c 6c 2d  oll->xCmp(pColl-
6230: 3e 70 55 73 65 72 2c 20 70 31 6c 65 6e 2c 20 70  >pUser, p1len, p
6240: 31 2c 20 70 32 6c 65 6e 2c 20 70 32 29 3b 0d 0a  1, p2len, p2);..
6250: 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20  }....SQLITE_API 
6260: 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 57 49 4e  const char * WIN
6270: 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  API sqlite3_cont
6280: 65 78 74 5f 63 6f 6c 6c 73 65 71 5f 69 6e 74 65  ext_collseq_inte
6290: 72 6f 70 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  rop(sqlite3_cont
62a0: 65 78 74 20 2a 63 74 78 2c 20 69 6e 74 20 2a 70  ext *ctx, int *p
62b0: 74 79 70 65 2c 20 69 6e 74 20 2a 65 6e 63 2c 20  type, int *enc, 
62c0: 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 23  int *plen)..{..#
62d0: 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  if SQLITE_VERSIO
62e0: 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 38  N_NUMBER >= 3008
62f0: 30 30 37 0d 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  007..  CollSeq *
6300: 70 43 6f 6c 6c 20 3d 20 63 74 78 20 3f 20 73 71  pColl = ctx ? sq
6310: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
6320: 53 65 71 28 63 74 78 29 20 3a 20 30 3b 0d 0a 23  Seq(ctx) : 0;..#
6330: 65 6c 73 65 0d 0a 20 20 43 6f 6c 6c 53 65 71 20  else..  CollSeq 
6340: 2a 70 43 6f 6c 6c 20 3d 20 63 74 78 20 3f 20 63  *pColl = ctx ? c
6350: 74 78 2d 3e 70 43 6f 6c 6c 20 3a 20 30 3b 0d 0a  tx->pColl : 0;..
6360: 23 65 6e 64 69 66 0d 0a 20 20 69 66 20 28 70 74  #endif..  if (pt
6370: 79 70 65 29 20 2a 70 74 79 70 65 20 3d 20 30 3b  ype) *ptype = 0;
6380: 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70  ..  if (plen) *p
6390: 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 69 66 20 28  len = 0;..  if (
63a0: 65 6e 63 29 20 2a 65 6e 63 20 3d 20 30 3b 0d 0a  enc) *enc = 0;..
63b0: 0d 0a 20 20 69 66 20 28 21 63 74 78 20 7c 7c 20  ..  if (!ctx || 
63c0: 21 63 74 78 2d 3e 70 46 75 6e 63 29 20 72 65 74  !ctx->pFunc) ret
63d0: 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 23 69 66 20 53  urn NULL;..#if S
63e0: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
63f0: 4d 42 45 52 20 3e 3d 20 33 30 30 38 30 30 31 0d  MBER >= 3008001.
6400: 0a 20 20 69 66 20 28 28 63 74 78 2d 3e 70 46 75  .  if ((ctx->pFu
6410: 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26 20  nc->funcFlags & 
6420: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
6430: 43 4f 4c 4c 29 20 3d 3d 20 30 29 20 72 65 74 75  COLL) == 0) retu
6440: 72 6e 20 4e 55 4c 4c 3b 0d 0a 23 65 6c 73 65 0d  rn NULL;..#else.
6450: 0a 20 20 69 66 20 28 28 63 74 78 2d 3e 70 46 75  .  if ((ctx->pFu
6460: 6e 63 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  nc->flags & SQLI
6470: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
6480: 29 20 3d 3d 20 30 29 20 72 65 74 75 72 6e 20 4e  ) == 0) return N
6490: 55 4c 4c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  ULL;..#endif....
64a0: 20 20 69 66 20 28 70 43 6f 6c 6c 29 0d 0a 20 20    if (pColl)..  
64b0: 7b 0d 0a 20 20 20 20 69 66 20 28 65 6e 63 29 20  {..    if (enc) 
64c0: 2a 65 6e 63 20 3d 20 70 43 6f 6c 6c 2d 3e 65 6e  *enc = pColl->en
64d0: 63 3b 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 56  c;..#if SQLITE_V
64e0: 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3c 20  ERSION_NUMBER < 
64f0: 33 30 30 37 30 31 30 0d 0a 20 20 20 20 69 66 20  3007010..    if 
6500: 28 70 74 79 70 65 29 20 2a 70 74 79 70 65 20 3d  (ptype) *ptype =
6510: 20 70 43 6f 6c 6c 2d 3e 74 79 70 65 3b 0d 0a 23   pColl->type;..#
6520: 65 6e 64 69 66 0d 0a 20 20 20 20 69 66 20 28 70  endif..    if (p
6530: 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 70 43 6f  len) *plen = pCo
6540: 6c 6c 2d 3e 7a 4e 61 6d 65 20 3f 20 73 74 72 6c  ll->zName ? strl
6550: 65 6e 28 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 29  en(pColl->zName)
6560: 20 3a 20 30 3b 0d 0a 0d 0a 20 20 20 20 72 65 74   : 0;....    ret
6570: 75 72 6e 20 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65  urn pColl->zName
6580: 3b 0d 0a 20 20 7d 0d 0a 20 20 72 65 74 75 72 6e  ;..  }..  return
6590: 20 4e 55 4c 4c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c   NULL;..}....SQL
65a0: 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 63 68  ITE_API const ch
65b0: 61 72 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69  ar * WINAPI sqli
65c0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62  te3_column_datab
65d0: 61 73 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70  ase_name_interop
65e0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73  (sqlite3_stmt *s
65f0: 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69  tmt, int iCol, i
6600: 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20  nt *plen)..{..  
6610: 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 76 61 6c  const char *pval
6620: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
6630: 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 28  n_database_name(
6640: 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20  stmt, iCol);..  
6650: 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20  if (plen) *plen 
6660: 3d 20 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e 28  = pval ? strlen(
6670: 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65  pval) : 0;..  re
6680: 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d  turn pval;..}...
6690: 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73  .SQLITE_API cons
66a0: 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20  t void * WINAPI 
66b0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
66c0: 61 74 61 62 61 73 65 5f 6e 61 6d 65 31 36 5f 69  atabase_name16_i
66d0: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73  nterop(sqlite3_s
66e0: 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69  tmt *stmt, int i
66f0: 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d  Col, int *plen).
6700: 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  .{..  const void
6710: 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33   *pval = sqlite3
6720: 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65  _column_database
6730: 5f 6e 61 6d 65 31 36 28 73 74 6d 74 2c 20 69 43  _name16(stmt, iC
6740: 6f 6c 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e  ol);..  if (plen
6750: 29 20 2a 70 6c 65 6e 20 3d 20 70 76 61 6c 20 3f  ) *plen = pval ?
6760: 20 77 63 73 6c 65 6e 28 28 77 63 68 61 72 5f 74   wcslen((wchar_t
6770: 20 2a 29 70 76 61 6c 29 20 2a 20 73 69 7a 65 6f   *)pval) * sizeo
6780: 66 28 77 63 68 61 72 5f 74 29 20 3a 20 30 3b 0d  f(wchar_t) : 0;.
6790: 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d  .  return pval;.
67a0: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
67b0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 57 49   const char * WI
67c0: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c  NAPI sqlite3_col
67d0: 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f 69  umn_table_name_i
67e0: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73  nterop(sqlite3_s
67f0: 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69  tmt *stmt, int i
6800: 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d  Col, int *plen).
6810: 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  .{..  const char
6820: 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33   *pval = sqlite3
6830: 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61  _column_table_na
6840: 6d 65 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d  me(stmt, iCol);.
6850: 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c  .  if (plen) *pl
6860: 65 6e 20 3d 20 70 76 61 6c 20 3f 20 73 74 72 6c  en = pval ? strl
6870: 65 6e 28 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20  en(pval) : 0;.. 
6880: 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d   return pval;..}
6890: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63  ....SQLITE_API c
68a0: 6f 6e 73 74 20 76 6f 69 64 20 2a 20 57 49 4e 41  onst void * WINA
68b0: 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  PI sqlite3_colum
68c0: 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31 36 5f 69  n_table_name16_i
68d0: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73  nterop(sqlite3_s
68e0: 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69  tmt *stmt, int i
68f0: 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d  Col, int *plen).
6900: 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  .{..  const void
6910: 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33   *pval = sqlite3
6920: 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61  _column_table_na
6930: 6d 65 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29  me16(stmt, iCol)
6940: 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a  ;..  if (plen) *
6950: 70 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20 77 63  plen = pval ? wc
6960: 73 6c 65 6e 28 28 77 63 68 61 72 5f 74 20 2a 29  slen((wchar_t *)
6970: 70 76 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77  pval) * sizeof(w
6980: 63 68 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 20 20  char_t) : 0;..  
6990: 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d  return pval;..}.
69a0: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f  ...SQLITE_API co
69b0: 6e 73 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50  nst char * WINAP
69c0: 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  I sqlite3_column
69d0: 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f 69 6e 74  _origin_name_int
69e0: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
69f0: 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f  t *stmt, int iCo
6a00: 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b  l, int *plen)..{
6a10: 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ..  const char *
6a20: 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  pval = sqlite3_c
6a30: 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d  olumn_origin_nam
6a40: 65 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a  e(stmt, iCol);..
6a50: 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65    if (plen) *ple
6a60: 6e 20 3d 20 70 76 61 6c 20 3f 20 73 74 72 6c 65  n = pval ? strle
6a70: 6e 28 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20  n(pval) : 0;..  
6a80: 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d  return pval;..}.
6a90: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f  ...SQLITE_API co
6aa0: 6e 73 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50  nst void * WINAP
6ab0: 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  I sqlite3_column
6ac0: 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 31 36 5f 69  _origin_name16_i
6ad0: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73  nterop(sqlite3_s
6ae0: 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69  tmt *stmt, int i
6af0: 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d  Col, int *plen).
6b00: 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  .{..  const void
6b10: 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33   *pval = sqlite3
6b20: 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e  _column_origin_n
6b30: 61 6d 65 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c  ame16(stmt, iCol
6b40: 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20  );..  if (plen) 
6b50: 2a 70 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20 77  *plen = pval ? w
6b60: 63 73 6c 65 6e 28 28 77 63 68 61 72 5f 74 20 2a  cslen((wchar_t *
6b70: 29 70 76 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28  )pval) * sizeof(
6b80: 77 63 68 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 20  wchar_t) : 0;.. 
6b90: 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d   return pval;..}
6ba0: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69  ....SQLITE_API i
6bb0: 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  nt WINAPI sqlite
6bc0: 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d  3_table_column_m
6bd0: 65 74 61 64 61 74 61 5f 69 6e 74 65 72 6f 70 28  etadata_interop(
6be0: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e  sqlite3 *db, con
6bf0: 73 74 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d 65  st char *zDbName
6c00: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54  , const char *zT
6c10: 61 62 6c 65 4e 61 6d 65 2c 20 63 6f 6e 73 74 20  ableName, const 
6c20: 63 68 61 72 20 2a 7a 43 6f 6c 75 6d 6e 4e 61 6d  char *zColumnNam
6c30: 65 2c 20 63 68 61 72 20 2a 2a 70 7a 44 61 74 61  e, char **pzData
6c40: 54 79 70 65 2c 20 63 68 61 72 20 2a 2a 70 7a 43  Type, char **pzC
6c50: 6f 6c 6c 53 65 71 2c 20 69 6e 74 20 2a 70 4e 6f  ollSeq, int *pNo
6c60: 74 4e 75 6c 6c 2c 20 69 6e 74 20 2a 70 50 72 69  tNull, int *pPri
6c70: 6d 61 72 79 4b 65 79 2c 20 69 6e 74 20 2a 70 41  maryKey, int *pA
6c80: 75 74 6f 69 6e 63 2c 20 69 6e 74 20 2a 70 64 74  utoinc, int *pdt
6c90: 4c 65 6e 2c 20 69 6e 74 20 2a 70 63 73 4c 65 6e  Len, int *pcsLen
6ca0: 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 6e 3b 0d 0a  )..{..  int n;..
6cb0: 0d 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f  ..  n = sqlite3_
6cc0: 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74  table_column_met
6cd0: 61 64 61 74 61 28 64 62 2c 20 7a 44 62 4e 61 6d  adata(db, zDbNam
6ce0: 65 2c 20 7a 54 61 62 6c 65 4e 61 6d 65 2c 20 7a  e, zTableName, z
6cf0: 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 70 7a 44 61  ColumnName, pzDa
6d00: 74 61 54 79 70 65 2c 20 70 7a 43 6f 6c 6c 53 65  taType, pzCollSe
6d10: 71 2c 20 70 4e 6f 74 4e 75 6c 6c 2c 20 70 50 72  q, pNotNull, pPr
6d20: 69 6d 61 72 79 4b 65 79 2c 20 70 41 75 74 6f 69  imaryKey, pAutoi
6d30: 6e 63 29 3b 0d 0a 0d 0a 20 20 69 66 20 28 70 64  nc);....  if (pd
6d40: 74 4c 65 6e 29 20 2a 70 64 74 4c 65 6e 20 3d 20  tLen) *pdtLen = 
6d50: 28 70 7a 44 61 74 61 54 79 70 65 20 26 26 20 2a  (pzDataType && *
6d60: 70 7a 44 61 74 61 54 79 70 65 29 20 3f 20 73 74  pzDataType) ? st
6d70: 72 6c 65 6e 28 2a 70 7a 44 61 74 61 54 79 70 65  rlen(*pzDataType
6d80: 29 20 3a 20 30 3b 0d 0a 20 20 69 66 20 28 70 63  ) : 0;..  if (pc
6d90: 73 4c 65 6e 29 20 2a 70 63 73 4c 65 6e 20 3d 20  sLen) *pcsLen = 
6da0: 28 70 7a 43 6f 6c 6c 53 65 71 20 26 26 20 2a 70  (pzCollSeq && *p
6db0: 7a 43 6f 6c 6c 53 65 71 29 20 3f 20 73 74 72 6c  zCollSeq) ? strl
6dc0: 65 6e 28 2a 70 7a 43 6f 6c 6c 53 65 71 29 20 3a  en(*pzCollSeq) :
6dd0: 20 30 3b 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20   0;....  return 
6de0: 6e 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f  n;..}....SQLITE_
6df0: 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73  API int WINAPI s
6e00: 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6c  qlite3_index_col
6e10: 75 6d 6e 5f 69 6e 66 6f 5f 69 6e 74 65 72 6f 70  umn_info_interop
6e20: 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f  (sqlite3 *db, co
6e30: 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 2c 20 63  nst char *zDb, c
6e40: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 49 6e 64 65  onst char *zInde
6e50: 78 4e 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61  xName, const cha
6e60: 72 20 2a 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20  r *zColumnName, 
6e70: 69 6e 74 20 2a 73 6f 72 74 4f 72 64 65 72 2c 20  int *sortOrder, 
6e80: 69 6e 74 20 2a 6f 6e 45 72 72 6f 72 2c 20 63 68  int *onError, ch
6e90: 61 72 20 2a 2a 70 7a 43 6f 6c 6c 2c 20 69 6e 74  ar **pzColl, int
6ea0: 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 49 6e   *plen)..{..  In
6eb0: 64 65 78 20 2a 70 49 64 78 3b 0d 0a 20 20 54 61  dex *pIdx;..  Ta
6ec0: 62 6c 65 20 2a 70 54 61 62 3b 0d 0a 20 20 69 6e  ble *pTab;..  in
6ed0: 74 20 6e 3b 0d 0a 0d 0a 20 20 69 66 20 28 21 64  t n;....  if (!d
6ee0: 62 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  b) return SQLITE
6ef0: 5f 45 52 52 4f 52 3b 0d 0a 20 20 73 71 6c 69 74  _ERROR;..  sqlit
6f00: 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64  e3_mutex_enter(d
6f10: 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 73 71  b->mutex);..  sq
6f20: 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65 72 41  lite3BtreeEnterA
6f30: 6c 6c 28 64 62 29 3b 0d 0a 0d 0a 20 20 70 49 64  ll(db);....  pId
6f40: 78 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 49  x = sqlite3FindI
6f50: 6e 64 65 78 28 64 62 2c 20 7a 49 6e 64 65 78 4e  ndex(db, zIndexN
6f60: 61 6d 65 2c 20 7a 44 62 29 3b 0d 0a 0d 0a 20 20  ame, zDb);....  
6f70: 73 71 6c 69 74 65 33 42 74 72 65 65 4c 65 61 76  sqlite3BtreeLeav
6f80: 65 41 6c 6c 28 64 62 29 3b 0d 0a 20 20 73 71 6c  eAll(db);..  sql
6f90: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
6fa0: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a  (db->mutex);....
6fb0: 20 20 69 66 20 28 21 70 49 64 78 29 20 72 65 74    if (!pIdx) ret
6fc0: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
6fd0: 3b 0d 0a 0d 0a 20 20 70 54 61 62 20 3d 20 70 49  ;....  pTab = pI
6fe0: 64 78 2d 3e 70 54 61 62 6c 65 3b 0d 0a 20 20 66  dx->pTable;..  f
6ff0: 6f 72 20 28 6e 20 3d 20 30 3b 20 6e 20 3c 20 70  or (n = 0; n < p
7000: 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 3b 20 6e 2b  Idx->nColumn; n+
7010: 2b 29 0d 0a 20 20 7b 0d 0a 20 20 20 20 69 6e 74  +)..  {..    int
7020: 20 63 6e 75 6d 20 3d 20 70 49 64 78 2d 3e 61 69   cnum = pIdx->ai
7030: 43 6f 6c 75 6d 6e 5b 6e 5d 3b 0d 0a 20 20 20 20  Column[n];..    
7040: 69 66 20 28 73 71 6c 69 74 65 33 53 74 72 49 43  if (sqlite3StrIC
7050: 6d 70 28 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e  mp(pTab->aCol[cn
7060: 75 6d 5d 2e 7a 4e 61 6d 65 2c 20 7a 43 6f 6c 75  um].zName, zColu
7070: 6d 6e 4e 61 6d 65 29 20 3d 3d 20 30 29 0d 0a 20  mnName) == 0).. 
7080: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28     {..      if (
7090: 20 73 6f 72 74 4f 72 64 65 72 20 29 20 2a 73 6f   sortOrder ) *so
70a0: 72 74 4f 72 64 65 72 20 3d 20 70 49 64 78 2d 3e  rtOrder = pIdx->
70b0: 61 53 6f 72 74 4f 72 64 65 72 5b 6e 5d 3b 0d 0a  aSortOrder[n];..
70c0: 20 20 20 20 20 20 69 66 20 28 20 70 7a 43 6f 6c        if ( pzCol
70d0: 6c 20 29 20 2a 70 7a 43 6f 6c 6c 20 3d 20 70 49  l ) *pzColl = pI
70e0: 64 78 2d 3e 61 7a 43 6f 6c 6c 5b 6e 5d 3b 0d 0a  dx->azColl[n];..
70f0: 20 20 20 20 20 20 69 66 20 28 20 70 6c 65 6e 20        if ( plen 
7100: 29 20 2a 70 6c 65 6e 20 3d 20 73 74 72 6c 65 6e  ) *plen = strlen
7110: 28 2a 70 7a 43 6f 6c 6c 29 3b 0d 0a 20 20 20 20  (*pzColl);..    
7120: 20 20 69 66 20 28 20 6f 6e 45 72 72 6f 72 20 29    if ( onError )
7130: 20 2a 6f 6e 45 72 72 6f 72 20 3d 20 70 49 64 78   *onError = pIdx
7140: 2d 3e 6f 6e 45 72 72 6f 72 3b 0d 0a 0d 0a 20 20  ->onError;....  
7150: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
7160: 45 5f 4f 4b 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20  E_OK;..    }..  
7170: 7d 0d 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49  }..  return SQLI
7180: 54 45 5f 45 52 52 4f 52 3b 0d 0a 7d 0d 0a 0d 0a  TE_ERROR;..}....
7190: 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57  SQLITE_API int W
71a0: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 74 61  INAPI sqlite3_ta
71b0: 62 6c 65 5f 63 75 72 73 6f 72 5f 69 6e 74 65 72  ble_cursor_inter
71c0: 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  op(sqlite3_stmt 
71d0: 2a 70 73 74 6d 74 2c 20 69 6e 74 20 69 44 62 2c  *pstmt, int iDb,
71e0: 20 50 67 6e 6f 20 74 61 62 6c 65 52 6f 6f 74 50   Pgno tableRootP
71f0: 61 67 65 29 0d 0a 7b 0d 0a 20 20 56 64 62 65 20  age)..{..  Vdbe 
7200: 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70 73 74  *p = (Vdbe *)pst
7210: 6d 74 3b 0d 0a 20 20 73 71 6c 69 74 65 33 20 2a  mt;..  sqlite3 *
7220: 64 62 20 3d 20 28 70 20 3d 3d 20 4e 55 4c 4c 29  db = (p == NULL)
7230: 20 3f 20 4e 55 4c 4c 20 3a 20 70 2d 3e 64 62 3b   ? NULL : p->db;
7240: 0d 0a 20 20 69 6e 74 20 6e 3b 0d 0a 20 20 69 6e  ..  int n;..  in
7250: 74 20 72 65 74 20 3d 20 2d 31 3b 20 2f 2a 20 4e  t ret = -1; /* N
7260: 4f 54 20 46 4f 55 4e 44 20 2a 2f 0d 0a 0d 0a 20  OT FOUND */.... 
7270: 20 69 66 20 28 21 70 20 7c 7c 20 21 64 62 29 20   if (!p || !db) 
7280: 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 20 20 73  return ret;..  s
7290: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
72a0: 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a  er(db->mutex);..
72b0: 20 20 66 6f 72 20 28 6e 20 3d 20 30 3b 20 6e 20    for (n = 0; n 
72c0: 3c 20 70 2d 3e 6e 43 75 72 73 6f 72 20 26 26 20  < p->nCursor && 
72d0: 70 2d 3e 61 70 43 73 72 5b 6e 5d 20 21 3d 20 4e  p->apCsr[n] != N
72e0: 55 4c 4c 3b 20 6e 2b 2b 29 0d 0a 20 20 7b 0d 0a  ULL; n++)..  {..
72f0: 20 20 20 20 69 66 20 28 70 2d 3e 61 70 43 73 72      if (p->apCsr
7300: 5b 6e 5d 2d 3e 69 73 54 61 62 6c 65 20 3d 3d 20  [n]->isTable == 
7310: 46 41 4c 53 45 29 20 63 6f 6e 74 69 6e 75 65 3b  FALSE) continue;
7320: 0d 0a 20 20 20 20 69 66 20 28 70 2d 3e 61 70 43  ..    if (p->apC
7330: 73 72 5b 6e 5d 2d 3e 69 44 62 20 21 3d 20 69 44  sr[n]->iDb != iD
7340: 62 29 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20  b) continue;..  
7350: 20 20 69 66 20 28 70 2d 3e 61 70 43 73 72 5b 6e    if (p->apCsr[n
7360: 5d 2d 3e 70 43 75 72 73 6f 72 2d 3e 70 67 6e 6f  ]->pCursor->pgno
7370: 52 6f 6f 74 20 3d 3d 20 74 61 62 6c 65 52 6f 6f  Root == tableRoo
7380: 74 50 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  tPage)..    {.. 
7390: 20 20 20 20 20 72 65 74 20 3d 20 6e 3b 0d 0a 20       ret = n;.. 
73a0: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
73b0: 20 7d 0d 0a 20 20 7d 0d 0a 20 20 73 71 6c 69 74   }..  }..  sqlit
73c0: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64  e3_mutex_leave(d
73d0: 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20 20  b->mutex);....  
73e0: 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a  return ret;..}..
73f0: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74  ..SQLITE_API int
7400: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
7410: 63 75 72 73 6f 72 5f 72 6f 77 69 64 5f 69 6e 74  cursor_rowid_int
7420: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
7430: 74 20 2a 70 73 74 6d 74 2c 20 69 6e 74 20 63 75  t *pstmt, int cu
7440: 72 73 6f 72 2c 20 73 71 6c 69 74 65 5f 69 6e 74  rsor, sqlite_int
7450: 36 34 20 2a 70 72 6f 77 69 64 29 0d 0a 7b 0d 0a  64 *prowid)..{..
7460: 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62    Vdbe *p = (Vdb
7470: 65 20 2a 29 70 73 74 6d 74 3b 0d 0a 20 20 73 71  e *)pstmt;..  sq
7480: 6c 69 74 65 33 20 2a 64 62 20 3d 20 28 70 20 3d  lite3 *db = (p =
7490: 3d 20 4e 55 4c 4c 29 20 3f 20 4e 55 4c 4c 20 3a  = NULL) ? NULL :
74a0: 20 70 2d 3e 64 62 3b 0d 0a 20 20 56 64 62 65 43   p->db;..  VdbeC
74b0: 75 72 73 6f 72 20 2a 70 43 3b 0d 0a 20 20 69 6e  ursor *pC;..  in
74c0: 74 20 72 65 74 20 3d 20 53 51 4c 49 54 45 5f 4f  t ret = SQLITE_O
74d0: 4b 3b 0d 0a 0d 0a 20 20 69 66 20 28 21 70 20 7c  K;....  if (!p |
74e0: 7c 20 21 64 62 29 20 72 65 74 75 72 6e 20 53 51  | !db) return SQ
74f0: 4c 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 73  LITE_ERROR;..  s
7500: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
7510: 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a  er(db->mutex);..
7520: 20 20 77 68 69 6c 65 20 28 31 29 0d 0a 20 20 7b    while (1)..  {
7530: 0d 0a 20 20 20 20 69 66 20 28 63 75 72 73 6f 72  ..    if (cursor
7540: 20 3c 20 30 20 7c 7c 20 63 75 72 73 6f 72 20 3e   < 0 || cursor >
7550: 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 0d 0a 20  = p->nCursor).. 
7560: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 20     {..      ret 
7570: 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0d  = SQLITE_ERROR;.
7580: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20  .      break;.. 
7590: 20 20 20 7d 0d 0a 20 20 20 20 69 66 20 28 70 2d     }..    if (p-
75a0: 3e 61 70 43 73 72 5b 63 75 72 73 6f 72 5d 20 3d  >apCsr[cursor] =
75b0: 3d 20 4e 55 4c 4c 29 0d 0a 20 20 20 20 7b 0d 0a  = NULL)..    {..
75c0: 20 20 20 20 20 20 72 65 74 20 3d 20 53 51 4c 49        ret = SQLI
75d0: 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 20 20 20  TE_ERROR;..     
75e0: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 7d 0d 0a   break;..    }..
75f0: 0d 0a 20 20 20 20 70 43 20 3d 20 70 2d 3e 61 70  ..    pC = p->ap
7600: 43 73 72 5b 63 75 72 73 6f 72 5d 3b 0d 0a 0d 0a  Csr[cursor];....
7610: 20 20 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65      ret = sqlite
7620: 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
7630: 6f 28 70 43 29 3b 0d 0a 20 20 20 20 69 66 28 72  o(pC);..    if(r
7640: 65 74 29 0d 0a 20 20 20 20 20 20 62 72 65 61 6b  et)..      break
7650: 3b 0d 0a 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f  ;....#if SQLITE_
7660: 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3c  VERSION_NUMBER <
7670: 20 33 30 30 38 30 30 37 0d 0a 20 20 20 20 69 66   3008007..    if
7680: 28 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69  (pC->rowidIsVali
7690: 64 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  d)..    {..     
76a0: 20 69 66 20 28 70 72 6f 77 69 64 29 20 2a 70 72   if (prowid) *pr
76b0: 6f 77 69 64 20 3d 20 70 43 2d 3e 6c 61 73 74 52  owid = pC->lastR
76c0: 6f 77 69 64 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20  owid;..    }..  
76d0: 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a    else..#endif..
76e0: 20 20 20 20 69 66 28 70 43 2d 3e 70 73 65 75 64      if(pC->pseud
76f0: 6f 54 61 62 6c 65 52 65 67 20 3e 20 30 29 0d 0a  oTableReg > 0)..
7700: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
7710: 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
7720: 0d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a  ..      break;..
7730: 20 20 20 20 7d 0d 0a 20 20 20 20 65 6c 73 65 20      }..    else 
7740: 69 66 28 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c  if(pC->nullRow |
7750: 7c 20 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30  | pC->pCursor==0
7760: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
7770: 72 65 74 20 3d 20 53 51 4c 49 54 45 5f 45 52 52  ret = SQLITE_ERR
7780: 4f 52 3b 0d 0a 20 20 20 20 20 20 62 72 65 61 6b  OR;..      break
7790: 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 65 6c  ;..    }..    el
77a0: 73 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  se..    {..     
77b0: 20 69 66 20 28 70 43 2d 3e 70 43 75 72 73 6f 72   if (pC->pCursor
77c0: 20 3d 3d 20 4e 55 4c 4c 29 0d 0a 20 20 20 20 20   == NULL)..     
77d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 20   {..        ret 
77e0: 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0d  = SQLITE_ERROR;.
77f0: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d  .        break;.
7800: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
7810: 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
7820: 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ize(pC->pCursor,
7830: 20 70 72 6f 77 69 64 29 3b 0d 0a 20 20 20 20 20   prowid);..     
7840: 20 69 66 20 28 70 72 6f 77 69 64 29 20 2a 70 72   if (prowid) *pr
7850: 6f 77 69 64 20 3d 20 2a 70 72 6f 77 69 64 3b 0d  owid = *prowid;.
7860: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 62 72 65 61  .    }..    brea
7870: 6b 3b 0d 0a 20 20 7d 0d 0a 20 20 73 71 6c 69 74  k;..  }..  sqlit
7880: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64  e3_mutex_leave(d
7890: 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20 20  b->mutex);....  
78a0: 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a  return ret;..}..
78b0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
78c0: 5f 4f 53 5f 57 49 4e 20 2a 2f 0d 0a 0d 0a 2f 2a  _OS_WIN */..../*
78d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
78e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
78f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7900: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7910: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0d 0a 0d  ************/...
7920: 0a 2f 2a 0d 0a 2a 2a 20 54 68 65 20 49 4e 54 45  ./*..** The INTE
7930: 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e 53 49  ROP_TEST_EXTENSI
7940: 4f 4e 20 62 6c 6f 63 6b 20 6d 75 73 74 20 62 65  ON block must be
7950: 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
7960: 68 69 73 20 73 6f 75 72 63 65 20 66 69 6c 65 0d  his source file.
7970: 0a 2a 2a 20 62 65 63 61 75 73 65 20 69 74 20 69  .** because it i
7980: 6e 63 6c 75 64 65 73 20 74 68 65 20 22 73 71 6c  ncludes the "sql
7990: 69 74 65 33 65 78 74 2e 68 22 20 66 69 6c 65 2c  ite3ext.h" file,
79a0: 20 77 68 69 63 68 20 64 65 66 69 6e 65 73 20 74   which defines t
79b0: 68 65 20 73 71 6c 69 74 65 33 0d 0a 2a 2a 20 70  he sqlite3..** p
79c0: 75 62 6c 69 63 20 41 50 49 20 66 75 6e 63 74 69  ublic API functi
79d0: 6f 6e 20 6e 61 6d 65 73 20 74 6f 20 62 65 20 6d  on names to be m
79e0: 61 63 72 6f 73 20 61 6e 64 20 74 68 61 74 20 77  acros and that w
79f0: 6f 75 6c 64 20 63 61 75 73 65 20 74 68 65 20 63  ould cause the c
7a00: 6f 64 65 0d 0a 2a 2a 20 61 62 6f 76 65 20 74 68  ode..** above th
7a10: 69 73 20 70 6f 69 6e 74 20 74 6f 20 6d 61 6c 66  is point to malf
7a20: 75 6e 63 74 69 6f 6e 2e 0d 0a 2a 2f 0d 0a 23 69  unction...*/..#i
7a30: 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f  f defined(INTERO
7a40: 50 5f 54 45 53 54 5f 45 58 54 45 4e 53 49 4f 4e  P_TEST_EXTENSION
7a50: 29 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f  )..#include "../
7a60: 63 6f 72 65 2f 73 71 6c 69 74 65 33 65 78 74 2e  core/sqlite3ext.
7a70: 68 22 0d 0a 53 51 4c 49 54 45 5f 45 58 54 45 4e  h"..SQLITE_EXTEN
7a80: 53 49 4f 4e 5f 49 4e 49 54 31 0d 0a 0d 0a 2f 2a  SION_INIT1..../*
7a90: 0d 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 6f 70  ..** The interop
7aa0: 54 65 73 74 28 29 20 53 51 4c 20 66 75 6e 63 74  Test() SQL funct
7ab0: 69 6f 6e 20 72 65 74 75 72 6e 73 20 69 74 73 20  ion returns its 
7ac0: 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 6f  first argument o
7ad0: 72 20 72 61 69 73 65 73 20 61 6e 0d 0a 2a 2a 20  r raises an..** 
7ae0: 65 72 72 6f 72 20 69 66 20 74 68 65 72 65 20 61  error if there a
7af0: 72 65 20 6e 6f 74 20 65 6e 6f 75 67 68 20 61 72  re not enough ar
7b00: 67 75 6d 65 6e 74 73 2e 0d 0a 2a 2f 0d 0a 53 51  guments...*/..SQ
7b10: 4c 49 54 45 5f 50 52 49 56 41 54 45 20 76 6f 69  LITE_PRIVATE voi
7b20: 64 20 69 6e 74 65 72 6f 70 54 65 73 74 46 75 6e  d interopTestFun
7b30: 63 28 0d 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  c(..  sqlite3_co
7b40: 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 0d  ntext *context,.
7b50: 0a 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20  .  int argc,..  
7b60: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
7b70: 61 72 67 76 0d 0a 29 7b 0d 0a 20 20 63 6f 6e 73  argv..){..  cons
7b80: 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
7b90: 2a 7a 3b 0d 0a 20 20 69 66 28 20 61 72 67 63 21  *z;..  if( argc!
7ba0: 3d 31 20 29 7b 0d 0a 20 20 20 20 73 71 6c 69 74  =1 ){..    sqlit
7bb0: 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28  e3_result_error(
7bc0: 63 6f 6e 74 65 78 74 2c 20 22 6e 65 65 64 20 65  context, "need e
7bd0: 78 61 63 74 6c 79 20 6f 6e 65 20 61 72 67 75 6d  xactly one argum
7be0: 65 6e 74 22 2c 20 2d 31 29 3b 0d 0a 20 20 20 20  ent", -1);..    
7bf0: 72 65 74 75 72 6e 3b 0d 0a 20 20 7d 0d 0a 20 20  return;..  }..  
7c00: 7a 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  z = sqlite3_valu
7c10: 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29 3b  e_text(argv[0]);
7c20: 0d 0a 20 20 69 66 28 20 7a 20 29 7b 0d 0a 20 20  ..  if( z ){..  
7c30: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
7c40: 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 28  _text(context, (
7c50: 63 68 61 72 2a 29 7a 2c 20 2d 31 2c 20 53 51 4c  char*)z, -1, SQL
7c60: 49 54 45 5f 53 54 41 54 49 43 29 3b 0d 0a 20 20  ITE_STATIC);..  
7c70: 7d 65 6c 73 65 7b 0d 0a 20 20 20 20 73 71 6c 69  }else{..    sqli
7c80: 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28  te3_result_null(
7c90: 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 7d 0d 0a  context);..  }..
7ca0: 7d 0d 0a 0d 0a 2f 2a 0d 0a 2a 2a 20 54 68 65 20  }..../*..** The 
7cb0: 69 6e 74 65 72 6f 70 53 6c 65 65 70 28 29 20 53  interopSleep() S
7cc0: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 77 61 69 74  QL function wait
7cd0: 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  s the specified 
7ce0: 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73  number of millis
7cf0: 65 63 6f 6e 64 73 0d 0a 2a 2a 20 6f 72 20 72 61  econds..** or ra
7d00: 69 73 65 73 20 61 6e 20 65 72 72 6f 72 20 69 66  ises an error if
7d10: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 74 20 65   there are not e
7d20: 6e 6f 75 67 68 20 61 72 67 75 6d 65 6e 74 73 2e  nough arguments.
7d30: 0d 0a 2a 2f 0d 0a 53 51 4c 49 54 45 5f 50 52 49  ..*/..SQLITE_PRI
7d40: 56 41 54 45 20 76 6f 69 64 20 69 6e 74 65 72 6f  VATE void intero
7d50: 70 53 6c 65 65 70 46 75 6e 63 28 0d 0a 20 20 73  pSleepFunc(..  s
7d60: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
7d70: 63 6f 6e 74 65 78 74 2c 0d 0a 20 20 69 6e 74 20  context,..  int 
7d80: 61 72 67 63 2c 0d 0a 20 20 73 71 6c 69 74 65 33  argc,..  sqlite3
7d90: 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0d 0a 29  _value **argv..)
7da0: 7b 0d 0a 20 20 69 6e 74 20 6d 3b 0d 0a 20 20 69  {..  int m;..  i
7db0: 66 28 20 61 72 67 63 21 3d 31 20 29 7b 0d 0a 20  f( argc!=1 ){.. 
7dc0: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
7dd0: 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c  t_error(context,
7de0: 20 22 6e 65 65 64 20 65 78 61 63 74 6c 79 20 6f   "need exactly o
7df0: 6e 65 20 61 72 67 75 6d 65 6e 74 22 2c 20 2d 31  ne argument", -1
7e00: 29 3b 0d 0a 20 20 20 20 72 65 74 75 72 6e 3b 0d  );..    return;.
7e10: 0a 20 20 7d 0d 0a 20 20 6d 20 3d 20 73 71 6c 69  .  }..  m = sqli
7e20: 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 61 72  te3_value_int(ar
7e30: 67 76 5b 30 5d 29 3b 0d 0a 23 69 66 20 53 51 4c  gv[0]);..#if SQL
7e40: 49 54 45 5f 4f 53 5f 57 49 4e 43 45 0d 0a 20 20  ITE_OS_WINCE..  
7e50: 53 6c 65 65 70 28 6d 29 3b 0d 0a 20 20 73 71 6c  Sleep(m);..  sql
7e60: 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28  ite3_result_int(
7e70: 63 6f 6e 74 65 78 74 2c 20 57 41 49 54 5f 4f 42  context, WAIT_OB
7e80: 4a 45 43 54 5f 30 29 3b 0d 0a 23 65 6c 73 65 0d  JECT_0);..#else.
7e90: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  .  sqlite3_resul
7ea0: 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 53  t_int(context, S
7eb0: 6c 65 65 70 45 78 28 6d 2c 20 54 52 55 45 29 29  leepEx(m, TRUE))
7ec0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 7d 0d 0a 0d 0a  ;..#endif..}....
7ed0: 2f 2a 20 53 51 4c 69 74 65 20 69 6e 76 6f 6b 65  /* SQLite invoke
7ee0: 73 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 6f  s this routine o
7ef0: 6e 63 65 20 77 68 65 6e 20 69 74 20 6c 6f 61 64  nce when it load
7f00: 73 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e  s the extension.
7f10: 0d 0a 2a 2a 20 43 72 65 61 74 65 20 6e 65 77 20  ..** Create new 
7f20: 66 75 6e 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61  functions, colla
7f30: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 2c 20  ting sequences, 
7f40: 61 6e 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c  and virtual tabl
7f50: 65 0d 0a 2a 2a 20 6d 6f 64 75 6c 65 73 20 68 65  e..** modules he
7f60: 72 65 2e 20 20 54 68 69 73 20 69 73 20 75 73 75  re.  This is usu
7f70: 61 6c 6c 79 20 74 68 65 20 6f 6e 6c 79 20 65 78  ally the only ex
7f80: 70 6f 72 74 65 64 20 73 79 6d 62 6f 6c 20 69 6e  ported symbol in
7f90: 0d 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64 20  ..** the shared 
7fa0: 6c 69 62 72 61 72 79 2e 0d 0a 2a 2f 0d 0a 53 51  library...*/..SQ
7fb0: 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 69 6e 74  LITE_API int int
7fc0: 65 72 6f 70 5f 74 65 73 74 5f 65 78 74 65 6e 73  erop_test_extens
7fd0: 69 6f 6e 5f 69 6e 69 74 28 0d 0a 20 20 73 71 6c  ion_init(..  sql
7fe0: 69 74 65 33 20 2a 64 62 2c 0d 0a 20 20 63 68 61  ite3 *db,..  cha
7ff0: 72 20 2a 2a 70 7a 45 72 72 4d 73 67 2c 0d 0a 20  r **pzErrMsg,.. 
8000: 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 61   const sqlite3_a
8010: 70 69 5f 72 6f 75 74 69 6e 65 73 20 2a 70 41 70  pi_routines *pAp
8020: 69 0d 0a 29 7b 0d 0a 20 20 69 6e 74 20 72 63 3b  i..){..  int rc;
8030: 0d 0a 20 20 53 51 4c 49 54 45 5f 45 58 54 45 4e  ..  SQLITE_EXTEN
8040: 53 49 4f 4e 5f 49 4e 49 54 32 28 70 41 70 69 29  SION_INIT2(pApi)
8050: 0d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
8060: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
8070: 28 64 62 2c 20 22 69 6e 74 65 72 6f 70 54 65 73  (db, "interopTes
8080: 74 22 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 41  t", -1, SQLITE_A
8090: 4e 59 2c 20 30 2c 0d 0a 20 20 20 20 20 20 69 6e  NY, 0,..      in
80a0: 74 65 72 6f 70 54 65 73 74 46 75 6e 63 2c 20 30  teropTestFunc, 0
80b0: 2c 20 30 29 3b 0d 0a 20 20 69 66 28 20 72 63 3d  , 0);..  if( rc=
80c0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0d 0a 20  =SQLITE_OK ){.. 
80d0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
80e0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
80f0: 64 62 2c 20 22 69 6e 74 65 72 6f 70 53 6c 65 65  db, "interopSlee
8100: 70 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f 41 4e  p", 1, SQLITE_AN
8110: 59 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 69  Y, 0,..        i
8120: 6e 74 65 72 6f 70 53 6c 65 65 70 46 75 6e 63 2c  nteropSleepFunc,
8130: 20 30 2c 20 30 29 3b 0d 0a 20 20 7d 0d 0a 20 20   0, 0);..  }..  
8140: 72 65 74 75 72 6e 20 72 63 3b 0d 0a 7d 0d 0a 23  return rc;..}..#
8150: 65 6e 64 69 66 20 2f 2a 20 64 65 66 69 6e 65 64  endif /* defined
8160: 28 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 20  (SQLITE_OS_WIN) 
8170: 2a 2f 0d 0a                                      */..