System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 9f962b2e85b7198c839f0780a2ee69f7ea6f9c7c:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 23 69 66 64 65 66 20 5f 57 49  */....#ifdef _WI
0130: 4e 33 32 0d 0a 23 64 65 66 69 6e 65 20 53 51 4c  N32..#define SQL
0140: 49 54 45 5f 41 50 49 20 5f 5f 64 65 63 6c 73 70  ITE_API __declsp
0150: 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 0d 0a 23  ec(dllexport)..#
0160: 65 6c 73 65 0d 0a 23 64 65 66 69 6e 65 20 57 49  else..#define WI
0170: 4e 41 50 49 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  NAPI..#endif....
0180: 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 63 6f 72  #include "../cor
0190: 65 2f 73 71 6c 69 74 65 33 2e 63 22 0d 0a 0d 0a  e/sqlite3.c"....
01a0: 23 69 66 20 21 53 51 4c 49 54 45 5f 4f 53 5f 57  #if !SQLITE_OS_W
01b0: 49 4e 0d 0a 23 69 6e 63 6c 75 64 65 20 3c 77 63  IN..#include <wc
01c0: 68 61 72 2e 68 3e 0d 0a 23 65 6e 64 69 66 0d 0a  har.h>..#endif..
01d0: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
01e0: 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 45 58  TEROP_INCLUDE_EX
01f0: 54 52 41 29 0d 0a 23 69 6e 63 6c 75 64 65 20 22  TRA)..#include "
0200: 2e 2e 2f 65 78 74 2f 65 78 74 72 61 2e 63 22 0d  ../ext/extra.c".
0210: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64  .#endif....#if d
0220: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 49  efined(INTEROP_I
0230: 4e 43 4c 55 44 45 5f 43 45 52 4f 44 29 0d 0a 23  NCLUDE_CEROD)..#
0240: 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 65 78 74 2f  include "../ext/
0250: 63 65 72 6f 64 2e 63 22 0d 0a 23 65 6e 64 69 66  cerod.c"..#endif
0260: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
0270: 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f  INTEROP_INCLUDE_
0280: 53 45 45 29 0d 0a 23 69 6e 63 6c 75 64 65 20 22  SEE)..#include "
0290: 2e 2e 2f 65 78 74 2f 73 65 65 2e 63 22 0d 0a 23  ../ext/see.c"..#
02a0: 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66  endif....#if def
02b0: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 49 4e 43  ined(INTEROP_INC
02c0: 4c 55 44 45 5f 5a 49 50 56 46 53 29 0d 0a 23 69  LUDE_ZIPVFS)..#i
02d0: 6e 63 6c 75 64 65 20 22 2e 2e 2f 65 78 74 2f 7a  nclude "../ext/z
02e0: 69 70 76 66 73 2e 63 22 0d 0a 23 69 6e 63 6c 75  ipvfs.c"..#inclu
02f0: 64 65 20 22 2e 2e 2f 65 78 74 2f 61 6c 67 6f 72  de "../ext/algor
0300: 69 74 68 6d 73 2e 63 22 0d 0a 23 65 6e 64 69 66  ithms.c"..#endif
0310: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
0320: 49 4e 54 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f  INTEROP_EXTENSIO
0330: 4e 5f 46 55 4e 43 54 49 4f 4e 53 29 0d 0a 23 75  N_FUNCTIONS)..#u
0340: 6e 64 65 66 20 43 4f 4d 50 49 4c 45 5f 53 51 4c  ndef COMPILE_SQL
0350: 49 54 45 5f 45 58 54 45 4e 53 49 4f 4e 53 5f 41  ITE_EXTENSIONS_A
0360: 53 5f 4c 4f 41 44 41 42 4c 45 5f 4d 4f 44 55 4c  S_LOADABLE_MODUL
0370: 45 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f  E..#include "../
0380: 63 6f 6e 74 72 69 62 2f 65 78 74 65 6e 73 69 6f  contrib/extensio
0390: 6e 2d 66 75 6e 63 74 69 6f 6e 73 2e 63 22 0d 0a  n-functions.c"..
03a0: 65 78 74 65 72 6e 20 69 6e 74 20 52 65 67 69 73  extern int Regis
03b0: 74 65 72 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63  terExtensionFunc
03c0: 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 20 2a 64  tions(sqlite3 *d
03d0: 62 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23  b);..#endif....#
03e0: 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  if SQLITE_OS_WIN
03f0: 20 26 26 20 64 65 66 69 6e 65 64 28 49 4e 54 45   && defined(INTE
0400: 52 4f 50 5f 43 4f 44 45 43 29 20 26 26 20 21 64  ROP_CODEC) && !d
0410: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 49  efined(INTEROP_I
0420: 4e 43 4c 55 44 45 5f 53 45 45 29 0d 0a 23 69 66  NCLUDE_SEE)..#if
0430: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
0440: 45 5f 5a 49 50 56 46 53 0d 0a 23 64 65 66 69 6e  E_ZIPVFS..#defin
0450: 65 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 5f  e INTEROP_CODEC_
0460: 47 45 54 5f 50 41 47 45 52 28 61 2c 62 2c 63 29  GET_PAGER(a,b,c)
0470: 20 73 71 6c 69 74 65 33 50 61 67 65 72 47 65 74   sqlite3PagerGet
0480: 28 61 2c 62 2c 63 2c 30 29 0d 0a 23 65 6c 69 66  (a,b,c,0)..#elif
0490: 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f   SQLITE_VERSION_
04a0: 4e 55 4d 42 45 52 20 3e 3d 20 33 30 31 30 30 30  NUMBER >= 301000
04b0: 30 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52  0..#define INTER
04c0: 4f 50 5f 43 4f 44 45 43 5f 47 45 54 5f 50 41 47  OP_CODEC_GET_PAG
04d0: 45 52 28 61 2c 62 2c 63 29 20 73 71 6c 69 74 65  ER(a,b,c) sqlite
04e0: 33 50 61 67 65 72 47 65 74 28 61 2c 62 2c 63 2c  3PagerGet(a,b,c,
04f0: 30 29 0d 0a 23 65 6c 73 65 0d 0a 23 64 65 66 69  0)..#else..#defi
0500: 6e 65 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43  ne INTEROP_CODEC
0510: 5f 47 45 54 5f 50 41 47 45 52 28 61 2c 62 2c 63  _GET_PAGER(a,b,c
0520: 29 20 73 71 6c 69 74 65 33 50 61 67 65 72 47 65  ) sqlite3PagerGe
0530: 74 28 61 2c 62 2c 63 29 0d 0a 23 65 6e 64 69 66  t(a,b,c)..#endif
0540: 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 77  ..#include "../w
0550: 69 6e 2f 63 72 79 70 74 2e 63 22 0d 0a 23 65 6e  in/crypt.c"..#en
0560: 64 69 66 0d 0a 0d 0a 23 69 6e 63 6c 75 64 65 20  dif....#include 
0570: 22 69 6e 74 65 72 6f 70 2e 68 22 0d 0a 0d 0a 23  "interop.h"....#
0580: 64 65 66 69 6e 65 20 49 4e 54 45 52 4f 50 5f 44  define INTEROP_D
0590: 45 42 55 47 5f 4e 4f 4e 45 20 20 20 20 20 20 20  EBUG_NONE       
05a0: 20 20 20 20 28 30 78 30 30 30 30 29 0d 0a 23 64      (0x0000)..#d
05b0: 65 66 69 6e 65 20 49 4e 54 45 52 4f 50 5f 44 45  efine INTEROP_DE
05c0: 42 55 47 5f 43 4c 4f 53 45 20 20 20 20 20 20 20  BUG_CLOSE       
05d0: 20 20 20 28 30 78 30 30 30 31 29 0d 0a 23 64 65     (0x0001)..#de
05e0: 66 69 6e 65 20 49 4e 54 45 52 4f 50 5f 44 45 42  fine INTEROP_DEB
05f0: 55 47 5f 46 49 4e 41 4c 49 5a 45 20 20 20 20 20  UG_FINALIZE     
0600: 20 20 28 30 78 30 30 30 32 29 0d 0a 23 64 65 66    (0x0002)..#def
0610: 69 6e 65 20 49 4e 54 45 52 4f 50 5f 44 45 42 55  ine INTEROP_DEBU
0620: 47 5f 42 41 43 4b 55 50 5f 46 49 4e 49 53 48 20  G_BACKUP_FINISH 
0630: 20 28 30 78 30 30 30 34 29 0d 0a 23 64 65 66 69   (0x0004)..#defi
0640: 6e 65 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  ne INTEROP_DEBUG
0650: 5f 4f 50 45 4e 20 20 20 20 20 20 20 20 20 20 20  _OPEN           
0660: 28 30 78 30 30 30 38 29 0d 0a 23 64 65 66 69 6e  (0x0008)..#defin
0670: 65 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f  e INTEROP_DEBUG_
0680: 4f 50 45 4e 31 36 20 20 20 20 20 20 20 20 20 28  OPEN16         (
0690: 30 78 30 30 31 30 29 0d 0a 23 64 65 66 69 6e 65  0x0010)..#define
06a0: 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 50   INTEROP_DEBUG_P
06b0: 52 45 50 41 52 45 20 20 20 20 20 20 20 20 28 30  REPARE        (0
06c0: 78 30 30 32 30 29 0d 0a 23 64 65 66 69 6e 65 20  x0020)..#define 
06d0: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 50 52  INTEROP_DEBUG_PR
06e0: 45 50 41 52 45 31 36 20 20 20 20 20 20 28 30 78  EPARE16      (0x
06f0: 30 30 34 30 29 0d 0a 23 64 65 66 69 6e 65 20 49  0040)..#define I
0700: 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 52 45 53  NTEROP_DEBUG_RES
0710: 45 54 20 20 20 20 20 20 20 20 20 20 28 30 78 30  ET          (0x0
0720: 30 38 30 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e  080)..#define IN
0730: 54 45 52 4f 50 5f 44 45 42 55 47 5f 43 48 41 4e  TEROP_DEBUG_CHAN
0740: 47 45 53 20 20 20 20 20 20 20 20 28 30 78 30 31  GES        (0x01
0750: 30 30 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54  00)..#define INT
0760: 45 52 4f 50 5f 44 45 42 55 47 5f 42 52 45 41 4b  EROP_DEBUG_BREAK
0770: 20 20 20 20 20 20 20 20 20 20 28 30 78 30 32 30            (0x020
0780: 30 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54 45  0)..#define INTE
0790: 52 4f 50 5f 44 45 42 55 47 5f 42 4c 4f 42 5f 43  ROP_DEBUG_BLOB_C
07a0: 4c 4f 53 45 20 20 20 20 20 28 30 78 30 34 30 30  LOSE     (0x0400
07b0: 29 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64  )....#if defined
07c0: 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 64 65  (_MSC_VER) && de
07d0: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45  fined(INTEROP_DE
07e0: 42 55 47 29 20 26 26 20 5c 0d 0a 20 20 20 20 28  BUG) && \..    (
07f0: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20  INTEROP_DEBUG & 
0800: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 42 52  INTEROP_DEBUG_BR
0810: 45 41 4b 29 0d 0a 23 64 65 66 69 6e 65 20 73 71  EAK)..#define sq
0820: 6c 69 74 65 33 49 6e 74 65 72 6f 70 42 72 65 61  lite3InteropBrea
0830: 6b 28 61 29 20 7b 20 73 71 6c 69 74 65 33 49 6e  k(a) { sqlite3In
0840: 74 65 72 6f 70 44 65 62 75 67 28 22 25 73 5c 6e  teropDebug("%s\n
0850: 22 2c 20 28 61 29 29 3b 20 5f 5f 64 65 62 75 67  ", (a)); __debug
0860: 62 72 65 61 6b 28 29 3b 20 7d 0d 0a 23 65 6c 73  break(); }..#els
0870: 65 0d 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  e..#define sqlit
0880: 65 33 49 6e 74 65 72 6f 70 42 72 65 61 6b 28 61  e3InteropBreak(a
0890: 29 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 74 79 70  )..#endif....typ
08a0: 65 64 65 66 20 76 6f 69 64 20 28 2a 53 51 4c 49  edef void (*SQLI
08b0: 54 45 55 53 45 52 46 55 4e 43 29 28 73 71 6c 69  TEUSERFUNC)(sqli
08c0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 2c 20 69  te3_context *, i
08d0: 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  nt, sqlite3_valu
08e0: 65 20 2a 2a 29 3b 0d 0a 74 79 70 65 64 65 66 20  e **);..typedef 
08f0: 76 6f 69 64 20 28 2a 53 51 4c 49 54 45 46 55 4e  void (*SQLITEFUN
0900: 43 46 49 4e 41 4c 29 28 73 71 6c 69 74 65 33 5f  CFINAL)(sqlite3_
0910: 63 6f 6e 74 65 78 74 20 2a 29 3b 0d 0a 0d 0a 2f  context *);..../
0920: 2a 0d 0a 2a 2a 20 41 6e 20 61 72 72 61 79 20 6f  *..** An array o
0930: 66 20 6e 61 6d 65 73 20 6f 66 20 61 6c 6c 20 63  f names of all c
0940: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
0950: 6f 6e 73 2e 20 20 54 68 69 73 20 61 72 72 61 79  ons.  This array
0960: 20 73 68 6f 75 6c 64 0d 0a 2a 2a 20 62 65 20 73   should..** be s
0970: 6f 72 74 65 64 20 41 2d 5a 2e 0d 0a 2a 2a 0d 0a  orted A-Z...**..
0980: 2a 2a 20 54 68 69 73 20 61 72 72 61 79 20 6c 6f  ** This array lo
0990: 6f 6b 73 20 6c 61 72 67 65 2c 20 62 75 74 20 69  oks large, but i
09a0: 6e 20 61 20 74 79 70 69 63 61 6c 20 69 6e 73 74  n a typical inst
09b0: 61 6c 6c 61 74 69 6f 6e 20 61 63 74 75 61 6c 6c  allation actuall
09c0: 79 20 75 73 65 73 0d 0a 2a 2a 20 6f 6e 6c 79 20  y uses..** only 
09d0: 61 20 68 61 6e 64 66 75 6c 20 6f 66 20 63 6f 6d  a handful of com
09e0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
09f0: 73 2c 20 73 6f 20 6d 6f 73 74 20 74 69 6d 65 73  s, so most times
0a00: 20 74 68 69 73 20 61 72 72 61 79 20 69 73 20 75   this array is u
0a10: 73 75 61 6c 6c 79 0d 0a 2a 2a 20 72 61 74 68 65  sually..** rathe
0a20: 72 20 73 68 6f 72 74 20 61 6e 64 20 75 73 65 73  r short and uses
0a30: 20 6c 69 74 74 6c 65 20 6d 65 6d 6f 72 79 20 73   little memory s
0a40: 70 61 63 65 2e 0d 0a 2a 2f 0d 0a 73 74 61 74 69  pace...*/..stati
0a50: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 63  c const char * c
0a60: 6f 6e 73 74 20 61 7a 49 6e 74 65 72 6f 70 43 6f  onst azInteropCo
0a70: 6d 70 69 6c 65 4f 70 74 5b 5d 20 3d 20 7b 0d 0a  mpileOpt[] = {..
0a80: 0d 0a 2f 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  ../* These macro
0a90: 73 20 61 72 65 20 70 72 6f 76 69 64 65 64 20 74  s are provided t
0aa0: 6f 20 22 73 74 72 69 6e 67 69 66 79 22 20 74 68  o "stringify" th
0ab0: 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64  e value of the d
0ac0: 65 66 69 6e 65 0d 0a 2a 2a 20 66 6f 72 20 74 68  efine..** for th
0ad0: 6f 73 65 20 6f 70 74 69 6f 6e 73 20 69 6e 20 77  ose options in w
0ae0: 68 69 63 68 20 74 68 65 20 76 61 6c 75 65 20 69  hich the value i
0af0: 73 20 6d 65 61 6e 69 6e 67 66 75 6c 2e 20 2a 2f  s meaningful. */
0b00: 0d 0a 23 69 66 6e 64 65 66 20 43 54 49 4d 45 4f  ..#ifndef CTIMEO
0b10: 50 54 5f 56 41 4c 5f 0d 0a 23 64 65 66 69 6e 65  PT_VAL_..#define
0b20: 20 43 54 49 4d 45 4f 50 54 5f 56 41 4c 5f 28 6f   CTIMEOPT_VAL_(o
0b30: 70 74 29 20 23 6f 70 74 0d 0a 23 65 6e 64 69 66  pt) #opt..#endif
0b40: 0d 0a 0d 0a 23 69 66 6e 64 65 66 20 43 54 49 4d  ....#ifndef CTIM
0b50: 45 4f 50 54 5f 56 41 4c 0d 0a 23 64 65 66 69 6e  EOPT_VAL..#defin
0b60: 65 20 43 54 49 4d 45 4f 50 54 5f 56 41 4c 28 6f  e CTIMEOPT_VAL(o
0b70: 70 74 29 20 43 54 49 4d 45 4f 50 54 5f 56 41 4c  pt) CTIMEOPT_VAL
0b80: 5f 28 6f 70 74 29 0d 0a 23 65 6e 64 69 66 0d 0a  _(opt)..#endif..
0b90: 0d 0a 23 69 66 64 65 66 20 49 4e 54 45 52 4f 50  ..#ifdef INTEROP
0ba0: 5f 43 4f 44 45 43 0d 0a 20 20 22 43 4f 44 45 43  _CODEC..  "CODEC
0bb0: 22 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64  ",..#endif..#ifd
0bc0: 65 66 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  ef INTEROP_DEBUG
0bd0: 0d 0a 20 20 22 44 45 42 55 47 3d 22 20 43 54 49  ..  "DEBUG=" CTI
0be0: 4d 45 4f 50 54 5f 56 41 4c 28 49 4e 54 45 52 4f  MEOPT_VAL(INTERO
0bf0: 50 5f 44 45 42 55 47 29 2c 0d 0a 23 65 6e 64 69  P_DEBUG),..#endi
0c00: 66 0d 0a 23 69 66 64 65 66 20 49 4e 54 45 52 4f  f..#ifdef INTERO
0c10: 50 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43  P_EXTENSION_FUNC
0c20: 54 49 4f 4e 53 0d 0a 20 20 22 45 58 54 45 4e 53  TIONS..  "EXTENS
0c30: 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53 22 2c 0d  ION_FUNCTIONS",.
0c40: 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
0c50: 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f  INTEROP_INCLUDE_
0c60: 43 45 52 4f 44 0d 0a 20 20 22 49 4e 43 4c 55 44  CEROD..  "INCLUD
0c70: 45 5f 43 45 52 4f 44 22 2c 0d 0a 23 65 6e 64 69  E_CEROD",..#endi
0c80: 66 0d 0a 23 69 66 64 65 66 20 49 4e 54 45 52 4f  f..#ifdef INTERO
0c90: 50 5f 49 4e 43 4c 55 44 45 5f 45 58 54 52 41 0d  P_INCLUDE_EXTRA.
0ca0: 0a 20 20 22 49 4e 43 4c 55 44 45 5f 45 58 54 52  .  "INCLUDE_EXTR
0cb0: 41 22 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66  A",..#endif..#if
0cc0: 64 65 66 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c  def INTEROP_INCL
0cd0: 55 44 45 5f 53 45 45 0d 0a 20 20 22 49 4e 43 4c  UDE_SEE..  "INCL
0ce0: 55 44 45 5f 53 45 45 22 2c 0d 0a 23 65 6e 64 69  UDE_SEE",..#endi
0cf0: 66 0d 0a 23 69 66 64 65 66 20 49 4e 54 45 52 4f  f..#ifdef INTERO
0d00: 50 5f 49 4e 43 4c 55 44 45 5f 5a 49 50 56 46 53  P_INCLUDE_ZIPVFS
0d10: 0d 0a 20 20 22 49 4e 43 4c 55 44 45 5f 5a 49 50  ..  "INCLUDE_ZIP
0d20: 56 46 53 22 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23  VFS",..#endif..#
0d30: 69 66 64 65 66 20 49 4e 54 45 52 4f 50 5f 4a 53  ifdef INTEROP_JS
0d40: 4f 4e 31 5f 45 58 54 45 4e 53 49 4f 4e 0d 0a 20  ON1_EXTENSION.. 
0d50: 20 22 4a 53 4f 4e 31 5f 45 58 54 45 4e 53 49 4f   "JSON1_EXTENSIO
0d60: 4e 22 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66  N",..#endif..#if
0d70: 64 65 66 20 49 4e 54 45 52 4f 50 5f 4c 45 47 41  def INTEROP_LEGA
0d80: 43 59 5f 43 4c 4f 53 45 0d 0a 20 20 22 4c 45 47  CY_CLOSE..  "LEG
0d90: 41 43 59 5f 43 4c 4f 53 45 22 2c 0d 0a 23 65 6e  ACY_CLOSE",..#en
0da0: 64 69 66 0d 0a 23 69 66 64 65 66 20 49 4e 54 45  dif..#ifdef INTE
0db0: 52 4f 50 5f 4c 4f 47 0d 0a 20 20 22 4c 4f 47 22  ROP_LOG..  "LOG"
0dc0: 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65  ,..#endif..#ifde
0dd0: 66 20 49 4e 54 45 52 4f 50 5f 50 45 52 43 45 4e  f INTEROP_PERCEN
0de0: 54 49 4c 45 5f 45 58 54 45 4e 53 49 4f 4e 0d 0a  TILE_EXTENSION..
0df0: 20 20 22 50 45 52 43 45 4e 54 49 4c 45 5f 45 58    "PERCENTILE_EX
0e00: 54 45 4e 53 49 4f 4e 22 2c 0d 0a 23 65 6e 64 69  TENSION",..#endi
0e10: 66 0d 0a 23 69 66 64 65 66 20 49 4e 54 45 52 4f  f..#ifdef INTERO
0e20: 50 5f 52 45 47 45 58 50 5f 45 58 54 45 4e 53 49  P_REGEXP_EXTENSI
0e30: 4f 4e 0d 0a 20 20 22 52 45 47 45 58 50 5f 45 58  ON..  "REGEXP_EX
0e40: 54 45 4e 53 49 4f 4e 22 2c 0d 0a 23 65 6e 64 69  TENSION",..#endi
0e50: 66 0d 0a 23 69 66 64 65 66 20 49 4e 54 45 52 4f  f..#ifdef INTERO
0e60: 50 5f 53 48 41 31 5f 45 58 54 45 4e 53 49 4f 4e  P_SHA1_EXTENSION
0e70: 0d 0a 20 20 22 53 48 41 31 5f 45 58 54 45 4e 53  ..  "SHA1_EXTENS
0e80: 49 4f 4e 22 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23  ION",..#endif..#
0e90: 69 66 64 65 66 20 49 4e 54 45 52 4f 50 5f 54 45  ifdef INTEROP_TE
0ea0: 53 54 5f 45 58 54 45 4e 53 49 4f 4e 0d 0a 20 20  ST_EXTENSION..  
0eb0: 22 54 45 53 54 5f 45 58 54 45 4e 53 49 4f 4e 22  "TEST_EXTENSION"
0ec0: 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65  ,..#endif..#ifde
0ed0: 66 20 49 4e 54 45 52 4f 50 5f 54 4f 54 59 50 45  f INTEROP_TOTYPE
0ee0: 5f 45 58 54 45 4e 53 49 4f 4e 0d 0a 20 20 22 54  _EXTENSION..  "T
0ef0: 4f 54 59 50 45 5f 45 58 54 45 4e 53 49 4f 4e 22  OTYPE_EXTENSION"
0f00: 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65  ,..#endif..#ifde
0f10: 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
0f20: 5f 4e 55 4d 42 45 52 0d 0a 20 20 22 56 45 52 53  _NUMBER..  "VERS
0f30: 49 4f 4e 5f 4e 55 4d 42 45 52 3d 22 20 43 54 49  ION_NUMBER=" CTI
0f40: 4d 45 4f 50 54 5f 56 41 4c 28 53 51 4c 49 54 45  MEOPT_VAL(SQLITE
0f50: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 29  _VERSION_NUMBER)
0f60: 2c 0d 0a 23 65 6e 64 69 66 0d 0a 23 69 66 64 65  ,..#endif..#ifde
0f70: 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41  f INTEROP_VIRTUA
0f80: 4c 5f 54 41 42 4c 45 0d 0a 20 20 22 56 49 52 54  L_TABLE..  "VIRT
0f90: 55 41 4c 5f 54 41 42 4c 45 22 2c 0d 0a 23 65 6e  UAL_TABLE",..#en
0fa0: 64 69 66 0d 0a 7d 3b 0d 0a 0d 0a 2f 2a 0d 0a 2a  dif..};..../*..*
0fb0: 2a 20 47 69 76 65 6e 20 74 68 65 20 6e 61 6d 65  * Given the name
0fc0: 20 6f 66 20 61 20 63 6f 6d 70 69 6c 65 2d 74 69   of a compile-ti
0fd0: 6d 65 20 6f 70 74 69 6f 6e 2c 20 72 65 74 75 72  me option, retur
0fe0: 6e 20 74 72 75 65 20 69 66 20 74 68 61 74 20 6f  n true if that o
0ff0: 70 74 69 6f 6e 0d 0a 2a 2a 20 77 61 73 20 75 73  ption..** was us
1000: 65 64 20 61 6e 64 20 66 61 6c 73 65 20 69 66 20  ed and false if 
1010: 6e 6f 74 2e 0d 0a 2a 2a 0d 0a 2a 2a 20 54 68 65  not...**..** The
1020: 20 6e 61 6d 65 20 63 61 6e 20 6f 70 74 69 6f 6e   name can option
1030: 61 6c 6c 79 20 62 65 67 69 6e 20 77 69 74 68 20  ally begin with 
1040: 22 53 51 4c 49 54 45 5f 22 20 6f 72 20 22 49 4e  "SQLITE_" or "IN
1050: 54 45 52 4f 50 5f 22 20 62 75 74 20 74 68 6f 73  TEROP_" but thos
1060: 65 0d 0a 2a 2a 20 70 72 65 66 69 78 65 73 20 61  e..** prefixes a
1070: 72 65 20 6e 6f 74 20 72 65 71 75 69 72 65 64 20  re not required 
1080: 66 6f 72 20 61 20 6d 61 74 63 68 2e 0d 0a 2a 2f  for a match...*/
1090: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74  ..SQLITE_API int
10a0: 20 57 49 4e 41 50 49 20 69 6e 74 65 72 6f 70 5f   WINAPI interop_
10b0: 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73  compileoption_us
10c0: 65 64 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  ed(const char *z
10d0: 4f 70 74 4e 61 6d 65 29 7b 0d 0a 20 20 69 6e 74  OptName){..  int
10e0: 20 69 2c 20 6e 3b 0d 0a 20 20 69 66 28 20 73 71   i, n;..  if( sq
10f0: 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 4f  lite3StrNICmp(zO
1100: 70 74 4e 61 6d 65 2c 20 22 53 51 4c 49 54 45 5f  ptName, "SQLITE_
1110: 22 2c 20 37 29 3d 3d 30 20 29 20 7a 4f 70 74 4e  ", 7)==0 ) zOptN
1120: 61 6d 65 20 2b 3d 20 37 3b 0d 0a 20 20 69 66 28  ame += 7;..  if(
1130: 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
1140: 28 7a 4f 70 74 4e 61 6d 65 2c 20 22 49 4e 54 45  (zOptName, "INTE
1150: 52 4f 50 5f 22 2c 20 38 29 3d 3d 30 20 29 20 7a  ROP_", 8)==0 ) z
1160: 4f 70 74 4e 61 6d 65 20 2b 3d 20 38 3b 0d 0a 20  OptName += 8;.. 
1170: 20 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c   n = sqlite3Strl
1180: 65 6e 33 30 28 7a 4f 70 74 4e 61 6d 65 29 3b 0d  en30(zOptName);.
1190: 0a 0d 0a 20 20 2f 2a 20 53 69 6e 63 65 20 41 72  ...  /* Since Ar
11a0: 72 61 79 53 69 7a 65 28 61 7a 49 6e 74 65 72 6f  raySize(azIntero
11b0: 70 43 6f 6d 70 69 6c 65 4f 70 74 29 20 69 73 20  pCompileOpt) is 
11c0: 6e 6f 72 6d 61 6c 6c 79 20 69 6e 20 73 69 6e 67  normally in sing
11d0: 6c 65 20 64 69 67 69 74 73 2c 20 61 0d 0a 20 20  le digits, a..  
11e0: 2a 2a 20 6c 69 6e 65 61 72 20 73 65 61 72 63 68  ** linear search
11f0: 20 69 73 20 61 64 65 71 75 61 74 65 2e 20 20 4e   is adequate.  N
1200: 6f 20 6e 65 65 64 20 66 6f 72 20 61 20 62 69 6e  o need for a bin
1210: 61 72 79 20 73 65 61 72 63 68 2e 20 2a 2f 0d 0a  ary search. */..
1220: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72    for(i=0; i<Arr
1230: 61 79 53 69 7a 65 28 61 7a 49 6e 74 65 72 6f 70  aySize(azInterop
1240: 43 6f 6d 70 69 6c 65 4f 70 74 29 3b 20 69 2b 2b  CompileOpt); i++
1250: 29 7b 0d 0a 20 20 20 20 69 66 28 20 73 71 6c 69  ){..    if( sqli
1260: 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 4f 70 74  te3StrNICmp(zOpt
1270: 4e 61 6d 65 2c 20 61 7a 49 6e 74 65 72 6f 70 43  Name, azInteropC
1280: 6f 6d 70 69 6c 65 4f 70 74 5b 69 5d 2c 20 6e 29  ompileOpt[i], n)
1290: 3d 3d 30 0d 0a 20 20 20 20 20 26 26 20 73 71 6c  ==0..     && sql
12a0: 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
12b0: 73 69 67 6e 65 64 20 63 68 61 72 29 61 7a 49 6e  signed char)azIn
12c0: 74 65 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 5b  teropCompileOpt[
12d0: 69 5d 5b 6e 5d 5d 3d 3d 30 0d 0a 20 20 20 20 29  i][n]]==0..    )
12e0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
12f0: 31 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a  1;..    }..  }..
1300: 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 7d 0d 0a    return 0;..}..
1310: 0d 0a 2f 2a 0d 0a 2a 2a 20 52 65 74 75 72 6e 20  ../*..** Return 
1320: 74 68 65 20 4e 2d 74 68 20 63 6f 6d 70 69 6c 65  the N-th compile
1330: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 73 74 72  -time option str
1340: 69 6e 67 2e 20 20 49 66 20 4e 20 69 73 20 6f 75  ing.  If N is ou
1350: 74 20 6f 66 20 72 61 6e 67 65 2c 0d 0a 2a 2a 20  t of range,..** 
1360: 72 65 74 75 72 6e 20 61 20 4e 55 4c 4c 20 70 6f  return a NULL po
1370: 69 6e 74 65 72 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49  inter...*/..SQLI
1380: 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 63 68 61  TE_API const cha
1390: 72 20 2a 57 49 4e 41 50 49 20 69 6e 74 65 72 6f  r *WINAPI intero
13a0: 70 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  p_compileoption_
13b0: 67 65 74 28 69 6e 74 20 4e 29 7b 0d 0a 20 20 69  get(int N){..  i
13c0: 66 28 20 4e 3e 3d 30 20 26 26 20 4e 3c 41 72 72  f( N>=0 && N<Arr
13d0: 61 79 53 69 7a 65 28 61 7a 49 6e 74 65 72 6f 70  aySize(azInterop
13e0: 43 6f 6d 70 69 6c 65 4f 70 74 29 20 29 7b 0d 0a  CompileOpt) ){..
13f0: 20 20 20 20 72 65 74 75 72 6e 20 61 7a 49 6e 74      return azInt
1400: 65 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 5b 4e  eropCompileOpt[N
1410: 5d 3b 0d 0a 20 20 7d 0d 0a 20 20 72 65 74 75 72  ];..  }..  retur
1420: 6e 20 30 3b 0d 0a 7d 0d 0a 0d 0a 23 69 66 20 64  n 0;..}....#if d
1430: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44  efined(INTEROP_D
1440: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
1450: 28 49 4e 54 45 52 4f 50 5f 4c 4f 47 29 0d 0a 53  (INTEROP_LOG)..S
1460: 51 4c 49 54 45 5f 50 52 49 56 41 54 45 20 76 6f  QLITE_PRIVATE vo
1470: 69 64 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f  id sqlite3Intero
1480: 70 44 65 62 75 67 28 63 6f 6e 73 74 20 63 68 61  pDebug(const cha
1490: 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29  r *zFormat, ...)
14a0: 7b 0d 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b  {..  va_list ap;
14b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 61           /* Vara
14d0: 72 67 20 6c 69 73 74 20 2a 2f 0d 0a 20 20 53 74  rg list */..  St
14e0: 72 41 63 63 75 6d 20 61 63 63 3b 20 20 20 20 20  rAccum acc;     
14f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1500: 20 20 2f 2a 20 53 74 72 69 6e 67 20 61 63 63 75    /* String accu
1510: 6d 75 6c 61 74 6f 72 20 2a 2f 0d 0a 20 20 63 68  mulator */..  ch
1520: 61 72 20 7a 4d 73 67 5b 53 51 4c 49 54 45 5f 50  ar zMsg[SQLITE_P
1530: 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45 2a 33 5d  RINT_BUF_SIZE*3]
1540: 3b 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 6c 6f  ; /* Complete lo
1550: 67 20 6d 65 73 73 61 67 65 20 2a 2f 0d 0a 20 20  g message */..  
1560: 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f  va_start(ap, zFo
1570: 72 6d 61 74 29 3b 0d 0a 23 69 66 20 53 51 4c 49  rmat);..#if SQLI
1580: 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45  TE_VERSION_NUMBE
1590: 52 20 3e 3d 20 33 30 30 38 30 31 30 0d 0a 20 20  R >= 3008010..  
15a0: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49  sqlite3StrAccumI
15b0: 6e 69 74 28 26 61 63 63 2c 20 30 2c 20 7a 4d 73  nit(&acc, 0, zMs
15c0: 67 2c 20 73 69 7a 65 6f 66 28 7a 4d 73 67 29 2c  g, sizeof(zMsg),
15d0: 20 30 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 73   0);..#else..  s
15e0: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e  qlite3StrAccumIn
15f0: 69 74 28 26 61 63 63 2c 20 7a 4d 73 67 2c 20 73  it(&acc, zMsg, s
1600: 69 7a 65 6f 66 28 7a 4d 73 67 29 2c 20 30 29 3b  izeof(zMsg), 0);
1610: 0d 0a 20 20 61 63 63 2e 75 73 65 4d 61 6c 6c 6f  ..  acc.useMallo
1620: 63 20 3d 20 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a  c = 0;..#endif..
1630: 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49  #if SQLITE_VERSI
1640: 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 31  ON_NUMBER >= 301
1650: 31 30 30 30 0d 0a 20 20 73 71 6c 69 74 65 33 56  1000..  sqlite3V
1660: 58 50 72 69 6e 74 66 28 26 61 63 63 2c 20 7a 46  XPrintf(&acc, zF
1670: 6f 72 6d 61 74 2c 20 61 70 29 3b 0d 0a 23 65 6c  ormat, ap);..#el
1680: 73 65 0d 0a 20 20 73 71 6c 69 74 65 33 56 58 50  se..  sqlite3VXP
1690: 72 69 6e 74 66 28 26 61 63 63 2c 20 30 2c 20 7a  rintf(&acc, 0, z
16a0: 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0d 0a 23 65  Format, ap);..#e
16b0: 6e 64 69 66 0d 0a 20 20 76 61 5f 65 6e 64 28 61  ndif..  va_end(a
16c0: 70 29 3b 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f  p);..#if SQLITE_
16d0: 4f 53 5f 57 49 4e 20 26 26 20 53 51 4c 49 54 45  OS_WIN && SQLITE
16e0: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20  _VERSION_NUMBER 
16f0: 3e 3d 20 33 30 30 37 30 31 33 0d 0a 20 20 73 71  >= 3007013..  sq
1700: 6c 69 74 65 33 5f 77 69 6e 33 32 5f 77 72 69 74  lite3_win32_writ
1710: 65 5f 64 65 62 75 67 28 73 71 6c 69 74 65 33 53  e_debug(sqlite3S
1720: 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 26 61  trAccumFinish(&a
1730: 63 63 29 2c 20 2d 31 29 3b 0d 0a 23 65 6c 69 66  cc), -1);..#elif
1740: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 20 26   SQLITE_OS_WIN &
1750: 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
1760: 5f 57 49 4e 33 32 5f 48 41 53 5f 41 4e 53 49 29  _WIN32_HAS_ANSI)
1770: 0d 0a 20 20 4f 75 74 70 75 74 44 65 62 75 67 53  ..  OutputDebugS
1780: 74 72 69 6e 67 41 28 73 71 6c 69 74 65 33 53 74  tringA(sqlite3St
1790: 72 41 63 63 75 6d 46 69 6e 69 73 68 28 26 61 63  rAccumFinish(&ac
17a0: 63 29 29 3b 0d 0a 23 65 6c 69 66 20 53 51 4c 49  c));..#elif SQLI
17b0: 54 45 5f 4f 53 5f 57 49 4e 20 26 26 20 64 65 66  TE_OS_WIN && def
17c0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33  ined(SQLITE_WIN3
17d0: 32 5f 48 41 53 5f 57 49 44 45 29 0d 0a 20 20 7b  2_HAS_WIDE)..  {
17e0: 0d 0a 20 20 20 20 4c 50 57 53 54 52 20 7a 57 69  ..    LPWSTR zWi
17f0: 64 65 4d 73 67 20 3d 20 75 74 66 38 54 6f 55 6e  deMsg = utf8ToUn
1800: 69 63 6f 64 65 28 73 71 6c 69 74 65 33 53 74 72  icode(sqlite3Str
1810: 41 63 63 75 6d 46 69 6e 69 73 68 28 26 61 63 63  AccumFinish(&acc
1820: 29 29 3b 0d 0a 20 20 20 20 69 66 28 20 7a 57 69  ));..    if( zWi
1830: 64 65 4d 73 67 20 29 7b 0d 0a 20 20 20 20 20 20  deMsg ){..      
1840: 4f 75 74 70 75 74 44 65 62 75 67 53 74 72 69 6e  OutputDebugStrin
1850: 67 57 28 7a 57 69 64 65 4d 73 67 29 3b 0d 0a 20  gW(zWideMsg);.. 
1860: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
1870: 65 28 7a 57 69 64 65 4d 73 67 29 3b 0d 0a 20 20  e(zWideMsg);..  
1880: 20 20 7d 0d 0a 20 20 7d 0d 0a 23 65 6c 73 65 0d    }..  }..#else.
1890: 0a 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72  .  fprintf(stder
18a0: 72 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  r, "%s", sqlite3
18b0: 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 26  StrAccumFinish(&
18c0: 61 63 63 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  acc));..#endif..
18d0: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66  }..#endif....#if
18e0: 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50   defined(INTEROP
18f0: 5f 4c 4f 47 29 0d 0a 53 51 4c 49 54 45 5f 50 52  _LOG)..SQLITE_PR
1900: 49 56 41 54 45 20 69 6e 74 20 6c 6f 67 43 6f 6e  IVATE int logCon
1910: 66 69 67 75 72 65 64 20 3d 20 30 3b 0d 0a 0d 0a  figured = 0;....
1920: 53 51 4c 49 54 45 5f 50 52 49 56 41 54 45 20 76  SQLITE_PRIVATE v
1930: 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 74 65 72  oid sqlite3Inter
1940: 6f 70 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 76 6f  opLogCallback(vo
1950: 69 64 20 2a 70 41 72 67 2c 20 69 6e 74 20 69 43  id *pArg, int iC
1960: 6f 64 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  ode, const char 
1970: 2a 7a 4d 73 67 29 7b 0d 0a 20 20 73 71 6c 69 74  *zMsg){..  sqlit
1980: 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22  e3InteropDebug("
1990: 49 4e 54 45 52 4f 50 5f 4c 4f 47 20 28 25 64 29  INTEROP_LOG (%d)
19a0: 20 25 73 5c 6e 22 2c 20 69 43 6f 64 65 2c 20 7a   %s\n", iCode, z
19b0: 4d 73 67 29 3b 0d 0a 7d 0d 0a 23 65 6e 64 69 66  Msg);..}..#endif
19c0: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69  ....SQLITE_API i
19d0: 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  nt WINAPI sqlite
19e0: 33 5f 6d 61 6c 6c 6f 63 5f 73 69 7a 65 5f 69 6e  3_malloc_size_in
19f0: 74 65 72 6f 70 28 76 6f 69 64 20 2a 70 29 7b 0d  terop(void *p){.
1a00: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
1a10: 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 70 29 3b 0d  3MallocSize(p);.
1a20: 0a 7d 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65  .}....#if define
1a30: 64 28 49 4e 54 45 52 4f 50 5f 4c 45 47 41 43 59  d(INTEROP_LEGACY
1a40: 5f 43 4c 4f 53 45 29 20 7c 7c 20 53 51 4c 49 54  _CLOSE) || SQLIT
1a50: 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52  E_VERSION_NUMBER
1a60: 20 3c 20 33 30 30 37 30 31 34 0d 0a 53 51 4c 49   < 3007014..SQLI
1a70: 54 45 5f 50 52 49 56 41 54 45 20 76 6f 69 64 20  TE_PRIVATE void 
1a80: 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  * sqlite3DbMallo
1a90: 63 5a 65 72 6f 5f 69 6e 74 65 72 6f 70 28 73 71  cZero_interop(sq
1aa0: 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 20 6e  lite3 *db, int n
1ab0: 29 0d 0a 7b 0d 0a 20 20 76 6f 69 64 20 2a 70 3b  )..{..  void *p;
1ac0: 0d 0a 20 20 69 66 20 28 64 62 29 20 7b 0d 0a 20  ..  if (db) {.. 
1ad0: 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
1ae0: 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78  _enter(db->mutex
1af0: 29 3b 0d 0a 20 20 7d 0d 0a 20 20 70 20 3d 20 73  );..  }..  p = s
1b00: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
1b10: 72 6f 28 64 62 2c 6e 29 3b 0d 0a 20 20 69 66 20  ro(db,n);..  if 
1b20: 28 64 62 29 20 7b 0d 0a 20 20 20 20 73 71 6c 69  (db) {..    sqli
1b30: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
1b40: 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 7d  db->mutex);..  }
1b50: 0d 0a 20 20 72 65 74 75 72 6e 20 70 3b 0d 0a 7d  ..  return p;..}
1b60: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 50 52 49 56 41  ....SQLITE_PRIVA
1b70: 54 45 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  TE void sqlite3D
1b80: 62 46 72 65 65 5f 69 6e 74 65 72 6f 70 28 73 71  bFree_interop(sq
1b90: 6c 69 74 65 33 20 2a 64 62 2c 20 76 6f 69 64 20  lite3 *db, void 
1ba0: 2a 70 29 0d 0a 7b 0d 0a 20 20 69 66 20 28 64 62  *p)..{..  if (db
1bb0: 29 20 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65 33  ) {..    sqlite3
1bc0: 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d  _mutex_enter(db-
1bd0: 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 7d 0d 0a 20  >mutex);..  }.. 
1be0: 20 69 66 20 28 70 29 20 7b 0d 0a 20 20 20 20 73   if (p) {..    s
1bf0: 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
1c00: 74 54 79 70 65 28 70 2c 20 4d 45 4d 54 59 50 45  tType(p, MEMTYPE
1c10: 5f 44 42 7c 4d 45 4d 54 59 50 45 5f 48 45 41 50  _DB|MEMTYPE_HEAP
1c20: 29 3b 0d 0a 20 20 7d 0d 0a 20 20 73 71 6c 69 74  );..  }..  sqlit
1c30: 65 33 44 62 46 72 65 65 28 64 62 2c 70 29 3b 0d  e3DbFree(db,p);.
1c40: 0a 20 20 69 66 20 28 64 62 29 20 7b 0d 0a 20 20  .  if (db) {..  
1c50: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
1c60: 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29  leave(db->mutex)
1c70: 3b 0d 0a 20 20 7d 0d 0a 7d 0d 0a 23 65 6e 64 69  ;..  }..}..#endi
1c80: 66 0d 0a 0d 0a 2f 2a 0d 0a 20 20 20 20 54 68 65  f..../*..    The
1c90: 20 67 6f 61 6c 20 6f 66 20 74 68 69 73 20 76 65   goal of this ve
1ca0: 72 73 69 6f 6e 20 6f 66 20 63 6c 6f 73 65 20 69  rsion of close i
1cb0: 73 20 64 69 66 66 65 72 65 6e 74 20 74 68 61 6e  s different than
1cc0: 20 74 68 61 74 20 6f 66 20 73 71 6c 69 74 65 33   that of sqlite3
1cd0: 5f 63 6c 6f 73 65 28 29 2c 20 61 6e 64 20 69 73  _close(), and is
1ce0: 20 64 65 73 69 67 6e 65 64 20 74 6f 20 6c 65 6e   designed to len
1cf0: 64 20 69 74 73 65 6c 66 20 62 65 74 74 65 72 20  d itself better 
1d00: 74 6f 20 2e 4e 45 54 27 73 20 6e 6f 6e 2d 64 65  to .NET's non-de
1d10: 74 65 72 6d 69 6e 69 73 74 69 63 20 66 69 6e 61  terministic fina
1d20: 6c 69 7a 65 72 73 20 61 6e 64 0d 0a 20 20 20 20  lizers and..    
1d30: 74 68 65 20 47 43 20 74 68 72 65 61 64 2e 20 20  the GC thread.  
1d40: 53 51 4c 69 74 65 20 77 69 6c 6c 20 6e 6f 74 20  SQLite will not 
1d50: 63 6c 6f 73 65 20 61 20 64 61 74 61 62 61 73 65  close a database
1d60: 20 69 66 20 73 74 61 74 65 6d 65 6e 74 73 20 61   if statements a
1d70: 72 65 20 6f 70 65 6e 20 6f 6e 20 69 74 20 2d 2d  re open on it --
1d80: 20 62 75 74 20 66 6f 72 20 6f 75 72 20 70 75 72   but for our pur
1d90: 70 6f 73 65 73 2c 20 77 65 27 64 20 72 61 74 68  poses, we'd rath
1da0: 65 72 20 66 69 6e 61 6c 69 7a 65 20 61 6c 6c 20  er finalize all 
1db0: 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
1dc0: 73 0d 0a 20 20 20 20 61 6e 64 20 66 6f 72 63 69  s..    and forci
1dd0: 62 6c 79 20 63 6c 6f 73 65 20 74 68 65 20 64 61  bly close the da
1de0: 74 61 62 61 73 65 2e 20 20 54 68 65 20 72 65 61  tabase.  The rea
1df0: 73 6f 6e 20 69 73 20 73 69 6d 70 6c 65 20 2d 2d  son is simple --
1e00: 20 61 20 6c 6f 74 20 6f 66 20 70 65 6f 70 6c 65   a lot of people
1e10: 20 64 6f 6e 27 74 20 44 69 73 70 6f 73 65 28 29   don't Dispose()
1e20: 20 6f 66 20 74 68 65 69 72 20 6f 62 6a 65 63 74   of their object
1e30: 73 20 63 6f 72 72 65 63 74 6c 79 20 61 6e 64 20  s correctly and 
1e40: 6c 65 74 20 74 68 65 20 67 61 72 62 61 67 65 20  let the garbage 
1e50: 63 6f 6c 6c 65 63 74 6f 72 0d 0a 20 20 20 20 64  collector..    d
1e60: 6f 20 69 74 2e 20 20 54 68 69 73 20 6c 65 61 64  o it.  This lead
1e70: 73 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20  s to unexpected 
1e80: 62 65 68 61 76 69 6f 72 20 77 68 65 6e 20 61 20  behavior when a 
1e90: 75 73 65 72 20 74 68 69 6e 6b 73 20 74 68 65 79  user thinks they
1ea0: 27 76 65 20 63 6c 6f 73 65 64 20 61 20 64 61 74  've closed a dat
1eb0: 61 62 61 73 65 2c 20 62 75 74 20 69 74 27 73 20  abase, but it's 
1ec0: 73 74 69 6c 6c 20 6f 70 65 6e 20 62 65 63 61 75  still open becau
1ed0: 73 65 20 6e 6f 74 20 61 6c 6c 20 74 68 65 20 73  se not all the s
1ee0: 74 61 74 65 6d 65 6e 74 73 20 68 61 76 65 0d 0a  tatements have..
1ef0: 20 20 20 20 68 69 74 20 74 68 65 20 47 43 20 79      hit the GC y
1f00: 65 74 2e 0d 0a 0d 0a 20 20 20 20 53 6f 2c 20 68  et.....    So, h
1f10: 65 72 65 20 77 65 20 68 61 76 65 20 61 20 70 72  ere we have a pr
1f20: 6f 62 6c 65 6d 20 2e 2e 2e 20 2e 4e 45 54 20 68  oblem ... .NET h
1f30: 61 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  as a pointer to 
1f40: 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66 20 73 71  any number of sq
1f50: 6c 69 74 65 33 5f 73 74 6d 74 20 6f 62 6a 65 63  lite3_stmt objec
1f60: 74 73 2e 20 20 57 65 20 63 61 6e 27 74 20 63 61  ts.  We can't ca
1f70: 6c 6c 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  ll sqlite3_final
1f80: 69 7a 65 28 29 20 6f 6e 20 74 68 65 73 65 20 62  ize() on these b
1f90: 65 63 61 75 73 65 0d 0a 20 20 20 20 74 68 65 69  ecause..    thei
1fa0: 72 20 6d 65 6d 6f 72 79 20 69 73 20 66 72 65 65  r memory is free
1fb0: 64 20 61 6e 64 20 63 61 6e 20 62 65 20 75 73 65  d and can be use
1fc0: 64 20 66 6f 72 20 73 6f 6d 65 74 68 69 6e 67 20  d for something 
1fd0: 65 6c 73 65 2e 20 20 54 68 65 20 47 43 20 74 68  else.  The GC th
1fe0: 72 65 61 64 20 63 6f 75 6c 64 20 70 6f 74 65 6e  read could poten
1ff0: 74 69 61 6c 6c 79 20 74 72 79 20 61 6e 64 20 63  tially try and c
2000: 61 6c 6c 20 66 69 6e 61 6c 69 7a 65 20 61 67 61  all finalize aga
2010: 69 6e 20 6f 6e 20 74 68 65 20 73 74 61 74 65 6d  in on the statem
2020: 65 6e 74 20 61 66 74 65 72 0d 0a 20 20 20 20 74  ent after..    t
2030: 68 61 74 20 6d 65 6d 6f 72 79 20 77 61 73 20 64  hat memory was d
2040: 65 61 6c 6c 6f 63 61 74 65 64 2e 20 20 42 41 44  eallocated.  BAD
2050: 2e 20 20 53 6f 2c 20 77 68 61 74 20 77 65 20 6e  .  So, what we n
2060: 65 65 64 20 74 6f 20 64 6f 20 69 73 20 6d 61 6b  eed to do is mak
2070: 65 20 61 20 63 6f 70 79 20 6f 66 20 65 61 63 68  e a copy of each
2080: 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 6e 64 20   statement, and 
2090: 63 61 6c 6c 20 66 69 6e 61 6c 69 7a 65 28 29 20  call finalize() 
20a0: 6f 6e 20 74 68 65 20 63 6f 70 79 20 2d 2d 20 73  on the copy -- s
20b0: 6f 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69  o that the origi
20c0: 6e 61 6c 0d 0a 20 20 20 20 73 74 61 74 65 6d 65  nal..    stateme
20d0: 6e 74 27 73 20 6d 65 6d 6f 72 79 20 69 73 20 70  nt's memory is p
20e0: 72 65 73 65 72 76 65 64 2c 20 61 6e 64 20 6d 61  reserved, and ma
20f0: 72 6b 65 64 20 61 73 20 42 41 44 2c 20 62 75 74  rked as BAD, but
2100: 20 77 65 20 63 61 6e 20 73 74 69 6c 6c 20 6d 61   we can still ma
2110: 6e 61 67 65 20 74 6f 20 66 69 6e 61 6c 69 7a 65  nage to finalize
2120: 20 65 76 65 72 79 74 68 69 6e 67 20 61 6e 64 20   everything and 
2130: 66 6f 72 63 69 62 6c 79 20 63 6c 6f 73 65 20 74  forcibly close t
2140: 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 4c 61  he database.  La
2150: 74 65 72 20 77 68 65 6e 20 74 68 65 0d 0a 20 20  ter when the..  
2160: 20 20 47 43 20 67 65 74 73 20 61 72 6f 75 6e 64    GC gets around
2170: 20 74 6f 20 63 61 6c 6c 69 6e 67 20 66 69 6e 61   to calling fina
2180: 6c 69 7a 65 5f 69 6e 74 65 72 6f 70 28 29 20 6f  lize_interop() o
2190: 6e 20 74 68 65 20 22 62 61 64 22 20 73 74 61 74  n the "bad" stat
21a0: 65 6d 65 6e 74 2c 20 77 65 20 64 65 74 65 63 74  ement, we detect
21b0: 20 74 68 61 74 20 61 6e 64 20 66 69 6e 69 73 68   that and finish
21c0: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
21d0: 65 20 70 6f 69 6e 74 65 72 2e 0d 0a 2a 2f 0d 0a  e pointer...*/..
21e0: 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57  SQLITE_API int W
21f0: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6c  INAPI sqlite3_cl
2200: 6f 73 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  ose_interop(sqli
2210: 74 65 33 20 2a 64 62 29 0d 0a 7b 0d 0a 20 20 69  te3 *db)..{..  i
2220: 6e 74 20 72 65 74 3b 0d 0a 23 69 66 20 21 64 65  nt ret;..#if !de
2230: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 4c 45  fined(INTEROP_LE
2240: 47 41 43 59 5f 43 4c 4f 53 45 29 20 26 26 20 53  GACY_CLOSE) && S
2250: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
2260: 4d 42 45 52 20 3e 3d 20 33 30 30 37 30 31 34 0d  MBER >= 3007014.
2270: 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49  ...#if defined(I
2280: 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26  NTEROP_DEBUG) &&
2290: 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20   (INTEROP_DEBUG 
22a0: 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f  & INTEROP_DEBUG_
22b0: 43 4c 4f 53 45 29 0d 0a 20 20 73 71 6c 69 74 65  CLOSE)..  sqlite
22c0: 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73  3InteropDebug("s
22d0: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 5f 69 6e 74  qlite3_close_int
22e0: 65 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20  erop(): calling 
22f0: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 5f 76 32  sqlite3_close_v2
2300: 28 25 70 29 2e 2e 2e 5c 6e 22 2c 20 64 62 29 3b  (%p)...\n", db);
2310: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65  ..#endif....  re
2320: 74 20 3d 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  t = sqlite3_clos
2330: 65 5f 76 32 28 64 62 29 3b 0d 0a 0d 0a 23 69 66  e_v2(db);....#if
2340: 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50   defined(INTEROP
2350: 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e 54 45  _DEBUG) && (INTE
2360: 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45  ROP_DEBUG & INTE
2370: 52 4f 50 5f 44 45 42 55 47 5f 43 4c 4f 53 45 29  ROP_DEBUG_CLOSE)
2380: 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72  ..  sqlite3Inter
2390: 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33  opDebug("sqlite3
23a0: 5f 63 6c 6f 73 65 5f 69 6e 74 65 72 6f 70 28 29  _close_interop()
23b0: 3a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 5f  : sqlite3_close_
23c0: 76 32 28 25 70 29 20 72 65 74 75 72 6e 65 64 20  v2(%p) returned 
23d0: 25 64 2e 5c 6e 22 2c 20 64 62 2c 20 72 65 74 29  %d.\n", db, ret)
23e0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72  ;..#endif....  r
23f0: 65 74 75 72 6e 20 72 65 74 3b 0d 0a 23 65 6c 73  eturn ret;..#els
2400: 65 0d 0a 20 20 72 65 74 20 3d 20 73 71 6c 69 74  e..  ret = sqlit
2410: 65 33 5f 63 6c 6f 73 65 28 64 62 29 3b 0d 0a 0d  e3_close(db);...
2420: 0a 20 20 69 66 20 28 72 65 74 20 3d 3d 20 53 51  .  if (ret == SQ
2430: 4c 49 54 45 5f 42 55 53 59 29 0d 0a 20 20 7b 0d  LITE_BUSY)..  {.
2440: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  .    sqlite3_mut
2450: 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74  ex_enter(db->mut
2460: 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 69 66 20 28  ex);....    if (
2470: 21 64 62 2d 3e 70 56 64 62 65 29 0d 0a 20 20 20  !db->pVdbe)..   
2480: 20 7b 0d 0a 20 20 20 20 20 20 73 71 6c 69 74 65   {..      sqlite
2490: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62  3_mutex_leave(db
24a0: 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 20 20 20  ->mutex);..     
24b0: 20 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 20 20   return ret;..  
24c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 77 68 69 6c 65    }....    while
24d0: 20 28 64 62 2d 3e 70 56 64 62 65 29 0d 0a 20 20   (db->pVdbe)..  
24e0: 20 20 7b 0d 0a 20 20 20 20 20 20 2f 2a 20 4d 61    {..      /* Ma
24f0: 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65  ke a copy of the
2500: 20 66 69 72 73 74 20 70 72 65 70 61 72 65 64 20   first prepared 
2510: 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0d 0a 20 20  statement */..  
2520: 20 20 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56      Vdbe *p = (V
2530: 64 62 65 20 2a 29 73 71 6c 69 74 65 33 44 62 4d  dbe *)sqlite3DbM
2540: 61 6c 6c 6f 63 5a 65 72 6f 5f 69 6e 74 65 72 6f  allocZero_intero
2550: 70 28 64 62 2c 20 73 69 7a 65 6f 66 28 56 64 62  p(db, sizeof(Vdb
2560: 65 29 29 3b 0d 0a 20 20 20 20 20 20 56 64 62 65  e));..      Vdbe
2570: 20 2a 70 6f 20 3d 20 64 62 2d 3e 70 56 64 62 65   *po = db->pVdbe
2580: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 21  ;....      if (!
2590: 70 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  p)..      {..   
25a0: 20 20 20 20 20 72 65 74 20 3d 20 53 51 4c 49 54       ret = SQLIT
25b0: 45 5f 4e 4f 4d 45 4d 3b 0d 0a 20 20 20 20 20 20  E_NOMEM;..      
25c0: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
25d0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 43 6f 70 79 4d  }....      CopyM
25e0: 65 6d 6f 72 79 28 70 2c 20 70 6f 2c 20 73 69 7a  emory(p, po, siz
25f0: 65 6f 66 28 56 64 62 65 29 29 3b 0d 0a 0d 0a 20  eof(Vdbe));.... 
2600: 20 20 20 20 20 2f 2a 20 50 75 74 20 69 74 20 6f       /* Put it o
2610: 6e 20 74 68 65 20 63 68 61 69 6e 20 73 6f 20 77  n the chain so w
2620: 65 20 63 61 6e 20 66 72 65 65 20 69 74 20 2a 2f  e can free it */
2630: 0d 0a 20 20 20 20 20 20 64 62 2d 3e 70 56 64 62  ..      db->pVdb
2640: 65 20 3d 20 70 3b 0d 0a 20 20 20 20 20 20 72 65  e = p;..      re
2650: 74 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  t = sqlite3_fina
2660: 6c 69 7a 65 28 28 73 71 6c 69 74 65 33 5f 73 74  lize((sqlite3_st
2670: 6d 74 20 2a 29 70 29 3b 20 2f 2a 20 54 68 69 73  mt *)p); /* This
2680: 20 77 69 6c 6c 20 61 6c 73 6f 20 66 72 65 65 20   will also free 
2690: 74 68 65 20 63 6f 70 79 27 73 20 6d 65 6d 6f 72  the copy's memor
26a0: 79 20 2a 2f 0d 0a 20 20 20 20 20 20 69 66 20 28  y */..      if (
26b0: 72 65 74 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ret)..      {.. 
26c0: 20 20 20 20 20 20 20 2f 2a 20 66 69 6e 61 6c 69         /* finali
26d0: 7a 65 20 66 61 69 6c 65 64 20 2d 2d 20 73 6f 20  ze failed -- so 
26e0: 77 65 20 6d 75 73 74 20 70 75 74 20 62 61 63 6b  we must put back
26f0: 20 61 6e 79 74 68 69 6e 67 20 77 65 20 6d 75 6e   anything we mun
2700: 67 65 64 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  ged */..        
2710: 43 6f 70 79 4d 65 6d 6f 72 79 28 70 6f 2c 20 70  CopyMemory(po, p
2720: 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 29 29 3b  , sizeof(Vdbe));
2730: 0d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 56  ..        db->pV
2740: 64 62 65 20 3d 20 70 6f 3b 0d 0a 0d 0a 20 20 20  dbe = po;....   
2750: 20 20 20 20 20 2f 2a 0d 0a 20 20 20 20 20 20 20       /*..       
2760: 20 2a 2a 20 4e 4f 54 45 3a 20 4f 6b 2c 20 77 65   ** NOTE: Ok, we
2770: 20 6d 75 73 74 20 66 72 65 65 20 74 68 69 73 20   must free this 
2780: 62 6c 6f 63 6b 20 74 68 61 74 20 2a 77 65 2a 20  block that *we* 
2790: 61 6c 6c 6f 63 61 74 65 64 20 28 61 62 6f 76 65  allocated (above
27a0: 29 20 73 69 6e 63 65 0d 0a 20 20 20 20 20 20 20  ) since..       
27b0: 20 2a 2a 20 20 20 20 20 20 20 66 69 6e 61 6c 69   **       finali
27c0: 7a 65 20 64 69 64 20 6e 6f 74 20 64 6f 20 73 6f  ze did not do so
27d0: 2e 0d 0a 20 20 20 20 20 20 20 20 2a 2f 0d 0a 20  ...        */.. 
27e0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
27f0: 46 72 65 65 5f 69 6e 74 65 72 6f 70 28 64 62 2c  Free_interop(db,
2800: 20 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 72   p);..        br
2810: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  eak;..      }.. 
2820: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
2830: 20 7b 0d 0a 20 20 20 20 20 20 20 20 5a 65 72 6f   {..        Zero
2840: 4d 65 6d 6f 72 79 28 70 6f 2c 20 73 69 7a 65 6f  Memory(po, sizeo
2850: 66 28 56 64 62 65 29 29 3b 0d 0a 20 20 20 20 20  f(Vdbe));..     
2860: 20 20 20 70 6f 2d 3e 6d 61 67 69 63 20 3d 20 56     po->magic = V
2870: 44 42 45 5f 4d 41 47 49 43 5f 44 45 41 44 3b 0d  DBE_MAGIC_DEAD;.
2880: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
2890: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  .    sqlite3_mut
28a0: 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74  ex_leave(db->mut
28b0: 65 78 29 3b 0d 0a 20 20 20 20 72 65 74 20 3d 20  ex);..    ret = 
28c0: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64 62  sqlite3_close(db
28d0: 29 3b 0d 0a 20 20 7d 0d 0a 20 20 72 65 74 75 72  );..  }..  retur
28e0: 6e 20 72 65 74 3b 0d 0a 23 65 6e 64 69 66 0d 0a  n ret;..#endif..
28f0: 7d 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64  }....#if defined
2900: 28 49 4e 54 45 52 4f 50 5f 4c 4f 47 29 0d 0a 53  (INTEROP_LOG)..S
2910: 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49  QLITE_API int WI
2920: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6e  NAPI sqlite3_con
2930: 66 69 67 5f 6c 6f 67 5f 69 6e 74 65 72 6f 70 28  fig_log_interop(
2940: 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72 65 74 3b  )..{..  int ret;
2950: 0d 0a 20 20 69 66 28 20 21 6c 6f 67 43 6f 6e 66  ..  if( !logConf
2960: 69 67 75 72 65 64 20 29 7b 0d 0a 20 20 20 20 72  igured ){..    r
2970: 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6e  et = sqlite3_con
2980: 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49  fig(SQLITE_CONFI
2990: 47 5f 4c 4f 47 2c 20 73 71 6c 69 74 65 33 49 6e  G_LOG, sqlite3In
29a0: 74 65 72 6f 70 4c 6f 67 43 61 6c 6c 62 61 63 6b  teropLogCallback
29b0: 2c 20 30 29 3b 0d 0a 20 20 20 20 69 66 28 20 72  , 0);..    if( r
29c0: 65 74 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  et==SQLITE_OK ){
29d0: 0d 0a 20 20 20 20 20 20 6c 6f 67 43 6f 6e 66 69  ..      logConfi
29e0: 67 75 72 65 64 20 3d 20 31 3b 0d 0a 20 20 20 20  gured = 1;..    
29f0: 7d 65 6c 73 65 7b 0d 0a 20 20 20 20 20 20 73 71  }else{..      sq
2a00: 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75  lite3InteropDebu
2a10: 67 28 22 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  g("sqlite3_confi
2a20: 67 5f 6c 6f 67 5f 69 6e 74 65 72 6f 70 28 29 3a  g_log_interop():
2a30: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28   sqlite3_config(
2a40: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f  SQLITE_CONFIG_LO
2a50: 47 29 20 72 65 74 75 72 6e 65 64 20 25 64 2e 5c  G) returned %d.\
2a60: 6e 22 2c 20 72 65 74 29 3b 0d 0a 20 20 20 20 7d  n", ret);..    }
2a70: 0d 0a 20 20 7d 65 6c 73 65 7b 0d 0a 20 20 20 20  ..  }else{..    
2a80: 72 65 74 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  ret = SQLITE_OK;
2a90: 0d 0a 20 20 7d 0d 0a 20 20 72 65 74 75 72 6e 20  ..  }..  return 
2aa0: 72 65 74 3b 0d 0a 7d 0d 0a 23 65 6e 64 69 66 0d  ret;..}..#endif.
2ab0: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f  ...SQLITE_API co
2ac0: 6e 73 74 20 63 68 61 72 20 2a 57 49 4e 41 50 49  nst char *WINAPI
2ad0: 20 69 6e 74 65 72 6f 70 5f 6c 69 62 76 65 72 73   interop_libvers
2ae0: 69 6f 6e 28 76 6f 69 64 29 0d 0a 7b 0d 0a 20 20  ion(void)..{..  
2af0: 72 65 74 75 72 6e 20 49 4e 54 45 52 4f 50 5f 56  return INTEROP_V
2b00: 45 52 53 49 4f 4e 3b 0d 0a 7d 0d 0a 0d 0a 53 51  ERSION;..}....SQ
2b10: 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 63  LITE_API const c
2b20: 68 61 72 20 2a 57 49 4e 41 50 49 20 69 6e 74 65  har *WINAPI inte
2b30: 72 6f 70 5f 73 6f 75 72 63 65 69 64 28 76 6f 69  rop_sourceid(voi
2b40: 64 29 0d 0a 7b 0d 0a 20 20 72 65 74 75 72 6e 20  d)..{..  return 
2b50: 49 4e 54 45 52 4f 50 5f 53 4f 55 52 43 45 5f 49  INTEROP_SOURCE_I
2b60: 44 20 22 20 22 20 49 4e 54 45 52 4f 50 5f 53 4f  D " " INTEROP_SO
2b70: 55 52 43 45 5f 54 49 4d 45 53 54 41 4d 50 3b 0d  URCE_TIMESTAMP;.
2b80: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
2b90: 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69   int WINAPI sqli
2ba0: 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70  te3_open_interop
2bb0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 66 69 6c  (const char *fil
2bc0: 65 6e 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61  ename, const cha
2bd0: 72 20 2a 76 66 73 4e 61 6d 65 2c 20 69 6e 74 20  r *vfsName, int 
2be0: 66 6c 61 67 73 2c 20 69 6e 74 20 65 78 74 46 75  flags, int extFu
2bf0: 6e 63 73 2c 20 73 71 6c 69 74 65 33 20 2a 2a 70  ncs, sqlite3 **p
2c00: 70 64 62 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72  pdb)..{..  int r
2c10: 65 74 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e  et;....#if defin
2c20: 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  ed(INTEROP_DEBUG
2c30: 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45  ) && (INTEROP_DE
2c40: 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45  BUG & INTEROP_DE
2c50: 42 55 47 5f 4f 50 45 4e 29 0d 0a 20 20 73 71 6c  BUG_OPEN)..  sql
2c60: 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67  ite3InteropDebug
2c70: 28 22 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69  ("sqlite3_open_i
2c80: 6e 74 65 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e  nterop(): callin
2c90: 67 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76  g sqlite3_open_v
2ca0: 32 28 5c 22 25 73 5c 22 2c 20 5c 22 25 73 5c 22  2(\"%s\", \"%s\"
2cb0: 2c 20 25 64 2c 20 25 64 2c 20 25 70 29 2e 2e 2e  , %d, %d, %p)...
2cc0: 5c 6e 22 2c 20 66 69 6c 65 6e 61 6d 65 2c 20 76  \n", filename, v
2cd0: 66 73 4e 61 6d 65 2c 20 66 6c 61 67 73 2c 20 65  fsName, flags, e
2ce0: 78 74 46 75 6e 63 73 2c 20 70 70 64 62 29 3b 0d  xtFuncs, ppdb);.
2cf0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74  .#endif....  ret
2d00: 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f   = sqlite3_open_
2d10: 76 32 28 66 69 6c 65 6e 61 6d 65 2c 20 70 70 64  v2(filename, ppd
2d20: 62 2c 20 66 6c 61 67 73 2c 20 76 66 73 4e 61 6d  b, flags, vfsNam
2d30: 65 29 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e  e);....#if defin
2d40: 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  ed(INTEROP_DEBUG
2d50: 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45  ) && (INTEROP_DE
2d60: 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45  BUG & INTEROP_DE
2d70: 42 55 47 5f 4f 50 45 4e 29 0d 0a 20 20 73 71 6c  BUG_OPEN)..  sql
2d80: 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67  ite3InteropDebug
2d90: 28 22 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69  ("sqlite3_open_i
2da0: 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c 69 74 65  nterop(): sqlite
2db0: 33 5f 6f 70 65 6e 5f 76 32 28 5c 22 25 73 5c 22  3_open_v2(\"%s\"
2dc0: 2c 20 5c 22 25 73 5c 22 2c 20 25 64 2c 20 25 64  , \"%s\", %d, %d
2dd0: 2c 20 25 70 29 20 72 65 74 75 72 6e 65 64 20 25  , %p) returned %
2de0: 64 2e 5c 6e 22 2c 20 66 69 6c 65 6e 61 6d 65 2c  d.\n", filename,
2df0: 20 76 66 73 4e 61 6d 65 2c 20 66 6c 61 67 73 2c   vfsName, flags,
2e00: 20 65 78 74 46 75 6e 63 73 2c 20 70 70 64 62 2c   extFuncs, ppdb,
2e10: 20 72 65 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a   ret);..#endif..
2e20: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
2e30: 54 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f  TEROP_EXTENSION_
2e40: 46 55 4e 43 54 49 4f 4e 53 29 0d 0a 20 20 69 66  FUNCTIONS)..  if
2e50: 20 28 28 72 65 74 20 3d 3d 20 53 51 4c 49 54 45   ((ret == SQLITE
2e60: 5f 4f 4b 29 20 26 26 20 70 70 64 62 20 26 26 20  _OK) && ppdb && 
2e70: 65 78 74 46 75 6e 63 73 29 0d 0a 20 20 20 20 52  extFuncs)..    R
2e80: 65 67 69 73 74 65 72 45 78 74 65 6e 73 69 6f 6e  egisterExtension
2e90: 46 75 6e 63 74 69 6f 6e 73 28 2a 70 70 64 62 29  Functions(*ppdb)
2ea0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72  ;..#endif....  r
2eb0: 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a 0d  eturn ret;..}...
2ec0: 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20  .SQLITE_API int 
2ed0: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 6f  WINAPI sqlite3_o
2ee0: 70 65 6e 31 36 5f 69 6e 74 65 72 6f 70 28 63 6f  pen16_interop(co
2ef0: 6e 73 74 20 63 68 61 72 20 2a 66 69 6c 65 6e 61  nst char *filena
2f00: 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  me, const char *
2f10: 76 66 73 4e 61 6d 65 2c 20 69 6e 74 20 66 6c 61  vfsName, int fla
2f20: 67 73 2c 20 69 6e 74 20 65 78 74 46 75 6e 63 73  gs, int extFuncs
2f30: 2c 20 73 71 6c 69 74 65 33 20 2a 2a 70 70 64 62  , sqlite3 **ppdb
2f40: 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72 65 74 3b  )..{..  int ret;
2f50: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
2f60: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26  INTEROP_DEBUG) &
2f70: 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  & (INTEROP_DEBUG
2f80: 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47   & INTEROP_DEBUG
2f90: 5f 4f 50 45 4e 31 36 29 0d 0a 20 20 73 71 6c 69  _OPEN16)..  sqli
2fa0: 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28  te3InteropDebug(
2fb0: 22 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 5f  "sqlite3_open16_
2fc0: 69 6e 74 65 72 6f 70 28 29 3a 20 63 61 6c 6c 69  interop(): calli
2fd0: 6e 67 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f  ng sqlite3_open_
2fe0: 69 6e 74 65 72 6f 70 28 5c 22 25 73 5c 22 2c 20  interop(\"%s\", 
2ff0: 5c 22 25 73 5c 22 2c 20 25 64 2c 20 25 64 2c 20  \"%s\", %d, %d, 
3000: 25 70 29 2e 2e 2e 5c 6e 22 2c 20 66 69 6c 65 6e  %p)...\n", filen
3010: 61 6d 65 2c 20 76 66 73 4e 61 6d 65 2c 20 66 6c  ame, vfsName, fl
3020: 61 67 73 2c 20 65 78 74 46 75 6e 63 73 2c 20 70  ags, extFuncs, p
3030: 70 64 62 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  pdb);..#endif...
3040: 0a 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33  .  ret = sqlite3
3050: 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28 66 69  _open_interop(fi
3060: 6c 65 6e 61 6d 65 2c 20 76 66 73 4e 61 6d 65 2c  lename, vfsName,
3070: 20 66 6c 61 67 73 2c 20 65 78 74 46 75 6e 63 73   flags, extFuncs
3080: 2c 20 70 70 64 62 29 3b 0d 0a 0d 0a 23 69 66 20  , ppdb);....#if 
3090: 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f  defined(INTEROP_
30a0: 44 45 42 55 47 29 20 26 26 20 28 49 4e 54 45 52  DEBUG) && (INTER
30b0: 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52  OP_DEBUG & INTER
30c0: 4f 50 5f 44 45 42 55 47 5f 4f 50 45 4e 31 36 29  OP_DEBUG_OPEN16)
30d0: 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72  ..  sqlite3Inter
30e0: 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33  opDebug("sqlite3
30f0: 5f 6f 70 65 6e 31 36 5f 69 6e 74 65 72 6f 70 28  _open16_interop(
3100: 29 3a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f  ): sqlite3_open_
3110: 69 6e 74 65 72 6f 70 28 5c 22 25 73 5c 22 2c 20  interop(\"%s\", 
3120: 5c 22 25 73 5c 22 2c 20 25 64 2c 20 25 64 2c 20  \"%s\", %d, %d, 
3130: 25 70 29 20 72 65 74 75 72 6e 65 64 20 25 64 2e  %p) returned %d.
3140: 5c 6e 22 2c 20 66 69 6c 65 6e 61 6d 65 2c 20 76  \n", filename, v
3150: 66 73 4e 61 6d 65 2c 20 66 6c 61 67 73 2c 20 65  fsName, flags, e
3160: 78 74 46 75 6e 63 73 2c 20 70 70 64 62 2c 20 72  xtFuncs, ppdb, r
3170: 65 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  et);..#endif....
3180: 20 20 69 66 20 28 28 72 65 74 20 3d 3d 20 53 51    if ((ret == SQ
3190: 4c 49 54 45 5f 4f 4b 29 20 26 26 20 70 70 64 62  LITE_OK) && ppdb
31a0: 20 26 26 20 21 44 62 48 61 73 50 72 6f 70 65 72   && !DbHasProper
31b0: 74 79 28 2a 70 70 64 62 2c 20 30 2c 20 44 42 5f  ty(*ppdb, 0, DB_
31c0: 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 29 0d 0a  SchemaLoaded))..
31d0: 20 20 7b 0d 0a 20 20 20 20 45 4e 43 28 2a 70 70    {..    ENC(*pp
31e0: 64 62 29 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  db) = SQLITE_UTF
31f0: 31 36 4e 41 54 49 56 45 3b 0d 0a 0d 0a 23 69 66  16NATIVE;....#if
3200: 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f   SQLITE_VERSION_
3210: 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 38 30 30  NUMBER >= 300800
3220: 38 0d 0a 20 20 20 20 2f 2f 0d 0a 20 20 20 20 2f  8..    //..    /
3230: 2f 20 42 55 47 46 49 58 3a 20 53 65 65 20 74 69  / BUGFIX: See ti
3240: 63 6b 65 74 20 5b 37 63 31 35 31 61 32 66 30 65  cket [7c151a2f0e
3250: 32 32 38 30 34 63 5d 2e 0d 0a 20 20 20 20 2f 2f  22804c]...    //
3260: 0d 0a 20 20 20 20 53 43 48 45 4d 41 5f 45 4e 43  ..    SCHEMA_ENC
3270: 28 2a 70 70 64 62 29 20 3d 20 53 51 4c 49 54 45  (*ppdb) = SQLITE
3280: 5f 55 54 46 31 36 4e 41 54 49 56 45 3b 0d 0a 23  _UTF16NATIVE;..#
3290: 65 6e 64 69 66 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  endif..  }....  
32a0: 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a  return ret;..}..
32b0: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e  ..SQLITE_API con
32c0: 73 74 20 63 68 61 72 20 2a 57 49 4e 41 50 49 20  st char *WINAPI 
32d0: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 5f 69  sqlite3_errmsg_i
32e0: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 20 2a  nterop(sqlite3 *
32f0: 64 62 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a  db, int *plen)..
3300: 7b 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  {..  const char 
3310: 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f  *pval = sqlite3_
3320: 65 72 72 6d 73 67 28 64 62 29 3b 0d 0a 20 20 69  errmsg(db);..  i
3330: 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d  f (plen) *plen =
3340: 20 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e 28 70   pval ? strlen(p
3350: 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74  val) : 0;..  ret
3360: 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a  urn pval;..}....
3370: 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57  SQLITE_API int W
3380: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 68  INAPI sqlite3_ch
3390: 61 6e 67 65 73 5f 69 6e 74 65 72 6f 70 28 73 71  anges_interop(sq
33a0: 6c 69 74 65 33 20 2a 64 62 29 0d 0a 7b 0d 0a 20  lite3 *db)..{.. 
33b0: 20 69 6e 74 20 72 65 73 75 6c 74 3b 0d 0a 0d 0a   int result;....
33c0: 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45  #if defined(INTE
33d0: 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28 49  ROP_DEBUG) && (I
33e0: 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49  NTEROP_DEBUG & I
33f0: 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 43 48 41  NTEROP_DEBUG_CHA
3400: 4e 47 45 53 29 0d 0a 20 20 73 71 6c 69 74 65 33  NGES)..  sqlite3
3410: 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71  InteropDebug("sq
3420: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 5f 69 6e  lite3_changes_in
3430: 74 65 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67  terop(): calling
3440: 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73   sqlite3_changes
3450: 28 25 70 29 2e 2e 2e 5c 6e 22 2c 20 64 62 29 3b  (%p)...\n", db);
3460: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 6e  ..#endif....#ifn
3470: 64 65 66 20 4e 44 45 42 55 47 0d 0a 20 20 69 66  def NDEBUG..  if
3480: 20 28 21 64 62 29 0d 0a 20 20 20 20 20 20 73 71   (!db)..      sq
3490: 6c 69 74 65 33 49 6e 74 65 72 6f 70 42 72 65 61  lite3InteropBrea
34a0: 6b 28 22 6e 75 6c 6c 20 64 61 74 61 62 61 73 65  k("null database
34b0: 20 68 61 6e 64 6c 65 20 66 6f 72 20 73 71 6c 69   handle for sqli
34c0: 74 65 33 5f 63 68 61 6e 67 65 73 28 29 22 29 3b  te3_changes()");
34d0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65  ..#endif....  re
34e0: 73 75 6c 74 20 3d 20 73 71 6c 69 74 65 33 5f 63  sult = sqlite3_c
34f0: 68 61 6e 67 65 73 28 64 62 29 3b 0d 0a 0d 0a 23  hanges(db);....#
3500: 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52  if defined(INTER
3510: 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e  OP_DEBUG) && (IN
3520: 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e  TEROP_DEBUG & IN
3530: 54 45 52 4f 50 5f 44 45 42 55 47 5f 43 48 41 4e  TEROP_DEBUG_CHAN
3540: 47 45 53 29 0d 0a 20 20 73 71 6c 69 74 65 33 49  GES)..  sqlite3I
3550: 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c  nteropDebug("sql
3560: 69 74 65 33 5f 63 68 61 6e 67 65 73 5f 69 6e 74  ite3_changes_int
3570: 65 72 6f 70 28 29 3a 20 73 71 6c 69 74 65 33 5f  erop(): sqlite3_
3580: 63 68 61 6e 67 65 73 28 25 70 29 20 72 65 74 75  changes(%p) retu
3590: 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 64 62 2c  rned %d.\n", db,
35a0: 20 72 65 73 75 6c 74 29 3b 0d 0a 23 65 6e 64 69   result);..#endi
35b0: 66 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 72 65  f....  return re
35c0: 73 75 6c 74 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49  sult;..}....SQLI
35d0: 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41 50  TE_API int WINAP
35e0: 49 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  I sqlite3_prepar
35f0: 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  e_interop(sqlite
3600: 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61  3 *db, const cha
3610: 72 20 2a 73 71 6c 2c 20 69 6e 74 20 6e 62 79 74  r *sql, int nbyt
3620: 65 73 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  es, sqlite3_stmt
3630: 20 2a 2a 70 70 73 74 6d 74 2c 20 63 6f 6e 73 74   **ppstmt, const
3640: 20 63 68 61 72 20 2a 2a 70 7a 74 61 69 6c 2c 20   char **pztail, 
3650: 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20  int *plen)..{.. 
3660: 20 69 6e 74 20 6e 3b 0d 0a 0d 0a 23 69 66 20 64   int n;....#if d
3670: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44  efined(INTEROP_D
3680: 45 42 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f  EBUG) && (INTERO
3690: 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f  P_DEBUG & INTERO
36a0: 50 5f 44 45 42 55 47 5f 50 52 45 50 41 52 45 29  P_DEBUG_PREPARE)
36b0: 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72  ..  sqlite3Inter
36c0: 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33  opDebug("sqlite3
36d0: 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70  _prepare_interop
36e0: 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69  (): calling sqli
36f0: 74 65 33 5f 70 72 65 70 61 72 65 28 25 70 2c 20  te3_prepare(%p, 
3700: 5c 22 25 73 5c 22 2c 20 25 64 2c 20 25 70 29 2e  \"%s\", %d, %p).
3710: 2e 2e 5c 6e 22 2c 20 64 62 2c 20 73 71 6c 2c 20  ..\n", db, sql, 
3720: 6e 62 79 74 65 73 2c 20 70 70 73 74 6d 74 29 3b  nbytes, ppstmt);
3730: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20  ..#endif....#if 
3740: 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e  SQLITE_VERSION_N
3750: 55 4d 42 45 52 20 3e 3d 20 33 30 30 33 30 30 39  UMBER >= 3003009
3760: 0d 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f  ..  n = sqlite3_
3770: 70 72 65 70 61 72 65 5f 76 32 28 64 62 2c 20 73  prepare_v2(db, s
3780: 71 6c 2c 20 6e 62 79 74 65 73 2c 20 70 70 73 74  ql, nbytes, ppst
3790: 6d 74 2c 20 70 7a 74 61 69 6c 29 3b 0d 0a 23 65  mt, pztail);..#e
37a0: 6c 73 65 0d 0a 20 20 6e 20 3d 20 73 71 6c 69 74  lse..  n = sqlit
37b0: 65 33 5f 70 72 65 70 61 72 65 28 64 62 2c 20 73  e3_prepare(db, s
37c0: 71 6c 2c 20 6e 62 79 74 65 73 2c 20 70 70 73 74  ql, nbytes, ppst
37d0: 6d 74 2c 20 70 7a 74 61 69 6c 29 3b 0d 0a 23 65  mt, pztail);..#e
37e0: 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69  ndif....#if defi
37f0: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  ned(INTEROP_DEBU
3800: 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44  G) && (INTEROP_D
3810: 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44  EBUG & INTEROP_D
3820: 45 42 55 47 5f 50 52 45 50 41 52 45 29 0d 0a 20  EBUG_PREPARE).. 
3830: 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44   sqlite3InteropD
3840: 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 70 72  ebug("sqlite3_pr
3850: 65 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 29 3a  epare_interop():
3860: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
3870: 28 25 70 2c 20 5c 22 25 73 5c 22 2c 20 25 64 2c  (%p, \"%s\", %d,
3880: 20 25 70 29 20 72 65 74 75 72 6e 65 64 20 25 64   %p) returned %d
3890: 2e 5c 6e 22 2c 20 64 62 2c 20 73 71 6c 2c 20 6e  .\n", db, sql, n
38a0: 62 79 74 65 73 2c 20 70 70 73 74 6d 74 2c 20 6e  bytes, ppstmt, n
38b0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
38c0: 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20  if (plen) *plen 
38d0: 3d 20 28 70 7a 74 61 69 6c 20 26 26 20 2a 70 7a  = (pztail && *pz
38e0: 74 61 69 6c 29 20 3f 20 73 74 72 6c 65 6e 28 2a  tail) ? strlen(*
38f0: 70 7a 74 61 69 6c 29 20 3a 20 30 3b 0d 0a 0d 0a  pztail) : 0;....
3900: 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 7d 0d 0a    return n;..}..
3910: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74  ..SQLITE_API int
3920: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
3930: 70 72 65 70 61 72 65 31 36 5f 69 6e 74 65 72 6f  prepare16_intero
3940: 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63  p(sqlite3 *db, c
3950: 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 2c 20  onst void *sql, 
3960: 69 6e 74 20 6e 63 68 61 72 73 2c 20 73 71 6c 69  int nchars, sqli
3970: 74 65 33 5f 73 74 6d 74 20 2a 2a 70 70 73 74 6d  te3_stmt **ppstm
3980: 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2a  t, const void **
3990: 70 7a 74 61 69 6c 2c 20 69 6e 74 20 2a 70 6c 65  pztail, int *ple
39a0: 6e 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 6e 3b 0d  n)..{..  int n;.
39b0: 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49  ...#if defined(I
39c0: 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26  NTEROP_DEBUG) &&
39d0: 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20   (INTEROP_DEBUG 
39e0: 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f  & INTEROP_DEBUG_
39f0: 50 52 45 50 41 52 45 31 36 29 0d 0a 20 20 73 71  PREPARE16)..  sq
3a00: 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75  lite3InteropDebu
3a10: 67 28 22 73 71 6c 69 74 65 33 5f 70 72 65 70 61  g("sqlite3_prepa
3a20: 72 65 5f 69 6e 74 65 72 6f 70 28 29 3a 20 63 61  re_interop(): ca
3a30: 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72  lling sqlite3_pr
3a40: 65 70 61 72 65 31 36 28 25 70 2c 20 5c 22 25 73  epare16(%p, \"%s
3a50: 5c 22 2c 20 25 64 2c 20 25 70 29 2e 2e 2e 5c 6e  \", %d, %p)...\n
3a60: 22 2c 20 64 62 2c 20 73 71 6c 2c 20 6e 63 68 61  ", db, sql, ncha
3a70: 72 73 2c 20 70 70 73 74 6d 74 29 3b 0d 0a 23 65  rs, ppstmt);..#e
3a80: 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 53 51 4c 49  ndif....#if SQLI
3a90: 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45  TE_VERSION_NUMBE
3aa0: 52 20 3e 3d 20 33 30 30 33 30 30 39 0d 0a 20 20  R >= 3003009..  
3ab0: 6e 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  n = sqlite3_prep
3ac0: 61 72 65 31 36 5f 76 32 28 64 62 2c 20 73 71 6c  are16_v2(db, sql
3ad0: 2c 20 6e 63 68 61 72 73 20 2a 20 73 69 7a 65 6f  , nchars * sizeo
3ae0: 66 28 77 63 68 61 72 5f 74 29 2c 20 70 70 73 74  f(wchar_t), ppst
3af0: 6d 74 2c 20 70 7a 74 61 69 6c 29 3b 0d 0a 23 65  mt, pztail);..#e
3b00: 6c 73 65 0d 0a 20 20 6e 20 3d 20 73 71 6c 69 74  lse..  n = sqlit
3b10: 65 33 5f 70 72 65 70 61 72 65 31 36 28 64 62 2c  e3_prepare16(db,
3b20: 20 73 71 6c 2c 20 6e 63 68 61 72 73 20 2a 20 73   sql, nchars * s
3b30: 69 7a 65 6f 66 28 77 63 68 61 72 5f 74 29 2c 20  izeof(wchar_t), 
3b40: 70 70 73 74 6d 74 2c 20 70 7a 74 61 69 6c 29 3b  ppstmt, pztail);
3b50: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20  ..#endif....#if 
3b60: 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f  defined(INTEROP_
3b70: 44 45 42 55 47 29 20 26 26 20 28 49 4e 54 45 52  DEBUG) && (INTER
3b80: 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52  OP_DEBUG & INTER
3b90: 4f 50 5f 44 45 42 55 47 5f 50 52 45 50 41 52 45  OP_DEBUG_PREPARE
3ba0: 31 36 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e  16)..  sqlite3In
3bb0: 74 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69  teropDebug("sqli
3bc0: 74 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74 65  te3_prepare_inte
3bd0: 72 6f 70 28 29 3a 20 73 71 6c 69 74 65 33 5f 70  rop(): sqlite3_p
3be0: 72 65 70 61 72 65 31 36 28 25 70 2c 20 5c 22 25  repare16(%p, \"%
3bf0: 73 5c 22 2c 20 25 64 2c 20 25 70 29 20 72 65 74  s\", %d, %p) ret
3c00: 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 64 62  urned %d.\n", db
3c10: 2c 20 73 71 6c 2c 20 6e 63 68 61 72 73 2c 20 70  , sql, nchars, p
3c20: 70 73 74 6d 74 2c 20 6e 29 3b 0d 0a 23 65 6e 64  pstmt, n);..#end
3c30: 69 66 0d 0a 0d 0a 20 20 69 66 20 28 70 6c 65 6e  if....  if (plen
3c40: 29 20 2a 70 6c 65 6e 20 3d 20 28 70 7a 74 61 69  ) *plen = (pztai
3c50: 6c 20 26 26 20 2a 70 7a 74 61 69 6c 29 20 3f 20  l && *pztail) ? 
3c60: 77 63 73 6c 65 6e 28 28 77 63 68 61 72 5f 74 20  wcslen((wchar_t 
3c70: 2a 29 2a 70 7a 74 61 69 6c 29 20 2a 20 73 69 7a  *)*pztail) * siz
3c80: 65 6f 66 28 77 63 68 61 72 5f 74 29 20 3a 20 30  eof(wchar_t) : 0
3c90: 3b 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 6e 3b  ;....  return n;
3ca0: 0d 0a 7d 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e  ..}....#if defin
3cb0: 65 64 28 49 4e 54 45 52 4f 50 5f 56 49 52 54 55  ed(INTEROP_VIRTU
3cc0: 41 4c 5f 54 41 42 4c 45 29 20 26 26 20 53 51 4c  AL_TABLE) && SQL
3cd0: 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  ITE_VERSION_NUMB
3ce0: 45 52 20 3e 3d 20 33 30 30 34 30 30 31 0d 0a 23  ER >= 3004001..#
3cf0: 69 66 64 65 66 20 5f 57 49 4e 33 32 0a 5f 5f 64  ifdef _WIN32.__d
3d00: 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72  eclspec(dllexpor
3d10: 74 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 2a  t).#endif.void *
3d20: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 64  sqlite3_create_d
3d30: 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c 65  isposable_module
3d40: 28 0d 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  (..  sqlite3 *db
3d50: 2c 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  ,..  const char 
3d60: 2a 7a 4e 61 6d 65 2c 0d 0a 20 20 63 6f 6e 73 74  *zName,..  const
3d70: 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
3d80: 2a 70 2c 0d 0a 20 20 76 6f 69 64 20 2a 70 43 6c  *p,..  void *pCl
3d90: 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 76 6f 69  ientData,..  voi
3da0: 64 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69  d(*xDestroy)(voi
3db0: 64 2a 29 0d 0a 29 3b 20 2f 2a 20 64 65 66 69 6e  d*)..); /* defin
3dc0: 65 64 20 69 6e 20 22 73 72 63 2f 65 78 74 2f 76  ed in "src/ext/v
3dd0: 74 73 68 69 6d 2e 63 22 20 28 69 6e 63 6c 75 64  tshim.c" (includ
3de0: 65 64 20 62 65 6c 6f 77 29 20 2a 2f 0d 0a 0d 0a  ed below) */....
3df0: 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69 64 20  SQLITE_API void 
3e00: 2a 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f  *WINAPI sqlite3_
3e10: 63 72 65 61 74 65 5f 64 69 73 70 6f 73 61 62 6c  create_disposabl
3e20: 65 5f 6d 6f 64 75 6c 65 5f 69 6e 74 65 72 6f 70  e_module_interop
3e30: 28 0d 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  (..  sqlite3 *db
3e40: 2c 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  ,..  const char 
3e50: 2a 7a 4e 61 6d 65 2c 0d 0a 20 20 73 71 6c 69 74  *zName,..  sqlit
3e60: 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
3e70: 6c 65 2c 0d 0a 20 20 69 6e 74 20 69 56 65 72 73  le,..  int iVers
3e80: 69 6f 6e 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 43  ion,..  int (*xC
3e90: 72 65 61 74 65 29 28 73 71 6c 69 74 65 33 2a 2c  reate)(sqlite3*,
3ea0: 20 76 6f 69 64 20 2a 2c 20 69 6e 74 2c 20 63 6f   void *, int, co
3eb0: 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 2a  nst char *const*
3ec0: 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a  , sqlite3_vtab *
3ed0: 2a 2c 20 63 68 61 72 2a 2a 29 2c 0d 0a 20 20 69  *, char**),..  i
3ee0: 6e 74 20 28 2a 78 43 6f 6e 6e 65 63 74 29 28 73  nt (*xConnect)(s
3ef0: 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 20 2a 2c  qlite3*, void *,
3f00: 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
3f10: 20 2a 63 6f 6e 73 74 2a 2c 20 73 71 6c 69 74 65   *const*, sqlite
3f20: 33 5f 76 74 61 62 20 2a 2a 2c 20 63 68 61 72 2a  3_vtab **, char*
3f30: 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 42 65  *),..  int (*xBe
3f40: 73 74 49 6e 64 65 78 29 28 73 71 6c 69 74 65 33  stIndex)(sqlite3
3f50: 5f 76 74 61 62 20 2a 2c 20 73 71 6c 69 74 65 33  _vtab *, sqlite3
3f60: 5f 69 6e 64 65 78 5f 69 6e 66 6f 2a 29 2c 0d 0a  _index_info*),..
3f70: 20 20 69 6e 74 20 28 2a 78 44 69 73 63 6f 6e 6e    int (*xDisconn
3f80: 65 63 74 29 28 73 71 6c 69 74 65 33 5f 76 74 61  ect)(sqlite3_vta
3f90: 62 20 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78  b *),..  int (*x
3fa0: 44 65 73 74 72 6f 79 29 28 73 71 6c 69 74 65 33  Destroy)(sqlite3
3fb0: 5f 76 74 61 62 20 2a 29 2c 0d 0a 20 20 69 6e 74  _vtab *),..  int
3fc0: 20 28 2a 78 4f 70 65 6e 29 28 73 71 6c 69 74 65   (*xOpen)(sqlite
3fd0: 33 5f 76 74 61 62 20 2a 2c 20 73 71 6c 69 74 65  3_vtab *, sqlite
3fe0: 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 2a  3_vtab_cursor **
3ff0: 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 43 6c 6f  ),..  int (*xClo
4000: 73 65 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62  se)(sqlite3_vtab
4010: 5f 63 75 72 73 6f 72 2a 29 2c 0d 0a 20 20 69 6e  _cursor*),..  in
4020: 74 20 28 2a 78 46 69 6c 74 65 72 29 28 73 71 6c  t (*xFilter)(sql
4030: 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
4040: 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
4050: 61 72 20 2a 2c 20 69 6e 74 2c 20 73 71 6c 69 74  ar *, int, sqlit
4060: 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0d 0a 20  e3_value **),.. 
4070: 20 69 6e 74 20 28 2a 78 4e 65 78 74 29 28 73 71   int (*xNext)(sq
4080: 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
4090: 72 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 45  r*),..  int (*xE
40a0: 6f 66 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62  of)(sqlite3_vtab
40b0: 5f 63 75 72 73 6f 72 2a 29 2c 0d 0a 20 20 69 6e  _cursor*),..  in
40c0: 74 20 28 2a 78 43 6f 6c 75 6d 6e 29 28 73 71 6c  t (*xColumn)(sql
40d0: 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
40e0: 2a 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *, sqlite3_conte
40f0: 78 74 2a 2c 20 69 6e 74 29 2c 0d 0a 20 20 69 6e  xt*, int),..  in
4100: 74 20 28 2a 78 52 6f 77 69 64 29 28 73 71 6c 69  t (*xRowid)(sqli
4110: 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 2a  te3_vtab_cursor*
4120: 2c 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20  , sqlite3_int64 
4130: 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 55 70  *),..  int (*xUp
4140: 64 61 74 65 29 28 73 71 6c 69 74 65 33 5f 76 74  date)(sqlite3_vt
4150: 61 62 20 2a 2c 20 69 6e 74 2c 20 73 71 6c 69 74  ab *, int, sqlit
4160: 65 33 5f 76 61 6c 75 65 20 2a 2a 2c 20 73 71 6c  e3_value **, sql
4170: 69 74 65 33 5f 69 6e 74 36 34 20 2a 29 2c 0d 0a  ite3_int64 *),..
4180: 20 20 69 6e 74 20 28 2a 78 42 65 67 69 6e 29 28    int (*xBegin)(
4190: 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 29 2c  sqlite3_vtab *),
41a0: 0d 0a 20 20 69 6e 74 20 28 2a 78 53 79 6e 63 29  ..  int (*xSync)
41b0: 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 29  (sqlite3_vtab *)
41c0: 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d  ,..  int (*xComm
41d0: 69 74 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62  it)(sqlite3_vtab
41e0: 20 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 52   *),..  int (*xR
41f0: 6f 6c 6c 62 61 63 6b 29 28 73 71 6c 69 74 65 33  ollback)(sqlite3
4200: 5f 76 74 61 62 20 2a 29 2c 0d 0a 20 20 69 6e 74  _vtab *),..  int
4210: 20 28 2a 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e   (*xFindFunction
4220: 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a  )(sqlite3_vtab *
4230: 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
4240: 72 20 2a 2c 20 76 6f 69 64 20 28 2a 2a 70 78 46  r *, void (**pxF
4250: 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  unc)(sqlite3_con
4260: 74 65 78 74 2a 2c 20 69 6e 74 2c 20 73 71 6c 69  text*, int, sqli
4270: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 2c 20 76 6f  te3_value**), vo
4280: 69 64 20 2a 2a 70 70 41 72 67 29 2c 0d 0a 20 20  id **ppArg),..  
4290: 69 6e 74 20 28 2a 78 52 65 6e 61 6d 65 29 28 73  int (*xRename)(s
42a0: 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 2c 20 63  qlite3_vtab *, c
42b0: 6f 6e 73 74 20 63 68 61 72 20 2a 29 2c 0d 0a 20  onst char *),.. 
42c0: 20 69 6e 74 20 28 2a 78 53 61 76 65 70 6f 69 6e   int (*xSavepoin
42d0: 74 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20  t)(sqlite3_vtab 
42e0: 2a 2c 20 69 6e 74 29 2c 0d 0a 20 20 69 6e 74 20  *, int),..  int 
42f0: 28 2a 78 52 65 6c 65 61 73 65 29 28 73 71 6c 69  (*xRelease)(sqli
4300: 74 65 33 5f 76 74 61 62 20 2a 2c 20 69 6e 74 29  te3_vtab *, int)
4310: 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 52 6f 6c 6c  ,..  int (*xRoll
4320: 62 61 63 6b 54 6f 29 28 73 71 6c 69 74 65 33 5f  backTo)(sqlite3_
4330: 76 74 61 62 20 2a 2c 20 69 6e 74 29 2c 0d 0a 20  vtab *, int),.. 
4340: 20 76 6f 69 64 20 2a 70 43 6c 69 65 6e 74 44 61   void *pClientDa
4350: 74 61 2c 0d 0a 20 20 76 6f 69 64 28 2a 78 44 65  ta,..  void(*xDe
4360: 73 74 72 6f 79 4d 6f 64 75 6c 65 29 28 76 6f 69  stroyModule)(voi
4370: 64 2a 29 0d 0a 29 7b 0d 0a 20 20 69 66 20 28 21  d*)..){..  if (!
4380: 70 4d 6f 64 75 6c 65 29 20 72 65 74 75 72 6e 20  pModule) return 
4390: 30 3b 0d 0a 20 20 6d 65 6d 73 65 74 28 70 4d 6f  0;..  memset(pMo
43a0: 64 75 6c 65 2c 20 30 2c 20 73 69 7a 65 6f 66 28  dule, 0, sizeof(
43b0: 2a 70 4d 6f 64 75 6c 65 29 29 3b 0d 0a 20 20 70  *pModule));..  p
43c0: 4d 6f 64 75 6c 65 2d 3e 69 56 65 72 73 69 6f 6e  Module->iVersion
43d0: 20 3d 20 69 56 65 72 73 69 6f 6e 3b 0d 0a 20 20   = iVersion;..  
43e0: 70 4d 6f 64 75 6c 65 2d 3e 78 43 72 65 61 74 65  pModule->xCreate
43f0: 20 3d 20 78 43 72 65 61 74 65 3b 0d 0a 20 20 70   = xCreate;..  p
4400: 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6e 6e 65 63 74  Module->xConnect
4410: 20 3d 20 78 43 6f 6e 6e 65 63 74 3b 0d 0a 20 20   = xConnect;..  
4420: 70 4d 6f 64 75 6c 65 2d 3e 78 42 65 73 74 49 6e  pModule->xBestIn
4430: 64 65 78 20 3d 20 78 42 65 73 74 49 6e 64 65 78  dex = xBestIndex
4440: 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 44  ;..  pModule->xD
4450: 69 73 63 6f 6e 6e 65 63 74 20 3d 20 78 44 69 73  isconnect = xDis
4460: 63 6f 6e 6e 65 63 74 3b 0d 0a 20 20 70 4d 6f 64  connect;..  pMod
4470: 75 6c 65 2d 3e 78 44 65 73 74 72 6f 79 20 3d 20  ule->xDestroy = 
4480: 78 44 65 73 74 72 6f 79 3b 0d 0a 20 20 70 4d 6f  xDestroy;..  pMo
4490: 64 75 6c 65 2d 3e 78 4f 70 65 6e 20 3d 20 78 4f  dule->xOpen = xO
44a0: 70 65 6e 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d  pen;..  pModule-
44b0: 3e 78 43 6c 6f 73 65 20 3d 20 78 43 6c 6f 73 65  >xClose = xClose
44c0: 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 46  ;..  pModule->xF
44d0: 69 6c 74 65 72 20 3d 20 78 46 69 6c 74 65 72 3b  ilter = xFilter;
44e0: 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65  ..  pModule->xNe
44f0: 78 74 20 3d 20 78 4e 65 78 74 3b 0d 0a 20 20 70  xt = xNext;..  p
4500: 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 20 3d 20 78  Module->xEof = x
4510: 45 6f 66 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d  Eof;..  pModule-
4520: 3e 78 43 6f 6c 75 6d 6e 20 3d 20 78 43 6f 6c 75  >xColumn = xColu
4530: 6d 6e 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e  mn;..  pModule->
4540: 78 52 6f 77 69 64 20 3d 20 78 52 6f 77 69 64 3b  xRowid = xRowid;
4550: 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70  ..  pModule->xUp
4560: 64 61 74 65 20 3d 20 78 55 70 64 61 74 65 3b 0d  date = xUpdate;.
4570: 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 42 65 67  .  pModule->xBeg
4580: 69 6e 20 3d 20 78 42 65 67 69 6e 3b 0d 0a 20 20  in = xBegin;..  
4590: 70 4d 6f 64 75 6c 65 2d 3e 78 53 79 6e 63 20 3d  pModule->xSync =
45a0: 20 78 53 79 6e 63 3b 0d 0a 20 20 70 4d 6f 64 75   xSync;..  pModu
45b0: 6c 65 2d 3e 78 43 6f 6d 6d 69 74 20 3d 20 78 43  le->xCommit = xC
45c0: 6f 6d 6d 69 74 3b 0d 0a 20 20 70 4d 6f 64 75 6c  ommit;..  pModul
45d0: 65 2d 3e 78 52 6f 6c 6c 62 61 63 6b 20 3d 20 78  e->xRollback = x
45e0: 52 6f 6c 6c 62 61 63 6b 3b 0d 0a 20 20 70 4d 6f  Rollback;..  pMo
45f0: 64 75 6c 65 2d 3e 78 46 69 6e 64 46 75 6e 63 74  dule->xFindFunct
4600: 69 6f 6e 20 3d 20 78 46 69 6e 64 46 75 6e 63 74  ion = xFindFunct
4610: 69 6f 6e 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d  ion;..  pModule-
4620: 3e 78 52 65 6e 61 6d 65 20 3d 20 78 52 65 6e 61  >xRename = xRena
4630: 6d 65 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e  me;..  pModule->
4640: 78 53 61 76 65 70 6f 69 6e 74 20 3d 20 78 53 61  xSavepoint = xSa
4650: 76 65 70 6f 69 6e 74 3b 0d 0a 20 20 70 4d 6f 64  vepoint;..  pMod
4660: 75 6c 65 2d 3e 78 52 65 6c 65 61 73 65 20 3d 20  ule->xRelease = 
4670: 78 52 65 6c 65 61 73 65 3b 0d 0a 20 20 70 4d 6f  xRelease;..  pMo
4680: 64 75 6c 65 2d 3e 78 52 6f 6c 6c 62 61 63 6b 54  dule->xRollbackT
4690: 6f 20 3d 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 3b  o = xRollbackTo;
46a0: 0d 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74  ..  return sqlit
46b0: 65 33 5f 63 72 65 61 74 65 5f 64 69 73 70 6f 73  e3_create_dispos
46c0: 61 62 6c 65 5f 6d 6f 64 75 6c 65 28 64 62 2c 20  able_module(db, 
46d0: 7a 4e 61 6d 65 2c 20 70 4d 6f 64 75 6c 65 2c 20  zName, pModule, 
46e0: 70 43 6c 69 65 6e 74 44 61 74 61 2c 20 78 44 65  pClientData, xDe
46f0: 73 74 72 6f 79 4d 6f 64 75 6c 65 29 3b 0d 0a 7d  stroyModule);..}
4700: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 53 51 4c 49  ..#endif....SQLI
4710: 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41 50  TE_API int WINAP
4720: 49 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64  I sqlite3_bind_d
4730: 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73 71  ouble_interop(sq
4740: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74  lite3_stmt *stmt
4750: 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 64 6f 75 62  , int iCol, doub
4760: 6c 65 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 20 20 69  le *val)..{..  i
4770: 66 20 28 21 76 61 6c 29 20 72 65 74 75 72 6e 20  f (!val) return 
4780: 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 20  SQLITE_ERROR;.. 
4790: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f   return sqlite3_
47a0: 62 69 6e 64 5f 64 6f 75 62 6c 65 28 73 74 6d 74  bind_double(stmt
47b0: 2c 69 43 6f 6c 2c 2a 76 61 6c 29 3b 0d 0a 7d 0d  ,iCol,*val);..}.
47c0: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e  ...SQLITE_API in
47d0: 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  t WINAPI sqlite3
47e0: 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65  _bind_int64_inte
47f0: 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  rop(sqlite3_stmt
4800: 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c   *stmt, int iCol
4810: 2c 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a  , sqlite_int64 *
4820: 76 61 6c 29 0d 0a 7b 0d 0a 20 20 69 66 20 28 21  val)..{..  if (!
4830: 76 61 6c 29 20 72 65 74 75 72 6e 20 53 51 4c 49  val) return SQLI
4840: 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 72 65 74  TE_ERROR;..  ret
4850: 75 72 6e 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  urn sqlite3_bind
4860: 5f 69 6e 74 36 34 28 73 74 6d 74 2c 69 43 6f 6c  _int64(stmt,iCol
4870: 2c 2a 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51  ,*val);..}....SQ
4880: 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 63  LITE_API const c
4890: 68 61 72 20 2a 20 57 49 4e 41 50 49 20 73 71 6c  har * WINAPI sql
48a0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
48b0: 74 65 72 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70  ter_name_interop
48c0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73  (sqlite3_stmt *s
48d0: 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69  tmt, int iCol, i
48e0: 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20  nt *plen)..{..  
48f0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 76 61 6c  const char *pval
4900: 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   = sqlite3_bind_
4910: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 73  parameter_name(s
4920: 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 69  tmt, iCol);..  i
4930: 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d  f (plen) *plen =
4940: 20 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e 28 70   pval ? strlen(p
4950: 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74  val) : 0;..  ret
4960: 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a  urn pval;..}....
4970: 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74  SQLITE_API const
4980: 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49 20 73   char * WINAPI s
4990: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
49a0: 6d 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  me_interop(sqlit
49b0: 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69  e3_stmt *stmt, i
49c0: 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c  nt iCol, int *pl
49d0: 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20  en)..{..  const 
49e0: 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73 71 6c  char *pval = sql
49f0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
4a00: 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20  (stmt, iCol);.. 
4a10: 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e   if (plen) *plen
4a20: 20 3d 20 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e   = pval ? strlen
4a30: 28 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72  (pval) : 0;..  r
4a40: 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a  eturn pval;..}..
4a50: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e  ..SQLITE_API con
4a60: 73 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49  st void * WINAPI
4a70: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4a80: 6e 61 6d 65 31 36 5f 69 6e 74 65 72 6f 70 28 73  name16_interop(s
4a90: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d  qlite3_stmt *stm
4aa0: 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74  t, int iCol, int
4ab0: 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f   *plen)..{..  co
4ac0: 6e 73 74 20 76 6f 69 64 20 2a 70 76 61 6c 20 3d  nst void *pval =
4ad0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4ae0: 6e 61 6d 65 31 36 28 73 74 6d 74 2c 20 69 43 6f  name16(stmt, iCo
4af0: 6c 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29  l);..  if (plen)
4b00: 20 2a 70 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20   *plen = pval ? 
4b10: 77 63 73 6c 65 6e 28 28 77 63 68 61 72 5f 74 20  wcslen((wchar_t 
4b20: 2a 29 70 76 61 6c 29 20 2a 20 73 69 7a 65 6f 66  *)pval) * sizeof
4b30: 28 77 63 68 61 72 5f 74 29 20 3a 20 30 3b 0d 0a  (wchar_t) : 0;..
4b40: 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a    return pval;..
4b50: 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20  }....SQLITE_API 
4b60: 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 57 49 4e  const char * WIN
4b70: 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  API sqlite3_colu
4b80: 6d 6e 5f 64 65 63 6c 74 79 70 65 5f 69 6e 74 65  mn_decltype_inte
4b90: 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  rop(sqlite3_stmt
4ba0: 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c   *stmt, int iCol
4bb0: 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d  , int *plen)..{.
4bc0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 70  .  const char *p
4bd0: 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  val = sqlite3_co
4be0: 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 28 73 74  lumn_decltype(st
4bf0: 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 69 66  mt, iCol);..  if
4c00: 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20   (plen) *plen = 
4c10: 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e 28 70 76  pval ? strlen(pv
4c20: 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75  al) : 0;..  retu
4c30: 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53  rn pval;..}....S
4c40: 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20  QLITE_API const 
4c50: 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71  void * WINAPI sq
4c60: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
4c70: 6c 74 79 70 65 31 36 5f 69 6e 74 65 72 6f 70 28  ltype16_interop(
4c80: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74  sqlite3_stmt *st
4c90: 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e  mt, int iCol, in
4ca0: 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63  t *plen)..{..  c
4cb0: 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 61 6c 20  onst void *pval 
4cc0: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
4cd0: 5f 64 65 63 6c 74 79 70 65 31 36 28 73 74 6d 74  _decltype16(stmt
4ce0: 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 69 66 20 28  , iCol);..  if (
4cf0: 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20 70 76  plen) *plen = pv
4d00: 61 6c 20 3f 20 77 63 73 6c 65 6e 28 28 77 63 68  al ? wcslen((wch
4d10: 61 72 5f 74 20 2a 29 70 76 61 6c 29 20 2a 20 73  ar_t *)pval) * s
4d20: 69 7a 65 6f 66 28 77 63 68 61 72 5f 74 29 20 3a  izeof(wchar_t) :
4d30: 20 30 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70 76   0;..  return pv
4d40: 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45  al;..}....SQLITE
4d50: 5f 41 50 49 20 76 6f 69 64 20 57 49 4e 41 50 49  _API void WINAPI
4d60: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4d70: 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73  double_interop(s
4d80: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d  qlite3_stmt *stm
4d90: 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 64 6f 75  t, int iCol, dou
4da0: 62 6c 65 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 20 20  ble *val)..{..  
4db0: 69 66 20 28 21 76 61 6c 29 20 72 65 74 75 72 6e  if (!val) return
4dc0: 3b 0d 0a 20 20 2a 76 61 6c 20 3d 20 73 71 6c 69  ;..  *val = sqli
4dd0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  te3_column_doubl
4de0: 65 28 73 74 6d 74 2c 69 43 6f 6c 29 3b 0d 0a 7d  e(stmt,iCol);..}
4df0: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76  ....SQLITE_API v
4e00: 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74  oid WINAPI sqlit
4e10: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 5f  e3_column_int64_
4e20: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f  interop(sqlite3_
4e30: 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20  stmt *stmt, int 
4e40: 69 43 6f 6c 2c 20 73 71 6c 69 74 65 5f 69 6e 74  iCol, sqlite_int
4e50: 36 34 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 20 20 69  64 *val)..{..  i
4e60: 66 20 28 21 76 61 6c 29 20 72 65 74 75 72 6e 3b  f (!val) return;
4e70: 0d 0a 20 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74  ..  *val = sqlit
4e80: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28  e3_column_int64(
4e90: 73 74 6d 74 2c 69 43 6f 6c 29 3b 0d 0a 7d 0d 0a  stmt,iCol);..}..
4ea0: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69  ..SQLITE_API voi
4eb0: 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  d WINAPI sqlite3
4ec0: 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
4ed0: 69 64 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  id_interop(sqlit
4ee0: 65 33 20 2a 64 62 2c 20 73 71 6c 69 74 65 5f 69  e3 *db, sqlite_i
4ef0: 6e 74 36 34 20 2a 72 6f 77 49 64 29 0d 0a 7b 0d  nt64 *rowId)..{.
4f00: 0a 20 20 69 66 20 28 21 72 6f 77 49 64 29 20 72  .  if (!rowId) r
4f10: 65 74 75 72 6e 3b 0d 0a 20 20 2a 72 6f 77 49 64  eturn;..  *rowId
4f20: 20 3d 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f   = sqlite3_last_
4f30: 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 64 62 29  insert_rowid(db)
4f40: 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  ;..}....SQLITE_A
4f50: 50 49 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73  PI void WINAPI s
4f60: 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73  qlite3_memory_us
4f70: 65 64 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  ed_interop(sqlit
4f80: 65 5f 69 6e 74 36 34 20 2a 6e 42 79 74 65 73 29  e_int64 *nBytes)
4f90: 0d 0a 7b 0d 0a 20 20 69 66 20 28 21 6e 42 79 74  ..{..  if (!nByt
4fa0: 65 73 29 20 72 65 74 75 72 6e 3b 0d 0a 20 20 2a  es) return;..  *
4fb0: 6e 42 79 74 65 73 20 3d 20 73 71 6c 69 74 65 33  nBytes = sqlite3
4fc0: 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 28 29 3b 0d  _memory_used();.
4fd0: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
4fe0: 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c   void WINAPI sql
4ff0: 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68  ite3_memory_high
5000: 77 61 74 65 72 5f 69 6e 74 65 72 6f 70 28 69 6e  water_interop(in
5010: 74 20 72 65 73 65 74 46 6c 61 67 2c 20 73 71 6c  t resetFlag, sql
5020: 69 74 65 5f 69 6e 74 36 34 20 2a 6e 42 79 74 65  ite_int64 *nByte
5030: 73 29 0d 0a 7b 0d 0a 20 20 69 66 20 28 21 6e 42  s)..{..  if (!nB
5040: 79 74 65 73 29 20 72 65 74 75 72 6e 3b 0d 0a 20  ytes) return;.. 
5050: 20 2a 6e 42 79 74 65 73 20 3d 20 73 71 6c 69 74   *nBytes = sqlit
5060: 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61  e3_memory_highwa
5070: 74 65 72 28 72 65 73 65 74 46 6c 61 67 29 3b 0d  ter(resetFlag);.
5080: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
5090: 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
50a0: 63 68 61 72 20 2a 20 57 49 4e 41 50 49 20 73 71  char * WINAPI sq
50b0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
50c0: 74 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  t_interop(sqlite
50d0: 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e  3_stmt *stmt, in
50e0: 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65  t iCol, int *ple
50f0: 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 75  n)..{..  const u
5100: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70 76  nsigned char *pv
5110: 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  al = sqlite3_col
5120: 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2c 20 69  umn_text(stmt, i
5130: 43 6f 6c 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65  Col);..  if (ple
5140: 6e 29 20 2a 70 6c 65 6e 20 3d 20 73 71 6c 69 74  n) *plen = sqlit
5150: 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28  e3_column_bytes(
5160: 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20  stmt, iCol);..  
5170: 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d  return pval;..}.
5180: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f  ...SQLITE_API co
5190: 6e 73 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50  nst void * WINAP
51a0: 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  I sqlite3_column
51b0: 5f 74 65 78 74 31 36 5f 69 6e 74 65 72 6f 70 28  _text16_interop(
51c0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74  sqlite3_stmt *st
51d0: 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e  mt, int iCol, in
51e0: 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63  t *plen)..{..  c
51f0: 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 61 6c 20  onst void *pval 
5200: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
5210: 5f 74 65 78 74 31 36 28 73 74 6d 74 2c 20 69 43  _text16(stmt, iC
5220: 6f 6c 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e  ol);..  if (plen
5230: 29 20 2a 70 6c 65 6e 20 3d 20 73 71 6c 69 74 65  ) *plen = sqlite
5240: 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31 36  3_column_bytes16
5250: 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20  (stmt, iCol);.. 
5260: 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d   return pval;..}
5270: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69  ....SQLITE_API i
5280: 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  nt WINAPI sqlite
5290: 33 5f 66 69 6e 61 6c 69 7a 65 5f 69 6e 74 65 72  3_finalize_inter
52a0: 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  op(sqlite3_stmt 
52b0: 2a 73 74 6d 74 29 0d 0a 7b 0d 0a 20 20 69 6e 74  *stmt)..{..  int
52c0: 20 72 65 74 3b 0d 0a 23 69 66 20 21 64 65 66 69   ret;..#if !defi
52d0: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 4c 45 47 41  ned(INTEROP_LEGA
52e0: 43 59 5f 43 4c 4f 53 45 29 20 26 26 20 53 51 4c  CY_CLOSE) && SQL
52f0: 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  ITE_VERSION_NUMB
5300: 45 52 20 3e 3d 20 33 30 30 37 30 31 34 0d 0a 0d  ER >= 3007014...
5310: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54  .#if defined(INT
5320: 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28  EROP_DEBUG) && (
5330: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20  INTEROP_DEBUG & 
5340: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 46 49  INTEROP_DEBUG_FI
5350: 4e 41 4c 49 5a 45 29 0d 0a 20 20 56 64 62 65 20  NALIZE)..  Vdbe 
5360: 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 73 74 6d  *p = (Vdbe *)stm
5370: 74 3b 0d 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  t;..  sqlite3 *d
5380: 62 20 3d 20 70 20 3f 20 70 2d 3e 64 62 20 3a 20  b = p ? p->db : 
5390: 30 3b 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74  0;..  sqlite3Int
53a0: 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74  eropDebug("sqlit
53b0: 65 33 5f 66 69 6e 61 6c 69 7a 65 5f 69 6e 74 65  e3_finalize_inte
53c0: 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73  rop(): calling s
53d0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
53e0: 25 70 2c 20 25 70 29 2e 2e 2e 5c 6e 22 2c 20 64  %p, %p)...\n", d
53f0: 62 2c 20 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69  b, stmt);..#endi
5400: 66 0d 0a 0d 0a 20 20 72 65 74 20 3d 20 73 71 6c  f....  ret = sql
5410: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 73 74  ite3_finalize(st
5420: 6d 74 29 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69  mt);....#if defi
5430: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  ned(INTEROP_DEBU
5440: 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44  G) && (INTEROP_D
5450: 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44  EBUG & INTEROP_D
5460: 45 42 55 47 5f 46 49 4e 41 4c 49 5a 45 29 0d 0a  EBUG_FINALIZE)..
5470: 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70    sqlite3Interop
5480: 44 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 66  Debug("sqlite3_f
5490: 69 6e 61 6c 69 7a 65 5f 69 6e 74 65 72 6f 70 28  inalize_interop(
54a0: 29 3a 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  ): sqlite3_final
54b0: 69 7a 65 28 25 70 2c 20 25 70 29 20 72 65 74 75  ize(%p, %p) retu
54c0: 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 64 62 2c  rned %d.\n", db,
54d0: 20 73 74 6d 74 2c 20 72 65 74 29 3b 0d 0a 23 65   stmt, ret);..#e
54e0: 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 75 72 6e  ndif....  return
54f0: 20 72 65 74 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20   ret;..#else..  
5500: 56 64 62 65 20 2a 70 3b 0d 0a 20 20 72 65 74 20  Vdbe *p;..  ret 
5510: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0d 0a 0d 0a  = SQLITE_OK;....
5520: 20 20 70 20 3d 20 28 56 64 62 65 20 2a 29 73 74    p = (Vdbe *)st
5530: 6d 74 3b 0d 0a 20 20 69 66 20 28 70 29 0d 0a 20  mt;..  if (p).. 
5540: 20 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 20   {..    sqlite3 
5550: 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 0d 0a 0d 0a  *db = p->db;....
5560: 20 20 20 20 69 66 20 28 64 62 20 21 3d 20 4e 55      if (db != NU
5570: 4c 4c 29 0d 0a 20 20 20 20 20 20 73 71 6c 69 74  LL)..      sqlit
5580: 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64  e3_mutex_enter(d
5590: 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20 20  b->mutex);....  
55a0: 20 20 69 66 20 28 28 70 2d 3e 6d 61 67 69 63 20    if ((p->magic 
55b0: 3d 3d 20 56 44 42 45 5f 4d 41 47 49 43 5f 44 45  == VDBE_MAGIC_DE
55c0: 41 44 29 20 26 26 20 28 64 62 20 3d 3d 20 4e 55  AD) && (db == NU
55d0: 4c 4c 29 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  LL))..    {..   
55e0: 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
55f0: 5f 69 6e 74 65 72 6f 70 28 64 62 2c 20 70 29 3b  _interop(db, p);
5600: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 65 6c 73  ..    }..    els
5610: 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  e..    {..      
5620: 72 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 66 69  ret = sqlite3_fi
5630: 6e 61 6c 69 7a 65 28 73 74 6d 74 29 3b 0d 0a 20  nalize(stmt);.. 
5640: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 66 20 28     }....    if (
5650: 64 62 20 21 3d 20 4e 55 4c 4c 29 0d 0a 20 20 20  db != NULL)..   
5660: 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
5670: 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78  _leave(db->mutex
5680: 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 72 65 74  );..  }....  ret
5690: 75 72 6e 20 72 65 74 3b 0d 0a 23 65 6e 64 69 66  urn ret;..#endif
56a0: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
56b0: 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c  I int WINAPI sql
56c0: 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69  ite3_backup_fini
56d0: 73 68 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  sh_interop(sqlit
56e0: 65 33 5f 62 61 63 6b 75 70 20 2a 70 29 0d 0a 7b  e3_backup *p)..{
56f0: 0d 0a 20 20 69 6e 74 20 72 65 74 3b 0d 0a 0d 0a  ..  int ret;....
5700: 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45  #if defined(INTE
5710: 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28 49  ROP_DEBUG) && (I
5720: 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49  NTEROP_DEBUG & I
5730: 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 42 41 43  NTEROP_DEBUG_BAC
5740: 4b 55 50 5f 46 49 4e 49 53 48 29 0d 0a 20 20 73  KUP_FINISH)..  s
5750: 71 6c 69 74 65 33 2a 20 70 44 65 73 74 44 62 20  qlite3* pDestDb 
5760: 3d 20 70 20 3f 20 70 2d 3e 70 44 65 73 74 44 62  = p ? p->pDestDb
5770: 20 3a 20 30 3b 0d 0a 20 20 73 71 6c 69 74 65 33   : 0;..  sqlite3
5780: 2a 20 70 53 72 63 44 62 20 3d 20 70 20 3f 20 70  * pSrcDb = p ? p
5790: 2d 3e 70 53 72 63 44 62 20 3a 20 30 3b 0d 0a 20  ->pSrcDb : 0;.. 
57a0: 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44   sqlite3InteropD
57b0: 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 62 61  ebug("sqlite3_ba
57c0: 63 6b 75 70 5f 66 69 6e 69 73 68 5f 69 6e 74 65  ckup_finish_inte
57d0: 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73  rop(): calling s
57e0: 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69  qlite3_backup_fi
57f0: 6e 69 73 68 28 25 70 2c 20 25 70 2c 20 25 70 29  nish(%p, %p, %p)
5800: 2e 2e 2e 5c 6e 22 2c 20 70 44 65 73 74 44 62 2c  ...\n", pDestDb,
5810: 20 70 53 72 63 44 62 2c 20 70 29 3b 0d 0a 23 65   pSrcDb, p);..#e
5820: 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 20 3d 20  ndif....  ret = 
5830: 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66  sqlite3_backup_f
5840: 69 6e 69 73 68 28 70 29 3b 0d 0a 0d 0a 23 69 66  inish(p);....#if
5850: 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50   defined(INTEROP
5860: 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e 54 45  _DEBUG) && (INTE
5870: 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45  ROP_DEBUG & INTE
5880: 52 4f 50 5f 44 45 42 55 47 5f 42 41 43 4b 55 50  ROP_DEBUG_BACKUP
5890: 5f 46 49 4e 49 53 48 29 0d 0a 20 20 73 71 6c 69  _FINISH)..  sqli
58a0: 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28  te3InteropDebug(
58b0: 22 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f  "sqlite3_backup_
58c0: 66 69 6e 69 73 68 5f 69 6e 74 65 72 6f 70 28 29  finish_interop()
58d0: 3a 20 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  : sqlite3_backup
58e0: 5f 66 69 6e 69 73 68 28 25 70 2c 20 25 70 2c 20  _finish(%p, %p, 
58f0: 25 70 29 20 72 65 74 75 72 6e 65 64 20 25 64 2e  %p) returned %d.
5900: 5c 6e 22 2c 20 70 44 65 73 74 44 62 2c 20 70 53  \n", pDestDb, pS
5910: 72 63 44 62 2c 20 70 2c 20 72 65 74 29 3b 0d 0a  rcDb, p, ret);..
5920: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 75  #endif....  retu
5930: 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a 0d 0a 53 51  rn ret;..}....SQ
5940: 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e  LITE_API int WIN
5950: 41 50 49 20 73 71 6c 69 74 65 33 5f 62 6c 6f 62  API sqlite3_blob
5960: 5f 63 6c 6f 73 65 5f 69 6e 74 65 72 6f 70 28 73  _close_interop(s
5970: 71 6c 69 74 65 33 5f 62 6c 6f 62 20 2a 70 29 0d  qlite3_blob *p).
5980: 0a 7b 0d 0a 20 20 69 6e 74 20 72 65 74 3b 0d 0a  .{..  int ret;..
5990: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
59a0: 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20  TEROP_DEBUG) && 
59b0: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26  (INTEROP_DEBUG &
59c0: 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 42   INTEROP_DEBUG_B
59d0: 4c 4f 42 5f 43 4c 4f 53 45 29 0d 0a 20 20 73 71  LOB_CLOSE)..  sq
59e0: 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75  lite3InteropDebu
59f0: 67 28 22 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f  g("sqlite3_blob_
5a00: 63 6c 6f 73 65 5f 69 6e 74 65 72 6f 70 28 29 3a  close_interop():
5a10: 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33   calling sqlite3
5a20: 5f 62 6c 6f 62 5f 63 6c 6f 73 65 28 25 70 29 2e  _blob_close(%p).
5a30: 2e 2e 5c 6e 22 2c 20 70 29 3b 0d 0a 23 65 6e 64  ..\n", p);..#end
5a40: 69 66 0d 0a 0d 0a 20 20 72 65 74 20 3d 20 73 71  if....  ret = sq
5a50: 6c 69 74 65 33 5f 62 6c 6f 62 5f 63 6c 6f 73 65  lite3_blob_close
5a60: 28 70 29 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69  (p);....#if defi
5a70: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  ned(INTEROP_DEBU
5a80: 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44  G) && (INTEROP_D
5a90: 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44  EBUG & INTEROP_D
5aa0: 45 42 55 47 5f 42 4c 4f 42 5f 43 4c 4f 53 45 29  EBUG_BLOB_CLOSE)
5ab0: 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72  ..  sqlite3Inter
5ac0: 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33  opDebug("sqlite3
5ad0: 5f 62 6c 6f 62 5f 63 6c 6f 73 65 5f 69 6e 74 65  _blob_close_inte
5ae0: 72 6f 70 28 29 3a 20 73 71 6c 69 74 65 33 5f 62  rop(): sqlite3_b
5af0: 6c 6f 62 5f 63 6c 6f 73 65 28 25 70 29 20 72 65  lob_close(%p) re
5b00: 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 70  turned %d.\n", p
5b10: 2c 20 72 65 74 29 3b 0d 0a 23 65 6e 64 69 66 0d  , ret);..#endif.
5b20: 0a 0d 0a 20 20 72 65 74 75 72 6e 20 72 65 74 3b  ...  return ret;
5b30: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
5b40: 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c  I int WINAPI sql
5b50: 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65 72  ite3_reset_inter
5b60: 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  op(sqlite3_stmt 
5b70: 2a 73 74 6d 74 29 0d 0a 7b 0d 0a 20 20 69 6e 74  *stmt)..{..  int
5b80: 20 72 65 74 3b 0d 0a 23 69 66 20 21 64 65 66 69   ret;..#if !defi
5b90: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 4c 45 47 41  ned(INTEROP_LEGA
5ba0: 43 59 5f 43 4c 4f 53 45 29 20 26 26 20 53 51 4c  CY_CLOSE) && SQL
5bb0: 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  ITE_VERSION_NUMB
5bc0: 45 52 20 3e 3d 20 33 30 30 37 30 31 34 0d 0a 0d  ER >= 3007014...
5bd0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54  .#if defined(INT
5be0: 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28  EROP_DEBUG) && (
5bf0: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20  INTEROP_DEBUG & 
5c00: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 52 45  INTEROP_DEBUG_RE
5c10: 53 45 54 29 0d 0a 20 20 73 71 6c 69 74 65 33 49  SET)..  sqlite3I
5c20: 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c  nteropDebug("sql
5c30: 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65 72  ite3_reset_inter
5c40: 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73 71  op(): calling sq
5c50: 6c 69 74 65 33 5f 72 65 73 65 74 28 25 70 29 2e  lite3_reset(%p).
5c60: 2e 2e 5c 6e 22 2c 20 73 74 6d 74 29 3b 0d 0a 23  ..\n", stmt);..#
5c70: 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 20 3d  endif....  ret =
5c80: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 73   sqlite3_reset(s
5c90: 74 6d 74 29 3b 0d 0a 0d 0a 23 69 66 20 64 65 66  tmt);....#if def
5ca0: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42  ined(INTEROP_DEB
5cb0: 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f  UG) && (INTEROP_
5cc0: 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f  DEBUG & INTEROP_
5cd0: 44 45 42 55 47 5f 52 45 53 45 54 29 0d 0a 20 20  DEBUG_RESET)..  
5ce0: 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65  sqlite3InteropDe
5cf0: 62 75 67 28 22 73 71 6c 69 74 65 33 5f 72 65 73  bug("sqlite3_res
5d00: 65 74 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73 71  et_interop(): sq
5d10: 6c 69 74 65 33 5f 72 65 73 65 74 28 25 70 29 20  lite3_reset(%p) 
5d20: 72 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c  returned %d.\n",
5d30: 20 73 74 6d 74 2c 20 72 65 74 29 3b 0d 0a 23 65   stmt, ret);..#e
5d40: 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 75 72 6e  ndif....  return
5d50: 20 72 65 74 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20   ret;..#else..  
5d60: 69 66 20 28 73 74 6d 74 20 26 26 20 28 28 56 64  if (stmt && ((Vd
5d70: 62 65 20 2a 29 73 74 6d 74 29 2d 3e 6d 61 67 69  be *)stmt)->magi
5d80: 63 20 3d 3d 20 56 44 42 45 5f 4d 41 47 49 43 5f  c == VDBE_MAGIC_
5d90: 44 45 41 44 29 20 72 65 74 75 72 6e 20 53 51 4c  DEAD) return SQL
5da0: 49 54 45 5f 53 43 48 45 4d 41 3b 0d 0a 20 20 72  ITE_SCHEMA;..  r
5db0: 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 73  et = sqlite3_res
5dc0: 65 74 28 73 74 6d 74 29 3b 0d 0a 20 20 72 65 74  et(stmt);..  ret
5dd0: 75 72 6e 20 72 65 74 3b 0d 0a 23 65 6e 64 69 66  urn ret;..#endif
5de0: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
5df0: 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c  I int WINAPI sql
5e00: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
5e10: 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 73 71 6c  tion_interop(sql
5e20: 69 74 65 33 20 2a 70 73 71 6c 2c 20 63 6f 6e 73  ite3 *psql, cons
5e30: 74 20 63 68 61 72 20 2a 7a 46 75 6e 63 74 69 6f  t char *zFunctio
5e40: 6e 4e 61 6d 65 2c 20 69 6e 74 20 6e 41 72 67 2c  nName, int nArg,
5e50: 20 69 6e 74 20 65 54 65 78 74 52 65 70 2c 20 76   int eTextRep, v
5e60: 6f 69 64 20 2a 70 76 55 73 65 72 2c 20 53 51 4c  oid *pvUser, SQL
5e70: 49 54 45 55 53 45 52 46 55 4e 43 20 66 75 6e 63  ITEUSERFUNC func
5e80: 2c 20 53 51 4c 49 54 45 55 53 45 52 46 55 4e 43  , SQLITEUSERFUNC
5e90: 20 66 75 6e 63 73 74 65 70 2c 20 53 51 4c 49 54   funcstep, SQLIT
5ea0: 45 46 55 4e 43 46 49 4e 41 4c 20 66 75 6e 63 66  EFUNCFINAL funcf
5eb0: 69 6e 61 6c 2c 20 69 6e 74 20 6e 65 65 64 43 6f  inal, int needCo
5ec0: 6c 6c 53 65 71 29 0d 0a 7b 0d 0a 20 20 69 6e 74  llSeq)..{..  int
5ed0: 20 6e 3b 0d 0a 0d 0a 20 20 69 66 20 28 65 54 65   n;....  if (eTe
5ee0: 78 74 52 65 70 20 3d 3d 20 53 51 4c 49 54 45 5f  xtRep == SQLITE_
5ef0: 55 54 46 31 36 29 0d 0a 20 20 20 20 65 54 65 78  UTF16)..    eTex
5f00: 74 52 65 70 20 3d 20 53 51 4c 49 54 45 5f 55 54  tRep = SQLITE_UT
5f10: 46 31 36 4e 41 54 49 56 45 3b 0d 0a 0d 0a 20 20  F16NATIVE;....  
5f20: 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61  n = sqlite3_crea
5f30: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 70 73 71 6c  te_function(psql
5f40: 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c  , zFunctionName,
5f50: 20 6e 41 72 67 2c 20 65 54 65 78 74 52 65 70 2c   nArg, eTextRep,
5f60: 20 70 76 55 73 65 72 2c 20 66 75 6e 63 2c 20 66   pvUser, func, f
5f70: 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e  uncstep, funcfin
5f80: 61 6c 29 3b 0d 0a 20 20 69 66 20 28 6e 20 3d 3d  al);..  if (n ==
5f90: 20 53 51 4c 49 54 45 5f 4f 4b 29 0d 0a 20 20 7b   SQLITE_OK)..  {
5fa0: 0d 0a 20 20 20 20 69 66 20 28 6e 65 65 64 43 6f  ..    if (needCo
5fb0: 6c 6c 53 65 71 29 0d 0a 20 20 20 20 7b 0d 0a 20  llSeq)..    {.. 
5fc0: 20 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46       FuncDef *pF
5fd0: 75 6e 63 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  unc = sqlite3Fin
5fe0: 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20  dFunction(..    
5ff0: 20 20 20 20 20 20 70 73 71 6c 2c 20 7a 46 75 6e        psql, zFun
6000: 63 74 69 6f 6e 4e 61 6d 65 2c 0d 0a 23 69 66 20  ctionName,..#if 
6010: 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e  SQLITE_VERSION_N
6020: 55 4d 42 45 52 20 3c 20 33 30 31 32 30 30 30 0d  UMBER < 3012000.
6030: 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 6c 65  .          strle
6040: 6e 28 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 29  n(zFunctionName)
6050: 2c 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ,..#endif..     
6060: 20 20 20 20 20 6e 41 72 67 2c 20 65 54 65 78 74       nArg, eText
6070: 52 65 70 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20  Rep, 0);..      
6080: 69 66 28 20 70 46 75 6e 63 20 29 0d 0a 20 20 20  if( pFunc )..   
6090: 20 20 20 7b 0d 0a 23 69 66 20 53 51 4c 49 54 45     {..#if SQLITE
60a0: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20  _VERSION_NUMBER 
60b0: 3e 3d 20 33 30 30 38 30 30 31 0d 0a 20 20 20 20  >= 3008001..    
60c0: 20 20 20 20 70 46 75 6e 63 2d 3e 66 75 6e 63 46      pFunc->funcF
60d0: 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 46  lags |= SQLITE_F
60e0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 3b 0d 0a 23  UNC_NEEDCOLL;..#
60f0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 70 46  else..        pF
6100: 75 6e 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51  unc->flags |= SQ
6110: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
6120: 4c 4c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  LL;..#endif..   
6130: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d     }..    }..  }
6140: 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0d  ....  return n;.
6150: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
6160: 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c   void WINAPI sql
6170: 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c  ite3_value_doubl
6180: 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  e_interop(sqlite
6190: 33 5f 76 61 6c 75 65 20 2a 70 76 61 6c 2c 20 64  3_value *pval, d
61a0: 6f 75 62 6c 65 20 2a 76 61 6c 29 0d 0a 7b 0d 0a  ouble *val)..{..
61b0: 20 20 69 66 20 28 21 76 61 6c 29 20 72 65 74 75    if (!val) retu
61c0: 72 6e 3b 0d 0a 20 20 2a 76 61 6c 20 3d 20 73 71  rn;..  *val = sq
61d0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62  lite3_value_doub
61e0: 6c 65 28 70 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a  le(pval);..}....
61f0: 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69 64 20  SQLITE_API void 
6200: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 76  WINAPI sqlite3_v
6210: 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e 74 65 72  alue_int64_inter
6220: 6f 70 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  op(sqlite3_value
6230: 20 2a 70 76 61 6c 2c 20 73 71 6c 69 74 65 5f 69   *pval, sqlite_i
6240: 6e 74 36 34 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 20  nt64 *val)..{.. 
6250: 20 69 66 20 28 21 76 61 6c 29 20 72 65 74 75 72   if (!val) retur
6260: 6e 3b 0d 0a 20 20 2a 76 61 6c 20 3d 20 73 71 6c  n;..  *val = sql
6270: 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34  ite3_value_int64
6280: 28 70 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51  (pval);..}....SQ
6290: 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 75  LITE_API const u
62a0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 20 57  nsigned char * W
62b0: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 76 61  INAPI sqlite3_va
62c0: 6c 75 65 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70  lue_text_interop
62d0: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
62e0: 76 61 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d  val, int *plen).
62f0: 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 75 6e 73 69  .{..  const unsi
6300: 67 6e 65 64 20 63 68 61 72 20 2a 70 76 61 6c 20  gned char *pval 
6310: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
6320: 74 65 78 74 28 76 61 6c 29 3b 0d 0a 20 20 69 66  text(val);..  if
6330: 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20   (plen) *plen = 
6340: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
6350: 74 65 73 28 76 61 6c 29 3b 0d 0a 20 20 72 65 74  tes(val);..  ret
6360: 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a  urn pval;..}....
6370: 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74  SQLITE_API const
6380: 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73   void * WINAPI s
6390: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
63a0: 74 31 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  t16_interop(sqli
63b0: 74 65 33 5f 76 61 6c 75 65 20 2a 76 61 6c 2c 20  te3_value *val, 
63c0: 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20  int *plen)..{.. 
63d0: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 61   const void *pva
63e0: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  l = sqlite3_valu
63f0: 65 5f 74 65 78 74 31 36 28 76 61 6c 29 3b 0d 0a  e_text16(val);..
6400: 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65    if (plen) *ple
6410: 6e 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  n = sqlite3_valu
6420: 65 5f 62 79 74 65 73 31 36 28 76 61 6c 29 3b 0d  e_bytes16(val);.
6430: 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d  .  return pval;.
6440: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
6450: 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c   void WINAPI sql
6460: 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62  ite3_result_doub
6470: 6c 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  le_interop(sqlit
6480: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 63 74 78  e3_context *pctx
6490: 2c 20 64 6f 75 62 6c 65 20 2a 76 61 6c 29 0d 0a  , double *val)..
64a0: 7b 0d 0a 20 20 69 66 20 28 21 76 61 6c 29 20 72  {..  if (!val) r
64b0: 65 74 75 72 6e 3b 0d 0a 20 20 73 71 6c 69 74 65  eturn;..  sqlite
64c0: 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28  3_result_double(
64d0: 70 63 74 78 2c 20 2a 76 61 6c 29 3b 0d 0a 7d 0d  pctx, *val);..}.
64e0: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76 6f  ...SQLITE_API vo
64f0: 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  id WINAPI sqlite
6500: 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69  3_result_int64_i
6510: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 63  nterop(sqlite3_c
6520: 6f 6e 74 65 78 74 20 2a 70 63 74 78 2c 20 73 71  ontext *pctx, sq
6530: 6c 69 74 65 5f 69 6e 74 36 34 20 2a 76 61 6c 29  lite_int64 *val)
6540: 0d 0a 7b 0d 0a 20 20 69 66 20 28 21 76 61 6c 29  ..{..  if (!val)
6550: 20 72 65 74 75 72 6e 3b 0d 0a 20 20 73 71 6c 69   return;..  sqli
6560: 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34  te3_result_int64
6570: 28 70 63 74 78 2c 20 2a 76 61 6c 29 3b 0d 0a 7d  (pctx, *val);..}
6580: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69  ....SQLITE_API i
6590: 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  nt WINAPI sqlite
65a0: 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f  3_context_collco
65b0: 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 73 71  mpare_interop(sq
65c0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63  lite3_context *c
65d0: 74 78 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  tx, const void *
65e0: 70 31 2c 20 69 6e 74 20 70 31 6c 65 6e 2c 20 63  p1, int p1len, c
65f0: 6f 6e 73 74 20 76 6f 69 64 20 2a 70 32 2c 20 69  onst void *p2, i
6600: 6e 74 20 70 32 6c 65 6e 29 0d 0a 7b 0d 0a 23 69  nt p2len)..{..#i
6610: 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
6620: 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 38 30  _NUMBER >= 30080
6630: 30 37 0d 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70  07..  CollSeq *p
6640: 43 6f 6c 6c 20 3d 20 63 74 78 20 3f 20 73 71 6c  Coll = ctx ? sql
6650: 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53  ite3GetFuncCollS
6660: 65 71 28 63 74 78 29 20 3a 20 30 3b 0d 0a 23 65  eq(ctx) : 0;..#e
6670: 6c 73 65 0d 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  lse..  CollSeq *
6680: 70 43 6f 6c 6c 20 3d 20 63 74 78 20 3f 20 63 74  pColl = ctx ? ct
6690: 78 2d 3e 70 43 6f 6c 6c 20 3a 20 30 3b 0d 0a 23  x->pColl : 0;..#
66a0: 65 6e 64 69 66 0d 0a 20 20 69 66 20 28 21 63 74  endif..  if (!ct
66b0: 78 20 7c 7c 20 21 63 74 78 2d 3e 70 46 75 6e 63  x || !ctx->pFunc
66c0: 29 20 72 65 74 75 72 6e 20 34 3b 20 2f 2a 20 45  ) return 4; /* E
66d0: 52 52 4f 52 20 2a 2f 0d 0a 20 20 69 66 20 28 21  RROR */..  if (!
66e0: 70 43 6f 6c 6c 20 7c 7c 20 21 70 43 6f 6c 6c 2d  pColl || !pColl-
66f0: 3e 78 43 6d 70 29 20 72 65 74 75 72 6e 20 33 3b  >xCmp) return 3;
6700: 20 2f 2a 20 45 52 52 4f 52 20 2a 2f 0d 0a 23 69   /* ERROR */..#i
6710: 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
6720: 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 38 30  _NUMBER >= 30080
6730: 30 31 0d 0a 20 20 69 66 20 28 28 63 74 78 2d 3e  01..  if ((ctx->
6740: 70 46 75 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73  pFunc->funcFlags
6750: 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e   & SQLITE_FUNC_N
6760: 45 45 44 43 4f 4c 4c 29 20 3d 3d 20 30 29 20 72  EEDCOLL) == 0) r
6770: 65 74 75 72 6e 20 32 3b 20 2f 2a 20 45 52 52 4f  eturn 2; /* ERRO
6780: 52 20 2a 2f 0d 0a 23 65 6c 73 65 0d 0a 20 20 69  R */..#else..  i
6790: 66 20 28 28 63 74 78 2d 3e 70 46 75 6e 63 2d 3e  f ((ctx->pFunc->
67a0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46  flags & SQLITE_F
67b0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 20 3d 3d  UNC_NEEDCOLL) ==
67c0: 20 30 29 20 72 65 74 75 72 6e 20 32 3b 20 2f 2a   0) return 2; /*
67d0: 20 45 52 52 4f 52 20 2a 2f 0d 0a 23 65 6e 64 69   ERROR */..#endi
67e0: 66 0d 0a 20 20 72 65 74 75 72 6e 20 70 43 6f 6c  f..  return pCol
67f0: 6c 2d 3e 78 43 6d 70 28 70 43 6f 6c 6c 2d 3e 70  l->xCmp(pColl->p
6800: 55 73 65 72 2c 20 70 31 6c 65 6e 2c 20 70 31 2c  User, p1len, p1,
6810: 20 70 32 6c 65 6e 2c 20 70 32 29 3b 0d 0a 7d 0d   p2len, p2);..}.
6820: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f  ...SQLITE_API co
6830: 6e 73 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50  nst char * WINAP
6840: 49 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  I sqlite3_contex
6850: 74 5f 63 6f 6c 6c 73 65 71 5f 69 6e 74 65 72 6f  t_collseq_intero
6860: 70 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  p(sqlite3_contex
6870: 74 20 2a 63 74 78 2c 20 69 6e 74 20 2a 70 74 79  t *ctx, int *pty
6880: 70 65 2c 20 69 6e 74 20 2a 65 6e 63 2c 20 69 6e  pe, int *enc, in
6890: 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 23 69 66  t *plen)..{..#if
68a0: 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f   SQLITE_VERSION_
68b0: 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 38 30 30  NUMBER >= 300800
68c0: 37 0d 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43  7..  CollSeq *pC
68d0: 6f 6c 6c 20 3d 20 63 74 78 20 3f 20 73 71 6c 69  oll = ctx ? sqli
68e0: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
68f0: 71 28 63 74 78 29 20 3a 20 30 3b 0d 0a 23 65 6c  q(ctx) : 0;..#el
6900: 73 65 0d 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70  se..  CollSeq *p
6910: 43 6f 6c 6c 20 3d 20 63 74 78 20 3f 20 63 74 78  Coll = ctx ? ctx
6920: 2d 3e 70 43 6f 6c 6c 20 3a 20 30 3b 0d 0a 23 65  ->pColl : 0;..#e
6930: 6e 64 69 66 0d 0a 20 20 69 66 20 28 70 74 79 70  ndif..  if (ptyp
6940: 65 29 20 2a 70 74 79 70 65 20 3d 20 30 3b 0d 0a  e) *ptype = 0;..
6950: 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65    if (plen) *ple
6960: 6e 20 3d 20 30 3b 0d 0a 20 20 69 66 20 28 65 6e  n = 0;..  if (en
6970: 63 29 20 2a 65 6e 63 20 3d 20 30 3b 0d 0a 0d 0a  c) *enc = 0;....
6980: 20 20 69 66 20 28 21 63 74 78 20 7c 7c 20 21 63    if (!ctx || !c
6990: 74 78 2d 3e 70 46 75 6e 63 29 20 72 65 74 75 72  tx->pFunc) retur
69a0: 6e 20 4e 55 4c 4c 3b 0d 0a 23 69 66 20 53 51 4c  n NULL;..#if SQL
69b0: 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  ITE_VERSION_NUMB
69c0: 45 52 20 3e 3d 20 33 30 30 38 30 30 31 0d 0a 20  ER >= 3008001.. 
69d0: 20 69 66 20 28 28 63 74 78 2d 3e 70 46 75 6e 63   if ((ctx->pFunc
69e0: 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26 20 53 51  ->funcFlags & SQ
69f0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
6a00: 4c 4c 29 20 3d 3d 20 30 29 20 72 65 74 75 72 6e  LL) == 0) return
6a10: 20 4e 55 4c 4c 3b 0d 0a 23 65 6c 73 65 0d 0a 20   NULL;..#else.. 
6a20: 20 69 66 20 28 28 63 74 78 2d 3e 70 46 75 6e 63   if ((ctx->pFunc
6a30: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
6a40: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 20  _FUNC_NEEDCOLL) 
6a50: 3d 3d 20 30 29 20 72 65 74 75 72 6e 20 4e 55 4c  == 0) return NUL
6a60: 4c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  L;..#endif....  
6a70: 69 66 20 28 70 43 6f 6c 6c 29 0d 0a 20 20 7b 0d  if (pColl)..  {.
6a80: 0a 20 20 20 20 69 66 20 28 65 6e 63 29 20 2a 65  .    if (enc) *e
6a90: 6e 63 20 3d 20 70 43 6f 6c 6c 2d 3e 65 6e 63 3b  nc = pColl->enc;
6aa0: 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52  ..#if SQLITE_VER
6ab0: 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3c 20 33 30  SION_NUMBER < 30
6ac0: 30 37 30 31 30 0d 0a 20 20 20 20 69 66 20 28 70  07010..    if (p
6ad0: 74 79 70 65 29 20 2a 70 74 79 70 65 20 3d 20 70  type) *ptype = p
6ae0: 43 6f 6c 6c 2d 3e 74 79 70 65 3b 0d 0a 23 65 6e  Coll->type;..#en
6af0: 64 69 66 0d 0a 20 20 20 20 69 66 20 28 70 6c 65  dif..    if (ple
6b00: 6e 29 20 2a 70 6c 65 6e 20 3d 20 70 43 6f 6c 6c  n) *plen = pColl
6b10: 2d 3e 7a 4e 61 6d 65 20 3f 20 73 74 72 6c 65 6e  ->zName ? strlen
6b20: 28 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 29 20 3a  (pColl->zName) :
6b30: 20 30 3b 0d 0a 0d 0a 20 20 20 20 72 65 74 75 72   0;....    retur
6b40: 6e 20 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 3b 0d  n pColl->zName;.
6b50: 0a 20 20 7d 0d 0a 20 20 72 65 74 75 72 6e 20 4e  .  }..  return N
6b60: 55 4c 4c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  ULL;..}....SQLIT
6b70: 45 5f 41 50 49 20 63 6f 6e 73 74 20 63 68 61 72  E_API const char
6b80: 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65   * WINAPI sqlite
6b90: 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73  3_column_databas
6ba0: 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73  e_name_interop(s
6bb0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d  qlite3_stmt *stm
6bc0: 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74  t, int iCol, int
6bd0: 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f   *plen)..{..  co
6be0: 6e 73 74 20 63 68 61 72 20 2a 70 76 61 6c 20 3d  nst char *pval =
6bf0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
6c00: 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 28 73 74  database_name(st
6c10: 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 69 66  mt, iCol);..  if
6c20: 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20 3d 20   (plen) *plen = 
6c30: 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e 28 70 76  pval ? strlen(pv
6c40: 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75  al) : 0;..  retu
6c50: 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53  rn pval;..}....S
6c60: 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20  QLITE_API const 
6c70: 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71  void * WINAPI sq
6c80: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74  lite3_column_dat
6c90: 61 62 61 73 65 5f 6e 61 6d 65 31 36 5f 69 6e 74  abase_name16_int
6ca0: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
6cb0: 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f  t *stmt, int iCo
6cc0: 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b  l, int *plen)..{
6cd0: 0d 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ..  const void *
6ce0: 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  pval = sqlite3_c
6cf0: 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e  olumn_database_n
6d00: 61 6d 65 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c  ame16(stmt, iCol
6d10: 29 3b 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20  );..  if (plen) 
6d20: 2a 70 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20 77  *plen = pval ? w
6d30: 63 73 6c 65 6e 28 28 77 63 68 61 72 5f 74 20 2a  cslen((wchar_t *
6d40: 29 70 76 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28  )pval) * sizeof(
6d50: 77 63 68 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 20  wchar_t) : 0;.. 
6d60: 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d   return pval;..}
6d70: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63  ....SQLITE_API c
6d80: 6f 6e 73 74 20 63 68 61 72 20 2a 20 57 49 4e 41  onst char * WINA
6d90: 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  PI sqlite3_colum
6da0: 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e 74  n_table_name_int
6db0: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
6dc0: 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f  t *stmt, int iCo
6dd0: 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b  l, int *plen)..{
6de0: 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ..  const char *
6df0: 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  pval = sqlite3_c
6e00: 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
6e10: 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20  (stmt, iCol);.. 
6e20: 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e   if (plen) *plen
6e30: 20 3d 20 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e   = pval ? strlen
6e40: 28 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72  (pval) : 0;..  r
6e50: 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a  eturn pval;..}..
6e60: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e  ..SQLITE_API con
6e70: 73 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49  st void * WINAPI
6e80: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
6e90: 74 61 62 6c 65 5f 6e 61 6d 65 31 36 5f 69 6e 74  table_name16_int
6ea0: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
6eb0: 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f  t *stmt, int iCo
6ec0: 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b  l, int *plen)..{
6ed0: 0d 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ..  const void *
6ee0: 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  pval = sqlite3_c
6ef0: 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
6f00: 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d  16(stmt, iCol);.
6f10: 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c  .  if (plen) *pl
6f20: 65 6e 20 3d 20 70 76 61 6c 20 3f 20 77 63 73 6c  en = pval ? wcsl
6f30: 65 6e 28 28 77 63 68 61 72 5f 74 20 2a 29 70 76  en((wchar_t *)pv
6f40: 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77 63 68  al) * sizeof(wch
6f50: 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 20 20 72 65  ar_t) : 0;..  re
6f60: 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d  turn pval;..}...
6f70: 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73  .SQLITE_API cons
6f80: 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49 20  t char * WINAPI 
6f90: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
6fa0: 72 69 67 69 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72  rigin_name_inter
6fb0: 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  op(sqlite3_stmt 
6fc0: 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c  *stmt, int iCol,
6fd0: 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a   int *plen)..{..
6fe0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 76    const char *pv
6ff0: 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  al = sqlite3_col
7000: 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 28  umn_origin_name(
7010: 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20  stmt, iCol);..  
7020: 69 66 20 28 70 6c 65 6e 29 20 2a 70 6c 65 6e 20  if (plen) *plen 
7030: 3d 20 70 76 61 6c 20 3f 20 73 74 72 6c 65 6e 28  = pval ? strlen(
7040: 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65  pval) : 0;..  re
7050: 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d  turn pval;..}...
7060: 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73  .SQLITE_API cons
7070: 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20  t void * WINAPI 
7080: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
7090: 72 69 67 69 6e 5f 6e 61 6d 65 31 36 5f 69 6e 74  rigin_name16_int
70a0: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
70b0: 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f  t *stmt, int iCo
70c0: 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b  l, int *plen)..{
70d0: 0d 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ..  const void *
70e0: 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  pval = sqlite3_c
70f0: 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d  olumn_origin_nam
7100: 65 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b  e16(stmt, iCol);
7110: 0d 0a 20 20 69 66 20 28 70 6c 65 6e 29 20 2a 70  ..  if (plen) *p
7120: 6c 65 6e 20 3d 20 70 76 61 6c 20 3f 20 77 63 73  len = pval ? wcs
7130: 6c 65 6e 28 28 77 63 68 61 72 5f 74 20 2a 29 70  len((wchar_t *)p
7140: 76 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77 63  val) * sizeof(wc
7150: 68 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 20 20 72  har_t) : 0;..  r
7160: 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a  eturn pval;..}..
7170: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74  ..SQLITE_API int
7180: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
7190: 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74  table_column_met
71a0: 61 64 61 74 61 5f 69 6e 74 65 72 6f 70 28 73 71  adata_interop(sq
71b0: 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74  lite3 *db, const
71c0: 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d 65 2c 20   char *zDbName, 
71d0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 62  const char *zTab
71e0: 6c 65 4e 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68  leName, const ch
71f0: 61 72 20 2a 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 2c  ar *zColumnName,
7200: 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 2a 70 7a   char const **pz
7210: 44 61 74 61 54 79 70 65 2c 20 63 68 61 72 20 63  DataType, char c
7220: 6f 6e 73 74 20 2a 2a 70 7a 43 6f 6c 6c 53 65 71  onst **pzCollSeq
7230: 2c 20 69 6e 74 20 2a 70 4e 6f 74 4e 75 6c 6c 2c  , int *pNotNull,
7240: 20 69 6e 74 20 2a 70 50 72 69 6d 61 72 79 4b 65   int *pPrimaryKe
7250: 79 2c 20 69 6e 74 20 2a 70 41 75 74 6f 69 6e 63  y, int *pAutoinc
7260: 2c 20 69 6e 74 20 2a 70 64 74 4c 65 6e 2c 20 69  , int *pdtLen, i
7270: 6e 74 20 2a 70 63 73 4c 65 6e 29 0d 0a 7b 0d 0a  nt *pcsLen)..{..
7280: 20 20 69 6e 74 20 6e 3b 0d 0a 0d 0a 20 20 6e 20    int n;....  n 
7290: 3d 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f  = sqlite3_table_
72a0: 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28  column_metadata(
72b0: 64 62 2c 20 7a 44 62 4e 61 6d 65 2c 20 7a 54 61  db, zDbName, zTa
72c0: 62 6c 65 4e 61 6d 65 2c 20 7a 43 6f 6c 75 6d 6e  bleName, zColumn
72d0: 4e 61 6d 65 2c 20 70 7a 44 61 74 61 54 79 70 65  Name, pzDataType
72e0: 2c 20 70 7a 43 6f 6c 6c 53 65 71 2c 20 70 4e 6f  , pzCollSeq, pNo
72f0: 74 4e 75 6c 6c 2c 20 70 50 72 69 6d 61 72 79 4b  tNull, pPrimaryK
7300: 65 79 2c 20 70 41 75 74 6f 69 6e 63 29 3b 0d 0a  ey, pAutoinc);..
7310: 0d 0a 20 20 69 66 20 28 70 64 74 4c 65 6e 29 20  ..  if (pdtLen) 
7320: 2a 70 64 74 4c 65 6e 20 3d 20 28 70 7a 44 61 74  *pdtLen = (pzDat
7330: 61 54 79 70 65 20 26 26 20 2a 70 7a 44 61 74 61  aType && *pzData
7340: 54 79 70 65 29 20 3f 20 73 74 72 6c 65 6e 28 2a  Type) ? strlen(*
7350: 70 7a 44 61 74 61 54 79 70 65 29 20 3a 20 30 3b  pzDataType) : 0;
7360: 0d 0a 20 20 69 66 20 28 70 63 73 4c 65 6e 29 20  ..  if (pcsLen) 
7370: 2a 70 63 73 4c 65 6e 20 3d 20 28 70 7a 43 6f 6c  *pcsLen = (pzCol
7380: 6c 53 65 71 20 26 26 20 2a 70 7a 43 6f 6c 6c 53  lSeq && *pzCollS
7390: 65 71 29 20 3f 20 73 74 72 6c 65 6e 28 2a 70 7a  eq) ? strlen(*pz
73a0: 43 6f 6c 6c 53 65 71 29 20 3a 20 30 3b 0d 0a 0d  CollSeq) : 0;...
73b0: 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 7d 0d  .  return n;..}.
73c0: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e  ...SQLITE_API in
73d0: 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  t WINAPI sqlite3
73e0: 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69 6e  _index_column_in
73f0: 66 6f 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  fo_interop(sqlit
7400: 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68  e3 *db, const ch
7410: 61 72 20 2a 7a 44 62 2c 20 63 6f 6e 73 74 20 63  ar *zDb, const c
7420: 68 61 72 20 2a 7a 49 6e 64 65 78 4e 61 6d 65 2c  har *zIndexName,
7430: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f   const char *zCo
7440: 6c 75 6d 6e 4e 61 6d 65 2c 20 69 6e 74 20 2a 73  lumnName, int *s
7450: 6f 72 74 4f 72 64 65 72 2c 20 69 6e 74 20 2a 6f  ortOrder, int *o
7460: 6e 45 72 72 6f 72 2c 20 63 6f 6e 73 74 20 63 68  nError, const ch
7470: 61 72 20 2a 2a 70 7a 43 6f 6c 6c 2c 20 69 6e 74  ar **pzColl, int
7480: 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 49 6e   *plen)..{..  In
7490: 64 65 78 20 2a 70 49 64 78 3b 0d 0a 20 20 54 61  dex *pIdx;..  Ta
74a0: 62 6c 65 20 2a 70 54 61 62 3b 0d 0a 20 20 69 6e  ble *pTab;..  in
74b0: 74 20 6e 3b 0d 0a 0d 0a 20 20 69 66 20 28 21 64  t n;....  if (!d
74c0: 62 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  b) return SQLITE
74d0: 5f 45 52 52 4f 52 3b 0d 0a 20 20 73 71 6c 69 74  _ERROR;..  sqlit
74e0: 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64  e3_mutex_enter(d
74f0: 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 73 71  b->mutex);..  sq
7500: 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65 72 41  lite3BtreeEnterA
7510: 6c 6c 28 64 62 29 3b 0d 0a 0d 0a 20 20 70 49 64  ll(db);....  pId
7520: 78 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 49  x = sqlite3FindI
7530: 6e 64 65 78 28 64 62 2c 20 7a 49 6e 64 65 78 4e  ndex(db, zIndexN
7540: 61 6d 65 2c 20 7a 44 62 29 3b 0d 0a 0d 0a 20 20  ame, zDb);....  
7550: 73 71 6c 69 74 65 33 42 74 72 65 65 4c 65 61 76  sqlite3BtreeLeav
7560: 65 41 6c 6c 28 64 62 29 3b 0d 0a 20 20 73 71 6c  eAll(db);..  sql
7570: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
7580: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a  (db->mutex);....
7590: 20 20 69 66 20 28 21 70 49 64 78 29 20 72 65 74    if (!pIdx) ret
75a0: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
75b0: 3b 0d 0a 0d 0a 20 20 70 54 61 62 20 3d 20 70 49  ;....  pTab = pI
75c0: 64 78 2d 3e 70 54 61 62 6c 65 3b 0d 0a 20 20 66  dx->pTable;..  f
75d0: 6f 72 20 28 6e 20 3d 20 30 3b 20 6e 20 3c 20 70  or (n = 0; n < p
75e0: 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 3b 20 6e 2b  Idx->nColumn; n+
75f0: 2b 29 0d 0a 20 20 7b 0d 0a 20 20 20 20 69 6e 74  +)..  {..    int
7600: 20 63 6e 75 6d 20 3d 20 70 49 64 78 2d 3e 61 69   cnum = pIdx->ai
7610: 43 6f 6c 75 6d 6e 5b 6e 5d 3b 0d 0a 20 20 20 20  Column[n];..    
7620: 69 66 20 28 73 71 6c 69 74 65 33 53 74 72 49 43  if (sqlite3StrIC
7630: 6d 70 28 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e  mp(pTab->aCol[cn
7640: 75 6d 5d 2e 7a 4e 61 6d 65 2c 20 7a 43 6f 6c 75  um].zName, zColu
7650: 6d 6e 4e 61 6d 65 29 20 3d 3d 20 30 29 0d 0a 20  mnName) == 0).. 
7660: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28     {..      if (
7670: 20 73 6f 72 74 4f 72 64 65 72 20 29 20 2a 73 6f   sortOrder ) *so
7680: 72 74 4f 72 64 65 72 20 3d 20 70 49 64 78 2d 3e  rtOrder = pIdx->
7690: 61 53 6f 72 74 4f 72 64 65 72 5b 6e 5d 3b 0d 0a  aSortOrder[n];..
76a0: 20 20 20 20 20 20 69 66 20 28 20 70 7a 43 6f 6c        if ( pzCol
76b0: 6c 20 29 20 2a 70 7a 43 6f 6c 6c 20 3d 20 70 49  l ) *pzColl = pI
76c0: 64 78 2d 3e 61 7a 43 6f 6c 6c 5b 6e 5d 3b 0d 0a  dx->azColl[n];..
76d0: 20 20 20 20 20 20 69 66 20 28 20 70 6c 65 6e 20        if ( plen 
76e0: 29 20 2a 70 6c 65 6e 20 3d 20 73 74 72 6c 65 6e  ) *plen = strlen
76f0: 28 2a 70 7a 43 6f 6c 6c 29 3b 0d 0a 20 20 20 20  (*pzColl);..    
7700: 20 20 69 66 20 28 20 6f 6e 45 72 72 6f 72 20 29    if ( onError )
7710: 20 2a 6f 6e 45 72 72 6f 72 20 3d 20 70 49 64 78   *onError = pIdx
7720: 2d 3e 6f 6e 45 72 72 6f 72 3b 0d 0a 0d 0a 20 20  ->onError;....  
7730: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
7740: 45 5f 4f 4b 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20  E_OK;..    }..  
7750: 7d 0d 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49  }..  return SQLI
7760: 54 45 5f 45 52 52 4f 52 3b 0d 0a 7d 0d 0a 0d 0a  TE_ERROR;..}....
7770: 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57  SQLITE_API int W
7780: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 74 61  INAPI sqlite3_ta
7790: 62 6c 65 5f 63 75 72 73 6f 72 5f 69 6e 74 65 72  ble_cursor_inter
77a0: 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  op(sqlite3_stmt 
77b0: 2a 70 73 74 6d 74 2c 20 69 6e 74 20 69 44 62 2c  *pstmt, int iDb,
77c0: 20 50 67 6e 6f 20 74 61 62 6c 65 52 6f 6f 74 50   Pgno tableRootP
77d0: 61 67 65 29 0d 0a 7b 0d 0a 20 20 56 64 62 65 20  age)..{..  Vdbe 
77e0: 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70 73 74  *p = (Vdbe *)pst
77f0: 6d 74 3b 0d 0a 20 20 73 71 6c 69 74 65 33 20 2a  mt;..  sqlite3 *
7800: 64 62 20 3d 20 28 70 20 3d 3d 20 4e 55 4c 4c 29  db = (p == NULL)
7810: 20 3f 20 4e 55 4c 4c 20 3a 20 70 2d 3e 64 62 3b   ? NULL : p->db;
7820: 0d 0a 20 20 69 6e 74 20 6e 3b 0d 0a 20 20 69 6e  ..  int n;..  in
7830: 74 20 72 65 74 20 3d 20 2d 31 3b 20 2f 2a 20 4e  t ret = -1; /* N
7840: 4f 54 20 46 4f 55 4e 44 20 2a 2f 0d 0a 0d 0a 20  OT FOUND */.... 
7850: 20 69 66 20 28 21 70 20 7c 7c 20 21 64 62 29 20   if (!p || !db) 
7860: 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 20 20 73  return ret;..  s
7870: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
7880: 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a  er(db->mutex);..
7890: 20 20 66 6f 72 20 28 6e 20 3d 20 30 3b 20 6e 20    for (n = 0; n 
78a0: 3c 20 70 2d 3e 6e 43 75 72 73 6f 72 20 26 26 20  < p->nCursor && 
78b0: 70 2d 3e 61 70 43 73 72 5b 6e 5d 20 21 3d 20 4e  p->apCsr[n] != N
78c0: 55 4c 4c 3b 20 6e 2b 2b 29 0d 0a 20 20 7b 0d 0a  ULL; n++)..  {..
78d0: 20 20 20 20 69 66 20 28 70 2d 3e 61 70 43 73 72      if (p->apCsr
78e0: 5b 6e 5d 2d 3e 69 73 54 61 62 6c 65 20 3d 3d 20  [n]->isTable == 
78f0: 30 29 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20  0) continue;..  
7900: 20 20 69 66 20 28 70 2d 3e 61 70 43 73 72 5b 6e    if (p->apCsr[n
7910: 5d 2d 3e 69 44 62 20 21 3d 20 69 44 62 29 20 63  ]->iDb != iDb) c
7920: 6f 6e 74 69 6e 75 65 3b 0d 0a 23 69 66 20 53 51  ontinue;..#if SQ
7930: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
7940: 42 45 52 20 3e 3d 20 33 30 31 30 30 30 30 0d 0a  BER >= 3010000..
7950: 20 20 20 20 69 66 20 28 70 2d 3e 61 70 43 73 72      if (p->apCsr
7960: 5b 6e 5d 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2d  [n]->uc.pCursor-
7970: 3e 70 67 6e 6f 52 6f 6f 74 20 3d 3d 20 74 61 62  >pgnoRoot == tab
7980: 6c 65 52 6f 6f 74 50 61 67 65 29 0d 0a 23 65 6c  leRootPage)..#el
7990: 73 65 0d 0a 20 20 20 20 69 66 20 28 70 2d 3e 61  se..    if (p->a
79a0: 70 43 73 72 5b 6e 5d 2d 3e 70 43 75 72 73 6f 72  pCsr[n]->pCursor
79b0: 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 3d 20 74 61  ->pgnoRoot == ta
79c0: 62 6c 65 52 6f 6f 74 50 61 67 65 29 0d 0a 23 65  bleRootPage)..#e
79d0: 6e 64 69 66 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ndif..    {..   
79e0: 20 20 20 72 65 74 20 3d 20 6e 3b 0d 0a 20 20 20     ret = n;..   
79f0: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 7d     break;..    }
7a00: 0d 0a 20 20 7d 0d 0a 20 20 73 71 6c 69 74 65 33  ..  }..  sqlite3
7a10: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d  _mutex_leave(db-
7a20: 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20 20 72 65  >mutex);....  re
7a30: 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a 0d 0a  turn ret;..}....
7a40: 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57  SQLITE_API int W
7a50: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 75  INAPI sqlite3_cu
7a60: 72 73 6f 72 5f 72 6f 77 69 64 5f 69 6e 74 65 72  rsor_rowid_inter
7a70: 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  op(sqlite3_stmt 
7a80: 2a 70 73 74 6d 74 2c 20 69 6e 74 20 63 75 72 73  *pstmt, int curs
7a90: 6f 72 2c 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  or, sqlite_int64
7aa0: 20 2a 70 72 6f 77 69 64 29 0d 0a 7b 0d 0a 20 20   *prowid)..{..  
7ab0: 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65 20  Vdbe *p = (Vdbe 
7ac0: 2a 29 70 73 74 6d 74 3b 0d 0a 20 20 73 71 6c 69  *)pstmt;..  sqli
7ad0: 74 65 33 20 2a 64 62 20 3d 20 28 70 20 3d 3d 20  te3 *db = (p == 
7ae0: 4e 55 4c 4c 29 20 3f 20 4e 55 4c 4c 20 3a 20 70  NULL) ? NULL : p
7af0: 2d 3e 64 62 3b 0d 0a 20 20 56 64 62 65 43 75 72  ->db;..  VdbeCur
7b00: 73 6f 72 20 2a 70 43 3b 0d 0a 23 69 66 20 53 51  sor *pC;..#if SQ
7b10: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
7b20: 42 45 52 20 3e 3d 20 33 30 31 31 30 30 30 0d 0a  BER >= 3011000..
7b30: 20 20 69 6e 74 20 70 32 20 3d 20 30 3b 0d 0a 23    int p2 = 0;..#
7b40: 65 6e 64 69 66 0d 0a 20 20 69 6e 74 20 72 65 74  endif..  int ret
7b50: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0d 0a 0d   = SQLITE_OK;...
7b60: 0a 20 20 69 66 20 28 21 70 20 7c 7c 20 21 64 62  .  if (!p || !db
7b70: 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ) return SQLITE_
7b80: 45 52 52 4f 52 3b 0d 0a 20 20 73 71 6c 69 74 65  ERROR;..  sqlite
7b90: 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62  3_mutex_enter(db
7ba0: 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 77 68 69  ->mutex);..  whi
7bb0: 6c 65 20 28 31 29 0d 0a 20 20 7b 0d 0a 20 20 20  le (1)..  {..   
7bc0: 20 69 66 20 28 63 75 72 73 6f 72 20 3c 20 30 20   if (cursor < 0 
7bd0: 7c 7c 20 63 75 72 73 6f 72 20 3e 3d 20 70 2d 3e  || cursor >= p->
7be0: 6e 43 75 72 73 6f 72 29 0d 0a 20 20 20 20 7b 0d  nCursor)..    {.
7bf0: 0a 20 20 20 20 20 20 72 65 74 20 3d 20 53 51 4c  .      ret = SQL
7c00: 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 20 20  ITE_ERROR;..    
7c10: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 7d 0d    break;..    }.
7c20: 0a 20 20 20 20 69 66 20 28 70 2d 3e 61 70 43 73  .    if (p->apCs
7c30: 72 5b 63 75 72 73 6f 72 5d 20 3d 3d 20 4e 55 4c  r[cursor] == NUL
7c40: 4c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  L)..    {..     
7c50: 20 72 65 74 20 3d 20 53 51 4c 49 54 45 5f 45 52   ret = SQLITE_ER
7c60: 52 4f 52 3b 0d 0a 20 20 20 20 20 20 62 72 65 61  ROR;..      brea
7c70: 6b 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  k;..    }....   
7c80: 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 63   pC = p->apCsr[c
7c90: 75 72 73 6f 72 5d 3b 0d 0a 0d 0a 23 69 66 20 53  ursor];....#if S
7ca0: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
7cb0: 4d 42 45 52 20 3e 3d 20 33 30 31 31 30 30 30 0d  MBER >= 3011000.
7cc0: 0a 20 20 20 20 72 65 74 20 3d 20 73 71 6c 69 74  .    ret = sqlit
7cd0: 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
7ce0: 74 6f 28 26 70 43 2c 20 26 70 32 29 3b 0d 0a 23  to(&pC, &p2);..#
7cf0: 65 6c 73 65 0d 0a 20 20 20 20 72 65 74 20 3d 20  else..    ret = 
7d00: 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
7d10: 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0d 0a 23 65  rMoveto(pC);..#e
7d20: 6e 64 69 66 0d 0a 20 20 20 20 69 66 28 72 65 74  ndif..    if(ret
7d30: 29 0d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0d  )..      break;.
7d40: 0a 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45  ...#if SQLITE_VE
7d50: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3c 20 33  RSION_NUMBER < 3
7d60: 30 30 38 30 30 37 0d 0a 20 20 20 20 69 66 28 70  008007..    if(p
7d70: 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 29  C->rowidIsValid)
7d80: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
7d90: 66 20 28 70 72 6f 77 69 64 29 20 2a 70 72 6f 77  f (prowid) *prow
7da0: 69 64 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77  id = pC->lastRow
7db0: 69 64 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  id;..    }..    
7dc0: 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a 23 69  else..#endif..#i
7dd0: 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
7de0: 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 31 30 30  _NUMBER >= 30100
7df0: 30 30 0d 0a 20 20 20 20 69 66 28 70 43 2d 3e 65  00..    if(pC->e
7e00: 43 75 72 54 79 70 65 20 21 3d 20 43 55 52 54 59  CurType != CURTY
7e10: 50 45 5f 42 54 52 45 45 29 0d 0a 23 65 6c 73 65  PE_BTREE)..#else
7e20: 0d 0a 20 20 20 20 69 66 28 70 43 2d 3e 70 73 65  ..    if(pC->pse
7e30: 75 64 6f 54 61 62 6c 65 52 65 67 20 3e 20 30 29  udoTableReg > 0)
7e40: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7b 0d  ..#endif..    {.
7e50: 0a 20 20 20 20 20 20 72 65 74 20 3d 20 53 51 4c  .      ret = SQL
7e60: 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 20 20  ITE_ERROR;..    
7e70: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 7d 0d    break;..    }.
7e80: 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53  .#if SQLITE_VERS
7e90: 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30  ION_NUMBER >= 30
7ea0: 31 30 30 30 30 0d 0a 20 20 20 20 65 6c 73 65 20  10000..    else 
7eb0: 69 66 28 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c  if(pC->nullRow |
7ec0: 7c 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  | pC->uc.pCursor
7ed0: 3d 3d 30 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ==0)..#else..   
7ee0: 20 65 6c 73 65 20 69 66 28 70 43 2d 3e 6e 75 6c   else if(pC->nul
7ef0: 6c 52 6f 77 20 7c 7c 20 70 43 2d 3e 70 43 75 72  lRow || pC->pCur
7f00: 73 6f 72 3d 3d 30 29 0d 0a 23 65 6e 64 69 66 0d  sor==0)..#endif.
7f10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
7f20: 74 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  t = SQLITE_ERROR
7f30: 3b 0d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0d  ;..      break;.
7f40: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 65 6c 73 65  .    }..    else
7f50: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 53 51 4c  ..    {..#if SQL
7f60: 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  ITE_VERSION_NUMB
7f70: 45 52 20 3e 3d 20 33 30 31 30 30 30 30 0d 0a 20  ER >= 3010000.. 
7f80: 20 20 20 20 20 69 66 20 28 70 43 2d 3e 75 63 2e       if (pC->uc.
7f90: 70 43 75 72 73 6f 72 20 3d 3d 20 4e 55 4c 4c 29  pCursor == NULL)
7fa0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 69  ..#else..      i
7fb0: 66 20 28 70 43 2d 3e 70 43 75 72 73 6f 72 20 3d  f (pC->pCursor =
7fc0: 3d 20 4e 55 4c 4c 29 0d 0a 23 65 6e 64 69 66 0d  = NULL)..#endif.
7fd0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
7fe0: 20 20 72 65 74 20 3d 20 53 51 4c 49 54 45 5f 45    ret = SQLITE_E
7ff0: 52 52 4f 52 3b 0d 0a 20 20 20 20 20 20 20 20 62  RROR;..        b
8000: 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  reak;..      }..
8010: 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49  #if SQLITE_VERSI
8020: 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 31  ON_NUMBER >= 301
8030: 34 30 30 30 0d 0a 20 20 20 20 20 20 73 71 6c 69  4000..      sqli
8040: 74 65 33 42 74 72 65 65 45 6e 74 65 72 43 75 72  te3BtreeEnterCur
8050: 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  sor(pC->uc.pCurs
8060: 6f 72 29 3b 0d 0a 20 20 20 20 20 20 2a 70 72 6f  or);..      *pro
8070: 77 69 64 20 3d 20 73 71 6c 69 74 65 33 42 74 72  wid = sqlite3Btr
8080: 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d  eeIntegerKey(pC-
8090: 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0d 0a 20  >uc.pCursor);.. 
80a0: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
80b0: 65 4c 65 61 76 65 43 75 72 73 6f 72 28 70 43 2d  eLeaveCursor(pC-
80c0: 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0d 0a 23  >uc.pCursor);..#
80d0: 65 6c 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53  elif SQLITE_VERS
80e0: 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30  ION_NUMBER >= 30
80f0: 31 30 30 30 30 0d 0a 20 20 20 20 20 20 73 71 6c  10000..      sql
8100: 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
8110: 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
8120: 20 70 72 6f 77 69 64 29 3b 0d 0a 23 65 6c 73 65   prowid);..#else
8130: 0d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ..      sqlite3B
8140: 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e  treeKeySize(pC->
8150: 70 43 75 72 73 6f 72 2c 20 70 72 6f 77 69 64 29  pCursor, prowid)
8160: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
8170: 20 69 66 20 28 70 72 6f 77 69 64 29 20 2a 70 72   if (prowid) *pr
8180: 6f 77 69 64 20 3d 20 2a 70 72 6f 77 69 64 3b 0d  owid = *prowid;.
8190: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 62 72 65 61  .    }..    brea
81a0: 6b 3b 0d 0a 20 20 7d 0d 0a 20 20 73 71 6c 69 74  k;..  }..  sqlit
81b0: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64  e3_mutex_leave(d
81c0: 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20 20  b->mutex);....  
81d0: 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a  return ret;..}..
81e0: 0d 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ../*************
81f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8200: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8210: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8220: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
8230: 2f 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64  /....#if defined
8240: 28 53 51 4c 49 54 45 5f 43 4f 52 45 29 0d 0a 23  (SQLITE_CORE)..#
8250: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 52  undef SQLITE_COR
8260: 45 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66  E..#endif....#if
8270: 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50   defined(INTEROP
8280: 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 29 20  _VIRTUAL_TABLE) 
8290: 26 26 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  && SQLITE_VERSIO
82a0: 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 34  N_NUMBER >= 3004
82b0: 30 30 31 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e  001..#include ".
82c0: 2e 2f 65 78 74 2f 76 74 73 68 69 6d 2e 63 22 0d  ./ext/vtshim.c".
82d0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64  .#endif....#if d
82e0: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 46  efined(INTEROP_F
82f0: 54 53 35 5f 45 58 54 45 4e 53 49 4f 4e 29 0d 0a  TS5_EXTENSION)..
8300: 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 65 78 74  #include "../ext
8310: 2f 66 74 73 35 2e 63 22 0d 0a 23 65 6e 64 69 66  /fts5.c"..#endif
8320: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
8330: 49 4e 54 45 52 4f 50 5f 4a 53 4f 4e 31 5f 45 58  INTEROP_JSON1_EX
8340: 54 45 4e 53 49 4f 4e 29 0d 0a 23 69 6e 63 6c 75  TENSION)..#inclu
8350: 64 65 20 22 2e 2e 2f 65 78 74 2f 6a 73 6f 6e 31  de "../ext/json1
8360: 2e 63 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23  .c"..#endif....#
8370: 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52  if defined(INTER
8380: 4f 50 5f 50 45 52 43 45 4e 54 49 4c 45 5f 45 58  OP_PERCENTILE_EX
8390: 54 45 4e 53 49 4f 4e 29 0d 0a 23 69 6e 63 6c 75  TENSION)..#inclu
83a0: 64 65 20 22 2e 2e 2f 65 78 74 2f 70 65 72 63 65  de "../ext/perce
83b0: 6e 74 69 6c 65 2e 63 22 0d 0a 23 65 6e 64 69 66  ntile.c"..#endif
83c0: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
83d0: 49 4e 54 45 52 4f 50 5f 52 45 47 45 58 50 5f 45  INTEROP_REGEXP_E
83e0: 58 54 45 4e 53 49 4f 4e 29 0d 0a 23 69 6e 63 6c  XTENSION)..#incl
83f0: 75 64 65 20 22 2e 2e 2f 65 78 74 2f 72 65 67 65  ude "../ext/rege
8400: 78 70 2e 63 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d  xp.c"..#endif...
8410: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54  .#if defined(INT
8420: 45 52 4f 50 5f 53 48 41 31 5f 45 58 54 45 4e 53  EROP_SHA1_EXTENS
8430: 49 4f 4e 29 0d 0a 23 69 6e 63 6c 75 64 65 20 22  ION)..#include "
8440: 2e 2e 2f 65 78 74 2f 73 68 61 31 2e 63 22 0d 0a  ../ext/sha1.c"..
8450: 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65  #endif....#if de
8460: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 54 4f  fined(INTEROP_TO
8470: 54 59 50 45 5f 45 58 54 45 4e 53 49 4f 4e 29 0d  TYPE_EXTENSION).
8480: 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 65 78  .#include "../ex
8490: 74 2f 74 6f 74 79 70 65 2e 63 22 0d 0a 23 65 6e  t/totype.c"..#en
84a0: 64 69 66 0d 0a 0d 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a  dif..../********
84b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
84c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
84d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
84e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
84f0: 2a 2a 2a 2a 2a 2f 0d 0a 0d 0a 2f 2a 0d 0a 2a 2a  *****/..../*..**
8500: 20 54 68 65 20 49 4e 54 45 52 4f 50 5f 54 45 53   The INTEROP_TES
8510: 54 5f 45 58 54 45 4e 53 49 4f 4e 20 62 6c 6f 63  T_EXTENSION bloc
8520: 6b 20 6d 75 73 74 20 62 65 20 61 74 20 74 68 65  k must be at the
8530: 20 65 6e 64 20 6f 66 20 74 68 69 73 20 73 6f 75   end of this sou
8540: 72 63 65 20 66 69 6c 65 0d 0a 2a 2a 20 62 65 63  rce file..** bec
8550: 61 75 73 65 20 69 74 20 69 6e 63 6c 75 64 65 73  ause it includes
8560: 20 74 68 65 20 22 73 71 6c 69 74 65 33 65 78 74   the "sqlite3ext
8570: 2e 68 22 20 66 69 6c 65 2c 20 77 68 69 63 68 20  .h" file, which 
8580: 64 65 66 69 6e 65 73 20 74 68 65 20 73 71 6c 69  defines the sqli
8590: 74 65 33 0d 0a 2a 2a 20 70 75 62 6c 69 63 20 41  te3..** public A
85a0: 50 49 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65  PI function name
85b0: 73 20 74 6f 20 62 65 20 6d 61 63 72 6f 73 20 61  s to be macros a
85c0: 6e 64 20 74 68 61 74 20 77 6f 75 6c 64 20 63 61  nd that would ca
85d0: 75 73 65 20 74 68 65 20 63 6f 64 65 0d 0a 2a 2a  use the code..**
85e0: 20 61 62 6f 76 65 20 74 68 69 73 20 70 6f 69 6e   above this poin
85f0: 74 20 74 6f 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t to malfunction
8600: 2e 0d 0a 2a 2f 0d 0a 23 69 66 20 64 65 66 69 6e  ...*/..#if defin
8610: 65 64 28 49 4e 54 45 52 4f 50 5f 54 45 53 54 5f  ed(INTEROP_TEST_
8620: 45 58 54 45 4e 53 49 4f 4e 29 0d 0a 23 69 66 20  EXTENSION)..#if 
8630: 21 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 0d 0a  !SQLITE_OS_WIN..
8640: 23 69 6e 63 6c 75 64 65 20 3c 75 6e 69 73 74 64  #include <unistd
8650: 2e 68 3e 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23  .h>..#endif....#
8660: 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 63 6f 72 65  include "../core
8670: 2f 73 71 6c 69 74 65 33 65 78 74 2e 68 22 0d 0a  /sqlite3ext.h"..
8680: 53 51 4c 49 54 45 5f 45 58 54 45 4e 53 49 4f 4e  SQLITE_EXTENSION
8690: 5f 49 4e 49 54 31 0d 0a 0d 0a 2f 2a 0d 0a 2a 2a  _INIT1..../*..**
86a0: 20 54 68 65 20 69 6e 74 65 72 6f 70 54 65 73 74   The interopTest
86b0: 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  () SQL function 
86c0: 72 65 74 75 72 6e 73 20 69 74 73 20 66 69 72 73  returns its firs
86d0: 74 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 72 61  t argument or ra
86e0: 69 73 65 73 20 61 6e 0d 0a 2a 2a 20 65 72 72 6f  ises an..** erro
86f0: 72 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  r if there are n
8700: 6f 74 20 65 6e 6f 75 67 68 20 61 72 67 75 6d 65  ot enough argume
8710: 6e 74 73 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49 54 45  nts...*/..SQLITE
8720: 5f 50 52 49 56 41 54 45 20 76 6f 69 64 20 69 6e  _PRIVATE void in
8730: 74 65 72 6f 70 54 65 73 74 46 75 6e 63 28 0d 0a  teropTestFunc(..
8740: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
8750: 74 20 2a 63 6f 6e 74 65 78 74 2c 0d 0a 20 20 69  t *context,..  i
8760: 6e 74 20 61 72 67 63 2c 0d 0a 20 20 73 71 6c 69  nt argc,..  sqli
8770: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76  te3_value **argv
8780: 0d 0a 29 7b 0d 0a 20 20 63 6f 6e 73 74 20 75 6e  ..){..  const un
8790: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 7a 3b 0d  signed char *z;.
87a0: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 31 20 29  .  if( argc!=1 )
87b0: 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72  {..    sqlite3_r
87c0: 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74  esult_error(cont
87d0: 65 78 74 2c 20 22 6e 65 65 64 20 65 78 61 63 74  ext, "need exact
87e0: 6c 79 20 6f 6e 65 20 61 72 67 75 6d 65 6e 74 22  ly one argument"
87f0: 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 72 65 74 75  , -1);..    retu
8800: 72 6e 3b 0d 0a 20 20 7d 0d 0a 20 20 7a 20 3d 20  rn;..  }..  z = 
8810: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
8820: 78 74 28 61 72 67 76 5b 30 5d 29 3b 0d 0a 20 20  xt(argv[0]);..  
8830: 69 66 28 20 7a 20 29 7b 0d 0a 20 20 20 20 73 71  if( z ){..    sq
8840: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
8850: 74 28 63 6f 6e 74 65 78 74 2c 20 28 63 68 61 72  t(context, (char
8860: 2a 29 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f  *)z, -1, SQLITE_
8870: 53 54 41 54 49 43 29 3b 0d 0a 20 20 7d 65 6c 73  STATIC);..  }els
8880: 65 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  e{..    sqlite3_
8890: 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74  result_null(cont
88a0: 65 78 74 29 3b 0d 0a 20 20 7d 0d 0a 7d 0d 0a 0d  ext);..  }..}...
88b0: 0a 2f 2a 0d 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ./*..** The inte
88c0: 72 6f 70 53 6c 65 65 70 28 29 20 53 51 4c 20 66  ropSleep() SQL f
88d0: 75 6e 63 74 69 6f 6e 20 77 61 69 74 73 20 74 68  unction waits th
88e0: 65 20 73 70 65 63 69 66 69 65 64 20 6e 75 6d 62  e specified numb
88f0: 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e  er of millisecon
8900: 64 73 0d 0a 2a 2a 20 6f 72 20 72 61 69 73 65 73  ds..** or raises
8910: 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65   an error if the
8920: 72 65 20 61 72 65 20 6e 6f 74 20 65 6e 6f 75 67  re are not enoug
8930: 68 20 61 72 67 75 6d 65 6e 74 73 2e 0d 0a 2a 2f  h arguments...*/
8940: 0d 0a 53 51 4c 49 54 45 5f 50 52 49 56 41 54 45  ..SQLITE_PRIVATE
8950: 20 76 6f 69 64 20 69 6e 74 65 72 6f 70 53 6c 65   void interopSle
8960: 65 70 46 75 6e 63 28 0d 0a 20 20 73 71 6c 69 74  epFunc(..  sqlit
8970: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74  e3_context *cont
8980: 65 78 74 2c 0d 0a 20 20 69 6e 74 20 61 72 67 63  ext,..  int argc
8990: 2c 0d 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  ,..  sqlite3_val
89a0: 75 65 20 2a 2a 61 72 67 76 0d 0a 29 7b 0d 0a 20  ue **argv..){.. 
89b0: 20 69 6e 74 20 6d 3b 0d 0a 20 20 69 66 28 20 61   int m;..  if( a
89c0: 72 67 63 21 3d 31 20 29 7b 0d 0a 20 20 20 20 73  rgc!=1 ){..    s
89d0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72  qlite3_result_er
89e0: 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 22 6e 65  ror(context, "ne
89f0: 65 64 20 65 78 61 63 74 6c 79 20 6f 6e 65 20 61  ed exactly one a
8a00: 72 67 75 6d 65 6e 74 22 2c 20 2d 31 29 3b 0d 0a  rgument", -1);..
8a10: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 7d      return;..  }
8a20: 0d 0a 20 20 6d 20 3d 20 73 71 6c 69 74 65 33 5f  ..  m = sqlite3_
8a30: 76 61 6c 75 65 5f 69 6e 74 28 61 72 67 76 5b 30  value_int(argv[0
8a40: 5d 29 3b 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f  ]);..#if SQLITE_
8a50: 4f 53 5f 57 49 4e 0d 0a 23 69 66 20 53 51 4c 49  OS_WIN..#if SQLI
8a60: 54 45 5f 4f 53 5f 57 49 4e 43 45 0d 0a 20 20 53  TE_OS_WINCE..  S
8a70: 6c 65 65 70 28 6d 29 3b 0d 0a 20 20 73 71 6c 69  leep(m);..  sqli
8a80: 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63  te3_result_int(c
8a90: 6f 6e 74 65 78 74 2c 20 57 41 49 54 5f 4f 42 4a  ontext, WAIT_OBJ
8aa0: 45 43 54 5f 30 29 3b 0d 0a 23 65 6c 73 65 0d 0a  ECT_0);..#else..
8ab0: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
8ac0: 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 53 6c  _int(context, Sl
8ad0: 65 65 70 45 78 28 6d 2c 20 54 52 55 45 29 29 3b  eepEx(m, TRUE));
8ae0: 0d 0a 23 65 6e 64 69 66 0d 0a 23 65 6c 73 65 0d  ..#endif..#else.
8af0: 0a 20 20 69 66 28 20 6d 3e 30 20 29 7b 0d 0a 20  .  if( m>0 ){.. 
8b00: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
8b10: 74 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c  t_int64(context,
8b20: 20 73 6c 65 65 70 28 28 75 6e 73 69 67 6e 65 64   sleep((unsigned
8b30: 29 6d 29 29 3b 0d 0a 20 20 7d 65 6c 73 65 7b 0d  )m));..  }else{.
8b40: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73  .    sqlite3_res
8b50: 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78 74  ult_null(context
8b60: 29 3b 0d 0a 20 20 7d 0d 0a 23 65 6e 64 69 66 0d  );..  }..#endif.
8b70: 0a 7d 0d 0a 0d 0a 2f 2a 20 53 51 4c 69 74 65 20  .}..../* SQLite 
8b80: 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 72 6f 75  invokes this rou
8b90: 74 69 6e 65 20 6f 6e 63 65 20 77 68 65 6e 20 69  tine once when i
8ba0: 74 20 6c 6f 61 64 73 20 74 68 65 20 65 78 74 65  t loads the exte
8bb0: 6e 73 69 6f 6e 2e 0d 0a 2a 2a 20 43 72 65 61 74  nsion...** Creat
8bc0: 65 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73 2c  e new functions,
8bd0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
8be0: 6e 63 65 73 2c 20 61 6e 64 20 76 69 72 74 75 61  nces, and virtua
8bf0: 6c 20 74 61 62 6c 65 0d 0a 2a 2a 20 6d 6f 64 75  l table..** modu
8c00: 6c 65 73 20 68 65 72 65 2e 20 20 54 68 69 73 20  les here.  This 
8c10: 69 73 20 75 73 75 61 6c 6c 79 20 74 68 65 20 6f  is usually the o
8c20: 6e 6c 79 20 65 78 70 6f 72 74 65 64 20 73 79 6d  nly exported sym
8c30: 62 6f 6c 20 69 6e 0d 0a 2a 2a 20 74 68 65 20 73  bol in..** the s
8c40: 68 61 72 65 64 20 6c 69 62 72 61 72 79 2e 0d 0a  hared library...
8c50: 2a 2f 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69  */..SQLITE_API i
8c60: 6e 74 20 69 6e 74 65 72 6f 70 5f 74 65 73 74 5f  nt interop_test_
8c70: 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74 28 0d  extension_init(.
8c80: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0d  .  sqlite3 *db,.
8c90: 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d  .  char **pzErrM
8ca0: 73 67 2c 0d 0a 20 20 63 6f 6e 73 74 20 73 71 6c  sg,..  const sql
8cb0: 69 74 65 33 5f 61 70 69 5f 72 6f 75 74 69 6e 65  ite3_api_routine
8cc0: 73 20 2a 70 41 70 69 0d 0a 29 7b 0d 0a 20 20 69  s *pApi..){..  i
8cd0: 6e 74 20 72 63 3b 0d 0a 20 20 53 51 4c 49 54 45  nt rc;..  SQLITE
8ce0: 5f 45 58 54 45 4e 53 49 4f 4e 5f 49 4e 49 54 32  _EXTENSION_INIT2
8cf0: 28 70 41 70 69 29 0d 0a 20 20 72 63 20 3d 20 73  (pApi)..  rc = s
8d00: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
8d10: 6e 63 74 69 6f 6e 28 64 62 2c 20 22 69 6e 74 65  nction(db, "inte
8d20: 72 6f 70 54 65 73 74 22 2c 20 2d 31 2c 20 53 51  ropTest", -1, SQ
8d30: 4c 49 54 45 5f 41 4e 59 2c 20 30 2c 0d 0a 20 20  LITE_ANY, 0,..  
8d40: 20 20 20 20 69 6e 74 65 72 6f 70 54 65 73 74 46      interopTestF
8d50: 75 6e 63 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 69  unc, 0, 0);..  i
8d60: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
8d70: 20 29 7b 0d 0a 20 20 20 20 72 63 20 3d 20 73 71   ){..    rc = sq
8d80: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
8d90: 63 74 69 6f 6e 28 64 62 2c 20 22 69 6e 74 65 72  ction(db, "inter
8da0: 6f 70 53 6c 65 65 70 22 2c 20 31 2c 20 53 51 4c  opSleep", 1, SQL
8db0: 49 54 45 5f 41 4e 59 2c 20 30 2c 0d 0a 20 20 20  ITE_ANY, 0,..   
8dc0: 20 20 20 20 20 69 6e 74 65 72 6f 70 53 6c 65 65       interopSlee
8dd0: 70 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0d 0a 20  pFunc, 0, 0);.. 
8de0: 20 7d 0d 0a 20 20 72 65 74 75 72 6e 20 72 63 3b   }..  return rc;
8df0: 0d 0a 7d 0d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ..}..#endif /* S
8e00: 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 20 2a 2f 0d  QLITE_OS_WIN */.
8e10: 0a                                               .