System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact b83342bcc26f0b51b704dda29bddf3f9e24383a9:


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 20 0d 0a  soft.com).. * ..
00b0: 20 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74   * Released to t
00c0: 68 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e  he public domain
00d0: 2c 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77  , use at your ow
00e0: 6e 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a  n 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 2a 2f 0d 0a 0d 0a 23 64 65 66 69 6e 65 20 53  **/....#define S
0130: 51 4c 49 54 45 5f 41 50 49 20 5f 5f 64 65 63 6c  QLITE_API __decl
0140: 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 0d  spec(dllexport).
0150: 0a 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f  ...#include "../
0160: 63 6f 72 65 2f 73 71 6c 69 74 65 33 2e 63 22 0d  core/sqlite3.c".
0170: 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49  ...#if defined(I
0180: 4e 54 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f 4e  NTEROP_EXTENSION
0190: 5f 46 55 4e 43 54 49 4f 4e 53 29 0d 0a 23 69 6e  _FUNCTIONS)..#in
01a0: 63 6c 75 64 65 20 22 2e 2e 2f 63 6f 6e 74 72 69  clude "../contri
01b0: 62 2f 65 78 74 65 6e 73 69 6f 6e 2d 66 75 6e 63  b/extension-func
01c0: 74 69 6f 6e 73 2e 63 22 0d 0a 65 78 74 65 72 6e  tions.c"..extern
01d0: 20 69 6e 74 20 52 65 67 69 73 74 65 72 45 78 74   int RegisterExt
01e0: 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e 73 28  ensionFunctions(
01f0: 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0d 0a 23  sqlite3 *db);..#
0200: 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 64 65 66 20  endif....#ifdef 
0210: 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 0d 0a 23  SQLITE_OS_WIN..#
0220: 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52  if defined(INTER
0230: 4f 50 5f 43 4f 44 45 43 29 0d 0a 23 69 6e 63 6c  OP_CODEC)..#incl
0240: 75 64 65 20 22 63 72 79 70 74 2e 63 22 0d 0a 23  ude "crypt.c"..#
0250: 65 6e 64 69 66 0d 0a 0d 0a 23 64 65 66 69 6e 65  endif....#define
0260: 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 4e   INTEROP_DEBUG_N
0270: 4f 4e 45 20 20 20 20 20 20 20 20 20 20 20 28 30  ONE           (0
0280: 78 30 30 30 30 29 0d 0a 23 64 65 66 69 6e 65 20  x0000)..#define 
0290: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 43 4c  INTEROP_DEBUG_CL
02a0: 4f 53 45 20 20 20 20 20 20 20 20 20 20 28 30 78  OSE          (0x
02b0: 30 30 30 31 29 0d 0a 23 64 65 66 69 6e 65 20 49  0001)..#define I
02c0: 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 46 49 4e  NTEROP_DEBUG_FIN
02d0: 41 4c 49 5a 45 20 20 20 20 20 20 20 28 30 78 30  ALIZE       (0x0
02e0: 30 30 32 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e  002)..#define IN
02f0: 54 45 52 4f 50 5f 44 45 42 55 47 5f 42 41 43 4b  TEROP_DEBUG_BACK
0300: 55 50 5f 46 49 4e 49 53 48 20 20 28 30 78 30 30  UP_FINISH  (0x00
0310: 30 34 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54  04)..#define INT
0320: 45 52 4f 50 5f 44 45 42 55 47 5f 4f 50 45 4e 20  EROP_DEBUG_OPEN 
0330: 20 20 20 20 20 20 20 20 20 20 28 30 78 30 30 30            (0x000
0340: 38 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54 45  8)..#define INTE
0350: 52 4f 50 5f 44 45 42 55 47 5f 4f 50 45 4e 31 36  ROP_DEBUG_OPEN16
0360: 20 20 20 20 20 20 20 20 20 28 30 78 30 30 31 30           (0x0010
0370: 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52  )..#define INTER
0380: 4f 50 5f 44 45 42 55 47 5f 50 52 45 50 41 52 45  OP_DEBUG_PREPARE
0390: 20 20 20 20 20 20 20 20 28 30 78 30 30 32 30 29          (0x0020)
03a0: 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52 4f  ..#define INTERO
03b0: 50 5f 44 45 42 55 47 5f 50 52 45 50 41 52 45 31  P_DEBUG_PREPARE1
03c0: 36 20 20 20 20 20 20 28 30 78 30 30 34 30 29 0d  6      (0x0040).
03d0: 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52 4f 50  .#define INTEROP
03e0: 5f 44 45 42 55 47 5f 52 45 53 45 54 20 20 20 20  _DEBUG_RESET    
03f0: 20 20 20 20 20 20 28 30 78 30 30 38 30 29 0d 0a        (0x0080)..
0400: 23 64 65 66 69 6e 65 20 49 4e 54 45 52 4f 50 5f  #define INTEROP_
0410: 44 45 42 55 47 5f 43 48 41 4e 47 45 53 20 20 20  DEBUG_CHANGES   
0420: 20 20 20 20 20 28 30 78 30 31 30 30 29 0d 0a 23       (0x0100)..#
0430: 64 65 66 69 6e 65 20 49 4e 54 45 52 4f 50 5f 44  define INTEROP_D
0440: 45 42 55 47 5f 42 52 45 41 4b 20 20 20 20 20 20  EBUG_BREAK      
0450: 20 20 20 20 28 30 78 30 32 30 30 29 0d 0a 0d 0a      (0x0200)....
0460: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43  #if defined(_MSC
0470: 5f 56 45 52 29 20 26 26 20 64 65 66 69 6e 65 64  _VER) && defined
0480: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20  (INTEROP_DEBUG) 
0490: 26 26 20 5c 0d 0a 20 20 20 20 28 49 4e 54 45 52  && \..    (INTER
04a0: 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52  OP_DEBUG & INTER
04b0: 4f 50 5f 44 45 42 55 47 5f 42 52 45 41 4b 29 0d  OP_DEBUG_BREAK).
04c0: 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
04d0: 49 6e 74 65 72 6f 70 42 72 65 61 6b 28 61 29 20  InteropBreak(a) 
04e0: 7b 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70  { sqlite3Interop
04f0: 44 65 62 75 67 28 22 25 73 5c 6e 22 2c 20 28 61  Debug("%s\n", (a
0500: 29 29 3b 20 5f 5f 64 65 62 75 67 62 72 65 61 6b  )); __debugbreak
0510: 28 29 3b 20 7d 0d 0a 23 65 6c 73 65 0d 0a 23 64  (); }..#else..#d
0520: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 6e 74  efine sqlite3Int
0530: 65 72 6f 70 42 72 65 61 6b 28 61 29 0d 0a 23 65  eropBreak(a)..#e
0540: 6e 64 69 66 0d 0a 0d 0a 74 79 70 65 64 65 66 20  ndif....typedef 
0550: 76 6f 69 64 20 28 2a 53 51 4c 49 54 45 55 53 45  void (*SQLITEUSE
0560: 52 46 55 4e 43 29 28 73 71 6c 69 74 65 33 5f 63  RFUNC)(sqlite3_c
0570: 6f 6e 74 65 78 74 20 2a 2c 20 69 6e 74 2c 20 73  ontext *, int, s
0580: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
0590: 3b 0d 0a 74 79 70 65 64 65 66 20 76 6f 69 64 20  ;..typedef void 
05a0: 28 2a 53 51 4c 49 54 45 46 55 4e 43 46 49 4e 41  (*SQLITEFUNCFINA
05b0: 4c 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  L)(sqlite3_conte
05c0: 78 74 20 2a 29 3b 0d 0a 0d 0a 23 69 66 20 64 65  xt *);....#if de
05d0: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45  fined(INTEROP_DE
05e0: 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
05f0: 49 4e 54 45 52 4f 50 5f 4c 4f 47 29 0d 0a 53 51  INTEROP_LOG)..SQ
0600: 4c 49 54 45 5f 50 52 49 56 41 54 45 20 76 6f 69  LITE_PRIVATE voi
0610: 64 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70  d sqlite3Interop
0620: 44 65 62 75 67 28 63 6f 6e 73 74 20 63 68 61 72  Debug(const char
0630: 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b   *zFormat, ...){
0640: 0d 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 20  ..  va_list ap; 
0650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0660: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 61 72          /* Varar
0670: 67 20 6c 69 73 74 20 2a 2f 0d 0a 20 20 53 74 72  g list */..  Str
0680: 41 63 63 75 6d 20 61 63 63 3b 20 20 20 20 20 20  Accum acc;      
0690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
06a0: 20 2f 2a 20 53 74 72 69 6e 67 20 61 63 63 75 6d   /* String accum
06b0: 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 63 68 61 72  ulator */.  char
06c0: 20 7a 4d 73 67 5b 53 51 4c 49 54 45 5f 50 52 49   zMsg[SQLITE_PRI
06d0: 4e 54 5f 42 55 46 5f 53 49 5a 45 2a 33 5d 3b 20  NT_BUF_SIZE*3]; 
06e0: 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 6c 6f 67 20  /* Complete log 
06f0: 6d 65 73 73 61 67 65 20 2a 2f 0d 0a 20 20 76 61  message */..  va
0700: 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d  _start(ap, zForm
0710: 61 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 53 74  at);.  sqlite3St
0720: 72 41 63 63 75 6d 49 6e 69 74 28 26 61 63 63 2c  rAccumInit(&acc,
0730: 20 7a 4d 73 67 2c 20 73 69 7a 65 6f 66 28 7a 4d   zMsg, sizeof(zM
0740: 73 67 29 2c 20 30 29 3b 0a 20 20 61 63 63 2e 75  sg), 0);.  acc.u
0750: 73 65 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  seMalloc = 0;.  
0760: 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28  sqlite3VXPrintf(
0770: 26 61 63 63 2c 20 30 2c 20 7a 46 6f 72 6d 61 74  &acc, 0, zFormat
0780: 2c 20 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28  , ap);.  va_end(
0790: 61 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f  ap);.#if SQLITE_
07a0: 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e  VERSION_NUMBER >
07b0: 3d 20 33 30 30 37 30 31 33 0a 20 20 73 71 6c 69  = 3007013.  sqli
07c0: 74 65 33 5f 77 69 6e 33 32 5f 77 72 69 74 65 5f  te3_win32_write_
07d0: 64 65 62 75 67 28 73 71 6c 69 74 65 33 53 74 72  debug(sqlite3Str
07e0: 41 63 63 75 6d 46 69 6e 69 73 68 28 26 61 63 63  AccumFinish(&acc
07f0: 29 2c 20 2d 31 29 3b 0a 23 65 6c 69 66 20 64 65  ), -1);.#elif de
0800: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e  fined(SQLITE_WIN
0810: 33 32 5f 48 41 53 5f 41 4e 53 49 29 0a 20 20 4f  32_HAS_ANSI).  O
0820: 75 74 70 75 74 44 65 62 75 67 53 74 72 69 6e 67  utputDebugString
0830: 41 28 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  A(sqlite3StrAccu
0840: 6d 46 69 6e 69 73 68 28 26 61 63 63 29 29 3b 0a  mFinish(&acc));.
0850: 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 53 51  #elif defined(SQ
0860: 4c 49 54 45 5f 57 49 4e 33 32 5f 48 41 53 5f 57  LITE_WIN32_HAS_W
0870: 49 44 45 29 0a 20 20 7b 0a 20 20 20 20 4c 50 57  IDE).  {.    LPW
0880: 53 54 52 20 7a 57 69 64 65 4d 73 67 20 3d 20 75  STR zWideMsg = u
0890: 74 66 38 54 6f 55 6e 69 63 6f 64 65 28 73 71 6c  tf8ToUnicode(sql
08a0: 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69  ite3StrAccumFini
08b0: 73 68 28 26 61 63 63 29 29 3b 0a 20 20 20 20 69  sh(&acc));.    i
08c0: 66 28 20 7a 57 69 64 65 4d 73 67 20 29 7b 0a 20  f( zWideMsg ){. 
08d0: 20 20 20 20 20 4f 75 74 70 75 74 44 65 62 75 67       OutputDebug
08e0: 53 74 72 69 6e 67 57 28 7a 57 69 64 65 4d 73 67  StringW(zWideMsg
08f0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
0900: 5f 66 72 65 65 28 7a 57 69 64 65 4d 73 67 29 3b  _free(zWideMsg);
0910: 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6c 73 65  .    }.  }.#else
0920: 0a 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72  .  fprintf(stder
0930: 72 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  r, "%s", sqlite3
0940: 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 26  StrAccumFinish(&
0950: 61 63 63 29 29 3b 0a 23 65 6e 64 69 66 0a 7d 0d  acc));.#endif.}.
0960: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64  .#endif....#if d
0970: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 4c  efined(INTEROP_L
0980: 4f 47 29 0d 0a 53 51 4c 49 54 45 5f 50 52 49 56  OG)..SQLITE_PRIV
0990: 41 54 45 20 69 6e 74 20 6c 6f 67 43 6f 6e 66 69  ATE int logConfi
09a0: 67 75 72 65 64 20 3d 20 30 3b 0d 0a 0d 0a 53 51  gured = 0;....SQ
09b0: 4c 49 54 45 5f 50 52 49 56 41 54 45 20 76 6f 69  LITE_PRIVATE voi
09c0: 64 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70  d sqlite3Interop
09d0: 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64  LogCallback(void
09e0: 20 2a 70 41 72 67 2c 20 69 6e 74 20 69 43 6f 64   *pArg, int iCod
09f0: 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  e, const char *z
0a00: 4d 73 67 29 7b 0d 0a 20 20 73 71 6c 69 74 65 33  Msg){..  sqlite3
0a10: 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 49 4e  InteropDebug("IN
0a20: 54 45 52 4f 50 5f 4c 4f 47 20 28 25 64 29 20 25  TEROP_LOG (%d) %
0a30: 73 5c 6e 22 2c 20 69 43 6f 64 65 2c 20 7a 4d 73  s\n", iCode, zMs
0a40: 67 29 3b 0d 0a 7d 0d 0a 23 65 6e 64 69 66 0d 0a  g);..}..#endif..
0a50: 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52  ..#if SQLITE_VER
0a60: 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3c 20 33 30  SION_NUMBER < 30
0a70: 30 37 30 31 34 0d 0a 53 51 4c 49 54 45 5f 50 52  07014..SQLITE_PR
0a80: 49 56 41 54 45 20 76 6f 69 64 20 2a 20 73 71 6c  IVATE void * sql
0a90: 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
0aa0: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
0ab0: 20 2a 64 62 2c 20 69 6e 74 20 6e 29 0d 0a 7b 0d   *db, int n)..{.
0ac0: 0a 20 20 76 6f 69 64 20 2a 70 3b 0d 0a 20 20 69  .  void *p;..  i
0ad0: 66 20 28 64 62 29 20 7b 0d 0a 20 20 20 20 73 71  f (db) {..    sq
0ae0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
0af0: 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20  r(db->mutex);.. 
0b00: 20 7d 0d 0a 20 20 70 20 3d 20 73 71 6c 69 74 65   }..  p = sqlite
0b10: 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62  3DbMallocZero(db
0b20: 2c 6e 29 3b 0d 0a 20 20 69 66 20 28 64 62 29 20  ,n);..  if (db) 
0b30: 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d  {..    sqlite3_m
0b40: 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d  utex_leave(db->m
0b50: 75 74 65 78 29 3b 0d 0a 20 20 7d 0d 0a 20 20 72  utex);..  }..  r
0b60: 65 74 75 72 6e 20 70 3b 0d 0a 7d 0d 0a 0d 0a 53  eturn p;..}....S
0b70: 51 4c 49 54 45 5f 50 52 49 56 41 54 45 20 76 6f  QLITE_PRIVATE vo
0b80: 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  id sqlite3DbFree
0b90: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
0ba0: 20 2a 64 62 2c 20 76 6f 69 64 20 2a 70 29 0d 0a   *db, void *p)..
0bb0: 7b 0d 0a 20 20 69 66 20 28 64 62 29 20 7b 0d 0a  {..  if (db) {..
0bc0: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
0bd0: 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65  x_enter(db->mute
0be0: 78 29 3b 0d 0a 20 20 7d 0d 0a 20 20 69 66 20 28  x);..  }..  if (
0bf0: 70 29 20 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65  p) {..    sqlite
0c00: 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
0c10: 28 70 2c 20 4d 45 4d 54 59 50 45 5f 44 42 7c 4d  (p, MEMTYPE_DB|M
0c20: 45 4d 54 59 50 45 5f 48 45 41 50 29 3b 0d 0a 20  EMTYPE_HEAP);.. 
0c30: 20 7d 0d 0a 20 20 73 71 6c 69 74 65 33 44 62 46   }..  sqlite3DbF
0c40: 72 65 65 28 64 62 2c 70 29 3b 0d 0a 20 20 69 66  ree(db,p);..  if
0c50: 20 28 64 62 29 20 7b 0d 0a 20 20 20 20 73 71 6c   (db) {..    sql
0c60: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
0c70: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20  (db->mutex);..  
0c80: 7d 0d 0a 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  }..}..#endif....
0c90: 2f 2a 0d 0a 20 20 20 20 54 68 65 20 67 6f 61 6c  /*..    The goal
0ca0: 20 6f 66 20 74 68 69 73 20 76 65 72 73 69 6f 6e   of this version
0cb0: 20 6f 66 20 63 6c 6f 73 65 20 69 73 20 64 69 66   of close is dif
0cc0: 66 65 72 65 6e 74 20 74 68 61 6e 20 74 68 61 74  ferent than that
0cd0: 20 6f 66 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73   of sqlite3_clos
0ce0: 65 28 29 2c 20 61 6e 64 20 69 73 20 64 65 73 69  e(), and is desi
0cf0: 67 6e 65 64 20 74 6f 20 6c 65 6e 64 20 69 74 73  gned to lend its
0d00: 65 6c 66 20 62 65 74 74 65 72 20 74 6f 20 2e 4e  elf better to .N
0d10: 45 54 27 73 20 6e 6f 6e 2d 64 65 74 65 72 6d 69  ET's non-determi
0d20: 6e 69 73 74 69 63 20 66 69 6e 61 6c 69 7a 65 72  nistic finalizer
0d30: 73 20 61 6e 64 0d 0a 20 20 20 20 74 68 65 20 47  s and..    the G
0d40: 43 20 74 68 72 65 61 64 2e 20 20 53 51 4c 69 74  C thread.  SQLit
0d50: 65 20 77 69 6c 6c 20 6e 6f 74 20 63 6c 6f 73 65  e will not close
0d60: 20 61 20 64 61 74 61 62 61 73 65 20 69 66 20 73   a database if s
0d70: 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 6f 70  tatements are op
0d80: 65 6e 20 6f 6e 20 69 74 20 2d 2d 20 62 75 74 20  en on it -- but 
0d90: 66 6f 72 20 6f 75 72 20 70 75 72 70 6f 73 65 73  for our purposes
0da0: 2c 20 77 65 27 64 20 72 61 74 68 65 72 20 66 69  , we'd rather fi
0db0: 6e 61 6c 69 7a 65 20 61 6c 6c 20 61 63 74 69 76  nalize all activ
0dc0: 65 20 73 74 61 74 65 6d 65 6e 74 73 0d 0a 20 20  e statements..  
0dd0: 20 20 61 6e 64 20 66 6f 72 63 69 62 6c 79 20 63    and forcibly c
0de0: 6c 6f 73 65 20 74 68 65 20 64 61 74 61 62 61 73  lose the databas
0df0: 65 2e 20 20 54 68 65 20 72 65 61 73 6f 6e 20 69  e.  The reason i
0e00: 73 20 73 69 6d 70 6c 65 20 2d 2d 20 61 20 6c 6f  s simple -- a lo
0e10: 74 20 6f 66 20 70 65 6f 70 6c 65 20 64 6f 6e 27  t of people don'
0e20: 74 20 44 69 73 70 6f 73 65 28 29 20 6f 66 20 74  t Dispose() of t
0e30: 68 65 69 72 20 6f 62 6a 65 63 74 73 20 63 6f 72  heir objects cor
0e40: 72 65 63 74 6c 79 20 61 6e 64 20 6c 65 74 20 74  rectly and let t
0e50: 68 65 20 67 61 72 62 61 67 65 20 63 6f 6c 6c 65  he garbage colle
0e60: 63 74 6f 72 0d 0a 20 20 20 20 64 6f 20 69 74 2e  ctor..    do it.
0e70: 20 20 54 68 69 73 20 6c 65 61 64 73 20 74 6f 20    This leads to 
0e80: 75 6e 65 78 70 65 63 74 65 64 20 62 65 68 61 76  unexpected behav
0e90: 69 6f 72 20 77 68 65 6e 20 61 20 75 73 65 72 20  ior when a user 
0ea0: 74 68 69 6e 6b 73 20 74 68 65 79 27 76 65 20 63  thinks they've c
0eb0: 6c 6f 73 65 64 20 61 20 64 61 74 61 62 61 73 65  losed a database
0ec0: 2c 20 62 75 74 20 69 74 27 73 20 73 74 69 6c 6c  , but it's still
0ed0: 20 6f 70 65 6e 20 62 65 63 61 75 73 65 20 6e 6f   open because no
0ee0: 74 20 61 6c 6c 20 74 68 65 20 73 74 61 74 65 6d  t all the statem
0ef0: 65 6e 74 73 20 68 61 76 65 0d 0a 20 20 20 20 68  ents have..    h
0f00: 69 74 20 74 68 65 20 47 43 20 79 65 74 2e 0d 0a  it the GC yet...
0f10: 0d 0a 20 20 20 20 53 6f 2c 20 68 65 72 65 20 77  ..    So, here w
0f20: 65 20 68 61 76 65 20 61 20 70 72 6f 62 6c 65 6d  e have a problem
0f30: 20 2e 2e 2e 20 2e 4e 45 54 20 68 61 73 20 61 20   ... .NET has a 
0f40: 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 79 20 6e  pointer to any n
0f50: 75 6d 62 65 72 20 6f 66 20 73 71 6c 69 74 65 33  umber of sqlite3
0f60: 5f 73 74 6d 74 20 6f 62 6a 65 63 74 73 2e 20 20  _stmt objects.  
0f70: 57 65 20 63 61 6e 27 74 20 63 61 6c 6c 20 73 71  We can't call sq
0f80: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
0f90: 20 6f 6e 20 74 68 65 73 65 20 62 65 63 61 75 73   on these becaus
0fa0: 65 0d 0a 20 20 20 20 74 68 65 69 72 20 6d 65 6d  e..    their mem
0fb0: 6f 72 79 20 69 73 20 66 72 65 65 64 20 61 6e 64  ory is freed and
0fc0: 20 63 61 6e 20 62 65 20 75 73 65 64 20 66 6f 72   can be used for
0fd0: 20 73 6f 6d 65 74 68 69 6e 67 20 65 6c 73 65 2e   something else.
0fe0: 20 20 54 68 65 20 47 43 20 74 68 72 65 61 64 20    The GC thread 
0ff0: 63 6f 75 6c 64 20 70 6f 74 65 6e 74 69 61 6c 6c  could potentiall
1000: 79 20 74 72 79 20 61 6e 64 20 63 61 6c 6c 20 66  y try and call f
1010: 69 6e 61 6c 69 7a 65 20 61 67 61 69 6e 20 6f 6e  inalize again on
1020: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 61   the statement a
1030: 66 74 65 72 0d 0a 20 20 20 20 74 68 61 74 20 6d  fter..    that m
1040: 65 6d 6f 72 79 20 77 61 73 20 64 65 61 6c 6c 6f  emory was deallo
1050: 63 61 74 65 64 2e 20 20 42 41 44 2e 20 20 53 6f  cated.  BAD.  So
1060: 2c 20 77 68 61 74 20 77 65 20 6e 65 65 64 20 74  , what we need t
1070: 6f 20 64 6f 20 69 73 20 6d 61 6b 65 20 61 20 63  o do is make a c
1080: 6f 70 79 20 6f 66 20 65 61 63 68 20 73 74 61 74  opy of each stat
1090: 65 6d 65 6e 74 2c 20 61 6e 64 20 63 61 6c 6c 20  ement, and call 
10a0: 66 69 6e 61 6c 69 7a 65 28 29 20 6f 6e 20 74 68  finalize() on th
10b0: 65 20 63 6f 70 79 20 2d 2d 20 73 6f 20 74 68 61  e copy -- so tha
10c0: 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0d 0a  t the original..
10d0: 20 20 20 20 73 74 61 74 65 6d 65 6e 74 27 73 20      statement's 
10e0: 6d 65 6d 6f 72 79 20 69 73 20 70 72 65 73 65 72  memory is preser
10f0: 76 65 64 2c 20 61 6e 64 20 6d 61 72 6b 65 64 20  ved, and marked 
1100: 61 73 20 42 41 44 2c 20 62 75 74 20 77 65 20 63  as BAD, but we c
1110: 61 6e 20 73 74 69 6c 6c 20 6d 61 6e 61 67 65 20  an still manage 
1120: 74 6f 20 66 69 6e 61 6c 69 7a 65 20 65 76 65 72  to finalize ever
1130: 79 74 68 69 6e 67 20 61 6e 64 20 66 6f 72 63 69  ything and forci
1140: 62 6c 79 20 63 6c 6f 73 65 20 74 68 65 20 64 61  bly close the da
1150: 74 61 62 61 73 65 2e 20 20 4c 61 74 65 72 20 77  tabase.  Later w
1160: 68 65 6e 20 74 68 65 20 0d 0a 20 20 20 20 47 43  hen the ..    GC
1170: 20 67 65 74 73 20 61 72 6f 75 6e 64 20 74 6f 20   gets around to 
1180: 63 61 6c 6c 69 6e 67 20 66 69 6e 61 6c 69 7a 65  calling finalize
1190: 5f 69 6e 74 65 72 6f 70 28 29 20 6f 6e 20 74 68  _interop() on th
11a0: 65 20 22 62 61 64 22 20 73 74 61 74 65 6d 65 6e  e "bad" statemen
11b0: 74 2c 20 77 65 20 64 65 74 65 63 74 20 74 68 61  t, we detect tha
11c0: 74 20 61 6e 64 20 66 69 6e 69 73 68 20 64 65 61  t and finish dea
11d0: 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 70 6f  llocating the po
11e0: 69 6e 74 65 72 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49  inter...*/..SQLI
11f0: 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41 50  TE_API int WINAP
1200: 49 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 5f  I sqlite3_close_
1210: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 20  interop(sqlite3 
1220: 2a 64 62 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72  *db)..{..  int r
1230: 65 74 3b 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f  et;..#if SQLITE_
1240: 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e  VERSION_NUMBER >
1250: 3d 20 33 30 30 37 30 31 34 0d 0a 0d 0a 23 69 66  = 3007014....#if
1260: 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50   defined(INTEROP
1270: 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e 54 45  _DEBUG) && (INTE
1280: 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45  ROP_DEBUG & INTE
1290: 52 4f 50 5f 44 45 42 55 47 5f 43 4c 4f 53 45 29  ROP_DEBUG_CLOSE)
12a0: 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72  ..  sqlite3Inter
12b0: 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33  opDebug("sqlite3
12c0: 5f 63 6c 6f 73 65 5f 69 6e 74 65 72 6f 70 28 29  _close_interop()
12d0: 3a 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65  : calling sqlite
12e0: 33 5f 63 6c 6f 73 65 5f 76 32 28 25 70 29 2e 2e  3_close_v2(%p)..
12f0: 2e 5c 6e 22 2c 20 64 62 29 3b 0d 0a 23 65 6e 64  .\n", db);..#end
1300: 69 66 0d 0a 0d 0a 20 20 72 65 74 20 3d 20 73 71  if....  ret = sq
1310: 6c 69 74 65 33 5f 63 6c 6f 73 65 5f 76 32 28 64  lite3_close_v2(d
1320: 62 29 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e  b);....#if defin
1330: 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  ed(INTEROP_DEBUG
1340: 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45  ) && (INTEROP_DE
1350: 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45  BUG & INTEROP_DE
1360: 42 55 47 5f 43 4c 4f 53 45 29 0d 0a 20 20 73 71  BUG_CLOSE)..  sq
1370: 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75  lite3InteropDebu
1380: 67 28 22 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  g("sqlite3_close
1390: 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c 69  _interop(): sqli
13a0: 74 65 33 5f 63 6c 6f 73 65 5f 76 32 28 25 70 29  te3_close_v2(%p)
13b0: 20 72 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22   returned %d.\n"
13c0: 2c 20 64 62 2c 20 72 65 74 29 3b 0d 0a 23 65 6e  , db, ret);..#en
13d0: 64 69 66 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20  dif....  return 
13e0: 72 65 74 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 72  ret;..#else..  r
13f0: 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 63 6c 6f  et = sqlite3_clo
1400: 73 65 28 64 62 29 3b 0d 0a 0d 0a 20 20 69 66 20  se(db);....  if 
1410: 28 72 65 74 20 3d 3d 20 53 51 4c 49 54 45 5f 42  (ret == SQLITE_B
1420: 55 53 59 29 0d 0a 20 20 7b 0d 0a 20 20 20 20 73  USY)..  {..    s
1430: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
1440: 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a  er(db->mutex);..
1450: 0d 0a 20 20 20 20 69 66 20 28 21 64 62 2d 3e 70  ..    if (!db->p
1460: 56 64 62 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  Vdbe)..    {..  
1470: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
1480: 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65  x_leave(db->mute
1490: 78 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  x);..      retur
14a0: 6e 20 72 65 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  n ret;..    }...
14b0: 0a 20 20 20 20 77 68 69 6c 65 20 28 64 62 2d 3e  .    while (db->
14c0: 70 56 64 62 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  pVdbe)..    {.. 
14d0: 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 61 20 63       /* Make a c
14e0: 6f 70 79 20 6f 66 20 74 68 65 20 66 69 72 73 74  opy of the first
14f0: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
1500: 65 6e 74 20 2a 2f 0d 0a 20 20 20 20 20 20 56 64  ent */..      Vd
1510: 62 65 20 2a 70 20 3d 20 28 56 64 62 65 20 2a 29  be *p = (Vdbe *)
1520: 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
1530: 65 72 6f 5f 69 6e 74 65 72 6f 70 28 64 62 2c 20  ero_interop(db, 
1540: 73 69 7a 65 6f 66 28 56 64 62 65 29 29 3b 0d 0a  sizeof(Vdbe));..
1550: 20 20 20 20 20 20 56 64 62 65 20 2a 70 6f 20 3d        Vdbe *po =
1560: 20 64 62 2d 3e 70 56 64 62 65 3b 0d 0a 0d 0a 20   db->pVdbe;.... 
1570: 20 20 20 20 20 69 66 20 28 21 70 29 20 0d 0a 20       if (!p) .. 
1580: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1590: 72 65 74 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d  ret = SQLITE_NOM
15a0: 45 4d 3b 0d 0a 20 20 20 20 20 20 20 20 62 72 65  EM;..        bre
15b0: 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  ak;..      }....
15c0: 20 20 20 20 20 20 43 6f 70 79 4d 65 6d 6f 72 79        CopyMemory
15d0: 28 70 2c 20 70 6f 2c 20 73 69 7a 65 6f 66 28 56  (p, po, sizeof(V
15e0: 64 62 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  dbe));....      
15f0: 2f 2a 20 50 75 74 20 69 74 20 6f 6e 20 74 68 65  /* Put it on the
1600: 20 63 68 61 69 6e 20 73 6f 20 77 65 20 63 61 6e   chain so we can
1610: 20 66 72 65 65 20 69 74 20 2a 2f 0d 0a 20 20 20   free it */..   
1620: 20 20 20 64 62 2d 3e 70 56 64 62 65 20 3d 20 70     db->pVdbe = p
1630: 3b 0d 0a 20 20 20 20 20 20 72 65 74 20 3d 20 73  ;..      ret = s
1640: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
1650: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29  (sqlite3_stmt *)
1660: 70 29 3b 20 2f 2a 20 54 68 69 73 20 77 69 6c 6c  p); /* This will
1670: 20 61 6c 73 6f 20 66 72 65 65 20 74 68 65 20 63   also free the c
1680: 6f 70 79 27 73 20 6d 65 6d 6f 72 79 20 2a 2f 0d  opy's memory */.
1690: 0a 20 20 20 20 20 20 69 66 20 28 72 65 74 29 0d  .      if (ret).
16a0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
16b0: 20 20 2f 2a 20 66 69 6e 61 6c 69 7a 65 20 66 61    /* finalize fa
16c0: 69 6c 65 64 20 2d 2d 20 73 6f 20 77 65 20 6d 75  iled -- so we mu
16d0: 73 74 20 70 75 74 20 62 61 63 6b 20 61 6e 79 74  st put back anyt
16e0: 68 69 6e 67 20 77 65 20 6d 75 6e 67 65 64 20 2a  hing we munged *
16f0: 2f 0d 0a 20 20 20 20 20 20 20 20 43 6f 70 79 4d  /..        CopyM
1700: 65 6d 6f 72 79 28 70 6f 2c 20 70 2c 20 73 69 7a  emory(po, p, siz
1710: 65 6f 66 28 56 64 62 65 29 29 3b 0d 0a 20 20 20  eof(Vdbe));..   
1720: 20 20 20 20 20 64 62 2d 3e 70 56 64 62 65 20 3d       db->pVdbe =
1730: 20 70 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   po;....        
1740: 2f 2a 0d 0a 20 20 20 20 20 20 20 20 2a 2a 20 4e  /*..        ** N
1750: 4f 54 45 3a 20 4f 6b 2c 20 77 65 20 6d 75 73 74  OTE: Ok, we must
1760: 20 66 72 65 65 20 74 68 69 73 20 62 6c 6f 63 6b   free this block
1770: 20 74 68 61 74 20 2a 77 65 2a 20 61 6c 6c 6f 63   that *we* alloc
1780: 61 74 65 64 20 28 61 62 6f 76 65 29 20 73 69 6e  ated (above) sin
1790: 63 65 0d 0a 20 20 20 20 20 20 20 20 2a 2a 20 20  ce..        **  
17a0: 20 20 20 20 20 66 69 6e 61 6c 69 7a 65 20 64 69       finalize di
17b0: 64 20 6e 6f 74 20 64 6f 20 73 6f 2e 0d 0a 20 20  d not do so...  
17c0: 20 20 20 20 20 20 2a 2f 0d 0a 20 20 20 20 20 20        */..      
17d0: 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 5f    sqlite3DbFree_
17e0: 69 6e 74 65 72 6f 70 28 64 62 2c 20 70 29 3b 0d  interop(db, p);.
17f0: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d  .        break;.
1800: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
1810: 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  else..      {.. 
1820: 20 20 20 20 20 20 20 5a 65 72 6f 4d 65 6d 6f 72         ZeroMemor
1830: 79 28 70 6f 2c 20 73 69 7a 65 6f 66 28 56 64 62  y(po, sizeof(Vdb
1840: 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 70 6f  e));..        po
1850: 2d 3e 6d 61 67 69 63 20 3d 20 56 44 42 45 5f 4d  ->magic = VDBE_M
1860: 41 47 49 43 5f 44 45 41 44 3b 0d 0a 20 20 20 20  AGIC_DEAD;..    
1870: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20    }..    }..    
1880: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65  sqlite3_mutex_le
1890: 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d  ave(db->mutex);.
18a0: 0a 20 20 20 20 72 65 74 20 3d 20 73 71 6c 69 74  .    ret = sqlit
18b0: 65 33 5f 63 6c 6f 73 65 28 64 62 29 3b 0d 0a 20  e3_close(db);.. 
18c0: 20 7d 0d 0a 20 20 72 65 74 75 72 6e 20 72 65 74   }..  return ret
18d0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 7d 0d 0a 0d 0a  ;..#endif..}....
18e0: 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57  SQLITE_API int W
18f0: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 6f 70  INAPI sqlite3_op
1900: 65 6e 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 73 74  en_interop(const
1910: 20 63 68 61 72 20 2a 66 69 6c 65 6e 61 6d 65 2c   char *filename,
1920: 20 69 6e 74 20 66 6c 61 67 73 2c 20 73 71 6c 69   int flags, sqli
1930: 74 65 33 20 2a 2a 70 70 64 62 29 0d 0a 7b 0d 0a  te3 **ppdb)..{..
1940: 20 20 69 6e 74 20 72 65 74 3b 0d 0a 0d 0a 23 69    int ret;....#i
1950: 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f  f defined(INTERO
1960: 50 5f 4c 4f 47 29 0d 0a 20 20 69 66 28 20 21 6c  P_LOG)..  if( !l
1970: 6f 67 43 6f 6e 66 69 67 75 72 65 64 20 29 7b 0d  ogConfigured ){.
1980: 0a 20 20 20 20 72 65 74 20 3d 20 73 71 6c 69 74  .    ret = sqlit
1990: 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45  e3_config(SQLITE
19a0: 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c 20 73 71 6c  _CONFIG_LOG, sql
19b0: 69 74 65 33 49 6e 74 65 72 6f 70 4c 6f 67 43 61  ite3InteropLogCa
19c0: 6c 6c 62 61 63 6b 2c 20 30 29 3b 0d 0a 20 20 20  llback, 0);..   
19d0: 20 69 66 28 20 72 65 74 3d 3d 53 51 4c 49 54 45   if( ret==SQLITE
19e0: 5f 4f 4b 20 29 7b 0d 0a 20 20 20 20 20 20 6c 6f  _OK ){..      lo
19f0: 67 43 6f 6e 66 69 67 75 72 65 64 20 3d 20 31 3b  gConfigured = 1;
1a00: 0d 0a 20 20 20 20 7d 65 6c 73 65 7b 0d 0a 20 20  ..    }else{..  
1a10: 20 20 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72      sqlite3Inter
1a20: 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33  opDebug("sqlite3
1a30: 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28 29 3a  _open_interop():
1a40: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28   sqlite3_config(
1a50: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f  SQLITE_CONFIG_LO
1a60: 47 29 20 72 65 74 75 72 6e 65 64 20 25 64 2e 5c  G) returned %d.\
1a70: 6e 22 2c 20 72 65 74 29 3b 0d 0a 20 20 20 20 7d  n", ret);..    }
1a80: 0d 0a 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d  ..  }..#endif...
1a90: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54  .#if defined(INT
1aa0: 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28  EROP_DEBUG) && (
1ab0: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20  INTEROP_DEBUG & 
1ac0: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 4f 50  INTEROP_DEBUG_OP
1ad0: 45 4e 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e  EN)..  sqlite3In
1ae0: 74 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69  teropDebug("sqli
1af0: 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70  te3_open_interop
1b00: 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69  (): calling sqli
1b10: 74 65 33 5f 6f 70 65 6e 5f 76 32 28 5c 22 25 73  te3_open_v2(\"%s
1b20: 5c 22 2c 20 25 64 2c 20 25 70 29 2e 2e 2e 5c 6e  \", %d, %p)...\n
1b30: 22 2c 20 66 69 6c 65 6e 61 6d 65 2c 20 66 6c 61  ", filename, fla
1b40: 67 73 2c 20 70 70 64 62 29 3b 0d 0a 23 65 6e 64  gs, ppdb);..#end
1b50: 69 66 0d 0a 0d 0a 20 20 72 65 74 20 3d 20 73 71  if....  ret = sq
1b60: 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 66 69  lite3_open_v2(fi
1b70: 6c 65 6e 61 6d 65 2c 20 70 70 64 62 2c 20 66 6c  lename, ppdb, fl
1b80: 61 67 73 2c 20 4e 55 4c 4c 29 3b 0d 0a 0d 0a 23  ags, NULL);....#
1b90: 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52  if defined(INTER
1ba0: 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e  OP_DEBUG) && (IN
1bb0: 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e  TEROP_DEBUG & IN
1bc0: 54 45 52 4f 50 5f 44 45 42 55 47 5f 4f 50 45 4e  TEROP_DEBUG_OPEN
1bd0: 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65  )..  sqlite3Inte
1be0: 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65  ropDebug("sqlite
1bf0: 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28 29  3_open_interop()
1c00: 3a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76  : sqlite3_open_v
1c10: 32 28 5c 22 25 73 5c 22 2c 20 25 64 2c 20 25 70  2(\"%s\", %d, %p
1c20: 29 20 72 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e  ) returned %d.\n
1c30: 22 2c 20 66 69 6c 65 6e 61 6d 65 2c 20 66 6c 61  ", filename, fla
1c40: 67 73 2c 20 70 70 64 62 2c 20 72 65 74 29 3b 0d  gs, ppdb, ret);.
1c50: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64  .#endif....#if d
1c60: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 45  efined(INTEROP_E
1c70: 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f  XTENSION_FUNCTIO
1c80: 4e 53 29 0d 0a 20 20 69 66 20 28 72 65 74 20 3d  NS)..  if (ret =
1c90: 3d 20 53 51 4c 49 54 45 5f 4f 4b 29 0d 0a 20 20  = SQLITE_OK)..  
1ca0: 20 20 52 65 67 69 73 74 65 72 45 78 74 65 6e 73    RegisterExtens
1cb0: 69 6f 6e 46 75 6e 63 74 69 6f 6e 73 28 2a 70 70  ionFunctions(*pp
1cc0: 64 62 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  db);..#endif....
1cd0: 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d    return ret;..}
1ce0: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69  ....SQLITE_API i
1cf0: 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  nt WINAPI sqlite
1d00: 33 5f 6f 70 65 6e 31 36 5f 69 6e 74 65 72 6f 70  3_open16_interop
1d10: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 66 69 6c  (const char *fil
1d20: 65 6e 61 6d 65 2c 20 69 6e 74 20 66 6c 61 67 73  ename, int flags
1d30: 2c 20 73 71 6c 69 74 65 33 20 2a 2a 70 70 64 62  , sqlite3 **ppdb
1d40: 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72 65 74 3b  )..{..  int ret;
1d50: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
1d60: 49 4e 54 45 52 4f 50 5f 4c 4f 47 29 0d 0a 20 20  INTEROP_LOG)..  
1d70: 69 66 28 20 21 6c 6f 67 43 6f 6e 66 69 67 75 72  if( !logConfigur
1d80: 65 64 20 29 7b 0d 0a 20 20 20 20 72 65 74 20 3d  ed ){..    ret =
1d90: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28   sqlite3_config(
1da0: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f  SQLITE_CONFIG_LO
1db0: 47 2c 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f  G, sqlite3Intero
1dc0: 70 4c 6f 67 43 61 6c 6c 62 61 63 6b 2c 20 30 29  pLogCallback, 0)
1dd0: 3b 0d 0a 20 20 20 20 69 66 28 20 72 65 74 3d 3d  ;..    if( ret==
1de0: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0d 0a 20 20  SQLITE_OK ){..  
1df0: 20 20 20 20 6c 6f 67 43 6f 6e 66 69 67 75 72 65      logConfigure
1e00: 64 20 3d 20 31 3b 0d 0a 20 20 20 20 7d 65 6c 73  d = 1;..    }els
1e10: 65 7b 0d 0a 20 20 20 20 20 20 73 71 6c 69 74 65  e{..      sqlite
1e20: 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73  3InteropDebug("s
1e30: 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 5f 69 6e  qlite3_open16_in
1e40: 74 65 72 6f 70 28 29 3a 20 73 71 6c 69 74 65 33  terop(): sqlite3
1e50: 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43  _config(SQLITE_C
1e60: 4f 4e 46 49 47 5f 4c 4f 47 29 20 72 65 74 75 72  ONFIG_LOG) retur
1e70: 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 72 65 74 29  ned %d.\n", ret)
1e80: 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 23  ;..    }..  }..#
1e90: 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66  endif....#if def
1ea0: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42  ined(INTEROP_DEB
1eb0: 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f  UG) && (INTEROP_
1ec0: 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f  DEBUG & INTEROP_
1ed0: 44 45 42 55 47 5f 4f 50 45 4e 31 36 29 0d 0a 20  DEBUG_OPEN16).. 
1ee0: 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44   sqlite3InteropD
1ef0: 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 6f 70  ebug("sqlite3_op
1f00: 65 6e 31 36 5f 69 6e 74 65 72 6f 70 28 29 3a 20  en16_interop(): 
1f10: 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f  calling sqlite3_
1f20: 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28 5c 22 25  open_interop(\"%
1f30: 73 5c 22 2c 20 25 64 2c 20 25 70 29 2e 2e 2e 5c  s\", %d, %p)...\
1f40: 6e 22 2c 20 66 69 6c 65 6e 61 6d 65 2c 20 66 6c  n", filename, fl
1f50: 61 67 73 2c 20 70 70 64 62 29 3b 0d 0a 23 65 6e  ags, ppdb);..#en
1f60: 64 69 66 0d 0a 0d 0a 20 20 72 65 74 20 3d 20 73  dif....  ret = s
1f70: 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65  qlite3_open_inte
1f80: 72 6f 70 28 66 69 6c 65 6e 61 6d 65 2c 20 66 6c  rop(filename, fl
1f90: 61 67 73 2c 20 70 70 64 62 29 3b 0d 0a 0d 0a 23  ags, ppdb);....#
1fa0: 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52  if defined(INTER
1fb0: 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e  OP_DEBUG) && (IN
1fc0: 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e  TEROP_DEBUG & IN
1fd0: 54 45 52 4f 50 5f 44 45 42 55 47 5f 4f 50 45 4e  TEROP_DEBUG_OPEN
1fe0: 31 36 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e  16)..  sqlite3In
1ff0: 74 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69  teropDebug("sqli
2000: 74 65 33 5f 6f 70 65 6e 31 36 5f 69 6e 74 65 72  te3_open16_inter
2010: 6f 70 28 29 3a 20 73 71 6c 69 74 65 33 5f 6f 70  op(): sqlite3_op
2020: 65 6e 5f 69 6e 74 65 72 6f 70 28 5c 22 25 73 5c  en_interop(\"%s\
2030: 22 2c 20 25 64 2c 20 25 70 29 20 72 65 74 75 72  ", %d, %p) retur
2040: 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 66 69 6c 65  ned %d.\n", file
2050: 6e 61 6d 65 2c 20 66 6c 61 67 73 2c 20 70 70 64  name, flags, ppd
2060: 62 2c 20 72 65 74 29 3b 0d 0a 23 65 6e 64 69 66  b, ret);..#endif
2070: 0d 0a 0d 0a 20 20 69 66 20 28 28 72 65 74 20 3d  ....  if ((ret =
2080: 3d 20 53 51 4c 49 54 45 5f 4f 4b 29 20 26 26 20  = SQLITE_OK) && 
2090: 21 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 2a  !DbHasProperty(*
20a0: 70 70 64 62 2c 20 30 2c 20 44 42 5f 53 63 68 65  ppdb, 0, DB_Sche
20b0: 6d 61 4c 6f 61 64 65 64 29 29 0d 0a 20 20 20 20  maLoaded))..    
20c0: 45 4e 43 28 2a 70 70 64 62 29 20 3d 20 53 51 4c  ENC(*ppdb) = SQL
20d0: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3b  ITE_UTF16NATIVE;
20e0: 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 72 65 74  ....  return ret
20f0: 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  ;..}....SQLITE_A
2100: 50 49 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20  PI const char * 
2110: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 65  WINAPI sqlite3_e
2120: 72 72 6d 73 67 5f 69 6e 74 65 72 6f 70 28 73 71  rrmsg_interop(sq
2130: 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 20 2a  lite3 *db, int *
2140: 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73  plen)..{..  cons
2150: 74 20 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73  t char *pval = s
2160: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62  qlite3_errmsg(db
2170: 29 3b 0d 0a 20 20 2a 70 6c 65 6e 20 3d 20 28 70  );..  *plen = (p
2180: 76 61 6c 20 21 3d 20 30 29 20 3f 20 73 74 72 6c  val != 0) ? strl
2190: 65 6e 28 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20  en(pval) : 0;.. 
21a0: 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d   return pval;..}
21b0: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69  ....SQLITE_API i
21c0: 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  nt WINAPI sqlite
21d0: 33 5f 63 68 61 6e 67 65 73 5f 69 6e 74 65 72 6f  3_changes_intero
21e0: 70 28 73 71 6c 69 74 65 33 20 2a 64 62 29 0d 0a  p(sqlite3 *db)..
21f0: 7b 0d 0a 20 20 69 6e 74 20 72 65 73 75 6c 74 3b  {..  int result;
2200: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
2210: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26  INTEROP_DEBUG) &
2220: 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  & (INTEROP_DEBUG
2230: 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47   & INTEROP_DEBUG
2240: 5f 43 48 41 4e 47 45 53 29 0d 0a 20 20 73 71 6c  _CHANGES)..  sql
2250: 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67  ite3InteropDebug
2260: 28 22 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  ("sqlite3_change
2270: 73 5f 69 6e 74 65 72 6f 70 28 29 3a 20 63 61 6c  s_interop(): cal
2280: 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f 63 68 61  ling sqlite3_cha
2290: 6e 67 65 73 28 25 70 29 2e 2e 2e 5c 6e 22 2c 20  nges(%p)...\n", 
22a0: 64 62 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  db);..#endif....
22b0: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0d 0a  #ifndef NDEBUG..
22c0: 20 20 69 66 20 28 21 64 62 29 0d 0a 20 20 20 20    if (!db)..    
22d0: 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70    sqlite3Interop
22e0: 42 72 65 61 6b 28 22 6e 75 6c 6c 20 64 61 74 61  Break("null data
22f0: 62 61 73 65 20 68 61 6e 64 6c 65 20 66 6f 72 20  base handle for 
2300: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
2310: 29 22 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  )");..#endif....
2320: 20 20 72 65 73 75 6c 74 20 3d 20 73 71 6c 69 74    result = sqlit
2330: 65 33 5f 63 68 61 6e 67 65 73 28 64 62 29 3b 0d  e3_changes(db);.
2340: 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49  ...#if defined(I
2350: 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26  NTEROP_DEBUG) &&
2360: 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20   (INTEROP_DEBUG 
2370: 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f  & INTEROP_DEBUG_
2380: 43 48 41 4e 47 45 53 29 0d 0a 20 20 73 71 6c 69  CHANGES)..  sqli
2390: 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28  te3InteropDebug(
23a0: 22 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73  "sqlite3_changes
23b0: 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c 69  _interop(): sqli
23c0: 74 65 33 5f 63 68 61 6e 67 65 73 28 25 70 29 20  te3_changes(%p) 
23d0: 72 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c  returned %d.\n",
23e0: 20 64 62 2c 20 72 65 73 75 6c 74 29 3b 0d 0a 23   db, result);..#
23f0: 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 75 72  endif....  retur
2400: 6e 20 72 65 73 75 6c 74 3b 0d 0a 7d 0d 0a 0d 0a  n result;..}....
2410: 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57  SQLITE_API int W
2420: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 70 72  INAPI sqlite3_pr
2430: 65 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 73 71  epare_interop(sq
2440: 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74  lite3 *db, const
2450: 20 63 68 61 72 20 2a 73 71 6c 2c 20 69 6e 74 20   char *sql, int 
2460: 6e 62 79 74 65 73 2c 20 73 71 6c 69 74 65 33 5f  nbytes, sqlite3_
2470: 73 74 6d 74 20 2a 2a 70 70 73 74 6d 74 2c 20 63  stmt **ppstmt, c
2480: 6f 6e 73 74 20 63 68 61 72 20 2a 2a 70 7a 74 61  onst char **pzta
2490: 69 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a  il, int *plen)..
24a0: 7b 0d 0a 20 20 69 6e 74 20 6e 3b 0d 0a 0d 0a 23  {..  int n;....#
24b0: 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52  if defined(INTER
24c0: 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e  OP_DEBUG) && (IN
24d0: 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e  TEROP_DEBUG & IN
24e0: 54 45 52 4f 50 5f 44 45 42 55 47 5f 50 52 45 50  TEROP_DEBUG_PREP
24f0: 41 52 45 29 0d 0a 20 20 73 71 6c 69 74 65 33 49  ARE)..  sqlite3I
2500: 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c  nteropDebug("sql
2510: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74  ite3_prepare_int
2520: 65 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20  erop(): calling 
2530: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
2540: 25 70 2c 20 5c 22 25 73 5c 22 2c 20 25 64 2c 20  %p, \"%s\", %d, 
2550: 25 70 29 2e 2e 2e 5c 6e 22 2c 20 64 62 2c 20 73  %p)...\n", db, s
2560: 71 6c 2c 20 6e 62 79 74 65 73 2c 20 70 70 73 74  ql, nbytes, ppst
2570: 6d 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  mt);..#endif....
2580: 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 70 72    n = sqlite3_pr
2590: 65 70 61 72 65 28 64 62 2c 20 73 71 6c 2c 20 6e  epare(db, sql, n
25a0: 62 79 74 65 73 2c 20 70 70 73 74 6d 74 2c 20 70  bytes, ppstmt, p
25b0: 7a 74 61 69 6c 29 3b 0d 0a 0d 0a 23 69 66 20 64  ztail);....#if d
25c0: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44  efined(INTEROP_D
25d0: 45 42 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f  EBUG) && (INTERO
25e0: 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f  P_DEBUG & INTERO
25f0: 50 5f 44 45 42 55 47 5f 50 52 45 50 41 52 45 29  P_DEBUG_PREPARE)
2600: 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72  ..  sqlite3Inter
2610: 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33  opDebug("sqlite3
2620: 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70  _prepare_interop
2630: 28 29 3a 20 73 71 6c 69 74 65 33 5f 70 72 65 70  (): sqlite3_prep
2640: 61 72 65 28 25 70 2c 20 5c 22 25 73 5c 22 2c 20  are(%p, \"%s\", 
2650: 25 64 2c 20 25 70 29 20 72 65 74 75 72 6e 65 64  %d, %p) returned
2660: 20 25 64 2e 5c 6e 22 2c 20 64 62 2c 20 73 71 6c   %d.\n", db, sql
2670: 2c 20 6e 62 79 74 65 73 2c 20 70 70 73 74 6d 74  , nbytes, ppstmt
2680: 2c 20 6e 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  , n);..#endif...
2690: 0a 20 20 2a 70 6c 65 6e 20 3d 20 28 2a 70 7a 74  .  *plen = (*pzt
26a0: 61 69 6c 20 21 3d 20 30 29 20 3f 20 73 74 72 6c  ail != 0) ? strl
26b0: 65 6e 28 2a 70 7a 74 61 69 6c 29 20 3a 20 30 3b  en(*pztail) : 0;
26c0: 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0d  ....  return n;.
26d0: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
26e0: 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69   int WINAPI sqli
26f0: 74 65 33 5f 70 72 65 70 61 72 65 31 36 5f 69 6e  te3_prepare16_in
2700: 74 65 72 6f 70 28 73 71 6c 69 74 65 33 20 2a 64  terop(sqlite3 *d
2710: 62 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73  b, const void *s
2720: 71 6c 2c 20 69 6e 74 20 6e 63 68 61 72 73 2c 20  ql, int nchars, 
2730: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a 70  sqlite3_stmt **p
2740: 70 73 74 6d 74 2c 20 63 6f 6e 73 74 20 76 6f 69  pstmt, const voi
2750: 64 20 2a 2a 70 7a 74 61 69 6c 2c 20 69 6e 74 20  d **pztail, int 
2760: 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 69 6e 74  *plen)..{..  int
2770: 20 6e 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e   n;....#if defin
2780: 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  ed(INTEROP_DEBUG
2790: 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45  ) && (INTEROP_DE
27a0: 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45  BUG & INTEROP_DE
27b0: 42 55 47 5f 50 52 45 50 41 52 45 31 36 29 0d 0a  BUG_PREPARE16)..
27c0: 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70    sqlite3Interop
27d0: 44 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 70  Debug("sqlite3_p
27e0: 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 29  repare_interop()
27f0: 3a 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65  : calling sqlite
2800: 33 5f 70 72 65 70 61 72 65 31 36 28 25 70 2c 20  3_prepare16(%p, 
2810: 5c 22 25 73 5c 22 2c 20 25 64 2c 20 25 70 29 2e  \"%s\", %d, %p).
2820: 2e 2e 5c 6e 22 2c 20 64 62 2c 20 73 71 6c 2c 20  ..\n", db, sql, 
2830: 6e 63 68 61 72 73 2c 20 70 70 73 74 6d 74 29 3b  nchars, ppstmt);
2840: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 6e 20  ..#endif....  n 
2850: 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
2860: 65 31 36 28 64 62 2c 20 73 71 6c 2c 20 6e 63 68  e16(db, sql, nch
2870: 61 72 73 20 2a 20 73 69 7a 65 6f 66 28 77 63 68  ars * sizeof(wch
2880: 61 72 5f 74 29 2c 20 70 70 73 74 6d 74 2c 20 70  ar_t), ppstmt, p
2890: 7a 74 61 69 6c 29 3b 0d 0a 0d 0a 23 69 66 20 64  ztail);....#if d
28a0: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44  efined(INTEROP_D
28b0: 45 42 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f  EBUG) && (INTERO
28c0: 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f  P_DEBUG & INTERO
28d0: 50 5f 44 45 42 55 47 5f 50 52 45 50 41 52 45 31  P_DEBUG_PREPARE1
28e0: 36 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74  6)..  sqlite3Int
28f0: 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74  eropDebug("sqlit
2900: 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72  e3_prepare_inter
2910: 6f 70 28 29 3a 20 73 71 6c 69 74 65 33 5f 70 72  op(): sqlite3_pr
2920: 65 70 61 72 65 31 36 28 25 70 2c 20 5c 22 25 73  epare16(%p, \"%s
2930: 5c 22 2c 20 25 64 2c 20 25 70 29 20 72 65 74 75  \", %d, %p) retu
2940: 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 64 62 2c  rned %d.\n", db,
2950: 20 73 71 6c 2c 20 6e 63 68 61 72 73 2c 20 70 70   sql, nchars, pp
2960: 73 74 6d 74 2c 20 6e 29 3b 0d 0a 23 65 6e 64 69  stmt, n);..#endi
2970: 66 0d 0a 0d 0a 20 20 2a 70 6c 65 6e 20 3d 20 28  f....  *plen = (
2980: 2a 70 7a 74 61 69 6c 20 21 3d 20 30 29 20 3f 20  *pztail != 0) ? 
2990: 77 63 73 6c 65 6e 28 28 77 63 68 61 72 5f 74 20  wcslen((wchar_t 
29a0: 2a 29 2a 70 7a 74 61 69 6c 29 20 2a 20 73 69 7a  *)*pztail) * siz
29b0: 65 6f 66 28 77 63 68 61 72 5f 74 29 20 3a 20 30  eof(wchar_t) : 0
29c0: 3b 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 6e 3b  ;....  return n;
29d0: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
29e0: 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c  I int WINAPI sql
29f0: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
2a00: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
2a10: 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74  _stmt *stmt, int
2a20: 20 69 43 6f 6c 2c 20 64 6f 75 62 6c 65 20 2a 76   iCol, double *v
2a30: 61 6c 29 0d 0a 7b 0d 0a 09 72 65 74 75 72 6e 20  al)..{...return 
2a40: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75  sqlite3_bind_dou
2a50: 62 6c 65 28 73 74 6d 74 2c 69 43 6f 6c 2c 2a 76  ble(stmt,iCol,*v
2a60: 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  al);..}....SQLIT
2a70: 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49  E_API int WINAPI
2a80: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
2a90: 74 36 34 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  t64_interop(sqli
2aa0: 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20  te3_stmt *stmt, 
2ab0: 69 6e 74 20 69 43 6f 6c 2c 20 73 71 6c 69 74 65  int iCol, sqlite
2ac0: 5f 69 6e 74 36 34 20 2a 76 61 6c 29 0d 0a 7b 0d  _int64 *val)..{.
2ad0: 0a 09 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33  ..return sqlite3
2ae0: 5f 62 69 6e 64 5f 69 6e 74 36 34 28 73 74 6d 74  _bind_int64(stmt
2af0: 2c 69 43 6f 6c 2c 2a 76 61 6c 29 3b 0d 0a 7d 0d  ,iCol,*val);..}.
2b00: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f  ...SQLITE_API co
2b10: 6e 73 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50  nst char * WINAP
2b20: 49 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  I sqlite3_bind_p
2b30: 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 5f 69 6e  arameter_name_in
2b40: 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74  terop(sqlite3_st
2b50: 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43  mt *stmt, int iC
2b60: 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a  ol, int *plen)..
2b70: 7b 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  {..  const char 
2b80: 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f  *pval = sqlite3_
2b90: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
2ba0: 61 6d 65 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b  ame(stmt, iCol);
2bb0: 0d 0a 20 20 2a 70 6c 65 6e 20 3d 20 28 70 76 61  ..  *plen = (pva
2bc0: 6c 20 21 3d 20 30 29 20 3f 20 73 74 72 6c 65 6e  l != 0) ? strlen
2bd0: 28 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72  (pval) : 0;..  r
2be0: 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a  eturn pval;..}..
2bf0: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e  ..SQLITE_API con
2c00: 73 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49  st char * WINAPI
2c10: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
2c20: 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c  name_interop(sql
2c30: 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c  ite3_stmt *stmt,
2c40: 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a   int iCol, int *
2c50: 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73  plen)..{..  cons
2c60: 74 20 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73  t char *pval = s
2c70: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
2c80: 6d 65 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d  me(stmt, iCol);.
2c90: 0a 20 20 2a 70 6c 65 6e 20 3d 20 28 70 76 61 6c  .  *plen = (pval
2ca0: 20 21 3d 20 30 29 20 3f 20 73 74 72 6c 65 6e 28   != 0) ? strlen(
2cb0: 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65  pval) : 0;..  re
2cc0: 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d  turn pval;..}...
2cd0: 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73  .SQLITE_API cons
2ce0: 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20  t void * WINAPI 
2cf0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
2d00: 61 6d 65 31 36 5f 69 6e 74 65 72 6f 70 28 73 71  ame16_interop(sq
2d10: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74  lite3_stmt *stmt
2d20: 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20  , int iCol, int 
2d30: 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e  *plen)..{..  con
2d40: 73 74 20 76 6f 69 64 20 2a 70 76 61 6c 20 3d 20  st void *pval = 
2d50: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
2d60: 61 6d 65 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c  ame16(stmt, iCol
2d70: 29 3b 0d 0a 20 20 2a 70 6c 65 6e 20 3d 20 28 70  );..  *plen = (p
2d80: 76 61 6c 20 21 3d 20 30 29 20 3f 20 77 63 73 6c  val != 0) ? wcsl
2d90: 65 6e 28 28 77 63 68 61 72 5f 74 20 2a 29 70 76  en((wchar_t *)pv
2da0: 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77 63 68  al) * sizeof(wch
2db0: 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 20 20 72 65  ar_t) : 0;..  re
2dc0: 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d  turn pval;..}...
2dd0: 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73  .SQLITE_API cons
2de0: 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49 20  t char * WINAPI 
2df0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
2e00: 65 63 6c 74 79 70 65 5f 69 6e 74 65 72 6f 70 28  ecltype_interop(
2e10: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74  sqlite3_stmt *st
2e20: 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e  mt, int iCol, in
2e30: 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63  t *plen)..{..  c
2e40: 6f 6e 73 74 20 63 68 61 72 20 2a 70 76 61 6c 20  onst char *pval 
2e50: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
2e60: 5f 64 65 63 6c 74 79 70 65 28 73 74 6d 74 2c 20  _decltype(stmt, 
2e70: 69 43 6f 6c 29 3b 0d 0a 20 20 2a 70 6c 65 6e 20  iCol);..  *plen 
2e80: 3d 20 28 70 76 61 6c 20 21 3d 20 30 29 20 3f 20  = (pval != 0) ? 
2e90: 73 74 72 6c 65 6e 28 70 76 61 6c 29 20 3a 20 30  strlen(pval) : 0
2ea0: 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c  ;..  return pval
2eb0: 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  ;..}....SQLITE_A
2ec0: 50 49 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 20  PI const void * 
2ed0: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63  WINAPI sqlite3_c
2ee0: 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36  olumn_decltype16
2ef0: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
2f00: 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74  _stmt *stmt, int
2f10: 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e   iCol, int *plen
2f20: 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 76 6f  )..{..  const vo
2f30: 69 64 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74  id *pval = sqlit
2f40: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  e3_column_declty
2f50: 70 65 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29  pe16(stmt, iCol)
2f60: 3b 0d 0a 20 20 2a 70 6c 65 6e 20 3d 20 28 70 76  ;..  *plen = (pv
2f70: 61 6c 20 21 3d 20 30 29 20 3f 20 77 63 73 6c 65  al != 0) ? wcsle
2f80: 6e 28 28 77 63 68 61 72 5f 74 20 2a 29 70 76 61  n((wchar_t *)pva
2f90: 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77 63 68 61  l) * sizeof(wcha
2fa0: 72 5f 74 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74  r_t) : 0;..  ret
2fb0: 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a  urn pval;..}....
2fc0: 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69 64 20  SQLITE_API void 
2fd0: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63  WINAPI sqlite3_c
2fe0: 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74  olumn_double_int
2ff0: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
3000: 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f  t *stmt, int iCo
3010: 6c 2c 20 64 6f 75 62 6c 65 20 2a 76 61 6c 29 0d  l, double *val).
3020: 0a 7b 0d 0a 09 2a 76 61 6c 20 3d 20 73 71 6c 69  .{...*val = sqli
3030: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  te3_column_doubl
3040: 65 28 73 74 6d 74 2c 69 43 6f 6c 29 3b 0d 0a 7d  e(stmt,iCol);..}
3050: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76  ....SQLITE_API v
3060: 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74  oid WINAPI sqlit
3070: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 5f  e3_column_int64_
3080: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f  interop(sqlite3_
3090: 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20  stmt *stmt, int 
30a0: 69 43 6f 6c 2c 20 73 71 6c 69 74 65 5f 69 6e 74  iCol, sqlite_int
30b0: 36 34 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 09 2a 76  64 *val)..{...*v
30c0: 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  al = sqlite3_col
30d0: 75 6d 6e 5f 69 6e 74 36 34 28 73 74 6d 74 2c 69  umn_int64(stmt,i
30e0: 43 6f 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49  Col);..}....SQLI
30f0: 54 45 5f 41 50 49 20 76 6f 69 64 20 57 49 4e 41  TE_API void WINA
3100: 50 49 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  PI sqlite3_last_
3110: 69 6e 73 65 72 74 5f 72 6f 77 69 64 5f 69 6e 74  insert_rowid_int
3120: 65 72 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62  erop(sqlite3 *db
3130: 2c 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a  , sqlite_int64 *
3140: 72 6f 77 49 64 29 0d 0a 7b 0d 0a 09 2a 72 6f 77  rowId)..{...*row
3150: 49 64 20 3d 20 73 71 6c 69 74 65 33 5f 6c 61 73  Id = sqlite3_las
3160: 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 64  t_insert_rowid(d
3170: 62 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45  b);..}....SQLITE
3180: 5f 41 50 49 20 76 6f 69 64 20 57 49 4e 41 50 49  _API void WINAPI
3190: 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f   sqlite3_memory_
31a0: 75 73 65 64 5f 69 6e 74 65 72 6f 70 28 73 71 6c  used_interop(sql
31b0: 69 74 65 5f 69 6e 74 36 34 20 2a 6e 42 79 74 65  ite_int64 *nByte
31c0: 73 29 0d 0a 7b 0d 0a 09 2a 6e 42 79 74 65 73 20  s)..{...*nBytes 
31d0: 3d 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79  = sqlite3_memory
31e0: 5f 75 73 65 64 28 29 3b 0d 0a 7d 0d 0a 0d 0a 53  _used();..}....S
31f0: 51 4c 49 54 45 5f 41 50 49 20 76 6f 69 64 20 57  QLITE_API void W
3200: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 6d 65  INAPI sqlite3_me
3210: 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72 5f 69  mory_highwater_i
3220: 6e 74 65 72 6f 70 28 69 6e 74 20 72 65 73 65 74  nterop(int reset
3230: 46 6c 61 67 2c 20 73 71 6c 69 74 65 5f 69 6e 74  Flag, sqlite_int
3240: 36 34 20 2a 6e 42 79 74 65 73 29 0d 0a 7b 0d 0a  64 *nBytes)..{..
3250: 09 2a 6e 42 79 74 65 73 20 3d 20 73 71 6c 69 74  .*nBytes = sqlit
3260: 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61  e3_memory_highwa
3270: 74 65 72 28 72 65 73 65 74 46 6c 61 67 29 3b 0d  ter(resetFlag);.
3280: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
3290: 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
32a0: 63 68 61 72 20 2a 20 57 49 4e 41 50 49 20 73 71  char * WINAPI sq
32b0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
32c0: 74 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  t_interop(sqlite
32d0: 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e  3_stmt *stmt, in
32e0: 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65  t iCol, int *ple
32f0: 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 75  n)..{..  const u
3300: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70 76  nsigned char *pv
3310: 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  al = sqlite3_col
3320: 75 6d 6e 5f 74 65 78 74 28 73 74 6d 74 2c 20 69  umn_text(stmt, i
3330: 43 6f 6c 29 3b 0d 0a 20 20 2a 70 6c 65 6e 20 3d  Col);..  *plen =
3340: 20 28 70 76 61 6c 20 21 3d 20 30 29 20 3f 20 73   (pval != 0) ? s
3350: 74 72 6c 65 6e 28 28 63 68 61 72 20 2a 29 70 76  trlen((char *)pv
3360: 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75  al) : 0;..  retu
3370: 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53  rn pval;..}....S
3380: 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20  QLITE_API const 
3390: 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71  void * WINAPI sq
33a0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
33b0: 74 31 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  t16_interop(sqli
33c0: 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20  te3_stmt *stmt, 
33d0: 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70  int iCol, int *p
33e0: 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74  len)..{..  const
33f0: 20 76 6f 69 64 20 2a 70 76 61 6c 20 3d 20 73 71   void *pval = sq
3400: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
3410: 74 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b  t16(stmt, iCol);
3420: 0d 0a 20 20 2a 70 6c 65 6e 20 3d 20 28 70 76 61  ..  *plen = (pva
3430: 6c 20 21 3d 20 30 29 20 3f 20 77 63 73 6c 65 6e  l != 0) ? wcslen
3440: 28 28 77 63 68 61 72 5f 74 20 2a 29 70 76 61 6c  ((wchar_t *)pval
3450: 29 20 2a 20 73 69 7a 65 6f 66 28 77 63 68 61 72  ) * sizeof(wchar
3460: 5f 74 29 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72  _t): 0;..  retur
3470: 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51  n pval;..}....SQ
3480: 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e  LITE_API int WIN
3490: 41 50 49 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  API sqlite3_fina
34a0: 6c 69 7a 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c  lize_interop(sql
34b0: 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 29  ite3_stmt *stmt)
34c0: 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72 65 74 3b 0d  ..{..  int ret;.
34d0: 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53  .#if SQLITE_VERS
34e0: 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30  ION_NUMBER >= 30
34f0: 30 37 30 31 34 0d 0a 0d 0a 23 69 66 20 64 65 66  07014....#if def
3500: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42  ined(INTEROP_DEB
3510: 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f  UG) && (INTEROP_
3520: 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f  DEBUG & INTEROP_
3530: 44 45 42 55 47 5f 46 49 4e 41 4c 49 5a 45 29 0d  DEBUG_FINALIZE).
3540: 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64  .  Vdbe *p = (Vd
3550: 62 65 20 2a 29 73 74 6d 74 3b 0d 0a 20 20 73 71  be *)stmt;..  sq
3560: 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64  lite3 *db = p->d
3570: 62 3b 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74  b;..  sqlite3Int
3580: 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74  eropDebug("sqlit
3590: 65 33 5f 66 69 6e 61 6c 69 7a 65 5f 69 6e 74 65  e3_finalize_inte
35a0: 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73  rop(): calling s
35b0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
35c0: 25 70 2c 20 25 70 29 2e 2e 2e 5c 6e 22 2c 20 64  %p, %p)...\n", d
35d0: 62 2c 20 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69  b, stmt);..#endi
35e0: 66 0d 0a 0d 0a 20 20 72 65 74 20 3d 20 73 71 6c  f....  ret = sql
35f0: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 73 74  ite3_finalize(st
3600: 6d 74 29 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69  mt);....#if defi
3610: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  ned(INTEROP_DEBU
3620: 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44  G) && (INTEROP_D
3630: 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44  EBUG & INTEROP_D
3640: 45 42 55 47 5f 46 49 4e 41 4c 49 5a 45 29 0d 0a  EBUG_FINALIZE)..
3650: 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70    sqlite3Interop
3660: 44 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 66  Debug("sqlite3_f
3670: 69 6e 61 6c 69 7a 65 5f 69 6e 74 65 72 6f 70 28  inalize_interop(
3680: 29 3a 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  ): sqlite3_final
3690: 69 7a 65 28 25 70 2c 20 25 70 29 20 72 65 74 75  ize(%p, %p) retu
36a0: 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 64 62 2c  rned %d.\n", db,
36b0: 20 73 74 6d 74 2c 20 72 65 74 29 3b 0d 0a 23 65   stmt, ret);..#e
36c0: 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 75 72 6e  ndif....  return
36d0: 20 72 65 74 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20   ret;..#else..  
36e0: 56 64 62 65 20 2a 70 3b 0d 0a 20 20 69 6e 74 20  Vdbe *p;..  int 
36f0: 72 65 74 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  ret = SQLITE_OK;
3700: 0d 0a 0d 0a 20 20 70 20 3d 20 28 56 64 62 65 20  ....  p = (Vdbe 
3710: 2a 29 73 74 6d 74 3b 0d 0a 20 20 69 66 20 28 70  *)stmt;..  if (p
3720: 29 0d 0a 20 20 7b 0d 0a 20 20 20 20 73 71 6c 69  )..  {..    sqli
3730: 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b  te3 *db = p->db;
3740: 0d 0a 0d 0a 20 20 20 20 69 66 20 28 64 62 20 21  ....    if (db !
3750: 3d 20 4e 55 4c 4c 29 0d 0a 20 20 20 20 20 20 73  = NULL)..      s
3760: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
3770: 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a  er(db->mutex);..
3780: 0d 0a 20 20 20 20 69 66 20 28 28 70 2d 3e 6d 61  ..    if ((p->ma
3790: 67 69 63 20 3d 3d 20 56 44 42 45 5f 4d 41 47 49  gic == VDBE_MAGI
37a0: 43 5f 44 45 41 44 29 20 26 26 20 28 64 62 20 3d  C_DEAD) && (db =
37b0: 3d 20 4e 55 4c 4c 29 29 0d 0a 20 20 20 20 7b 0d  = NULL))..    {.
37c0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
37d0: 46 72 65 65 5f 69 6e 74 65 72 6f 70 28 64 62 2c  Free_interop(db,
37e0: 20 70 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20   p);..    }..   
37f0: 20 65 6c 73 65 0d 0a 20 20 20 20 7b 0d 0a 20 20   else..    {..  
3800: 20 20 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65      ret = sqlite
3810: 33 5f 66 69 6e 61 6c 69 7a 65 28 73 74 6d 74 29  3_finalize(stmt)
3820: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
3830: 69 66 20 28 64 62 20 21 3d 20 4e 55 4c 4c 29 0d  if (db != NULL).
3840: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d  .      sqlite3_m
3850: 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d  utex_leave(db->m
3860: 75 74 65 78 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20  utex);..  }.... 
3870: 20 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 23 65   return ret;..#e
3880: 6e 64 69 66 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  ndif..}....SQLIT
3890: 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49  E_API int WINAPI
38a0: 20 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f   sqlite3_backup_
38b0: 66 69 6e 69 73 68 5f 69 6e 74 65 72 6f 70 28 73  finish_interop(s
38c0: 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 70  qlite3_backup *p
38d0: 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72 65 74 3b  )..{..  int ret;
38e0: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
38f0: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26  INTEROP_DEBUG) &
3900: 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  & (INTEROP_DEBUG
3910: 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47   & INTEROP_DEBUG
3920: 5f 42 41 43 4b 55 50 5f 46 49 4e 49 53 48 29 0d  _BACKUP_FINISH).
3930: 0a 20 20 73 71 6c 69 74 65 33 2a 20 70 44 65 73  .  sqlite3* pDes
3940: 74 44 62 20 3d 20 70 2d 3e 70 44 65 73 74 44 62  tDb = p->pDestDb
3950: 3b 0d 0a 20 20 73 71 6c 69 74 65 33 2a 20 70 53  ;..  sqlite3* pS
3960: 72 63 44 62 20 3d 20 70 2d 3e 70 53 72 63 44 62  rcDb = p->pSrcDb
3970: 3b 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65  ;..  sqlite3Inte
3980: 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65  ropDebug("sqlite
3990: 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 5f  3_backup_finish_
39a0: 69 6e 74 65 72 6f 70 28 29 3a 20 63 61 6c 6c 69  interop(): calli
39b0: 6e 67 20 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  ng sqlite3_backu
39c0: 70 5f 66 69 6e 69 73 68 28 25 70 2c 20 25 70 2c  p_finish(%p, %p,
39d0: 20 25 70 29 2e 2e 2e 5c 6e 22 2c 20 70 44 65 73   %p)...\n", pDes
39e0: 74 44 62 2c 20 70 53 72 63 44 62 2c 20 70 29 3b  tDb, pSrcDb, p);
39f0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65  ..#endif....  re
3a00: 74 20 3d 20 73 71 6c 69 74 65 33 5f 62 61 63 6b  t = sqlite3_back
3a10: 75 70 5f 66 69 6e 69 73 68 28 70 29 3b 0d 0a 0d  up_finish(p);...
3a20: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54  .#if defined(INT
3a30: 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28  EROP_DEBUG) && (
3a40: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20  INTEROP_DEBUG & 
3a50: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 42 41  INTEROP_DEBUG_BA
3a60: 43 4b 55 50 5f 46 49 4e 49 53 48 29 0d 0a 20 20  CKUP_FINISH)..  
3a70: 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65  sqlite3InteropDe
3a80: 62 75 67 28 22 73 71 6c 69 74 65 33 5f 62 61 63  bug("sqlite3_bac
3a90: 6b 75 70 5f 66 69 6e 69 73 68 5f 69 6e 74 65 72  kup_finish_inter
3aa0: 6f 70 28 29 3a 20 73 71 6c 69 74 65 33 5f 62 61  op(): sqlite3_ba
3ab0: 63 6b 75 70 5f 66 69 6e 69 73 68 28 25 70 2c 20  ckup_finish(%p, 
3ac0: 25 70 2c 20 25 70 29 20 72 65 74 75 72 6e 65 64  %p, %p) returned
3ad0: 20 25 64 2e 5c 6e 22 2c 20 70 44 65 73 74 44 62   %d.\n", pDestDb
3ae0: 2c 20 70 53 72 63 44 62 2c 20 70 2c 20 72 65 74  , pSrcDb, p, ret
3af0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
3b00: 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a  return ret;..}..
3b10: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74  ..SQLITE_API int
3b20: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
3b30: 72 65 73 65 74 5f 69 6e 74 65 72 6f 70 28 73 71  reset_interop(sq
3b40: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74  lite3_stmt *stmt
3b50: 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20 72 65 74 3b  )..{..  int ret;
3b60: 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 56 45 52  ..#if SQLITE_VER
3b70: 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33  SION_NUMBER >= 3
3b80: 30 30 37 30 31 34 0d 0a 0d 0a 23 69 66 20 64 65  007014....#if de
3b90: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45  fined(INTEROP_DE
3ba0: 42 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50  BUG) && (INTEROP
3bb0: 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50  _DEBUG & INTEROP
3bc0: 5f 44 45 42 55 47 5f 52 45 53 45 54 29 0d 0a 20  _DEBUG_RESET).. 
3bd0: 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44   sqlite3InteropD
3be0: 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 72 65  ebug("sqlite3_re
3bf0: 73 65 74 5f 69 6e 74 65 72 6f 70 28 29 3a 20 63  set_interop(): c
3c00: 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f 72  alling sqlite3_r
3c10: 65 73 65 74 28 25 70 29 2e 2e 2e 5c 6e 22 2c 20  eset(%p)...\n", 
3c20: 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  stmt);..#endif..
3c30: 0d 0a 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65  ..  ret = sqlite
3c40: 33 5f 72 65 73 65 74 28 73 74 6d 74 29 3b 0d 0a  3_reset(stmt);..
3c50: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
3c60: 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20  TEROP_DEBUG) && 
3c70: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26  (INTEROP_DEBUG &
3c80: 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 52   INTEROP_DEBUG_R
3c90: 45 53 45 54 29 0d 0a 20 20 73 71 6c 69 74 65 33  ESET)..  sqlite3
3ca0: 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71  InteropDebug("sq
3cb0: 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65  lite3_reset_inte
3cc0: 72 6f 70 28 29 3a 20 73 71 6c 69 74 65 33 5f 72  rop(): sqlite3_r
3cd0: 65 73 65 74 28 25 70 29 20 72 65 74 75 72 6e 65  eset(%p) returne
3ce0: 64 20 25 64 2e 5c 6e 22 2c 20 73 74 6d 74 2c 20  d %d.\n", stmt, 
3cf0: 72 65 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  ret);..#endif...
3d00: 0a 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a  .  return ret;..
3d10: 23 65 6c 73 65 0d 0a 20 20 69 66 20 28 28 28 56  #else..  if (((V
3d20: 64 62 65 20 2a 29 73 74 6d 74 29 2d 3e 6d 61 67  dbe *)stmt)->mag
3d30: 69 63 20 3d 3d 20 56 44 42 45 5f 4d 41 47 49 43  ic == VDBE_MAGIC
3d40: 5f 44 45 41 44 29 20 72 65 74 75 72 6e 20 53 51  _DEAD) return SQ
3d50: 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0d 0a 20 20  LITE_SCHEMA;..  
3d60: 72 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 72 65  ret = sqlite3_re
3d70: 73 65 74 28 73 74 6d 74 29 3b 0d 0a 20 20 72 65  set(stmt);..  re
3d80: 74 75 72 6e 20 72 65 74 3b 0d 0a 23 65 6e 64 69  turn ret;..#endi
3d90: 66 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  f..}....SQLITE_A
3da0: 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71  PI int WINAPI sq
3db0: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
3dc0: 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 73 71  ction_interop(sq
3dd0: 6c 69 74 65 33 20 2a 70 73 71 6c 2c 20 63 6f 6e  lite3 *psql, con
3de0: 73 74 20 63 68 61 72 20 2a 7a 46 75 6e 63 74 69  st char *zFuncti
3df0: 6f 6e 4e 61 6d 65 2c 20 69 6e 74 20 6e 41 72 67  onName, int nArg
3e00: 2c 20 69 6e 74 20 65 54 65 78 74 52 65 70 2c 20  , int eTextRep, 
3e10: 76 6f 69 64 20 2a 70 76 55 73 65 72 2c 20 53 51  void *pvUser, SQ
3e20: 4c 49 54 45 55 53 45 52 46 55 4e 43 20 66 75 6e  LITEUSERFUNC fun
3e30: 63 2c 20 53 51 4c 49 54 45 55 53 45 52 46 55 4e  c, SQLITEUSERFUN
3e40: 43 20 66 75 6e 63 73 74 65 70 2c 20 53 51 4c 49  C funcstep, SQLI
3e50: 54 45 46 55 4e 43 46 49 4e 41 4c 20 66 75 6e 63  TEFUNCFINAL func
3e60: 66 69 6e 61 6c 2c 20 69 6e 74 20 6e 65 65 64 43  final, int needC
3e70: 6f 6c 6c 53 65 71 29 0d 0a 7b 0d 0a 20 20 69 6e  ollSeq)..{..  in
3e80: 74 20 6e 3b 0d 0a 0d 0a 20 20 69 66 20 28 65 54  t n;....  if (eT
3e90: 65 78 74 52 65 70 20 3d 3d 20 53 51 4c 49 54 45  extRep == SQLITE
3ea0: 5f 55 54 46 31 36 29 0d 0a 20 20 20 20 65 54 65  _UTF16)..    eTe
3eb0: 78 74 52 65 70 20 3d 20 53 51 4c 49 54 45 5f 55  xtRep = SQLITE_U
3ec0: 54 46 31 36 4e 41 54 49 56 45 3b 0d 0a 0d 0a 20  TF16NATIVE;.... 
3ed0: 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65   n = sqlite3_cre
3ee0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 70 73 71  ate_function(psq
3ef0: 6c 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65  l, zFunctionName
3f00: 2c 20 6e 41 72 67 2c 20 65 54 65 78 74 52 65 70  , nArg, eTextRep
3f10: 2c 20 30 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73  , 0, func, funcs
3f20: 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b  tep, funcfinal);
3f30: 0d 0a 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c  ..  if (n == SQL
3f40: 49 54 45 5f 4f 4b 29 0d 0a 20 20 7b 0d 0a 20 20  ITE_OK)..  {..  
3f50: 20 20 69 66 20 28 6e 65 65 64 43 6f 6c 6c 53 65    if (needCollSe
3f60: 71 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  q)..    {..     
3f70: 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 20   FuncDef *pFunc 
3f80: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e  = sqlite3FindFun
3f90: 63 74 69 6f 6e 28 70 73 71 6c 2c 20 7a 46 75 6e  ction(psql, zFun
3fa0: 63 74 69 6f 6e 4e 61 6d 65 2c 20 73 74 72 6c 65  ctionName, strle
3fb0: 6e 28 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 29  n(zFunctionName)
3fc0: 2c 20 6e 41 72 67 2c 20 65 54 65 78 74 52 65 70  , nArg, eTextRep
3fd0: 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20 69 66 28  , 0);..      if(
3fe0: 20 70 46 75 6e 63 20 29 0d 0a 20 20 20 20 20 20   pFunc )..      
3ff0: 7b 0d 0a 20 20 20 20 20 20 20 20 70 46 75 6e 63  {..        pFunc
4000: 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54  ->flags |= SQLIT
4010: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 3b  E_FUNC_NEEDCOLL;
4020: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
4030: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 72 65 74 75 72  ..  }....  retur
4040: 6e 20 6e 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  n n;..}....SQLIT
4050: 45 5f 41 50 49 20 76 6f 69 64 20 57 49 4e 41 50  E_API void WINAP
4060: 49 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  I sqlite3_value_
4070: 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73  double_interop(s
4080: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 76  qlite3_value *pv
4090: 61 6c 2c 20 64 6f 75 62 6c 65 20 2a 76 61 6c 29  al, double *val)
40a0: 0d 0a 7b 0d 0a 20 20 2a 76 61 6c 20 3d 20 73 71  ..{..  *val = sq
40b0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62  lite3_value_doub
40c0: 6c 65 28 70 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a  le(pval);..}....
40d0: 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69 64 20  SQLITE_API void 
40e0: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 76  WINAPI sqlite3_v
40f0: 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e 74 65 72  alue_int64_inter
4100: 6f 70 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  op(sqlite3_value
4110: 20 2a 70 76 61 6c 2c 20 73 71 6c 69 74 65 5f 69   *pval, sqlite_i
4120: 6e 74 36 34 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 20  nt64 *val)..{.. 
4130: 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f   *val = sqlite3_
4140: 76 61 6c 75 65 5f 69 6e 74 36 34 28 70 76 61 6c  value_int64(pval
4150: 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f  );..}....SQLITE_
4160: 41 50 49 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  API const unsign
4170: 65 64 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49  ed char * WINAPI
4180: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
4190: 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  ext_interop(sqli
41a0: 74 65 33 5f 76 61 6c 75 65 20 2a 76 61 6c 2c 20  te3_value *val, 
41b0: 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20  int *plen)..{.. 
41c0: 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
41d0: 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73 71 6c  char *pval = sql
41e0: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
41f0: 76 61 6c 29 3b 0d 0a 20 20 2a 70 6c 65 6e 20 3d  val);..  *plen =
4200: 20 28 70 76 61 6c 20 21 3d 20 30 29 20 3f 20 73   (pval != 0) ? s
4210: 74 72 6c 65 6e 28 28 63 68 61 72 20 2a 29 70 76  trlen((char *)pv
4220: 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75  al) : 0;..  retu
4230: 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53  rn pval;..}....S
4240: 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20  QLITE_API const 
4250: 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71  void * WINAPI sq
4260: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
4270: 31 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  16_interop(sqlit
4280: 65 33 5f 76 61 6c 75 65 20 2a 76 61 6c 2c 20 69  e3_value *val, i
4290: 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20  nt *plen)..{..  
42a0: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 61 6c  const void *pval
42b0: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
42c0: 5f 74 65 78 74 31 36 28 76 61 6c 29 3b 0d 0a 20  _text16(val);.. 
42d0: 20 2a 70 6c 65 6e 20 3d 20 28 70 76 61 6c 20 21   *plen = (pval !
42e0: 3d 20 30 29 20 3f 20 77 63 73 6c 65 6e 28 28 77  = 0) ? wcslen((w
42f0: 63 68 61 72 5f 74 20 2a 29 70 76 61 6c 29 20 2a  char_t *)pval) *
4300: 20 73 69 7a 65 6f 66 28 77 63 68 61 72 5f 74 29   sizeof(wchar_t)
4310: 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72 6e 20   : 0;..  return 
4320: 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49  pval;..}....SQLI
4330: 54 45 5f 41 50 49 20 76 6f 69 64 20 57 49 4e 41  TE_API void WINA
4340: 50 49 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  PI sqlite3_resul
4350: 74 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70  t_double_interop
4360: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
4370: 20 2a 70 63 74 78 2c 20 64 6f 75 62 6c 65 20 2a   *pctx, double *
4380: 76 61 6c 29 0d 0a 7b 0d 0a 20 20 73 71 6c 69 74  val)..{..  sqlit
4390: 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65  e3_result_double
43a0: 28 70 63 74 78 2c 20 2a 76 61 6c 29 3b 0d 0a 7d  (pctx, *val);..}
43b0: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76  ....SQLITE_API v
43c0: 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74  oid WINAPI sqlit
43d0: 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f  e3_result_int64_
43e0: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f  interop(sqlite3_
43f0: 63 6f 6e 74 65 78 74 20 2a 70 63 74 78 2c 20 73  context *pctx, s
4400: 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a 76 61 6c  qlite_int64 *val
4410: 29 0d 0a 7b 0d 0a 20 20 73 71 6c 69 74 65 33 5f  )..{..  sqlite3_
4420: 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 70 63 74  result_int64(pct
4430: 78 2c 20 2a 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a  x, *val);..}....
4440: 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57  SQLITE_API int W
4450: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f  INAPI sqlite3_co
4460: 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72  ntext_collcompar
4470: 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  e_interop(sqlite
4480: 33 5f 63 6f 6e 74 65 78 74 20 2a 63 74 78 2c 20  3_context *ctx, 
4490: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 31 2c 20  const void *p1, 
44a0: 69 6e 74 20 70 31 6c 65 6e 2c 20 63 6f 6e 73 74  int p1len, const
44b0: 20 76 6f 69 64 20 2a 70 32 2c 20 69 6e 74 20 70   void *p2, int p
44c0: 32 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 69 66 20 28  2len)..{..  if (
44d0: 28 63 74 78 2d 3e 70 46 75 6e 63 2d 3e 66 6c 61  (ctx->pFunc->fla
44e0: 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43  gs & SQLITE_FUNC
44f0: 5f 4e 45 45 44 43 4f 4c 4c 29 20 3d 3d 20 30 29  _NEEDCOLL) == 0)
4500: 20 72 65 74 75 72 6e 20 32 3b 0d 0a 20 20 72 65   return 2;..  re
4510: 74 75 72 6e 20 63 74 78 2d 3e 70 43 6f 6c 6c 2d  turn ctx->pColl-
4520: 3e 78 43 6d 70 28 63 74 78 2d 3e 70 43 6f 6c 6c  >xCmp(ctx->pColl
4530: 2d 3e 70 55 73 65 72 2c 20 70 31 6c 65 6e 2c 20  ->pUser, p1len, 
4540: 70 31 2c 20 70 32 6c 65 6e 2c 20 70 32 29 3b 0d  p1, p2len, p2);.
4550: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
4560: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 57 49   const char * WI
4570: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6e  NAPI sqlite3_con
4580: 74 65 78 74 5f 63 6f 6c 6c 73 65 71 5f 69 6e 74  text_collseq_int
4590: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 63 6f 6e  erop(sqlite3_con
45a0: 74 65 78 74 20 2a 63 74 78 2c 20 69 6e 74 20 2a  text *ctx, int *
45b0: 70 74 79 70 65 2c 20 69 6e 74 20 2a 65 6e 63 2c  ptype, int *enc,
45c0: 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a   int *plen)..{..
45d0: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c    CollSeq *pColl
45e0: 20 3d 20 63 74 78 2d 3e 70 43 6f 6c 6c 3b 0d 0a   = ctx->pColl;..
45f0: 20 20 2a 70 74 79 70 65 20 3d 20 30 3b 0d 0a 20    *ptype = 0;.. 
4600: 20 2a 70 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 2a   *plen = 0;..  *
4610: 65 6e 63 20 3d 20 30 3b 0d 0a 0d 0a 20 20 69 66  enc = 0;....  if
4620: 20 28 28 63 74 78 2d 3e 70 46 75 6e 63 2d 3e 66   ((ctx->pFunc->f
4630: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55  lags & SQLITE_FU
4640: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 20 3d 3d 20  NC_NEEDCOLL) == 
4650: 30 29 20 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d  0) return NULL;.
4660: 0a 0d 0a 20 20 69 66 20 28 70 43 6f 6c 6c 29 0d  ...  if (pColl).
4670: 0a 20 20 7b 0d 0a 20 20 20 20 2a 65 6e 63 20 3d  .  {..    *enc =
4680: 20 70 43 6f 6c 6c 2d 3e 65 6e 63 3b 0d 0a 23 69   pColl->enc;..#i
4690: 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  f SQLITE_VERSION
46a0: 5f 4e 55 4d 42 45 52 20 3c 20 33 30 30 37 30 31  _NUMBER < 300701
46b0: 30 0d 0a 20 20 20 20 2a 70 74 79 70 65 20 3d 20  0..    *ptype = 
46c0: 70 43 6f 6c 6c 2d 3e 74 79 70 65 3b 0d 0a 23 65  pColl->type;..#e
46d0: 6e 64 69 66 0d 0a 20 20 20 20 2a 70 6c 65 6e 20  ndif..    *plen 
46e0: 3d 20 28 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 20  = (pColl->zName 
46f0: 21 3d 20 30 29 20 3f 20 73 74 72 6c 65 6e 28 70  != 0) ? strlen(p
4700: 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 29 20 3a 20 30  Coll->zName) : 0
4710: 3b 0d 0a 0d 0a 20 20 20 20 72 65 74 75 72 6e 20  ;....    return 
4720: 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 3b 0d 0a 20  pColl->zName;.. 
4730: 20 7d 0d 0a 20 20 72 65 74 75 72 6e 20 4e 55 4c   }..  return NUL
4740: 4c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f  L;..}....SQLITE_
4750: 41 50 49 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  API const char *
4760: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
4770: 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f  column_database_
4780: 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c  name_interop(sql
4790: 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c  ite3_stmt *stmt,
47a0: 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a   int iCol, int *
47b0: 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73  plen)..{..  cons
47c0: 74 20 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73  t char *pval = s
47d0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61  qlite3_column_da
47e0: 74 61 62 61 73 65 5f 6e 61 6d 65 28 73 74 6d 74  tabase_name(stmt
47f0: 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 2a 70 6c 65  , iCol);..  *ple
4800: 6e 20 3d 20 28 70 76 61 6c 20 21 3d 20 30 29 20  n = (pval != 0) 
4810: 3f 20 73 74 72 6c 65 6e 28 70 76 61 6c 29 20 3a  ? strlen(pval) :
4820: 20 30 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70 76   0;..  return pv
4830: 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45  al;..}....SQLITE
4840: 5f 41 50 49 20 63 6f 6e 73 74 20 76 6f 69 64 20  _API const void 
4850: 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  * WINAPI sqlite3
4860: 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65  _column_database
4870: 5f 6e 61 6d 65 31 36 5f 69 6e 74 65 72 6f 70 28  _name16_interop(
4880: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74  sqlite3_stmt *st
4890: 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e  mt, int iCol, in
48a0: 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63  t *plen)..{..  c
48b0: 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 61 6c 20  onst void *pval 
48c0: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
48d0: 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 31 36  _database_name16
48e0: 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20  (stmt, iCol);.. 
48f0: 20 2a 70 6c 65 6e 20 3d 20 28 70 76 61 6c 20 21   *plen = (pval !
4900: 3d 20 30 29 20 3f 20 77 63 73 6c 65 6e 28 28 77  = 0) ? wcslen((w
4910: 63 68 61 72 5f 74 20 2a 29 70 76 61 6c 29 20 2a  char_t *)pval) *
4920: 20 73 69 7a 65 6f 66 28 77 63 68 61 72 5f 74 29   sizeof(wchar_t)
4930: 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72 6e 20   : 0;..  return 
4940: 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49  pval;..}....SQLI
4950: 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 63 68 61  TE_API const cha
4960: 72 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74  r * WINAPI sqlit
4970: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f  e3_column_table_
4980: 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c  name_interop(sql
4990: 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c  ite3_stmt *stmt,
49a0: 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a   int iCol, int *
49b0: 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73  plen)..{..  cons
49c0: 74 20 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73  t char *pval = s
49d0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61  qlite3_column_ta
49e0: 62 6c 65 5f 6e 61 6d 65 28 73 74 6d 74 2c 20 69  ble_name(stmt, i
49f0: 43 6f 6c 29 3b 0d 0a 20 20 2a 70 6c 65 6e 20 3d  Col);..  *plen =
4a00: 20 28 70 76 61 6c 20 21 3d 20 30 29 20 3f 20 73   (pval != 0) ? s
4a10: 74 72 6c 65 6e 28 70 76 61 6c 29 20 3a 20 30 3b  trlen(pval) : 0;
4a20: 0d 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b  ..  return pval;
4a30: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
4a40: 49 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 20 57  I const void * W
4a50: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f  INAPI sqlite3_co
4a60: 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31  lumn_table_name1
4a70: 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  6_interop(sqlite
4a80: 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e  3_stmt *stmt, in
4a90: 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65  t iCol, int *ple
4aa0: 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 76  n)..{..  const v
4ab0: 6f 69 64 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69  oid *pval = sqli
4ac0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65  te3_column_table
4ad0: 5f 6e 61 6d 65 31 36 28 73 74 6d 74 2c 20 69 43  _name16(stmt, iC
4ae0: 6f 6c 29 3b 0d 0a 20 20 2a 70 6c 65 6e 20 3d 20  ol);..  *plen = 
4af0: 28 70 76 61 6c 20 21 3d 20 30 29 20 3f 20 77 63  (pval != 0) ? wc
4b00: 73 6c 65 6e 28 28 77 63 68 61 72 5f 74 20 2a 29  slen((wchar_t *)
4b10: 70 76 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77  pval) * sizeof(w
4b20: 63 68 61 72 5f 74 29 20 3a 20 30 3b 0d 0a 20 20  char_t) : 0;..  
4b30: 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d  return pval;..}.
4b40: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f  ...SQLITE_API co
4b50: 6e 73 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50  nst char * WINAP
4b60: 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  I sqlite3_column
4b70: 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f 69 6e 74  _origin_name_int
4b80: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
4b90: 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f  t *stmt, int iCo
4ba0: 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b  l, int *plen)..{
4bb0: 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ..  const char *
4bc0: 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  pval = sqlite3_c
4bd0: 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d  olumn_origin_nam
4be0: 65 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a  e(stmt, iCol);..
4bf0: 20 20 2a 70 6c 65 6e 20 3d 20 28 70 76 61 6c 20    *plen = (pval 
4c00: 21 3d 20 30 29 20 3f 20 73 74 72 6c 65 6e 28 70  != 0) ? strlen(p
4c10: 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74  val) : 0;..  ret
4c20: 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a  urn pval;..}....
4c30: 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74  SQLITE_API const
4c40: 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73   void * WINAPI s
4c50: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72  qlite3_column_or
4c60: 69 67 69 6e 5f 6e 61 6d 65 31 36 5f 69 6e 74 65  igin_name16_inte
4c70: 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  rop(sqlite3_stmt
4c80: 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c   *stmt, int iCol
4c90: 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d  , int *plen)..{.
4ca0: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  .  const void *p
4cb0: 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  val = sqlite3_co
4cc0: 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65  lumn_origin_name
4cd0: 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d  16(stmt, iCol);.
4ce0: 0a 20 20 2a 70 6c 65 6e 20 3d 20 28 70 76 61 6c  .  *plen = (pval
4cf0: 20 21 3d 20 30 29 20 3f 20 77 63 73 6c 65 6e 28   != 0) ? wcslen(
4d00: 28 77 63 68 61 72 5f 74 20 2a 29 70 76 61 6c 29  (wchar_t *)pval)
4d10: 20 2a 20 73 69 7a 65 6f 66 28 77 63 68 61 72 5f   * sizeof(wchar_
4d20: 74 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72  t) : 0;..  retur
4d30: 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51  n pval;..}....SQ
4d40: 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e  LITE_API int WIN
4d50: 41 50 49 20 73 71 6c 69 74 65 33 5f 74 61 62 6c  API sqlite3_tabl
4d60: 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74  e_column_metadat
4d70: 61 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  a_interop(sqlite
4d80: 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61  3 *db, const cha
4d90: 72 20 2a 7a 44 62 4e 61 6d 65 2c 20 63 6f 6e 73  r *zDbName, cons
4da0: 74 20 63 68 61 72 20 2a 7a 54 61 62 6c 65 4e 61  t char *zTableNa
4db0: 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  me, const char *
4dc0: 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 63 68 61  zColumnName, cha
4dd0: 72 20 2a 2a 70 7a 44 61 74 61 54 79 70 65 2c 20  r **pzDataType, 
4de0: 63 68 61 72 20 2a 2a 70 7a 43 6f 6c 6c 53 65 71  char **pzCollSeq
4df0: 2c 20 69 6e 74 20 2a 70 4e 6f 74 4e 75 6c 6c 2c  , int *pNotNull,
4e00: 20 69 6e 74 20 2a 70 50 72 69 6d 61 72 79 4b 65   int *pPrimaryKe
4e10: 79 2c 20 69 6e 74 20 2a 70 41 75 74 6f 69 6e 63  y, int *pAutoinc
4e20: 2c 20 69 6e 74 20 2a 70 64 74 4c 65 6e 2c 20 69  , int *pdtLen, i
4e30: 6e 74 20 2a 70 63 73 4c 65 6e 29 0d 0a 7b 0d 0a  nt *pcsLen)..{..
4e40: 20 20 69 6e 74 20 6e 3b 0d 0a 20 20 0d 0a 20 20    int n;..  ..  
4e50: 6e 20 3d 20 73 71 6c 69 74 65 33 5f 74 61 62 6c  n = sqlite3_tabl
4e60: 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74  e_column_metadat
4e70: 61 28 64 62 2c 20 7a 44 62 4e 61 6d 65 2c 20 7a  a(db, zDbName, z
4e80: 54 61 62 6c 65 4e 61 6d 65 2c 20 7a 43 6f 6c 75  TableName, zColu
4e90: 6d 6e 4e 61 6d 65 2c 20 70 7a 44 61 74 61 54 79  mnName, pzDataTy
4ea0: 70 65 2c 20 70 7a 43 6f 6c 6c 53 65 71 2c 20 70  pe, pzCollSeq, p
4eb0: 4e 6f 74 4e 75 6c 6c 2c 20 70 50 72 69 6d 61 72  NotNull, pPrimar
4ec0: 79 4b 65 79 2c 20 70 41 75 74 6f 69 6e 63 29 3b  yKey, pAutoinc);
4ed0: 0d 0a 20 20 2a 70 64 74 4c 65 6e 20 3d 20 28 2a  ..  *pdtLen = (*
4ee0: 70 7a 44 61 74 61 54 79 70 65 20 21 3d 20 30 29  pzDataType != 0)
4ef0: 20 3f 20 73 74 72 6c 65 6e 28 2a 70 7a 44 61 74   ? strlen(*pzDat
4f00: 61 54 79 70 65 29 20 3a 20 30 3b 0d 0a 20 20 2a  aType) : 0;..  *
4f10: 70 63 73 4c 65 6e 20 3d 20 28 2a 70 7a 43 6f 6c  pcsLen = (*pzCol
4f20: 6c 53 65 71 20 21 3d 20 30 29 20 3f 20 73 74 72  lSeq != 0) ? str
4f30: 6c 65 6e 28 2a 70 7a 43 6f 6c 6c 53 65 71 29 20  len(*pzCollSeq) 
4f40: 3a 20 30 3b 0d 0a 0d 0a 20 20 72 65 74 75 72 6e  : 0;....  return
4f50: 20 6e 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45   n;..}....SQLITE
4f60: 5f 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20  _API int WINAPI 
4f70: 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f  sqlite3_index_co
4f80: 6c 75 6d 6e 5f 69 6e 66 6f 5f 69 6e 74 65 72 6f  lumn_info_intero
4f90: 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63  p(sqlite3 *db, c
4fa0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 2c 20  onst char *zDb, 
4fb0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 49 6e 64  const char *zInd
4fc0: 65 78 4e 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68  exName, const ch
4fd0: 61 72 20 2a 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 2c  ar *zColumnName,
4fe0: 20 69 6e 74 20 2a 73 6f 72 74 4f 72 64 65 72 2c   int *sortOrder,
4ff0: 20 69 6e 74 20 2a 6f 6e 45 72 72 6f 72 2c 20 63   int *onError, c
5000: 68 61 72 20 2a 2a 70 7a 43 6f 6c 6c 2c 20 69 6e  har **pzColl, in
5010: 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 49  t *plen)..{..  I
5020: 6e 64 65 78 20 2a 70 49 64 78 3b 0d 0a 20 20 54  ndex *pIdx;..  T
5030: 61 62 6c 65 20 2a 70 54 61 62 3b 0d 0a 20 20 69  able *pTab;..  i
5040: 6e 74 20 6e 3b 0d 0a 0d 0a 20 20 73 71 6c 69 74  nt n;....  sqlit
5050: 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64  e3_mutex_enter(d
5060: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 73 71 6c  b->mutex);.  sql
5070: 69 74 65 33 42 74 72 65 65 45 6e 74 65 72 41 6c  ite3BtreeEnterAl
5080: 6c 28 64 62 29 3b 0a 0d 0a 20 20 70 49 64 78 20  l(db);...  pIdx 
5090: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64  = sqlite3FindInd
50a0: 65 78 28 64 62 2c 20 7a 49 6e 64 65 78 4e 61 6d  ex(db, zIndexNam
50b0: 65 2c 20 7a 44 62 29 3b 0d 0a 0d 0a 20 20 73 71  e, zDb);....  sq
50c0: 6c 69 74 65 33 42 74 72 65 65 4c 65 61 76 65 41  lite3BtreeLeaveA
50d0: 6c 6c 28 64 62 29 3b 0a 20 20 73 71 6c 69 74 65  ll(db);.  sqlite
50e0: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62  3_mutex_leave(db
50f0: 2d 3e 6d 75 74 65 78 29 3b 0a 0d 0a 20 20 69 66  ->mutex);...  if
5100: 20 28 21 70 49 64 78 29 20 72 65 74 75 72 6e 20   (!pIdx) return 
5110: 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 0d  SQLITE_ERROR;...
5120: 0a 20 20 70 54 61 62 20 3d 20 70 49 64 78 2d 3e  .  pTab = pIdx->
5130: 70 54 61 62 6c 65 3b 0d 0a 20 20 66 6f 72 20 28  pTable;..  for (
5140: 6e 20 3d 20 30 3b 20 6e 20 3c 20 70 49 64 78 2d  n = 0; n < pIdx-
5150: 3e 6e 43 6f 6c 75 6d 6e 3b 20 6e 2b 2b 29 0d 0a  >nColumn; n++)..
5160: 20 20 7b 0d 0a 20 20 20 20 69 6e 74 20 63 6e 75    {..    int cnu
5170: 6d 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c 75  m = pIdx->aiColu
5180: 6d 6e 5b 6e 5d 3b 0d 0a 20 20 20 20 69 66 20 28  mn[n];..    if (
5190: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70  sqlite3StrICmp(p
51a0: 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e 75 6d 5d 2e  Tab->aCol[cnum].
51b0: 7a 4e 61 6d 65 2c 20 7a 43 6f 6c 75 6d 6e 4e 61  zName, zColumnNa
51c0: 6d 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 7b  me) == 0)..    {
51d0: 0d 0a 20 20 20 20 20 20 2a 73 6f 72 74 4f 72 64  ..      *sortOrd
51e0: 65 72 20 3d 20 70 49 64 78 2d 3e 61 53 6f 72 74  er = pIdx->aSort
51f0: 4f 72 64 65 72 5b 6e 5d 3b 0d 0a 20 20 20 20 20  Order[n];..     
5200: 20 2a 70 7a 43 6f 6c 6c 20 3d 20 70 49 64 78 2d   *pzColl = pIdx-
5210: 3e 61 7a 43 6f 6c 6c 5b 6e 5d 3b 0d 0a 20 20 20  >azColl[n];..   
5220: 20 20 20 2a 70 6c 65 6e 20 3d 20 73 74 72 6c 65     *plen = strle
5230: 6e 28 2a 70 7a 43 6f 6c 6c 29 3b 0d 0a 20 20 20  n(*pzColl);..   
5240: 20 20 20 2a 6f 6e 45 72 72 6f 72 20 3d 20 70 49     *onError = pI
5250: 64 78 2d 3e 6f 6e 45 72 72 6f 72 3b 0d 0a 0d 0a  dx->onError;....
5260: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
5270: 49 54 45 5f 4f 4b 3b 0d 0a 20 20 20 20 7d 0d 0a  ITE_OK;..    }..
5280: 20 20 7d 0d 0a 20 20 72 65 74 75 72 6e 20 53 51    }..  return SQ
5290: 4c 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 7d 0d 0a  LITE_ERROR;..}..
52a0: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74  ..SQLITE_API int
52b0: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
52c0: 74 61 62 6c 65 5f 63 75 72 73 6f 72 5f 69 6e 74  table_cursor_int
52d0: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
52e0: 74 20 2a 70 73 74 6d 74 2c 20 69 6e 74 20 69 44  t *pstmt, int iD
52f0: 62 2c 20 50 67 6e 6f 20 74 61 62 6c 65 52 6f 6f  b, Pgno tableRoo
5300: 74 50 61 67 65 29 0d 0a 7b 0d 0a 20 20 56 64 62  tPage)..{..  Vdb
5310: 65 20 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 70  e *p = (Vdbe *)p
5320: 73 74 6d 74 3b 0d 0a 20 20 73 71 6c 69 74 65 33  stmt;..  sqlite3
5330: 20 2a 64 62 20 3d 20 28 70 20 3d 3d 20 4e 55 4c   *db = (p == NUL
5340: 4c 29 20 3f 20 4e 55 4c 4c 20 3a 20 70 2d 3e 64  L) ? NULL : p->d
5350: 62 3b 0d 0a 20 20 69 6e 74 20 6e 3b 0d 0a 20 20  b;..  int n;..  
5360: 69 6e 74 20 72 65 74 20 3d 20 2d 31 3b 0d 0a 0d  int ret = -1;...
5370: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
5380: 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78  _enter(db->mutex
5390: 29 3b 0d 0a 20 20 66 6f 72 20 28 6e 20 3d 20 30  );..  for (n = 0
53a0: 3b 20 6e 20 3c 20 70 2d 3e 6e 43 75 72 73 6f 72  ; n < p->nCursor
53b0: 20 26 26 20 70 2d 3e 61 70 43 73 72 5b 6e 5d 20   && p->apCsr[n] 
53c0: 21 3d 20 4e 55 4c 4c 3b 20 6e 2b 2b 29 0d 0a 20  != NULL; n++).. 
53d0: 20 7b 0d 0a 20 20 20 20 69 66 20 28 70 2d 3e 61   {..    if (p->a
53e0: 70 43 73 72 5b 6e 5d 2d 3e 69 73 54 61 62 6c 65  pCsr[n]->isTable
53f0: 20 3d 3d 20 46 41 4c 53 45 29 20 63 6f 6e 74 69   == FALSE) conti
5400: 6e 75 65 3b 0d 0a 20 20 20 20 69 66 20 28 70 2d  nue;..    if (p-
5410: 3e 61 70 43 73 72 5b 6e 5d 2d 3e 69 44 62 20 21  >apCsr[n]->iDb !
5420: 3d 20 69 44 62 29 20 63 6f 6e 74 69 6e 75 65 3b  = iDb) continue;
5430: 0d 0a 20 20 20 20 69 66 20 28 70 2d 3e 61 70 43  ..    if (p->apC
5440: 73 72 5b 6e 5d 2d 3e 70 43 75 72 73 6f 72 2d 3e  sr[n]->pCursor->
5450: 70 67 6e 6f 52 6f 6f 74 20 3d 3d 20 74 61 62 6c  pgnoRoot == tabl
5460: 65 52 6f 6f 74 50 61 67 65 29 0d 0a 20 20 20 20  eRootPage)..    
5470: 7b 0d 0a 20 20 20 20 20 20 72 65 74 20 3d 20 6e  {..      ret = n
5480: 3b 0d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0d  ;..      break;.
5490: 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 20 20 73  .    }..  }..  s
54a0: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
54b0: 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a  ve(db->mutex);..
54c0: 0d 0a 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0d  ..  return ret;.
54d0: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
54e0: 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69   int WINAPI sqli
54f0: 74 65 33 5f 63 75 72 73 6f 72 5f 72 6f 77 69 64  te3_cursor_rowid
5500: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
5510: 5f 73 74 6d 74 20 2a 70 73 74 6d 74 2c 20 69 6e  _stmt *pstmt, in
5520: 74 20 63 75 72 73 6f 72 2c 20 73 71 6c 69 74 65  t cursor, sqlite
5530: 5f 69 6e 74 36 34 20 2a 70 72 6f 77 69 64 29 0d  _int64 *prowid).
5540: 0a 7b 0d 0a 20 20 56 64 62 65 20 2a 70 20 3d 20  .{..  Vdbe *p = 
5550: 28 56 64 62 65 20 2a 29 70 73 74 6d 74 3b 0d 0a  (Vdbe *)pstmt;..
5560: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20    sqlite3 *db = 
5570: 28 70 20 3d 3d 20 4e 55 4c 4c 29 20 3f 20 4e 55  (p == NULL) ? NU
5580: 4c 4c 20 3a 20 70 2d 3e 64 62 3b 0d 0a 20 20 56  LL : p->db;..  V
5590: 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0d 0a  dbeCursor *pC;..
55a0: 20 20 69 6e 74 20 72 65 74 20 3d 20 53 51 4c 49    int ret = SQLI
55b0: 54 45 5f 4f 4b 3b 0d 0a 0d 0a 20 20 73 71 6c 69  TE_OK;....  sqli
55c0: 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28  te3_mutex_enter(
55d0: 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 77  db->mutex);..  w
55e0: 68 69 6c 65 20 28 31 29 0d 0a 20 20 7b 0d 0a 20  hile (1)..  {.. 
55f0: 20 20 20 69 66 20 28 63 75 72 73 6f 72 20 3c 20     if (cursor < 
5600: 30 20 7c 7c 20 63 75 72 73 6f 72 20 3e 3d 20 70  0 || cursor >= p
5610: 2d 3e 6e 43 75 72 73 6f 72 29 0d 0a 20 20 20 20  ->nCursor)..    
5620: 7b 0d 0a 20 20 20 20 20 20 72 65 74 20 3d 20 53  {..      ret = S
5630: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20  QLITE_ERROR;..  
5640: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
5650: 7d 0d 0a 20 20 20 20 69 66 20 28 70 2d 3e 61 70  }..    if (p->ap
5660: 43 73 72 5b 63 75 72 73 6f 72 5d 20 3d 3d 20 4e  Csr[cursor] == N
5670: 55 4c 4c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ULL)..    {..   
5680: 20 20 20 72 65 74 20 3d 20 53 51 4c 49 54 45 5f     ret = SQLITE_
5690: 45 52 52 4f 52 3b 0d 0a 20 20 20 20 20 20 62 72  ERROR;..      br
56a0: 65 61 6b 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  eak;..    }.... 
56b0: 20 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72     pC = p->apCsr
56c0: 5b 63 75 72 73 6f 72 5d 3b 0d 0a 0d 0a 20 20 20  [cursor];....   
56d0: 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33 56 64   ret = sqlite3Vd
56e0: 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70  beCursorMoveto(p
56f0: 43 29 3b 0d 0a 20 20 20 20 69 66 28 72 65 74 29  C);..    if(ret)
5700: 0d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a  ..      break;..
5710: 0d 0a 20 20 20 20 69 66 28 70 43 2d 3e 72 6f 77  ..    if(pC->row
5720: 69 64 49 73 56 61 6c 69 64 29 0d 0a 20 20 20 20  idIsValid)..    
5730: 7b 0d 0a 20 20 20 20 20 20 2a 70 72 6f 77 69 64  {..      *prowid
5740: 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64   = pC->lastRowid
5750: 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 65 6c  ;..    }..    el
5760: 73 65 20 69 66 28 70 43 2d 3e 70 73 65 75 64 6f  se if(pC->pseudo
5770: 54 61 62 6c 65 52 65 67 20 3e 20 30 29 0d 0a 20  TableReg > 0).. 
5780: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 20     {..      ret 
5790: 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0d  = SQLITE_ERROR;.
57a0: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20  .      break;.. 
57b0: 20 20 20 7d 0d 0a 20 20 20 20 65 6c 73 65 20 69     }..    else i
57c0: 66 28 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c 7c  f(pC->nullRow ||
57d0: 20 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 29   pC->pCursor==0)
57e0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
57f0: 65 74 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  et = SQLITE_ERRO
5800: 52 3b 0d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  R;..      break;
5810: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 65 6c 73  ..    }..    els
5820: 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  e..    {..      
5830: 69 66 20 28 70 43 2d 3e 70 43 75 72 73 6f 72 20  if (pC->pCursor 
5840: 3d 3d 20 4e 55 4c 4c 29 0d 0a 20 20 20 20 20 20  == NULL)..      
5850: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 20 3d  {..        ret =
5860: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0d 0a   SQLITE_ERROR;..
5870: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
5880: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 73        }..      s
5890: 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
58a0: 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ze(pC->pCursor, 
58b0: 70 72 6f 77 69 64 29 3b 0d 0a 20 20 20 20 20 20  prowid);..      
58c0: 2a 70 72 6f 77 69 64 20 3d 20 2a 70 72 6f 77 69  *prowid = *prowi
58d0: 64 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 62  d;..    }..    b
58e0: 72 65 61 6b 3b 0d 0a 20 20 7d 0d 0a 20 20 73 71  reak;..  }..  sq
58f0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76  lite3_mutex_leav
5900: 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d  e(db->mutex);...
5910: 0a 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a  .  return ret;..
5920: 7d 0d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  }..#endif /* SQL
5930: 49 54 45 5f 4f 53 5f 57 49 4e 20 2a 2f 0d 0a 0d  ITE_OS_WIN */...
5940: 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ./**************
5950: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5960: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5970: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5980: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
5990: 0d 0a 0d 0a 2f 2a 0d 0a 2a 2a 20 54 68 65 20 49  ..../*..** The I
59a0: 4e 54 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 45  NTEROP_TEST_EXTE
59b0: 4e 53 49 4f 4e 20 62 6c 6f 63 6b 20 6d 75 73 74  NSION block must
59c0: 20 62 65 20 61 74 20 74 68 65 20 65 6e 64 20 6f   be at the end o
59d0: 66 20 74 68 69 73 20 73 6f 75 72 63 65 20 66 69  f this source fi
59e0: 6c 65 0d 0a 2a 2a 20 62 65 63 61 75 73 65 20 69  le..** because i
59f0: 74 20 69 6e 63 6c 75 64 65 73 20 74 68 65 20 22  t includes the "
5a00: 73 71 6c 69 74 65 33 65 78 74 2e 68 22 20 66 69  sqlite3ext.h" fi
5a10: 6c 65 2c 20 77 68 69 63 68 20 64 65 66 69 6e 65  le, which define
5a20: 73 20 74 68 65 20 73 71 6c 69 74 65 33 0d 0a 2a  s the sqlite3..*
5a30: 2a 20 70 75 62 6c 69 63 20 41 50 49 20 66 75 6e  * public API fun
5a40: 63 74 69 6f 6e 20 6e 61 6d 65 73 20 74 6f 20 62  ction names to b
5a50: 65 20 6d 61 63 72 6f 73 20 61 6e 64 20 74 68 61  e macros and tha
5a60: 74 20 77 6f 75 6c 64 20 63 61 75 73 65 20 74 68  t would cause th
5a70: 65 20 63 6f 64 65 0d 0a 2a 2a 20 61 62 6f 76 65  e code..** above
5a80: 20 74 68 69 73 20 70 6f 69 6e 74 20 74 6f 20 6d   this point to m
5a90: 61 6c 66 75 6e 63 74 69 6f 6e 2e 0d 0a 2a 2f 0d  alfunction...*/.
5aa0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54  .#if defined(INT
5ab0: 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e 53  EROP_TEST_EXTENS
5ac0: 49 4f 4e 29 0d 0a 23 69 6e 63 6c 75 64 65 20 22  ION)..#include "
5ad0: 2e 2e 2f 63 6f 72 65 2f 73 71 6c 69 74 65 33 65  ../core/sqlite3e
5ae0: 78 74 2e 68 22 0d 0a 53 51 4c 49 54 45 5f 45 58  xt.h"..SQLITE_EX
5af0: 54 45 4e 53 49 4f 4e 5f 49 4e 49 54 31 0d 0a 0d  TENSION_INIT1...
5b00: 0a 2f 2a 0d 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ./*..** The inte
5b10: 72 6f 70 54 65 73 74 28 29 20 53 51 4c 20 66 75  ropTest() SQL fu
5b20: 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 69  nction returns i
5b30: 74 73 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  ts first argumen
5b40: 74 20 6f 72 20 72 61 69 73 65 73 20 61 6e 0d 0a  t or raises an..
5b50: 2a 2a 20 65 72 72 6f 72 20 69 66 20 74 68 65 72  ** error if ther
5b60: 65 20 61 72 65 20 6e 6f 74 20 65 6e 6f 75 67 68  e are not enough
5b70: 20 61 72 67 75 6d 65 6e 74 73 2e 0d 0a 2a 2f 0d   arguments...*/.
5b80: 0a 53 51 4c 49 54 45 5f 50 52 49 56 41 54 45 20  .SQLITE_PRIVATE 
5b90: 76 6f 69 64 20 69 6e 74 65 72 6f 70 54 65 73 74  void interopTest
5ba0: 46 75 6e 63 28 0d 0a 20 20 73 71 6c 69 74 65 33  Func(..  sqlite3
5bb0: 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78  _context *contex
5bc0: 74 2c 0d 0a 20 20 69 6e 74 20 61 72 67 63 2c 0d  t,..  int argc,.
5bd0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
5be0: 20 2a 2a 61 72 67 76 0d 0a 29 7b 0d 0a 20 20 63   **argv..){..  c
5bf0: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
5c00: 61 72 20 2a 7a 3b 0d 0a 20 20 69 66 28 20 61 72  ar *z;..  if( ar
5c10: 67 63 21 3d 31 20 29 7b 0d 0a 20 20 20 20 73 71  gc!=1 ){..    sq
5c20: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72  lite3_result_err
5c30: 6f 72 28 63 6f 6e 74 65 78 74 2c 20 22 6e 65 65  or(context, "nee
5c40: 64 20 65 78 61 63 74 6c 79 20 6f 6e 65 20 61 72  d exactly one ar
5c50: 67 75 6d 65 6e 74 22 2c 20 2d 31 29 3b 0d 0a 20  gument", -1);.. 
5c60: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 7d 0d     return;..  }.
5c70: 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 76  .  z = sqlite3_v
5c80: 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30  alue_text(argv[0
5c90: 5d 29 3b 0d 0a 20 20 69 66 28 20 7a 20 29 7b 0d  ]);..  if( z ){.
5ca0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73  .    sqlite3_res
5cb0: 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74  ult_text(context
5cc0: 2c 20 28 63 68 61 72 2a 29 7a 2c 20 2d 31 2c 20  , (char*)z, -1, 
5cd0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0d  SQLITE_STATIC);.
5ce0: 0a 20 20 7d 65 6c 73 65 7b 0d 0a 20 20 20 20 73  .  }else{..    s
5cf0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75  qlite3_result_nu
5d00: 6c 6c 28 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20  ll(context);..  
5d10: 7d 0d 0a 7d 0d 0a 0d 0a 2f 2a 20 53 51 4c 69 74  }..}..../* SQLit
5d20: 65 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 72  e invokes this r
5d30: 6f 75 74 69 6e 65 20 6f 6e 63 65 20 77 68 65 6e  outine once when
5d40: 20 69 74 20 6c 6f 61 64 73 20 74 68 65 20 65 78   it loads the ex
5d50: 74 65 6e 73 69 6f 6e 2e 0d 0a 2a 2a 20 43 72 65  tension...** Cre
5d60: 61 74 65 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e  ate new function
5d70: 73 2c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  s, collating seq
5d80: 75 65 6e 63 65 73 2c 20 61 6e 64 20 76 69 72 74  uences, and virt
5d90: 75 61 6c 20 74 61 62 6c 65 0d 0a 2a 2a 20 6d 6f  ual table..** mo
5da0: 64 75 6c 65 73 20 68 65 72 65 2e 20 20 54 68 69  dules here.  Thi
5db0: 73 20 69 73 20 75 73 75 61 6c 6c 79 20 74 68 65  s is usually the
5dc0: 20 6f 6e 6c 79 20 65 78 70 6f 72 74 65 64 20 73   only exported s
5dd0: 79 6d 62 6f 6c 20 69 6e 0d 0a 2a 2a 20 74 68 65  ymbol in..** the
5de0: 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79 2e   shared library.
5df0: 0d 0a 2a 2f 0d 0a 53 51 4c 49 54 45 5f 41 50 49  ..*/..SQLITE_API
5e00: 20 69 6e 74 20 69 6e 74 65 72 6f 70 5f 74 65 73   int interop_tes
5e10: 74 5f 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74  t_extension_init
5e20: 28 0d 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  (..  sqlite3 *db
5e30: 2c 0d 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  ,..  char **pzEr
5e40: 72 4d 73 67 2c 0d 0a 20 20 63 6f 6e 73 74 20 73  rMsg,..  const s
5e50: 71 6c 69 74 65 33 5f 61 70 69 5f 72 6f 75 74 69  qlite3_api_routi
5e60: 6e 65 73 20 2a 70 41 70 69 0d 0a 29 7b 0d 0a 20  nes *pApi..){.. 
5e70: 20 53 51 4c 49 54 45 5f 45 58 54 45 4e 53 49 4f   SQLITE_EXTENSIO
5e80: 4e 5f 49 4e 49 54 32 28 70 41 70 69 29 0d 0a 20  N_INIT2(pApi).. 
5e90: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f   return sqlite3_
5ea0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
5eb0: 64 62 2c 20 22 69 6e 74 65 72 6f 70 54 65 73 74  db, "interopTest
5ec0: 22 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 41 4e  ", -1, SQLITE_AN
5ed0: 59 2c 20 30 2c 0d 0a 20 20 20 20 20 20 69 6e 74  Y, 0,..      int
5ee0: 65 72 6f 70 54 65 73 74 46 75 6e 63 2c 20 30 2c  eropTestFunc, 0,
5ef0: 20 30 29 3b 0d 0a 7d 0d 0a 23 65 6e 64 69 66 0d   0);..}..#endif.
5f00: 0a                                               .