System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 49d3f9aab22055899da3acb034526d78ccce1167:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 23 64 65 66 69 6e 65 20 53 51  */....#define SQ
0130: 4c 49 54 45 5f 41 50 49 20 5f 5f 64 65 63 6c 73  LITE_API __decls
0140: 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 0d 0a  pec(dllexport)..
0150: 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 63  ..#include "../c
0160: 6f 72 65 2f 73 71 6c 69 74 65 33 2e 63 22 0d 0a  ore/sqlite3.c"..
0170: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
0180: 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
0190: 42 4c 45 29 20 26 26 20 53 51 4c 49 54 45 5f 56  BLE) && SQLITE_V
01a0: 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d  ERSION_NUMBER >=
01b0: 20 33 30 30 34 30 30 31 0d 0a 23 69 6e 63 6c 75   3004001..#inclu
01c0: 64 65 20 22 2e 2e 2f 65 78 74 2f 76 74 73 68 69  de "../ext/vtshi
01d0: 6d 2e 63 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  m.c"..#endif....
01e0: 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45  #if defined(INTE
01f0: 52 4f 50 5f 50 45 52 43 45 4e 54 49 4c 45 5f 45  ROP_PERCENTILE_E
0200: 58 54 45 4e 53 49 4f 4e 29 0d 0a 23 69 6e 63 6c  XTENSION)..#incl
0210: 75 64 65 20 22 2e 2e 2f 65 78 74 2f 70 65 72 63  ude "../ext/perc
0220: 65 6e 74 69 6c 65 2e 63 22 0d 0a 23 65 6e 64 69  entile.c"..#endi
0230: 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64  f....#if defined
0240: 28 49 4e 54 45 52 4f 50 5f 54 4f 54 59 50 45 5f  (INTEROP_TOTYPE_
0250: 45 58 54 45 4e 53 49 4f 4e 29 0d 0a 23 69 6e 63  EXTENSION)..#inc
0260: 6c 75 64 65 20 22 2e 2e 2f 65 78 74 2f 74 6f 74  lude "../ext/tot
0270: 79 70 65 2e 63 22 0d 0a 23 65 6e 64 69 66 0d 0a  ype.c"..#endif..
0280: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
0290: 54 45 52 4f 50 5f 52 45 47 45 58 50 5f 45 58 54  TEROP_REGEXP_EXT
02a0: 45 4e 53 49 4f 4e 29 0d 0a 23 69 6e 63 6c 75 64  ENSION)..#includ
02b0: 65 20 22 2e 2e 2f 65 78 74 2f 72 65 67 65 78 70  e "../ext/regexp
02c0: 2e 63 22 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23  .c"..#endif....#
02d0: 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52  if defined(INTER
02e0: 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e  OP_EXTENSION_FUN
02f0: 43 54 49 4f 4e 53 29 0d 0a 23 69 6e 63 6c 75 64  CTIONS)..#includ
0300: 65 20 22 2e 2e 2f 63 6f 6e 74 72 69 62 2f 65 78  e "../contrib/ex
0310: 74 65 6e 73 69 6f 6e 2d 66 75 6e 63 74 69 6f 6e  tension-function
0320: 73 2e 63 22 0d 0a 65 78 74 65 72 6e 20 69 6e 74  s.c"..extern int
0330: 20 52 65 67 69 73 74 65 72 45 78 74 65 6e 73 69   RegisterExtensi
0340: 6f 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  onFunctions(sqli
0350: 74 65 33 20 2a 64 62 29 3b 0d 0a 23 65 6e 64 69  te3 *db);..#endi
0360: 66 0d 0a 0d 0a 23 69 66 64 65 66 20 53 51 4c 49  f....#ifdef SQLI
0370: 54 45 5f 4f 53 5f 57 49 4e 0d 0a 23 69 66 20 64  TE_OS_WIN..#if d
0380: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 43  efined(INTEROP_C
0390: 4f 44 45 43 29 0d 0a 23 69 6e 63 6c 75 64 65 20  ODEC)..#include 
03a0: 22 63 72 79 70 74 2e 63 22 0d 0a 23 65 6e 64 69  "crypt.c"..#endi
03b0: 66 0d 0a 0d 0a 23 69 6e 63 6c 75 64 65 20 22 69  f....#include "i
03c0: 6e 74 65 72 6f 70 2e 68 22 0d 0a 0d 0a 23 64 65  nterop.h"....#de
03d0: 66 69 6e 65 20 49 4e 54 45 52 4f 50 5f 44 45 42  fine INTEROP_DEB
03e0: 55 47 5f 4e 4f 4e 45 20 20 20 20 20 20 20 20 20  UG_NONE         
03f0: 20 20 28 30 78 30 30 30 30 29 0d 0a 23 64 65 66    (0x0000)..#def
0400: 69 6e 65 20 49 4e 54 45 52 4f 50 5f 44 45 42 55  ine INTEROP_DEBU
0410: 47 5f 43 4c 4f 53 45 20 20 20 20 20 20 20 20 20  G_CLOSE         
0420: 20 28 30 78 30 30 30 31 29 0d 0a 23 64 65 66 69   (0x0001)..#defi
0430: 6e 65 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  ne INTEROP_DEBUG
0440: 5f 46 49 4e 41 4c 49 5a 45 20 20 20 20 20 20 20  _FINALIZE       
0450: 28 30 78 30 30 30 32 29 0d 0a 23 64 65 66 69 6e  (0x0002)..#defin
0460: 65 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f  e INTEROP_DEBUG_
0470: 42 41 43 4b 55 50 5f 46 49 4e 49 53 48 20 20 28  BACKUP_FINISH  (
0480: 30 78 30 30 30 34 29 0d 0a 23 64 65 66 69 6e 65  0x0004)..#define
0490: 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 4f   INTEROP_DEBUG_O
04a0: 50 45 4e 20 20 20 20 20 20 20 20 20 20 20 28 30  PEN           (0
04b0: 78 30 30 30 38 29 0d 0a 23 64 65 66 69 6e 65 20  x0008)..#define 
04c0: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 4f 50  INTEROP_DEBUG_OP
04d0: 45 4e 31 36 20 20 20 20 20 20 20 20 20 28 30 78  EN16         (0x
04e0: 30 30 31 30 29 0d 0a 23 64 65 66 69 6e 65 20 49  0010)..#define I
04f0: 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 50 52 45  NTEROP_DEBUG_PRE
0500: 50 41 52 45 20 20 20 20 20 20 20 20 28 30 78 30  PARE        (0x0
0510: 30 32 30 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e  020)..#define IN
0520: 54 45 52 4f 50 5f 44 45 42 55 47 5f 50 52 45 50  TEROP_DEBUG_PREP
0530: 41 52 45 31 36 20 20 20 20 20 20 28 30 78 30 30  ARE16      (0x00
0540: 34 30 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54  40)..#define INT
0550: 45 52 4f 50 5f 44 45 42 55 47 5f 52 45 53 45 54  EROP_DEBUG_RESET
0560: 20 20 20 20 20 20 20 20 20 20 28 30 78 30 30 38            (0x008
0570: 30 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54 45  0)..#define INTE
0580: 52 4f 50 5f 44 45 42 55 47 5f 43 48 41 4e 47 45  ROP_DEBUG_CHANGE
0590: 53 20 20 20 20 20 20 20 20 28 30 78 30 31 30 30  S        (0x0100
05a0: 29 0d 0a 23 64 65 66 69 6e 65 20 49 4e 54 45 52  )..#define INTER
05b0: 4f 50 5f 44 45 42 55 47 5f 42 52 45 41 4b 20 20  OP_DEBUG_BREAK  
05c0: 20 20 20 20 20 20 20 20 28 30 78 30 32 30 30 29          (0x0200)
05d0: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
05e0: 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 64 65 66  _MSC_VER) && def
05f0: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42  ined(INTEROP_DEB
0600: 55 47 29 20 26 26 20 5c 0d 0a 20 20 20 20 28 49  UG) && \..    (I
0610: 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49  NTEROP_DEBUG & I
0620: 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 42 52 45  NTEROP_DEBUG_BRE
0630: 41 4b 29 0d 0a 23 64 65 66 69 6e 65 20 73 71 6c  AK)..#define sql
0640: 69 74 65 33 49 6e 74 65 72 6f 70 42 72 65 61 6b  ite3InteropBreak
0650: 28 61 29 20 7b 20 73 71 6c 69 74 65 33 49 6e 74  (a) { sqlite3Int
0660: 65 72 6f 70 44 65 62 75 67 28 22 25 73 5c 6e 22  eropDebug("%s\n"
0670: 2c 20 28 61 29 29 3b 20 5f 5f 64 65 62 75 67 62  , (a)); __debugb
0680: 72 65 61 6b 28 29 3b 20 7d 0d 0a 23 65 6c 73 65  reak(); }..#else
0690: 0d 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ..#define sqlite
06a0: 33 49 6e 74 65 72 6f 70 42 72 65 61 6b 28 61 29  3InteropBreak(a)
06b0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 74 79 70 65  ..#endif....type
06c0: 64 65 66 20 76 6f 69 64 20 28 2a 53 51 4c 49 54  def void (*SQLIT
06d0: 45 55 53 45 52 46 55 4e 43 29 28 73 71 6c 69 74  EUSERFUNC)(sqlit
06e0: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 2c 20 69 6e  e3_context *, in
06f0: 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  t, sqlite3_value
0700: 20 2a 2a 29 3b 0d 0a 74 79 70 65 64 65 66 20 76   **);..typedef v
0710: 6f 69 64 20 28 2a 53 51 4c 49 54 45 46 55 4e 43  oid (*SQLITEFUNC
0720: 46 49 4e 41 4c 29 28 73 71 6c 69 74 65 33 5f 63  FINAL)(sqlite3_c
0730: 6f 6e 74 65 78 74 20 2a 29 3b 0d 0a 0d 0a 23 69  ontext *);....#i
0740: 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f  f defined(INTERO
0750: 50 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  P_DEBUG) || defi
0760: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 4c 4f 47 29  ned(INTEROP_LOG)
0770: 0d 0a 53 51 4c 49 54 45 5f 50 52 49 56 41 54 45  ..SQLITE_PRIVATE
0780: 20 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 74   void sqlite3Int
0790: 65 72 6f 70 44 65 62 75 67 28 63 6f 6e 73 74 20  eropDebug(const 
07a0: 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e  char *zFormat, .
07b0: 2e 2e 29 7b 0d 0a 20 20 76 61 5f 6c 69 73 74 20  ..){..  va_list 
07c0: 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
07d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
07e0: 61 72 61 72 67 20 6c 69 73 74 20 2a 2f 0d 0a 20  ararg list */.. 
07f0: 20 53 74 72 41 63 63 75 6d 20 61 63 63 3b 20 20   StrAccum acc;  
0800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0810: 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 61       /* String a
0820: 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0d 0a 20  ccumulator */.. 
0830: 20 63 68 61 72 20 7a 4d 73 67 5b 53 51 4c 49 54   char zMsg[SQLIT
0840: 45 5f 50 52 49 4e 54 5f 42 55 46 5f 53 49 5a 45  E_PRINT_BUF_SIZE
0850: 2a 33 5d 3b 20 2f 2a 20 43 6f 6d 70 6c 65 74 65  *3]; /* Complete
0860: 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 2a 2f 0d   log message */.
0870: 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20  .  va_start(ap, 
0880: 7a 46 6f 72 6d 61 74 29 3b 0d 0a 20 20 73 71 6c  zFormat);..  sql
0890: 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74  ite3StrAccumInit
08a0: 28 26 61 63 63 2c 20 7a 4d 73 67 2c 20 73 69 7a  (&acc, zMsg, siz
08b0: 65 6f 66 28 7a 4d 73 67 29 2c 20 30 29 3b 0d 0a  eof(zMsg), 0);..
08c0: 20 20 61 63 63 2e 75 73 65 4d 61 6c 6c 6f 63 20    acc.useMalloc 
08d0: 3d 20 30 3b 0d 0a 20 20 73 71 6c 69 74 65 33 56  = 0;..  sqlite3V
08e0: 58 50 72 69 6e 74 66 28 26 61 63 63 2c 20 30 2c  XPrintf(&acc, 0,
08f0: 20 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0d 0a   zFormat, ap);..
0900: 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0d 0a 23    va_end(ap);..#
0910: 69 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  if SQLITE_VERSIO
0920: 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33 30 30 37  N_NUMBER >= 3007
0930: 30 31 33 0d 0a 20 20 73 71 6c 69 74 65 33 5f 77  013..  sqlite3_w
0940: 69 6e 33 32 5f 77 72 69 74 65 5f 64 65 62 75 67  in32_write_debug
0950: 28 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d  (sqlite3StrAccum
0960: 46 69 6e 69 73 68 28 26 61 63 63 29 2c 20 2d 31  Finish(&acc), -1
0970: 29 3b 0d 0a 23 65 6c 69 66 20 64 65 66 69 6e 65  );..#elif define
0980: 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 48  d(SQLITE_WIN32_H
0990: 41 53 5f 41 4e 53 49 29 0d 0a 20 20 4f 75 74 70  AS_ANSI)..  Outp
09a0: 75 74 44 65 62 75 67 53 74 72 69 6e 67 41 28 73  utDebugStringA(s
09b0: 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69  qlite3StrAccumFi
09c0: 6e 69 73 68 28 26 61 63 63 29 29 3b 0d 0a 23 65  nish(&acc));..#e
09d0: 6c 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  lif defined(SQLI
09e0: 54 45 5f 57 49 4e 33 32 5f 48 41 53 5f 57 49 44  TE_WIN32_HAS_WID
09f0: 45 29 0d 0a 20 20 7b 0d 0a 20 20 20 20 4c 50 57  E)..  {..    LPW
0a00: 53 54 52 20 7a 57 69 64 65 4d 73 67 20 3d 20 75  STR zWideMsg = u
0a10: 74 66 38 54 6f 55 6e 69 63 6f 64 65 28 73 71 6c  tf8ToUnicode(sql
0a20: 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69  ite3StrAccumFini
0a30: 73 68 28 26 61 63 63 29 29 3b 0d 0a 20 20 20 20  sh(&acc));..    
0a40: 69 66 28 20 7a 57 69 64 65 4d 73 67 20 29 7b 0d  if( zWideMsg ){.
0a50: 0a 20 20 20 20 20 20 4f 75 74 70 75 74 44 65 62  .      OutputDeb
0a60: 75 67 53 74 72 69 6e 67 57 28 7a 57 69 64 65 4d  ugStringW(zWideM
0a70: 73 67 29 3b 0d 0a 20 20 20 20 20 20 73 71 6c 69  sg);..      sqli
0a80: 74 65 33 5f 66 72 65 65 28 7a 57 69 64 65 4d 73  te3_free(zWideMs
0a90: 67 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d  g);..    }..  }.
0aa0: 0a 23 65 6c 73 65 0d 0a 20 20 66 70 72 69 6e 74  .#else..  fprint
0ab0: 66 28 73 74 64 65 72 72 2c 20 22 25 73 22 2c 20  f(stderr, "%s", 
0ac0: 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46  sqlite3StrAccumF
0ad0: 69 6e 69 73 68 28 26 61 63 63 29 29 3b 0d 0a 23  inish(&acc));..#
0ae0: 65 6e 64 69 66 0d 0a 7d 0d 0a 23 65 6e 64 69 66  endif..}..#endif
0af0: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
0b00: 49 4e 54 45 52 4f 50 5f 4c 4f 47 29 0d 0a 53 51  INTEROP_LOG)..SQ
0b10: 4c 49 54 45 5f 50 52 49 56 41 54 45 20 69 6e 74  LITE_PRIVATE int
0b20: 20 6c 6f 67 43 6f 6e 66 69 67 75 72 65 64 20 3d   logConfigured =
0b30: 20 30 3b 0d 0a 0d 0a 53 51 4c 49 54 45 5f 50 52   0;....SQLITE_PR
0b40: 49 56 41 54 45 20 76 6f 69 64 20 73 71 6c 69 74  IVATE void sqlit
0b50: 65 33 49 6e 74 65 72 6f 70 4c 6f 67 43 61 6c 6c  e3InteropLogCall
0b60: 62 61 63 6b 28 76 6f 69 64 20 2a 70 41 72 67 2c  back(void *pArg,
0b70: 20 69 6e 74 20 69 43 6f 64 65 2c 20 63 6f 6e 73   int iCode, cons
0b80: 74 20 63 68 61 72 20 2a 7a 4d 73 67 29 7b 0d 0a  t char *zMsg){..
0b90: 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70    sqlite3Interop
0ba0: 44 65 62 75 67 28 22 49 4e 54 45 52 4f 50 5f 4c  Debug("INTEROP_L
0bb0: 4f 47 20 28 25 64 29 20 25 73 5c 6e 22 2c 20 69  OG (%d) %s\n", i
0bc0: 43 6f 64 65 2c 20 7a 4d 73 67 29 3b 0d 0a 7d 0d  Code, zMsg);..}.
0bd0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 53 51 4c 49 54  .#endif....SQLIT
0be0: 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49  E_API int WINAPI
0bf0: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f   sqlite3_malloc_
0c00: 73 69 7a 65 5f 69 6e 74 65 72 6f 70 28 76 6f 69  size_interop(voi
0c10: 64 20 2a 70 29 7b 0d 0a 20 20 72 65 74 75 72 6e  d *p){..  return
0c20: 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69   sqlite3MallocSi
0c30: 7a 65 28 70 29 3b 0d 0a 7d 0d 0a 0d 0a 23 69 66  ze(p);..}....#if
0c40: 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50   defined(INTEROP
0c50: 5f 4c 45 47 41 43 59 5f 43 4c 4f 53 45 29 20 7c  _LEGACY_CLOSE) |
0c60: 7c 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  | SQLITE_VERSION
0c70: 5f 4e 55 4d 42 45 52 20 3c 20 33 30 30 37 30 31  _NUMBER < 300701
0c80: 34 0d 0a 53 51 4c 49 54 45 5f 50 52 49 56 41 54  4..SQLITE_PRIVAT
0c90: 45 20 76 6f 69 64 20 2a 20 73 71 6c 69 74 65 33  E void * sqlite3
0ca0: 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 5f 69 6e 74  DbMallocZero_int
0cb0: 65 72 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62  erop(sqlite3 *db
0cc0: 2c 20 69 6e 74 20 6e 29 0d 0a 7b 0d 0a 20 20 76  , int n)..{..  v
0cd0: 6f 69 64 20 2a 70 3b 0d 0a 20 20 69 66 20 28 64  oid *p;..  if (d
0ce0: 62 29 20 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65  b) {..    sqlite
0cf0: 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62  3_mutex_enter(db
0d00: 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 7d 0d 0a  ->mutex);..  }..
0d10: 20 20 70 20 3d 20 73 71 6c 69 74 65 33 44 62 4d    p = sqlite3DbM
0d20: 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 6e 29 3b  allocZero(db,n);
0d30: 0d 0a 20 20 69 66 20 28 64 62 29 20 7b 0d 0a 20  ..  if (db) {.. 
0d40: 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
0d50: 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78  _leave(db->mutex
0d60: 29 3b 0d 0a 20 20 7d 0d 0a 20 20 72 65 74 75 72  );..  }..  retur
0d70: 6e 20 70 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  n p;..}....SQLIT
0d80: 45 5f 50 52 49 56 41 54 45 20 76 6f 69 64 20 73  E_PRIVATE void s
0d90: 71 6c 69 74 65 33 44 62 46 72 65 65 5f 69 6e 74  qlite3DbFree_int
0da0: 65 72 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62  erop(sqlite3 *db
0db0: 2c 20 76 6f 69 64 20 2a 70 29 0d 0a 7b 0d 0a 20  , void *p)..{.. 
0dc0: 20 69 66 20 28 64 62 29 20 7b 0d 0a 20 20 20 20   if (db) {..    
0dd0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e  sqlite3_mutex_en
0de0: 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d  ter(db->mutex);.
0df0: 0a 20 20 7d 0d 0a 20 20 69 66 20 28 70 29 20 7b  .  }..  if (p) {
0e00: 0d 0a 20 20 20 20 73 71 6c 69 74 65 33 4d 65 6d  ..    sqlite3Mem
0e10: 64 65 62 75 67 53 65 74 54 79 70 65 28 70 2c 20  debugSetType(p, 
0e20: 4d 45 4d 54 59 50 45 5f 44 42 7c 4d 45 4d 54 59  MEMTYPE_DB|MEMTY
0e30: 50 45 5f 48 45 41 50 29 3b 0d 0a 20 20 7d 0d 0a  PE_HEAP);..  }..
0e40: 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
0e50: 64 62 2c 70 29 3b 0d 0a 20 20 69 66 20 28 64 62  db,p);..  if (db
0e60: 29 20 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65 33  ) {..    sqlite3
0e70: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d  _mutex_leave(db-
0e80: 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 7d 0d 0a 7d  >mutex);..  }..}
0e90: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 2f 2a 0d 0a  ..#endif..../*..
0ea0: 20 20 20 20 54 68 65 20 67 6f 61 6c 20 6f 66 20      The goal of 
0eb0: 74 68 69 73 20 76 65 72 73 69 6f 6e 20 6f 66 20  this version of 
0ec0: 63 6c 6f 73 65 20 69 73 20 64 69 66 66 65 72 65  close is differe
0ed0: 6e 74 20 74 68 61 6e 20 74 68 61 74 20 6f 66 20  nt than that of 
0ee0: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2c  sqlite3_close(),
0ef0: 20 61 6e 64 20 69 73 20 64 65 73 69 67 6e 65 64   and is designed
0f00: 20 74 6f 20 6c 65 6e 64 20 69 74 73 65 6c 66 20   to lend itself 
0f10: 62 65 74 74 65 72 20 74 6f 20 2e 4e 45 54 27 73  better to .NET's
0f20: 20 6e 6f 6e 2d 64 65 74 65 72 6d 69 6e 69 73 74   non-determinist
0f30: 69 63 20 66 69 6e 61 6c 69 7a 65 72 73 20 61 6e  ic finalizers an
0f40: 64 0d 0a 20 20 20 20 74 68 65 20 47 43 20 74 68  d..    the GC th
0f50: 72 65 61 64 2e 20 20 53 51 4c 69 74 65 20 77 69  read.  SQLite wi
0f60: 6c 6c 20 6e 6f 74 20 63 6c 6f 73 65 20 61 20 64  ll not close a d
0f70: 61 74 61 62 61 73 65 20 69 66 20 73 74 61 74 65  atabase if state
0f80: 6d 65 6e 74 73 20 61 72 65 20 6f 70 65 6e 20 6f  ments are open o
0f90: 6e 20 69 74 20 2d 2d 20 62 75 74 20 66 6f 72 20  n it -- but for 
0fa0: 6f 75 72 20 70 75 72 70 6f 73 65 73 2c 20 77 65  our purposes, we
0fb0: 27 64 20 72 61 74 68 65 72 20 66 69 6e 61 6c 69  'd rather finali
0fc0: 7a 65 20 61 6c 6c 20 61 63 74 69 76 65 20 73 74  ze all active st
0fd0: 61 74 65 6d 65 6e 74 73 0d 0a 20 20 20 20 61 6e  atements..    an
0fe0: 64 20 66 6f 72 63 69 62 6c 79 20 63 6c 6f 73 65  d forcibly close
0ff0: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
1000: 54 68 65 20 72 65 61 73 6f 6e 20 69 73 20 73 69  The reason is si
1010: 6d 70 6c 65 20 2d 2d 20 61 20 6c 6f 74 20 6f 66  mple -- a lot of
1020: 20 70 65 6f 70 6c 65 20 64 6f 6e 27 74 20 44 69   people don't Di
1030: 73 70 6f 73 65 28 29 20 6f 66 20 74 68 65 69 72  spose() of their
1040: 20 6f 62 6a 65 63 74 73 20 63 6f 72 72 65 63 74   objects correct
1050: 6c 79 20 61 6e 64 20 6c 65 74 20 74 68 65 20 67  ly and let the g
1060: 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 6f 72  arbage collector
1070: 0d 0a 20 20 20 20 64 6f 20 69 74 2e 20 20 54 68  ..    do it.  Th
1080: 69 73 20 6c 65 61 64 73 20 74 6f 20 75 6e 65 78  is leads to unex
1090: 70 65 63 74 65 64 20 62 65 68 61 76 69 6f 72 20  pected behavior 
10a0: 77 68 65 6e 20 61 20 75 73 65 72 20 74 68 69 6e  when a user thin
10b0: 6b 73 20 74 68 65 79 27 76 65 20 63 6c 6f 73 65  ks they've close
10c0: 64 20 61 20 64 61 74 61 62 61 73 65 2c 20 62 75  d a database, bu
10d0: 74 20 69 74 27 73 20 73 74 69 6c 6c 20 6f 70 65  t it's still ope
10e0: 6e 20 62 65 63 61 75 73 65 20 6e 6f 74 20 61 6c  n because not al
10f0: 6c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 73  l the statements
1100: 20 68 61 76 65 0d 0a 20 20 20 20 68 69 74 20 74   have..    hit t
1110: 68 65 20 47 43 20 79 65 74 2e 0d 0a 0d 0a 20 20  he GC yet.....  
1120: 20 20 53 6f 2c 20 68 65 72 65 20 77 65 20 68 61    So, here we ha
1130: 76 65 20 61 20 70 72 6f 62 6c 65 6d 20 2e 2e 2e  ve a problem ...
1140: 20 2e 4e 45 54 20 68 61 73 20 61 20 70 6f 69 6e   .NET has a poin
1150: 74 65 72 20 74 6f 20 61 6e 79 20 6e 75 6d 62 65  ter to any numbe
1160: 72 20 6f 66 20 73 71 6c 69 74 65 33 5f 73 74 6d  r of sqlite3_stm
1170: 74 20 6f 62 6a 65 63 74 73 2e 20 20 57 65 20 63  t objects.  We c
1180: 61 6e 27 74 20 63 61 6c 6c 20 73 71 6c 69 74 65  an't call sqlite
1190: 33 5f 66 69 6e 61 6c 69 7a 65 28 29 20 6f 6e 20  3_finalize() on 
11a0: 74 68 65 73 65 20 62 65 63 61 75 73 65 0d 0a 20  these because.. 
11b0: 20 20 20 74 68 65 69 72 20 6d 65 6d 6f 72 79 20     their memory 
11c0: 69 73 20 66 72 65 65 64 20 61 6e 64 20 63 61 6e  is freed and can
11d0: 20 62 65 20 75 73 65 64 20 66 6f 72 20 73 6f 6d   be used for som
11e0: 65 74 68 69 6e 67 20 65 6c 73 65 2e 20 20 54 68  ething else.  Th
11f0: 65 20 47 43 20 74 68 72 65 61 64 20 63 6f 75 6c  e GC thread coul
1200: 64 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20 74 72  d potentially tr
1210: 79 20 61 6e 64 20 63 61 6c 6c 20 66 69 6e 61 6c  y and call final
1220: 69 7a 65 20 61 67 61 69 6e 20 6f 6e 20 74 68 65  ize again on the
1230: 20 73 74 61 74 65 6d 65 6e 74 20 61 66 74 65 72   statement after
1240: 0d 0a 20 20 20 20 74 68 61 74 20 6d 65 6d 6f 72  ..    that memor
1250: 79 20 77 61 73 20 64 65 61 6c 6c 6f 63 61 74 65  y was deallocate
1260: 64 2e 20 20 42 41 44 2e 20 20 53 6f 2c 20 77 68  d.  BAD.  So, wh
1270: 61 74 20 77 65 20 6e 65 65 64 20 74 6f 20 64 6f  at we need to do
1280: 20 69 73 20 6d 61 6b 65 20 61 20 63 6f 70 79 20   is make a copy 
1290: 6f 66 20 65 61 63 68 20 73 74 61 74 65 6d 65 6e  of each statemen
12a0: 74 2c 20 61 6e 64 20 63 61 6c 6c 20 66 69 6e 61  t, and call fina
12b0: 6c 69 7a 65 28 29 20 6f 6e 20 74 68 65 20 63 6f  lize() on the co
12c0: 70 79 20 2d 2d 20 73 6f 20 74 68 61 74 20 74 68  py -- so that th
12d0: 65 20 6f 72 69 67 69 6e 61 6c 0d 0a 20 20 20 20  e original..    
12e0: 73 74 61 74 65 6d 65 6e 74 27 73 20 6d 65 6d 6f  statement's memo
12f0: 72 79 20 69 73 20 70 72 65 73 65 72 76 65 64 2c  ry is preserved,
1300: 20 61 6e 64 20 6d 61 72 6b 65 64 20 61 73 20 42   and marked as B
1310: 41 44 2c 20 62 75 74 20 77 65 20 63 61 6e 20 73  AD, but we can s
1320: 74 69 6c 6c 20 6d 61 6e 61 67 65 20 74 6f 20 66  till manage to f
1330: 69 6e 61 6c 69 7a 65 20 65 76 65 72 79 74 68 69  inalize everythi
1340: 6e 67 20 61 6e 64 20 66 6f 72 63 69 62 6c 79 20  ng and forcibly 
1350: 63 6c 6f 73 65 20 74 68 65 20 64 61 74 61 62 61  close the databa
1360: 73 65 2e 20 20 4c 61 74 65 72 20 77 68 65 6e 20  se.  Later when 
1370: 74 68 65 0d 0a 20 20 20 20 47 43 20 67 65 74 73  the..    GC gets
1380: 20 61 72 6f 75 6e 64 20 74 6f 20 63 61 6c 6c 69   around to calli
1390: 6e 67 20 66 69 6e 61 6c 69 7a 65 5f 69 6e 74 65  ng finalize_inte
13a0: 72 6f 70 28 29 20 6f 6e 20 74 68 65 20 22 62 61  rop() on the "ba
13b0: 64 22 20 73 74 61 74 65 6d 65 6e 74 2c 20 77 65  d" statement, we
13c0: 20 64 65 74 65 63 74 20 74 68 61 74 20 61 6e 64   detect that and
13d0: 20 66 69 6e 69 73 68 20 64 65 61 6c 6c 6f 63 61   finish dealloca
13e0: 74 69 6e 67 20 74 68 65 20 70 6f 69 6e 74 65 72  ting the pointer
13f0: 2e 0d 0a 2a 2f 0d 0a 53 51 4c 49 54 45 5f 41 50  ...*/..SQLITE_AP
1400: 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c  I int WINAPI sql
1410: 69 74 65 33 5f 63 6c 6f 73 65 5f 69 6e 74 65 72  ite3_close_inter
1420: 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62 29 0d  op(sqlite3 *db).
1430: 0a 7b 0d 0a 20 20 69 6e 74 20 72 65 74 3b 0d 0a  .{..  int ret;..
1440: 23 69 66 20 21 64 65 66 69 6e 65 64 28 49 4e 54  #if !defined(INT
1450: 45 52 4f 50 5f 4c 45 47 41 43 59 5f 43 4c 4f 53  EROP_LEGACY_CLOS
1460: 45 29 20 26 26 20 53 51 4c 49 54 45 5f 56 45 52  E) && SQLITE_VER
1470: 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d 20 33  SION_NUMBER >= 3
1480: 30 30 37 30 31 34 0d 0a 0d 0a 23 69 66 20 64 65  007014....#if de
1490: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45  fined(INTEROP_DE
14a0: 42 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50  BUG) && (INTEROP
14b0: 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50  _DEBUG & INTEROP
14c0: 5f 44 45 42 55 47 5f 43 4c 4f 53 45 29 0d 0a 20  _DEBUG_CLOSE).. 
14d0: 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44   sqlite3InteropD
14e0: 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 63 6c  ebug("sqlite3_cl
14f0: 6f 73 65 5f 69 6e 74 65 72 6f 70 28 29 3a 20 63  ose_interop(): c
1500: 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f 63  alling sqlite3_c
1510: 6c 6f 73 65 5f 76 32 28 25 70 29 2e 2e 2e 5c 6e  lose_v2(%p)...\n
1520: 22 2c 20 64 62 29 3b 0d 0a 23 65 6e 64 69 66 0d  ", db);..#endif.
1530: 0a 0d 0a 20 20 72 65 74 20 3d 20 73 71 6c 69 74  ...  ret = sqlit
1540: 65 33 5f 63 6c 6f 73 65 5f 76 32 28 64 62 29 3b  e3_close_v2(db);
1550: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
1560: 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26  INTEROP_DEBUG) &
1570: 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  & (INTEROP_DEBUG
1580: 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47   & INTEROP_DEBUG
1590: 5f 43 4c 4f 53 45 29 0d 0a 20 20 73 71 6c 69 74  _CLOSE)..  sqlit
15a0: 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22  e3InteropDebug("
15b0: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 5f 69 6e  sqlite3_close_in
15c0: 74 65 72 6f 70 28 29 3a 20 73 71 6c 69 74 65 33  terop(): sqlite3
15d0: 5f 63 6c 6f 73 65 5f 76 32 28 25 70 29 20 72 65  _close_v2(%p) re
15e0: 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 64  turned %d.\n", d
15f0: 62 2c 20 72 65 74 29 3b 0d 0a 23 65 6e 64 69 66  b, ret);..#endif
1600: 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 72 65 74  ....  return ret
1610: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 72 65 74 20  ;..#else..  ret 
1620: 3d 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28  = sqlite3_close(
1630: 64 62 29 3b 0d 0a 0d 0a 20 20 69 66 20 28 72 65  db);....  if (re
1640: 74 20 3d 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  t == SQLITE_BUSY
1650: 29 0d 0a 20 20 7b 0d 0a 20 20 20 20 73 71 6c 69  )..  {..    sqli
1660: 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28  te3_mutex_enter(
1670: 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20  db->mutex);.... 
1680: 20 20 20 69 66 20 28 21 64 62 2d 3e 70 56 64 62     if (!db->pVdb
1690: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
16a0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c   sqlite3_mutex_l
16b0: 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b  eave(db->mutex);
16c0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 72  ..      return r
16d0: 65 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  et;..    }....  
16e0: 20 20 77 68 69 6c 65 20 28 64 62 2d 3e 70 56 64    while (db->pVd
16f0: 62 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  be)..    {..    
1700: 20 20 2f 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79    /* Make a copy
1710: 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 70 72   of the first pr
1720: 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
1730: 20 2a 2f 0d 0a 20 20 20 20 20 20 56 64 62 65 20   */..      Vdbe 
1740: 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 73 71 6c  *p = (Vdbe *)sql
1750: 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
1760: 5f 69 6e 74 65 72 6f 70 28 64 62 2c 20 73 69 7a  _interop(db, siz
1770: 65 6f 66 28 56 64 62 65 29 29 3b 0d 0a 20 20 20  eof(Vdbe));..   
1780: 20 20 20 56 64 62 65 20 2a 70 6f 20 3d 20 64 62     Vdbe *po = db
1790: 2d 3e 70 56 64 62 65 3b 0d 0a 0d 0a 20 20 20 20  ->pVdbe;....    
17a0: 20 20 69 66 20 28 21 70 29 0d 0a 20 20 20 20 20    if (!p)..     
17b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 20   {..        ret 
17c0: 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0d  = SQLITE_NOMEM;.
17d0: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d  .        break;.
17e0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
17f0: 20 20 43 6f 70 79 4d 65 6d 6f 72 79 28 70 2c 20    CopyMemory(p, 
1800: 70 6f 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 29  po, sizeof(Vdbe)
1810: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2a 20 50  );....      /* P
1820: 75 74 20 69 74 20 6f 6e 20 74 68 65 20 63 68 61  ut it on the cha
1830: 69 6e 20 73 6f 20 77 65 20 63 61 6e 20 66 72 65  in so we can fre
1840: 65 20 69 74 20 2a 2f 0d 0a 20 20 20 20 20 20 64  e it */..      d
1850: 62 2d 3e 70 56 64 62 65 20 3d 20 70 3b 0d 0a 20  b->pVdbe = p;.. 
1860: 20 20 20 20 20 72 65 74 20 3d 20 73 71 6c 69 74       ret = sqlit
1870: 65 33 5f 66 69 6e 61 6c 69 7a 65 28 28 73 71 6c  e3_finalize((sql
1880: 69 74 65 33 5f 73 74 6d 74 20 2a 29 70 29 3b 20  ite3_stmt *)p); 
1890: 2f 2a 20 54 68 69 73 20 77 69 6c 6c 20 61 6c 73  /* This will als
18a0: 6f 20 66 72 65 65 20 74 68 65 20 63 6f 70 79 27  o free the copy'
18b0: 73 20 6d 65 6d 6f 72 79 20 2a 2f 0d 0a 20 20 20  s memory */..   
18c0: 20 20 20 69 66 20 28 72 65 74 29 0d 0a 20 20 20     if (ret)..   
18d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2a     {..        /*
18e0: 20 66 69 6e 61 6c 69 7a 65 20 66 61 69 6c 65 64   finalize failed
18f0: 20 2d 2d 20 73 6f 20 77 65 20 6d 75 73 74 20 70   -- so we must p
1900: 75 74 20 62 61 63 6b 20 61 6e 79 74 68 69 6e 67  ut back anything
1910: 20 77 65 20 6d 75 6e 67 65 64 20 2a 2f 0d 0a 20   we munged */.. 
1920: 20 20 20 20 20 20 20 43 6f 70 79 4d 65 6d 6f 72         CopyMemor
1930: 79 28 70 6f 2c 20 70 2c 20 73 69 7a 65 6f 66 28  y(po, p, sizeof(
1940: 56 64 62 65 29 29 3b 0d 0a 20 20 20 20 20 20 20  Vdbe));..       
1950: 20 64 62 2d 3e 70 56 64 62 65 20 3d 20 70 6f 3b   db->pVdbe = po;
1960: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2a 0d 0a  ....        /*..
1970: 20 20 20 20 20 20 20 20 2a 2a 20 4e 4f 54 45 3a          ** NOTE:
1980: 20 4f 6b 2c 20 77 65 20 6d 75 73 74 20 66 72 65   Ok, we must fre
1990: 65 20 74 68 69 73 20 62 6c 6f 63 6b 20 74 68 61  e this block tha
19a0: 74 20 2a 77 65 2a 20 61 6c 6c 6f 63 61 74 65 64  t *we* allocated
19b0: 20 28 61 62 6f 76 65 29 20 73 69 6e 63 65 0d 0a   (above) since..
19c0: 20 20 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20          **      
19d0: 20 66 69 6e 61 6c 69 7a 65 20 64 69 64 20 6e 6f   finalize did no
19e0: 74 20 64 6f 20 73 6f 2e 0d 0a 20 20 20 20 20 20  t do so...      
19f0: 20 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 71    */..        sq
1a00: 6c 69 74 65 33 44 62 46 72 65 65 5f 69 6e 74 65  lite3DbFree_inte
1a10: 72 6f 70 28 64 62 2c 20 70 29 3b 0d 0a 20 20 20  rop(db, p);..   
1a20: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
1a30: 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65     }..      else
1a40: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
1a50: 20 20 20 5a 65 72 6f 4d 65 6d 6f 72 79 28 70 6f     ZeroMemory(po
1a60: 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 29 29 3b  , sizeof(Vdbe));
1a70: 0d 0a 20 20 20 20 20 20 20 20 70 6f 2d 3e 6d 61  ..        po->ma
1a80: 67 69 63 20 3d 20 56 44 42 45 5f 4d 41 47 49 43  gic = VDBE_MAGIC
1a90: 5f 44 45 41 44 3b 0d 0a 20 20 20 20 20 20 7d 0d  _DEAD;..      }.
1aa0: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 73 71 6c 69  .    }..    sqli
1ab0: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
1ac0: 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20 20  db->mutex);..   
1ad0: 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 63   ret = sqlite3_c
1ae0: 6c 6f 73 65 28 64 62 29 3b 0d 0a 20 20 7d 0d 0a  lose(db);..  }..
1af0: 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 23    return ret;..#
1b00: 65 6e 64 69 66 0d 0a 7d 0d 0a 0d 0a 23 69 66 20  endif..}....#if 
1b10: 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f  defined(INTEROP_
1b20: 4c 4f 47 29 0d 0a 53 51 4c 49 54 45 5f 41 50 49  LOG)..SQLITE_API
1b30: 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69   int WINAPI sqli
1b40: 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67 5f 69  te3_config_log_i
1b50: 6e 74 65 72 6f 70 28 29 0d 0a 7b 0d 0a 20 20 69  nterop()..{..  i
1b60: 6e 74 20 72 65 74 3b 0d 0a 20 20 69 66 28 20 21  nt ret;..  if( !
1b70: 6c 6f 67 43 6f 6e 66 69 67 75 72 65 64 20 29 7b  logConfigured ){
1b80: 0d 0a 20 20 20 20 72 65 74 20 3d 20 73 71 6c 69  ..    ret = sqli
1b90: 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54  te3_config(SQLIT
1ba0: 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 2c 20 73 71  E_CONFIG_LOG, sq
1bb0: 6c 69 74 65 33 49 6e 74 65 72 6f 70 4c 6f 67 43  lite3InteropLogC
1bc0: 61 6c 6c 62 61 63 6b 2c 20 30 29 3b 0d 0a 20 20  allback, 0);..  
1bd0: 20 20 69 66 28 20 72 65 74 3d 3d 53 51 4c 49 54    if( ret==SQLIT
1be0: 45 5f 4f 4b 20 29 7b 0d 0a 20 20 20 20 20 20 6c  E_OK ){..      l
1bf0: 6f 67 43 6f 6e 66 69 67 75 72 65 64 20 3d 20 31  ogConfigured = 1
1c00: 3b 0d 0a 20 20 20 20 7d 65 6c 73 65 7b 0d 0a 20  ;..    }else{.. 
1c10: 20 20 20 20 20 73 71 6c 69 74 65 33 49 6e 74 65       sqlite3Inte
1c20: 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65  ropDebug("sqlite
1c30: 33 5f 63 6f 6e 66 69 67 5f 6c 6f 67 5f 69 6e 74  3_config_log_int
1c40: 65 72 6f 70 28 29 3a 20 73 71 6c 69 74 65 33 5f  erop(): sqlite3_
1c50: 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f  config(SQLITE_CO
1c60: 4e 46 49 47 5f 4c 4f 47 29 20 72 65 74 75 72 6e  NFIG_LOG) return
1c70: 65 64 20 25 64 2e 5c 6e 22 2c 20 72 65 74 29 3b  ed %d.\n", ret);
1c80: 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 65 6c 73 65  ..    }..  }else
1c90: 7b 0d 0a 20 20 20 20 72 65 74 20 3d 20 53 51 4c  {..    ret = SQL
1ca0: 49 54 45 5f 4f 4b 3b 0d 0a 20 20 7d 0d 0a 20 20  ITE_OK;..  }..  
1cb0: 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a  return ret;..}..
1cc0: 23 65 6e 64 69 66 0d 0a 0d 0a 53 51 4c 49 54 45  #endif....SQLITE
1cd0: 5f 41 50 49 20 63 6f 6e 73 74 20 63 68 61 72 20  _API const char 
1ce0: 2a 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73  *sqlite3_libvers
1cf0: 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 76 6f 69 64  ion_interop(void
1d00: 29 0d 0a 7b 0d 0a 20 20 72 65 74 75 72 6e 20 49  )..{..  return I
1d10: 4e 54 45 52 4f 50 5f 56 45 52 53 49 4f 4e 3b 0d  NTEROP_VERSION;.
1d20: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
1d30: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c   const char *sql
1d40: 69 74 65 33 5f 73 6f 75 72 63 65 69 64 5f 69 6e  ite3_sourceid_in
1d50: 74 65 72 6f 70 28 76 6f 69 64 29 0d 0a 7b 0d 0a  terop(void)..{..
1d60: 20 20 72 65 74 75 72 6e 20 49 4e 54 45 52 4f 50    return INTEROP
1d70: 5f 53 4f 55 52 43 45 5f 49 44 20 22 20 22 20 49  _SOURCE_ID " " I
1d80: 4e 54 45 52 4f 50 5f 53 4f 55 52 43 45 5f 54 49  NTEROP_SOURCE_TI
1d90: 4d 45 53 54 41 4d 50 3b 0d 0a 7d 0d 0a 0d 0a 53  MESTAMP;..}....S
1da0: 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49  QLITE_API int WI
1db0: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 6f 70 65  NAPI sqlite3_ope
1dc0: 6e 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 73 74 20  n_interop(const 
1dd0: 63 68 61 72 20 2a 66 69 6c 65 6e 61 6d 65 2c 20  char *filename, 
1de0: 69 6e 74 20 66 6c 61 67 73 2c 20 73 71 6c 69 74  int flags, sqlit
1df0: 65 33 20 2a 2a 70 70 64 62 29 0d 0a 7b 0d 0a 20  e3 **ppdb)..{.. 
1e00: 20 69 6e 74 20 72 65 74 3b 0d 0a 0d 0a 23 69 66   int ret;....#if
1e10: 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50   defined(INTEROP
1e20: 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e 54 45  _DEBUG) && (INTE
1e30: 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45  ROP_DEBUG & INTE
1e40: 52 4f 50 5f 44 45 42 55 47 5f 4f 50 45 4e 29 0d  ROP_DEBUG_OPEN).
1e50: 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f  .  sqlite3Intero
1e60: 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f  pDebug("sqlite3_
1e70: 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28 29 3a 20  open_interop(): 
1e80: 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f  calling sqlite3_
1e90: 6f 70 65 6e 5f 76 32 28 5c 22 25 73 5c 22 2c 20  open_v2(\"%s\", 
1ea0: 25 64 2c 20 25 70 29 2e 2e 2e 5c 6e 22 2c 20 66  %d, %p)...\n", f
1eb0: 69 6c 65 6e 61 6d 65 2c 20 66 6c 61 67 73 2c 20  ilename, flags, 
1ec0: 70 70 64 62 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ppdb);..#endif..
1ed0: 0d 0a 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65  ..  ret = sqlite
1ee0: 33 5f 6f 70 65 6e 5f 76 32 28 66 69 6c 65 6e 61  3_open_v2(filena
1ef0: 6d 65 2c 20 70 70 64 62 2c 20 66 6c 61 67 73 2c  me, ppdb, flags,
1f00: 20 4e 55 4c 4c 29 3b 0d 0a 0d 0a 23 69 66 20 64   NULL);....#if d
1f10: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44  efined(INTEROP_D
1f20: 45 42 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f  EBUG) && (INTERO
1f30: 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f  P_DEBUG & INTERO
1f40: 50 5f 44 45 42 55 47 5f 4f 50 45 4e 29 0d 0a 20  P_DEBUG_OPEN).. 
1f50: 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44   sqlite3InteropD
1f60: 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 6f 70  ebug("sqlite3_op
1f70: 65 6e 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73 71  en_interop(): sq
1f80: 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 5c 22  lite3_open_v2(\"
1f90: 25 73 5c 22 2c 20 25 64 2c 20 25 70 29 20 72 65  %s\", %d, %p) re
1fa0: 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 66  turned %d.\n", f
1fb0: 69 6c 65 6e 61 6d 65 2c 20 66 6c 61 67 73 2c 20  ilename, flags, 
1fc0: 70 70 64 62 2c 20 72 65 74 29 3b 0d 0a 23 65 6e  ppdb, ret);..#en
1fd0: 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e  dif....#if defin
1fe0: 65 64 28 49 4e 54 45 52 4f 50 5f 45 58 54 45 4e  ed(INTEROP_EXTEN
1ff0: 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53 29 0d  SION_FUNCTIONS).
2000: 0a 20 20 69 66 20 28 72 65 74 20 3d 3d 20 53 51  .  if (ret == SQ
2010: 4c 49 54 45 5f 4f 4b 29 0d 0a 20 20 20 20 52 65  LITE_OK)..    Re
2020: 67 69 73 74 65 72 45 78 74 65 6e 73 69 6f 6e 46  gisterExtensionF
2030: 75 6e 63 74 69 6f 6e 73 28 2a 70 70 64 62 29 3b  unctions(*ppdb);
2040: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65  ..#endif....  re
2050: 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a 0d 0a  turn ret;..}....
2060: 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57  SQLITE_API int W
2070: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 6f 70  INAPI sqlite3_op
2080: 65 6e 31 36 5f 69 6e 74 65 72 6f 70 28 63 6f 6e  en16_interop(con
2090: 73 74 20 63 68 61 72 20 2a 66 69 6c 65 6e 61 6d  st char *filenam
20a0: 65 2c 20 69 6e 74 20 66 6c 61 67 73 2c 20 73 71  e, int flags, sq
20b0: 6c 69 74 65 33 20 2a 2a 70 70 64 62 29 0d 0a 7b  lite3 **ppdb)..{
20c0: 0d 0a 20 20 69 6e 74 20 72 65 74 3b 0d 0a 0d 0a  ..  int ret;....
20d0: 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45  #if defined(INTE
20e0: 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28 49  ROP_DEBUG) && (I
20f0: 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49  NTEROP_DEBUG & I
2100: 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 4f 50 45  NTEROP_DEBUG_OPE
2110: 4e 31 36 29 0d 0a 20 20 73 71 6c 69 74 65 33 49  N16)..  sqlite3I
2120: 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c  nteropDebug("sql
2130: 69 74 65 33 5f 6f 70 65 6e 31 36 5f 69 6e 74 65  ite3_open16_inte
2140: 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73  rop(): calling s
2150: 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65  qlite3_open_inte
2160: 72 6f 70 28 5c 22 25 73 5c 22 2c 20 25 64 2c 20  rop(\"%s\", %d, 
2170: 25 70 29 2e 2e 2e 5c 6e 22 2c 20 66 69 6c 65 6e  %p)...\n", filen
2180: 61 6d 65 2c 20 66 6c 61 67 73 2c 20 70 70 64 62  ame, flags, ppdb
2190: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
21a0: 72 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70  ret = sqlite3_op
21b0: 65 6e 5f 69 6e 74 65 72 6f 70 28 66 69 6c 65 6e  en_interop(filen
21c0: 61 6d 65 2c 20 66 6c 61 67 73 2c 20 70 70 64 62  ame, flags, ppdb
21d0: 29 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65  );....#if define
21e0: 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29  d(INTEROP_DEBUG)
21f0: 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42   && (INTEROP_DEB
2200: 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42  UG & INTEROP_DEB
2210: 55 47 5f 4f 50 45 4e 31 36 29 0d 0a 20 20 73 71  UG_OPEN16)..  sq
2220: 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75  lite3InteropDebu
2230: 67 28 22 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31  g("sqlite3_open1
2240: 36 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c  6_interop(): sql
2250: 69 74 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f  ite3_open_intero
2260: 70 28 5c 22 25 73 5c 22 2c 20 25 64 2c 20 25 70  p(\"%s\", %d, %p
2270: 29 20 72 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e  ) returned %d.\n
2280: 22 2c 20 66 69 6c 65 6e 61 6d 65 2c 20 66 6c 61  ", filename, fla
2290: 67 73 2c 20 70 70 64 62 2c 20 72 65 74 29 3b 0d  gs, ppdb, ret);.
22a0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 69 66 20  .#endif....  if 
22b0: 28 28 72 65 74 20 3d 3d 20 53 51 4c 49 54 45 5f  ((ret == SQLITE_
22c0: 4f 4b 29 20 26 26 20 21 44 62 48 61 73 50 72 6f  OK) && !DbHasPro
22d0: 70 65 72 74 79 28 2a 70 70 64 62 2c 20 30 2c 20  perty(*ppdb, 0, 
22e0: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29  DB_SchemaLoaded)
22f0: 29 0d 0a 20 20 20 20 45 4e 43 28 2a 70 70 64 62  )..    ENC(*ppdb
2300: 29 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ) = SQLITE_UTF16
2310: 4e 41 54 49 56 45 3b 0d 0a 0d 0a 20 20 72 65 74  NATIVE;....  ret
2320: 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a 0d 0a 53  urn ret;..}....S
2330: 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20  QLITE_API const 
2340: 63 68 61 72 20 2a 20 57 49 4e 41 50 49 20 73 71  char * WINAPI sq
2350: 6c 69 74 65 33 5f 65 72 72 6d 73 67 5f 69 6e 74  lite3_errmsg_int
2360: 65 72 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62  erop(sqlite3 *db
2370: 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d  , int *plen)..{.
2380: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 70  .  const char *p
2390: 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 65 72  val = sqlite3_er
23a0: 72 6d 73 67 28 64 62 29 3b 0d 0a 20 20 2a 70 6c  rmsg(db);..  *pl
23b0: 65 6e 20 3d 20 28 70 76 61 6c 20 21 3d 20 30 29  en = (pval != 0)
23c0: 20 3f 20 73 74 72 6c 65 6e 28 70 76 61 6c 29 20   ? strlen(pval) 
23d0: 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70  : 0;..  return p
23e0: 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  val;..}....SQLIT
23f0: 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41 50 49  E_API int WINAPI
2400: 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73   sqlite3_changes
2410: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
2420: 20 2a 64 62 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20   *db)..{..  int 
2430: 72 65 73 75 6c 74 3b 0d 0a 0d 0a 23 69 66 20 64  result;....#if d
2440: 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44  efined(INTEROP_D
2450: 45 42 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f  EBUG) && (INTERO
2460: 50 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f  P_DEBUG & INTERO
2470: 50 5f 44 45 42 55 47 5f 43 48 41 4e 47 45 53 29  P_DEBUG_CHANGES)
2480: 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72  ..  sqlite3Inter
2490: 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33  opDebug("sqlite3
24a0: 5f 63 68 61 6e 67 65 73 5f 69 6e 74 65 72 6f 70  _changes_interop
24b0: 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69  (): calling sqli
24c0: 74 65 33 5f 63 68 61 6e 67 65 73 28 25 70 29 2e  te3_changes(%p).
24d0: 2e 2e 5c 6e 22 2c 20 64 62 29 3b 0d 0a 23 65 6e  ..\n", db);..#en
24e0: 64 69 66 0d 0a 0d 0a 23 69 66 6e 64 65 66 20 4e  dif....#ifndef N
24f0: 44 45 42 55 47 0d 0a 20 20 69 66 20 28 21 64 62  DEBUG..  if (!db
2500: 29 0d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  )..      sqlite3
2510: 49 6e 74 65 72 6f 70 42 72 65 61 6b 28 22 6e 75  InteropBreak("nu
2520: 6c 6c 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  ll database hand
2530: 6c 65 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 63  le for sqlite3_c
2540: 68 61 6e 67 65 73 28 29 22 29 3b 0d 0a 23 65 6e  hanges()");..#en
2550: 64 69 66 0d 0a 0d 0a 20 20 72 65 73 75 6c 74 20  dif....  result 
2560: 3d 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  = sqlite3_change
2570: 73 28 64 62 29 3b 0d 0a 0d 0a 23 69 66 20 64 65  s(db);....#if de
2580: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45  fined(INTEROP_DE
2590: 42 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50  BUG) && (INTEROP
25a0: 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50  _DEBUG & INTEROP
25b0: 5f 44 45 42 55 47 5f 43 48 41 4e 47 45 53 29 0d  _DEBUG_CHANGES).
25c0: 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f  .  sqlite3Intero
25d0: 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f  pDebug("sqlite3_
25e0: 63 68 61 6e 67 65 73 5f 69 6e 74 65 72 6f 70 28  changes_interop(
25f0: 29 3a 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  ): sqlite3_chang
2600: 65 73 28 25 70 29 20 72 65 74 75 72 6e 65 64 20  es(%p) returned 
2610: 25 64 2e 5c 6e 22 2c 20 64 62 2c 20 72 65 73 75  %d.\n", db, resu
2620: 6c 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  lt);..#endif....
2630: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
2640: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
2650: 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c  I int WINAPI sql
2660: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74  ite3_prepare_int
2670: 65 72 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62  erop(sqlite3 *db
2680: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  , const char *sq
2690: 6c 2c 20 69 6e 74 20 6e 62 79 74 65 73 2c 20 73  l, int nbytes, s
26a0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a 70 70  qlite3_stmt **pp
26b0: 73 74 6d 74 2c 20 63 6f 6e 73 74 20 63 68 61 72  stmt, const char
26c0: 20 2a 2a 70 7a 74 61 69 6c 2c 20 69 6e 74 20 2a   **pztail, int *
26d0: 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20  plen)..{..  int 
26e0: 6e 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65  n;....#if define
26f0: 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 29  d(INTEROP_DEBUG)
2700: 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45 42   && (INTEROP_DEB
2710: 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45 42  UG & INTEROP_DEB
2720: 55 47 5f 50 52 45 50 41 52 45 29 0d 0a 20 20 73  UG_PREPARE)..  s
2730: 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65 62  qlite3InteropDeb
2740: 75 67 28 22 73 71 6c 69 74 65 33 5f 70 72 65 70  ug("sqlite3_prep
2750: 61 72 65 5f 69 6e 74 65 72 6f 70 28 29 3a 20 63  are_interop(): c
2760: 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f 70  alling sqlite3_p
2770: 72 65 70 61 72 65 28 25 70 2c 20 5c 22 25 73 5c  repare(%p, \"%s\
2780: 22 2c 20 25 64 2c 20 25 70 29 2e 2e 2e 5c 6e 22  ", %d, %p)...\n"
2790: 2c 20 64 62 2c 20 73 71 6c 2c 20 6e 62 79 74 65  , db, sql, nbyte
27a0: 73 2c 20 70 70 73 74 6d 74 29 3b 0d 0a 23 65 6e  s, ppstmt);..#en
27b0: 64 69 66 0d 0a 0d 0a 23 69 66 20 53 51 4c 49 54  dif....#if SQLIT
27c0: 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52  E_VERSION_NUMBER
27d0: 20 3e 3d 20 33 30 30 33 30 30 39 0d 0a 20 20 6e   >= 3003009..  n
27e0: 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61   = sqlite3_prepa
27f0: 72 65 5f 76 32 28 64 62 2c 20 73 71 6c 2c 20 6e  re_v2(db, sql, n
2800: 62 79 74 65 73 2c 20 70 70 73 74 6d 74 2c 20 70  bytes, ppstmt, p
2810: 7a 74 61 69 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a  ztail);..#else..
2820: 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 70 72    n = sqlite3_pr
2830: 65 70 61 72 65 28 64 62 2c 20 73 71 6c 2c 20 6e  epare(db, sql, n
2840: 62 79 74 65 73 2c 20 70 70 73 74 6d 74 2c 20 70  bytes, ppstmt, p
2850: 7a 74 61 69 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d  ztail);..#endif.
2860: 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49  ...#if defined(I
2870: 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26  NTEROP_DEBUG) &&
2880: 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20   (INTEROP_DEBUG 
2890: 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f  & INTEROP_DEBUG_
28a0: 50 52 45 50 41 52 45 29 0d 0a 20 20 73 71 6c 69  PREPARE)..  sqli
28b0: 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28  te3InteropDebug(
28c0: 22 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  "sqlite3_prepare
28d0: 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c 69  _interop(): sqli
28e0: 74 65 33 5f 70 72 65 70 61 72 65 28 25 70 2c 20  te3_prepare(%p, 
28f0: 5c 22 25 73 5c 22 2c 20 25 64 2c 20 25 70 29 20  \"%s\", %d, %p) 
2900: 72 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c  returned %d.\n",
2910: 20 64 62 2c 20 73 71 6c 2c 20 6e 62 79 74 65 73   db, sql, nbytes
2920: 2c 20 70 70 73 74 6d 74 2c 20 6e 29 3b 0d 0a 23  , ppstmt, n);..#
2930: 65 6e 64 69 66 0d 0a 0d 0a 20 20 2a 70 6c 65 6e  endif....  *plen
2940: 20 3d 20 28 2a 70 7a 74 61 69 6c 20 21 3d 20 30   = (*pztail != 0
2950: 29 20 3f 20 73 74 72 6c 65 6e 28 2a 70 7a 74 61  ) ? strlen(*pzta
2960: 69 6c 29 20 3a 20 30 3b 0d 0a 0d 0a 20 20 72 65  il) : 0;....  re
2970: 74 75 72 6e 20 6e 3b 0d 0a 7d 0d 0a 0d 0a 53 51  turn n;..}....SQ
2980: 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e  LITE_API int WIN
2990: 41 50 49 20 73 71 6c 69 74 65 33 5f 70 72 65 70  API sqlite3_prep
29a0: 61 72 65 31 36 5f 69 6e 74 65 72 6f 70 28 73 71  are16_interop(sq
29b0: 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74  lite3 *db, const
29c0: 20 76 6f 69 64 20 2a 73 71 6c 2c 20 69 6e 74 20   void *sql, int 
29d0: 6e 63 68 61 72 73 2c 20 73 71 6c 69 74 65 33 5f  nchars, sqlite3_
29e0: 73 74 6d 74 20 2a 2a 70 70 73 74 6d 74 2c 20 63  stmt **ppstmt, c
29f0: 6f 6e 73 74 20 76 6f 69 64 20 2a 2a 70 7a 74 61  onst void **pzta
2a00: 69 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a  il, int *plen)..
2a10: 7b 0d 0a 20 20 69 6e 74 20 6e 3b 0d 0a 0d 0a 23  {..  int n;....#
2a20: 69 66 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52  if defined(INTER
2a30: 4f 50 5f 44 45 42 55 47 29 20 26 26 20 28 49 4e  OP_DEBUG) && (IN
2a40: 54 45 52 4f 50 5f 44 45 42 55 47 20 26 20 49 4e  TEROP_DEBUG & IN
2a50: 54 45 52 4f 50 5f 44 45 42 55 47 5f 50 52 45 50  TEROP_DEBUG_PREP
2a60: 41 52 45 31 36 29 0d 0a 20 20 73 71 6c 69 74 65  ARE16)..  sqlite
2a70: 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73  3InteropDebug("s
2a80: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 69  qlite3_prepare_i
2a90: 6e 74 65 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e  nterop(): callin
2aa0: 67 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  g sqlite3_prepar
2ab0: 65 31 36 28 25 70 2c 20 5c 22 25 73 5c 22 2c 20  e16(%p, \"%s\", 
2ac0: 25 64 2c 20 25 70 29 2e 2e 2e 5c 6e 22 2c 20 64  %d, %p)...\n", d
2ad0: 62 2c 20 73 71 6c 2c 20 6e 63 68 61 72 73 2c 20  b, sql, nchars, 
2ae0: 70 70 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69 66  ppstmt);..#endif
2af0: 0d 0a 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f 56  ....#if SQLITE_V
2b00: 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20 3e 3d  ERSION_NUMBER >=
2b10: 20 33 30 30 33 30 30 39 0d 0a 20 20 6e 20 3d 20   3003009..  n = 
2b20: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31  sqlite3_prepare1
2b30: 36 5f 76 32 28 64 62 2c 20 73 71 6c 2c 20 6e 63  6_v2(db, sql, nc
2b40: 68 61 72 73 20 2a 20 73 69 7a 65 6f 66 28 77 63  hars * sizeof(wc
2b50: 68 61 72 5f 74 29 2c 20 70 70 73 74 6d 74 2c 20  har_t), ppstmt, 
2b60: 70 7a 74 61 69 6c 29 3b 0d 0a 23 65 6c 73 65 0d  pztail);..#else.
2b70: 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 70  .  n = sqlite3_p
2b80: 72 65 70 61 72 65 31 36 28 64 62 2c 20 73 71 6c  repare16(db, sql
2b90: 2c 20 6e 63 68 61 72 73 20 2a 20 73 69 7a 65 6f  , nchars * sizeo
2ba0: 66 28 77 63 68 61 72 5f 74 29 2c 20 70 70 73 74  f(wchar_t), ppst
2bb0: 6d 74 2c 20 70 7a 74 61 69 6c 29 3b 0d 0a 23 65  mt, pztail);..#e
2bc0: 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 64 65 66 69  ndif....#if defi
2bd0: 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55  ned(INTEROP_DEBU
2be0: 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44  G) && (INTEROP_D
2bf0: 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44  EBUG & INTEROP_D
2c00: 45 42 55 47 5f 50 52 45 50 41 52 45 31 36 29 0d  EBUG_PREPARE16).
2c10: 0a 20 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f  .  sqlite3Intero
2c20: 70 44 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f  pDebug("sqlite3_
2c30: 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70 28  prepare_interop(
2c40: 29 3a 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  ): sqlite3_prepa
2c50: 72 65 31 36 28 25 70 2c 20 5c 22 25 73 5c 22 2c  re16(%p, \"%s\",
2c60: 20 25 64 2c 20 25 70 29 20 72 65 74 75 72 6e 65   %d, %p) returne
2c70: 64 20 25 64 2e 5c 6e 22 2c 20 64 62 2c 20 73 71  d %d.\n", db, sq
2c80: 6c 2c 20 6e 63 68 61 72 73 2c 20 70 70 73 74 6d  l, nchars, ppstm
2c90: 74 2c 20 6e 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  t, n);..#endif..
2ca0: 0d 0a 20 20 2a 70 6c 65 6e 20 3d 20 28 2a 70 7a  ..  *plen = (*pz
2cb0: 74 61 69 6c 20 21 3d 20 30 29 20 3f 20 77 63 73  tail != 0) ? wcs
2cc0: 6c 65 6e 28 28 77 63 68 61 72 5f 74 20 2a 29 2a  len((wchar_t *)*
2cd0: 70 7a 74 61 69 6c 29 20 2a 20 73 69 7a 65 6f 66  pztail) * sizeof
2ce0: 28 77 63 68 61 72 5f 74 29 20 3a 20 30 3b 0d 0a  (wchar_t) : 0;..
2cf0: 0d 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 7d  ..  return n;..}
2d00: 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28  ....#if defined(
2d10: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
2d20: 54 41 42 4c 45 29 20 26 26 20 53 51 4c 49 54 45  TABLE) && SQLITE
2d30: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 20  _VERSION_NUMBER 
2d40: 3e 3d 20 33 30 30 34 30 30 31 0d 0a 53 51 4c 49  >= 3004001..SQLI
2d50: 54 45 5f 41 50 49 20 76 6f 69 64 20 2a 57 49 4e  TE_API void *WIN
2d60: 41 50 49 20 73 71 6c 69 74 65 33 5f 63 72 65 61  API sqlite3_crea
2d70: 74 65 5f 64 69 73 70 6f 73 61 62 6c 65 5f 6d 6f  te_disposable_mo
2d80: 64 75 6c 65 5f 69 6e 74 65 72 6f 70 28 0d 0a 20  dule_interop(.. 
2d90: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0d 0a 20   sqlite3 *db,.. 
2da0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
2db0: 6d 65 2c 0d 0a 20 20 73 71 6c 69 74 65 33 5f 6d  me,..  sqlite3_m
2dc0: 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 2c 0d  odule *pModule,.
2dd0: 0a 20 20 69 6e 74 20 69 56 65 72 73 69 6f 6e 2c  .  int iVersion,
2de0: 0d 0a 20 20 69 6e 74 20 28 2a 78 43 72 65 61 74  ..  int (*xCreat
2df0: 65 29 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  e)(sqlite3*, voi
2e00: 64 20 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  d *, int, const 
2e10: 63 68 61 72 20 2a 63 6f 6e 73 74 2a 2c 20 73 71  char *const*, sq
2e20: 6c 69 74 65 33 5f 76 74 61 62 20 2a 2a 2c 20 63  lite3_vtab **, c
2e30: 68 61 72 2a 2a 29 2c 0d 0a 20 20 69 6e 74 20 28  har**),..  int (
2e40: 2a 78 43 6f 6e 6e 65 63 74 29 28 73 71 6c 69 74  *xConnect)(sqlit
2e50: 65 33 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74  e3*, void *, int
2e60: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f  , const char *co
2e70: 6e 73 74 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74  nst*, sqlite3_vt
2e80: 61 62 20 2a 2a 2c 20 63 68 61 72 2a 2a 29 2c 0d  ab **, char**),.
2e90: 0a 20 20 69 6e 74 20 28 2a 78 42 65 73 74 49 6e  .  int (*xBestIn
2ea0: 64 65 78 29 28 73 71 6c 69 74 65 33 5f 76 74 61  dex)(sqlite3_vta
2eb0: 62 20 2a 2c 20 73 71 6c 69 74 65 33 5f 69 6e 64  b *, sqlite3_ind
2ec0: 65 78 5f 69 6e 66 6f 2a 29 2c 0d 0a 20 20 69 6e  ex_info*),..  in
2ed0: 74 20 28 2a 78 44 69 73 63 6f 6e 6e 65 63 74 29  t (*xDisconnect)
2ee0: 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 29  (sqlite3_vtab *)
2ef0: 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 44 65 73 74  ,..  int (*xDest
2f00: 72 6f 79 29 28 73 71 6c 69 74 65 33 5f 76 74 61  roy)(sqlite3_vta
2f10: 62 20 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78  b *),..  int (*x
2f20: 4f 70 65 6e 29 28 73 71 6c 69 74 65 33 5f 76 74  Open)(sqlite3_vt
2f30: 61 62 20 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74  ab *, sqlite3_vt
2f40: 61 62 5f 63 75 72 73 6f 72 20 2a 2a 29 2c 0d 0a  ab_cursor **),..
2f50: 20 20 69 6e 74 20 28 2a 78 43 6c 6f 73 65 29 28    int (*xClose)(
2f60: 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
2f70: 73 6f 72 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a  sor*),..  int (*
2f80: 78 46 69 6c 74 65 72 29 28 73 71 6c 69 74 65 33  xFilter)(sqlite3
2f90: 5f 76 74 61 62 5f 63 75 72 73 6f 72 2a 2c 20 69  _vtab_cursor*, i
2fa0: 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
2fb0: 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76  , int, sqlite3_v
2fc0: 61 6c 75 65 20 2a 2a 29 2c 0d 0a 20 20 69 6e 74  alue **),..  int
2fd0: 20 28 2a 78 4e 65 78 74 29 28 73 71 6c 69 74 65   (*xNext)(sqlite
2fe0: 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 2a 29 2c  3_vtab_cursor*),
2ff0: 0d 0a 20 20 69 6e 74 20 28 2a 78 45 6f 66 29 28  ..  int (*xEof)(
3000: 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
3010: 73 6f 72 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a  sor*),..  int (*
3020: 78 43 6f 6c 75 6d 6e 29 28 73 71 6c 69 74 65 33  xColumn)(sqlite3
3030: 5f 76 74 61 62 5f 63 75 72 73 6f 72 2a 2c 20 73  _vtab_cursor*, s
3040: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
3050: 20 69 6e 74 29 2c 0d 0a 20 20 69 6e 74 20 28 2a   int),..  int (*
3060: 78 52 6f 77 69 64 29 28 73 71 6c 69 74 65 33 5f  xRowid)(sqlite3_
3070: 76 74 61 62 5f 63 75 72 73 6f 72 2a 2c 20 73 71  vtab_cursor*, sq
3080: 6c 69 74 65 33 5f 69 6e 74 36 34 20 2a 29 2c 0d  lite3_int64 *),.
3090: 0a 20 20 69 6e 74 20 28 2a 78 55 70 64 61 74 65  .  int (*xUpdate
30a0: 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a  )(sqlite3_vtab *
30b0: 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76  , int, sqlite3_v
30c0: 61 6c 75 65 20 2a 2a 2c 20 73 71 6c 69 74 65 33  alue **, sqlite3
30d0: 5f 69 6e 74 36 34 20 2a 29 2c 0d 0a 20 20 69 6e  _int64 *),..  in
30e0: 74 20 28 2a 78 42 65 67 69 6e 29 28 73 71 6c 69  t (*xBegin)(sqli
30f0: 74 65 33 5f 76 74 61 62 20 2a 29 2c 0d 0a 20 20  te3_vtab *),..  
3100: 69 6e 74 20 28 2a 78 53 79 6e 63 29 28 73 71 6c  int (*xSync)(sql
3110: 69 74 65 33 5f 76 74 61 62 20 2a 29 2c 0d 0a 20  ite3_vtab *),.. 
3120: 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 29 28   int (*xCommit)(
3130: 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 29 2c  sqlite3_vtab *),
3140: 0d 0a 20 20 69 6e 74 20 28 2a 78 52 6f 6c 6c 62  ..  int (*xRollb
3150: 61 63 6b 29 28 73 71 6c 69 74 65 33 5f 76 74 61  ack)(sqlite3_vta
3160: 62 20 2a 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78  b *),..  int (*x
3170: 46 69 6e 64 46 75 6e 63 74 69 6f 6e 29 28 73 71  FindFunction)(sq
3180: 6c 69 74 65 33 5f 76 74 61 62 20 2a 2c 20 69 6e  lite3_vtab *, in
3190: 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  t, const char *,
31a0: 20 76 6f 69 64 20 28 2a 2a 70 78 46 75 6e 63 29   void (**pxFunc)
31b0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
31c0: 2a 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f  *, int, sqlite3_
31d0: 76 61 6c 75 65 2a 2a 29 2c 20 76 6f 69 64 20 2a  value**), void *
31e0: 2a 70 70 41 72 67 29 2c 0d 0a 20 20 69 6e 74 20  *ppArg),..  int 
31f0: 28 2a 78 52 65 6e 61 6d 65 29 28 73 71 6c 69 74  (*xRename)(sqlit
3200: 65 33 5f 76 74 61 62 20 2a 2c 20 63 6f 6e 73 74  e3_vtab *, const
3210: 20 63 68 61 72 20 2a 29 2c 0d 0a 20 20 69 6e 74   char *),..  int
3220: 20 28 2a 78 53 61 76 65 70 6f 69 6e 74 29 28 73   (*xSavepoint)(s
3230: 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 2c 20 69  qlite3_vtab *, i
3240: 6e 74 29 2c 0d 0a 20 20 69 6e 74 20 28 2a 78 52  nt),..  int (*xR
3250: 65 6c 65 61 73 65 29 28 73 71 6c 69 74 65 33 5f  elease)(sqlite3_
3260: 76 74 61 62 20 2a 2c 20 69 6e 74 29 2c 0d 0a 20  vtab *, int),.. 
3270: 20 69 6e 74 20 28 2a 78 52 6f 6c 6c 62 61 63 6b   int (*xRollback
3280: 54 6f 29 28 73 71 6c 69 74 65 33 5f 76 74 61 62  To)(sqlite3_vtab
3290: 20 2a 2c 20 69 6e 74 29 2c 0d 0a 20 20 76 6f 69   *, int),..  voi
32a0: 64 20 2a 70 43 6c 69 65 6e 74 44 61 74 61 2c 0d  d *pClientData,.
32b0: 0a 20 20 76 6f 69 64 28 2a 78 44 65 73 74 72 6f  .  void(*xDestro
32c0: 79 4d 6f 64 75 6c 65 29 28 76 6f 69 64 2a 29 0d  yModule)(void*).
32d0: 0a 29 7b 0d 0a 20 20 6d 65 6d 73 65 74 28 70 4d  .){..  memset(pM
32e0: 6f 64 75 6c 65 2c 20 30 2c 20 73 69 7a 65 6f 66  odule, 0, sizeof
32f0: 28 2a 70 4d 6f 64 75 6c 65 29 29 3b 0d 0a 20 20  (*pModule));..  
3300: 70 4d 6f 64 75 6c 65 2d 3e 69 56 65 72 73 69 6f  pModule->iVersio
3310: 6e 20 3d 20 69 56 65 72 73 69 6f 6e 3b 0d 0a 20  n = iVersion;.. 
3320: 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 72 65 61 74   pModule->xCreat
3330: 65 20 3d 20 78 43 72 65 61 74 65 3b 0d 0a 20 20  e = xCreate;..  
3340: 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6e 6e 65 63  pModule->xConnec
3350: 74 20 3d 20 78 43 6f 6e 6e 65 63 74 3b 0d 0a 20  t = xConnect;.. 
3360: 20 70 4d 6f 64 75 6c 65 2d 3e 78 42 65 73 74 49   pModule->xBestI
3370: 6e 64 65 78 20 3d 20 78 42 65 73 74 49 6e 64 65  ndex = xBestInde
3380: 78 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78  x;..  pModule->x
3390: 44 69 73 63 6f 6e 6e 65 63 74 20 3d 20 78 44 69  Disconnect = xDi
33a0: 73 63 6f 6e 6e 65 63 74 3b 0d 0a 20 20 70 4d 6f  sconnect;..  pMo
33b0: 64 75 6c 65 2d 3e 78 44 65 73 74 72 6f 79 20 3d  dule->xDestroy =
33c0: 20 78 44 65 73 74 72 6f 79 3b 0d 0a 20 20 70 4d   xDestroy;..  pM
33d0: 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 20 3d 20 78  odule->xOpen = x
33e0: 4f 70 65 6e 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65  Open;..  pModule
33f0: 2d 3e 78 43 6c 6f 73 65 20 3d 20 78 43 6c 6f 73  ->xClose = xClos
3400: 65 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78  e;..  pModule->x
3410: 46 69 6c 74 65 72 20 3d 20 78 46 69 6c 74 65 72  Filter = xFilter
3420: 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e  ;..  pModule->xN
3430: 65 78 74 20 3d 20 78 4e 65 78 74 3b 0d 0a 20 20  ext = xNext;..  
3440: 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 20 3d 20  pModule->xEof = 
3450: 78 45 6f 66 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65  xEof;..  pModule
3460: 2d 3e 78 43 6f 6c 75 6d 6e 20 3d 20 78 43 6f 6c  ->xColumn = xCol
3470: 75 6d 6e 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d  umn;..  pModule-
3480: 3e 78 52 6f 77 69 64 20 3d 20 78 52 6f 77 69 64  >xRowid = xRowid
3490: 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 55  ;..  pModule->xU
34a0: 70 64 61 74 65 20 3d 20 78 55 70 64 61 74 65 3b  pdate = xUpdate;
34b0: 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 42 65  ..  pModule->xBe
34c0: 67 69 6e 20 3d 20 78 42 65 67 69 6e 3b 0d 0a 20  gin = xBegin;.. 
34d0: 20 70 4d 6f 64 75 6c 65 2d 3e 78 53 79 6e 63 20   pModule->xSync 
34e0: 3d 20 78 53 79 6e 63 3b 0d 0a 20 20 70 4d 6f 64  = xSync;..  pMod
34f0: 75 6c 65 2d 3e 78 43 6f 6d 6d 69 74 20 3d 20 78  ule->xCommit = x
3500: 43 6f 6d 6d 69 74 3b 0d 0a 20 20 70 4d 6f 64 75  Commit;..  pModu
3510: 6c 65 2d 3e 78 52 6f 6c 6c 62 61 63 6b 20 3d 20  le->xRollback = 
3520: 78 52 6f 6c 6c 62 61 63 6b 3b 0d 0a 20 20 70 4d  xRollback;..  pM
3530: 6f 64 75 6c 65 2d 3e 78 46 69 6e 64 46 75 6e 63  odule->xFindFunc
3540: 74 69 6f 6e 20 3d 20 78 46 69 6e 64 46 75 6e 63  tion = xFindFunc
3550: 74 69 6f 6e 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65  tion;..  pModule
3560: 2d 3e 78 52 65 6e 61 6d 65 20 3d 20 78 52 65 6e  ->xRename = xRen
3570: 61 6d 65 3b 0d 0a 20 20 70 4d 6f 64 75 6c 65 2d  ame;..  pModule-
3580: 3e 78 53 61 76 65 70 6f 69 6e 74 20 3d 20 78 53  >xSavepoint = xS
3590: 61 76 65 70 6f 69 6e 74 3b 0d 0a 20 20 70 4d 6f  avepoint;..  pMo
35a0: 64 75 6c 65 2d 3e 78 52 65 6c 65 61 73 65 20 3d  dule->xRelease =
35b0: 20 78 52 65 6c 65 61 73 65 3b 0d 0a 20 20 70 4d   xRelease;..  pM
35c0: 6f 64 75 6c 65 2d 3e 78 52 6f 6c 6c 62 61 63 6b  odule->xRollback
35d0: 54 6f 20 3d 20 78 52 6f 6c 6c 62 61 63 6b 54 6f  To = xRollbackTo
35e0: 3b 0d 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  ;..  return sqli
35f0: 74 65 33 5f 63 72 65 61 74 65 5f 64 69 73 70 6f  te3_create_dispo
3600: 73 61 62 6c 65 5f 6d 6f 64 75 6c 65 28 64 62 2c  sable_module(db,
3610: 20 7a 4e 61 6d 65 2c 20 70 4d 6f 64 75 6c 65 2c   zName, pModule,
3620: 20 70 43 6c 69 65 6e 74 44 61 74 61 2c 20 78 44   pClientData, xD
3630: 65 73 74 72 6f 79 4d 6f 64 75 6c 65 29 3b 0d 0a  estroyModule);..
3640: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 53 51 4c  }..#endif....SQL
3650: 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e 41  ITE_API int WINA
3660: 50 49 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  PI sqlite3_bind_
3670: 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73  double_interop(s
3680: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d  qlite3_stmt *stm
3690: 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 64 6f 75  t, int iCol, dou
36a0: 62 6c 65 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 09 72  ble *val)..{...r
36b0: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 62 69  eturn sqlite3_bi
36c0: 6e 64 5f 64 6f 75 62 6c 65 28 73 74 6d 74 2c 69  nd_double(stmt,i
36d0: 43 6f 6c 2c 2a 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d  Col,*val);..}...
36e0: 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20  .SQLITE_API int 
36f0: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 62  WINAPI sqlite3_b
3700: 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f  ind_int64_intero
3710: 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  p(sqlite3_stmt *
3720: 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20  stmt, int iCol, 
3730: 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a 76 61  sqlite_int64 *va
3740: 6c 29 0d 0a 7b 0d 0a 09 72 65 74 75 72 6e 20 73  l)..{...return s
3750: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
3760: 34 28 73 74 6d 74 2c 69 43 6f 6c 2c 2a 76 61 6c  4(stmt,iCol,*val
3770: 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f  );..}....SQLITE_
3780: 41 50 49 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  API const char *
3790: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
37a0: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
37b0: 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  ame_interop(sqli
37c0: 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20  te3_stmt *stmt, 
37d0: 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70  int iCol, int *p
37e0: 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74  len)..{..  const
37f0: 20 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73 71   char *pval = sq
3800: 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
3810: 65 74 65 72 5f 6e 61 6d 65 28 73 74 6d 74 2c 20  eter_name(stmt, 
3820: 69 43 6f 6c 29 3b 0d 0a 20 20 2a 70 6c 65 6e 20  iCol);..  *plen 
3830: 3d 20 28 70 76 61 6c 20 21 3d 20 30 29 20 3f 20  = (pval != 0) ? 
3840: 73 74 72 6c 65 6e 28 70 76 61 6c 29 20 3a 20 30  strlen(pval) : 0
3850: 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c  ;..  return pval
3860: 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  ;..}....SQLITE_A
3870: 50 49 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20  PI const char * 
3880: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63  WINAPI sqlite3_c
3890: 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72  olumn_name_inter
38a0: 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  op(sqlite3_stmt 
38b0: 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c  *stmt, int iCol,
38c0: 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a   int *plen)..{..
38d0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 76    const char *pv
38e0: 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  al = sqlite3_col
38f0: 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2c 20 69  umn_name(stmt, i
3900: 43 6f 6c 29 3b 0d 0a 20 20 2a 70 6c 65 6e 20 3d  Col);..  *plen =
3910: 20 28 70 76 61 6c 20 21 3d 20 30 29 20 3f 20 73   (pval != 0) ? s
3920: 74 72 6c 65 6e 28 70 76 61 6c 29 20 3a 20 30 3b  trlen(pval) : 0;
3930: 0d 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b  ..  return pval;
3940: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
3950: 49 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 20 57  I const void * W
3960: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f  INAPI sqlite3_co
3970: 6c 75 6d 6e 5f 6e 61 6d 65 31 36 5f 69 6e 74 65  lumn_name16_inte
3980: 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  rop(sqlite3_stmt
3990: 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c   *stmt, int iCol
39a0: 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d  , int *plen)..{.
39b0: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  .  const void *p
39c0: 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  val = sqlite3_co
39d0: 6c 75 6d 6e 5f 6e 61 6d 65 31 36 28 73 74 6d 74  lumn_name16(stmt
39e0: 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 2a 70 6c 65  , iCol);..  *ple
39f0: 6e 20 3d 20 28 70 76 61 6c 20 21 3d 20 30 29 20  n = (pval != 0) 
3a00: 3f 20 77 63 73 6c 65 6e 28 28 77 63 68 61 72 5f  ? wcslen((wchar_
3a10: 74 20 2a 29 70 76 61 6c 29 20 2a 20 73 69 7a 65  t *)pval) * size
3a20: 6f 66 28 77 63 68 61 72 5f 74 29 20 3a 20 30 3b  of(wchar_t) : 0;
3a30: 0d 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b  ..  return pval;
3a40: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50  ..}....SQLITE_AP
3a50: 49 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 57  I const char * W
3a60: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f  INAPI sqlite3_co
3a70: 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 5f 69 6e  lumn_decltype_in
3a80: 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74  terop(sqlite3_st
3a90: 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43  mt *stmt, int iC
3aa0: 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a  ol, int *plen)..
3ab0: 7b 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  {..  const char 
3ac0: 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f  *pval = sqlite3_
3ad0: 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 28  column_decltype(
3ae0: 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20  stmt, iCol);..  
3af0: 2a 70 6c 65 6e 20 3d 20 28 70 76 61 6c 20 21 3d  *plen = (pval !=
3b00: 20 30 29 20 3f 20 73 74 72 6c 65 6e 28 70 76 61   0) ? strlen(pva
3b10: 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72  l) : 0;..  retur
3b20: 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51  n pval;..}....SQ
3b30: 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 76  LITE_API const v
3b40: 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71 6c  oid * WINAPI sql
3b50: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
3b60: 74 79 70 65 31 36 5f 69 6e 74 65 72 6f 70 28 73  type16_interop(s
3b70: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d  qlite3_stmt *stm
3b80: 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74  t, int iCol, int
3b90: 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f   *plen)..{..  co
3ba0: 6e 73 74 20 76 6f 69 64 20 2a 70 76 61 6c 20 3d  nst void *pval =
3bb0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
3bc0: 64 65 63 6c 74 79 70 65 31 36 28 73 74 6d 74 2c  decltype16(stmt,
3bd0: 20 69 43 6f 6c 29 3b 0d 0a 20 20 2a 70 6c 65 6e   iCol);..  *plen
3be0: 20 3d 20 28 70 76 61 6c 20 21 3d 20 30 29 20 3f   = (pval != 0) ?
3bf0: 20 77 63 73 6c 65 6e 28 28 77 63 68 61 72 5f 74   wcslen((wchar_t
3c00: 20 2a 29 70 76 61 6c 29 20 2a 20 73 69 7a 65 6f   *)pval) * sizeo
3c10: 66 28 77 63 68 61 72 5f 74 29 20 3a 20 30 3b 0d  f(wchar_t) : 0;.
3c20: 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d  .  return pval;.
3c30: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
3c40: 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c   void WINAPI sql
3c50: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62  ite3_column_doub
3c60: 6c 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  le_interop(sqlit
3c70: 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69  e3_stmt *stmt, i
3c80: 6e 74 20 69 43 6f 6c 2c 20 64 6f 75 62 6c 65 20  nt iCol, double 
3c90: 2a 76 61 6c 29 0d 0a 7b 0d 0a 09 2a 76 61 6c 20  *val)..{...*val 
3ca0: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
3cb0: 5f 64 6f 75 62 6c 65 28 73 74 6d 74 2c 69 43 6f  _double(stmt,iCo
3cc0: 6c 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45  l);..}....SQLITE
3cd0: 5f 41 50 49 20 76 6f 69 64 20 57 49 4e 41 50 49  _API void WINAPI
3ce0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
3cf0: 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 73 71  int64_interop(sq
3d00: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74  lite3_stmt *stmt
3d10: 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 73 71 6c 69  , int iCol, sqli
3d20: 74 65 5f 69 6e 74 36 34 20 2a 76 61 6c 29 0d 0a  te_int64 *val)..
3d30: 7b 0d 0a 09 2a 76 61 6c 20 3d 20 73 71 6c 69 74  {...*val = sqlit
3d40: 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28  e3_column_int64(
3d50: 73 74 6d 74 2c 69 43 6f 6c 29 3b 0d 0a 7d 0d 0a  stmt,iCol);..}..
3d60: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69  ..SQLITE_API voi
3d70: 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  d WINAPI sqlite3
3d80: 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
3d90: 69 64 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  id_interop(sqlit
3da0: 65 33 20 2a 64 62 2c 20 73 71 6c 69 74 65 5f 69  e3 *db, sqlite_i
3db0: 6e 74 36 34 20 2a 72 6f 77 49 64 29 0d 0a 7b 0d  nt64 *rowId)..{.
3dc0: 0a 09 2a 72 6f 77 49 64 20 3d 20 73 71 6c 69 74  ..*rowId = sqlit
3dd0: 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
3de0: 6f 77 69 64 28 64 62 29 3b 0d 0a 7d 0d 0a 0d 0a  owid(db);..}....
3df0: 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69 64 20  SQLITE_API void 
3e00: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 6d  WINAPI sqlite3_m
3e10: 65 6d 6f 72 79 5f 75 73 65 64 5f 69 6e 74 65 72  emory_used_inter
3e20: 6f 70 28 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  op(sqlite_int64 
3e30: 2a 6e 42 79 74 65 73 29 0d 0a 7b 0d 0a 09 2a 6e  *nBytes)..{...*n
3e40: 42 79 74 65 73 20 3d 20 73 71 6c 69 74 65 33 5f  Bytes = sqlite3_
3e50: 6d 65 6d 6f 72 79 5f 75 73 65 64 28 29 3b 0d 0a  memory_used();..
3e60: 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20  }....SQLITE_API 
3e70: 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69  void WINAPI sqli
3e80: 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77  te3_memory_highw
3e90: 61 74 65 72 5f 69 6e 74 65 72 6f 70 28 69 6e 74  ater_interop(int
3ea0: 20 72 65 73 65 74 46 6c 61 67 2c 20 73 71 6c 69   resetFlag, sqli
3eb0: 74 65 5f 69 6e 74 36 34 20 2a 6e 42 79 74 65 73  te_int64 *nBytes
3ec0: 29 0d 0a 7b 0d 0a 09 2a 6e 42 79 74 65 73 20 3d  )..{...*nBytes =
3ed0: 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f   sqlite3_memory_
3ee0: 68 69 67 68 77 61 74 65 72 28 72 65 73 65 74 46  highwater(resetF
3ef0: 6c 61 67 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49  lag);..}....SQLI
3f00: 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 75 6e 73  TE_API const uns
3f10: 69 67 6e 65 64 20 63 68 61 72 20 2a 20 57 49 4e  igned char * WIN
3f20: 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  API sqlite3_colu
3f30: 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28  mn_text_interop(
3f40: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74  sqlite3_stmt *st
3f50: 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e  mt, int iCol, in
3f60: 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63  t *plen)..{..  c
3f70: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
3f80: 61 72 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74  ar *pval = sqlit
3f90: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73  e3_column_text(s
3fa0: 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 2a  tmt, iCol);..  *
3fb0: 70 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63  plen = sqlite3_c
3fc0: 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74  olumn_bytes(stmt
3fd0: 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 72 65 74 75  , iCol);..  retu
3fe0: 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53  rn pval;..}....S
3ff0: 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20  QLITE_API const 
4000: 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71  void * WINAPI sq
4010: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
4020: 74 31 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  t16_interop(sqli
4030: 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20  te3_stmt *stmt, 
4040: 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70  int iCol, int *p
4050: 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74  len)..{..  const
4060: 20 76 6f 69 64 20 2a 70 76 61 6c 20 3d 20 73 71   void *pval = sq
4070: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
4080: 74 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b  t16(stmt, iCol);
4090: 0d 0a 20 20 2a 70 6c 65 6e 20 3d 20 73 71 6c 69  ..  *plen = sqli
40a0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
40b0: 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d  16(stmt, iCol);.
40c0: 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d  .  return pval;.
40d0: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
40e0: 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69   int WINAPI sqli
40f0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 5f 69 6e 74  te3_finalize_int
4100: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
4110: 74 20 2a 73 74 6d 74 29 0d 0a 7b 0d 0a 20 20 69  t *stmt)..{..  i
4120: 6e 74 20 72 65 74 3b 0d 0a 23 69 66 20 21 64 65  nt ret;..#if !de
4130: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 4c 45  fined(INTEROP_LE
4140: 47 41 43 59 5f 43 4c 4f 53 45 29 20 26 26 20 53  GACY_CLOSE) && S
4150: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
4160: 4d 42 45 52 20 3e 3d 20 33 30 30 37 30 31 34 0d  MBER >= 3007014.
4170: 0a 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49  ...#if defined(I
4180: 4e 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26  NTEROP_DEBUG) &&
4190: 20 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20   (INTEROP_DEBUG 
41a0: 26 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f  & INTEROP_DEBUG_
41b0: 46 49 4e 41 4c 49 5a 45 29 0d 0a 20 20 56 64 62  FINALIZE)..  Vdb
41c0: 65 20 2a 70 20 3d 20 28 56 64 62 65 20 2a 29 73  e *p = (Vdbe *)s
41d0: 74 6d 74 3b 0d 0a 20 20 73 71 6c 69 74 65 33 20  tmt;..  sqlite3 
41e0: 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 0d 0a 20 20  *db = p->db;..  
41f0: 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44 65  sqlite3InteropDe
4200: 62 75 67 28 22 73 71 6c 69 74 65 33 5f 66 69 6e  bug("sqlite3_fin
4210: 61 6c 69 7a 65 5f 69 6e 74 65 72 6f 70 28 29 3a  alize_interop():
4220: 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33   calling sqlite3
4230: 5f 66 69 6e 61 6c 69 7a 65 28 25 70 2c 20 25 70  _finalize(%p, %p
4240: 29 2e 2e 2e 5c 6e 22 2c 20 64 62 2c 20 73 74 6d  )...\n", db, stm
4250: 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20  t);..#endif.... 
4260: 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 66   ret = sqlite3_f
4270: 69 6e 61 6c 69 7a 65 28 73 74 6d 74 29 3b 0d 0a  inalize(stmt);..
4280: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
4290: 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20  TEROP_DEBUG) && 
42a0: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26  (INTEROP_DEBUG &
42b0: 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 46   INTEROP_DEBUG_F
42c0: 49 4e 41 4c 49 5a 45 29 0d 0a 20 20 73 71 6c 69  INALIZE)..  sqli
42d0: 74 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28  te3InteropDebug(
42e0: 22 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a  "sqlite3_finaliz
42f0: 65 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c  e_interop(): sql
4300: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 25 70  ite3_finalize(%p
4310: 2c 20 25 70 29 20 72 65 74 75 72 6e 65 64 20 25  , %p) returned %
4320: 64 2e 5c 6e 22 2c 20 64 62 2c 20 73 74 6d 74 2c  d.\n", db, stmt,
4330: 20 72 65 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a   ret);..#endif..
4340: 0d 0a 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0d  ..  return ret;.
4350: 0a 23 65 6c 73 65 0d 0a 20 20 56 64 62 65 20 2a  .#else..  Vdbe *
4360: 70 3b 0d 0a 20 20 72 65 74 20 3d 20 53 51 4c 49  p;..  ret = SQLI
4370: 54 45 5f 4f 4b 3b 0d 0a 0d 0a 20 20 70 20 3d 20  TE_OK;....  p = 
4380: 28 56 64 62 65 20 2a 29 73 74 6d 74 3b 0d 0a 20  (Vdbe *)stmt;.. 
4390: 20 69 66 20 28 70 29 0d 0a 20 20 7b 0d 0a 20 20   if (p)..  {..  
43a0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20    sqlite3 *db = 
43b0: 70 2d 3e 64 62 3b 0d 0a 0d 0a 20 20 20 20 69 66  p->db;....    if
43c0: 20 28 64 62 20 21 3d 20 4e 55 4c 4c 29 0d 0a 20   (db != NULL).. 
43d0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74       sqlite3_mut
43e0: 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74  ex_enter(db->mut
43f0: 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 69 66 20 28  ex);....    if (
4400: 28 70 2d 3e 6d 61 67 69 63 20 3d 3d 20 56 44 42  (p->magic == VDB
4410: 45 5f 4d 41 47 49 43 5f 44 45 41 44 29 20 26 26  E_MAGIC_DEAD) &&
4420: 20 28 64 62 20 3d 3d 20 4e 55 4c 4c 29 29 0d 0a   (db == NULL))..
4430: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 73 71 6c      {..      sql
4440: 69 74 65 33 44 62 46 72 65 65 5f 69 6e 74 65 72  ite3DbFree_inter
4450: 6f 70 28 64 62 2c 20 70 29 3b 0d 0a 20 20 20 20  op(db, p);..    
4460: 7d 0d 0a 20 20 20 20 65 6c 73 65 0d 0a 20 20 20  }..    else..   
4470: 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 20 3d 20   {..      ret = 
4480: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
4490: 28 73 74 6d 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a  (stmt);..    }..
44a0: 0d 0a 20 20 20 20 69 66 20 28 64 62 20 21 3d 20  ..    if (db != 
44b0: 4e 55 4c 4c 29 0d 0a 20 20 20 20 20 20 73 71 6c  NULL)..      sql
44c0: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
44d0: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 20 20  (db->mutex);..  
44e0: 7d 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 72 65  }....  return re
44f0: 74 3b 0d 0a 23 65 6e 64 69 66 0d 0a 7d 0d 0a 0d  t;..#endif..}...
4500: 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20  .SQLITE_API int 
4510: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 62  WINAPI sqlite3_b
4520: 61 63 6b 75 70 5f 66 69 6e 69 73 68 5f 69 6e 74  ackup_finish_int
4530: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 62 61 63  erop(sqlite3_bac
4540: 6b 75 70 20 2a 70 29 0d 0a 7b 0d 0a 20 20 69 6e  kup *p)..{..  in
4550: 74 20 72 65 74 3b 0d 0a 0d 0a 23 69 66 20 64 65  t ret;....#if de
4560: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45  fined(INTEROP_DE
4570: 42 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50  BUG) && (INTEROP
4580: 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50  _DEBUG & INTEROP
4590: 5f 44 45 42 55 47 5f 42 41 43 4b 55 50 5f 46 49  _DEBUG_BACKUP_FI
45a0: 4e 49 53 48 29 0d 0a 20 20 73 71 6c 69 74 65 33  NISH)..  sqlite3
45b0: 2a 20 70 44 65 73 74 44 62 20 3d 20 70 2d 3e 70  * pDestDb = p->p
45c0: 44 65 73 74 44 62 3b 0d 0a 20 20 73 71 6c 69 74  DestDb;..  sqlit
45d0: 65 33 2a 20 70 53 72 63 44 62 20 3d 20 70 2d 3e  e3* pSrcDb = p->
45e0: 70 53 72 63 44 62 3b 0d 0a 20 20 73 71 6c 69 74  pSrcDb;..  sqlit
45f0: 65 33 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22  e3InteropDebug("
4600: 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66  sqlite3_backup_f
4610: 69 6e 69 73 68 5f 69 6e 74 65 72 6f 70 28 29 3a  inish_interop():
4620: 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33   calling sqlite3
4630: 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28 25  _backup_finish(%
4640: 70 2c 20 25 70 2c 20 25 70 29 2e 2e 2e 5c 6e 22  p, %p, %p)...\n"
4650: 2c 20 70 44 65 73 74 44 62 2c 20 70 53 72 63 44  , pDestDb, pSrcD
4660: 62 2c 20 70 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  b, p);..#endif..
4670: 0d 0a 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65  ..  ret = sqlite
4680: 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28  3_backup_finish(
4690: 70 29 3b 0d 0a 0d 0a 23 69 66 20 64 65 66 69 6e  p);....#if defin
46a0: 65 64 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  ed(INTEROP_DEBUG
46b0: 29 20 26 26 20 28 49 4e 54 45 52 4f 50 5f 44 45  ) && (INTEROP_DE
46c0: 42 55 47 20 26 20 49 4e 54 45 52 4f 50 5f 44 45  BUG & INTEROP_DE
46d0: 42 55 47 5f 42 41 43 4b 55 50 5f 46 49 4e 49 53  BUG_BACKUP_FINIS
46e0: 48 29 0d 0a 20 20 73 71 6c 69 74 65 33 49 6e 74  H)..  sqlite3Int
46f0: 65 72 6f 70 44 65 62 75 67 28 22 73 71 6c 69 74  eropDebug("sqlit
4700: 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68  e3_backup_finish
4710: 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73 71 6c 69  _interop(): sqli
4720: 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73  te3_backup_finis
4730: 68 28 25 70 2c 20 25 70 2c 20 25 70 29 20 72 65  h(%p, %p, %p) re
4740: 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22 2c 20 70  turned %d.\n", p
4750: 44 65 73 74 44 62 2c 20 70 53 72 63 44 62 2c 20  DestDb, pSrcDb, 
4760: 70 2c 20 72 65 74 29 3b 0d 0a 23 65 6e 64 69 66  p, ret);..#endif
4770: 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 72 65 74  ....  return ret
4780: 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  ;..}....SQLITE_A
4790: 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71  PI int WINAPI sq
47a0: 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65  lite3_reset_inte
47b0: 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  rop(sqlite3_stmt
47c0: 20 2a 73 74 6d 74 29 0d 0a 7b 0d 0a 20 20 69 6e   *stmt)..{..  in
47d0: 74 20 72 65 74 3b 0d 0a 23 69 66 20 21 64 65 66  t ret;..#if !def
47e0: 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 4c 45 47  ined(INTEROP_LEG
47f0: 41 43 59 5f 43 4c 4f 53 45 29 20 26 26 20 53 51  ACY_CLOSE) && SQ
4800: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
4810: 42 45 52 20 3e 3d 20 33 30 30 37 30 31 34 0d 0a  BER >= 3007014..
4820: 0d 0a 23 69 66 20 64 65 66 69 6e 65 64 28 49 4e  ..#if defined(IN
4830: 54 45 52 4f 50 5f 44 45 42 55 47 29 20 26 26 20  TEROP_DEBUG) && 
4840: 28 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 26  (INTEROP_DEBUG &
4850: 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 5f 52   INTEROP_DEBUG_R
4860: 45 53 45 54 29 0d 0a 20 20 73 71 6c 69 74 65 33  ESET)..  sqlite3
4870: 49 6e 74 65 72 6f 70 44 65 62 75 67 28 22 73 71  InteropDebug("sq
4880: 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65  lite3_reset_inte
4890: 72 6f 70 28 29 3a 20 63 61 6c 6c 69 6e 67 20 73  rop(): calling s
48a0: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 25 70 29  qlite3_reset(%p)
48b0: 2e 2e 2e 5c 6e 22 2c 20 73 74 6d 74 29 3b 0d 0a  ...\n", stmt);..
48c0: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 20  #endif....  ret 
48d0: 3d 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28  = sqlite3_reset(
48e0: 73 74 6d 74 29 3b 0d 0a 0d 0a 23 69 66 20 64 65  stmt);....#if de
48f0: 66 69 6e 65 64 28 49 4e 54 45 52 4f 50 5f 44 45  fined(INTEROP_DE
4900: 42 55 47 29 20 26 26 20 28 49 4e 54 45 52 4f 50  BUG) && (INTEROP
4910: 5f 44 45 42 55 47 20 26 20 49 4e 54 45 52 4f 50  _DEBUG & INTEROP
4920: 5f 44 45 42 55 47 5f 52 45 53 45 54 29 0d 0a 20  _DEBUG_RESET).. 
4930: 20 73 71 6c 69 74 65 33 49 6e 74 65 72 6f 70 44   sqlite3InteropD
4940: 65 62 75 67 28 22 73 71 6c 69 74 65 33 5f 72 65  ebug("sqlite3_re
4950: 73 65 74 5f 69 6e 74 65 72 6f 70 28 29 3a 20 73  set_interop(): s
4960: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 25 70 29  qlite3_reset(%p)
4970: 20 72 65 74 75 72 6e 65 64 20 25 64 2e 5c 6e 22   returned %d.\n"
4980: 2c 20 73 74 6d 74 2c 20 72 65 74 29 3b 0d 0a 23  , stmt, ret);..#
4990: 65 6e 64 69 66 0d 0a 0d 0a 20 20 72 65 74 75 72  endif....  retur
49a0: 6e 20 72 65 74 3b 0d 0a 23 65 6c 73 65 0d 0a 20  n ret;..#else.. 
49b0: 20 69 66 20 28 28 28 56 64 62 65 20 2a 29 73 74   if (((Vdbe *)st
49c0: 6d 74 29 2d 3e 6d 61 67 69 63 20 3d 3d 20 56 44  mt)->magic == VD
49d0: 42 45 5f 4d 41 47 49 43 5f 44 45 41 44 29 20 72  BE_MAGIC_DEAD) r
49e0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 53 43 48  eturn SQLITE_SCH
49f0: 45 4d 41 3b 0d 0a 20 20 72 65 74 20 3d 20 73 71  EMA;..  ret = sq
4a00: 6c 69 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74  lite3_reset(stmt
4a10: 29 3b 0d 0a 20 20 72 65 74 75 72 6e 20 72 65 74  );..  return ret
4a20: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 7d 0d 0a 0d 0a  ;..#endif..}....
4a30: 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57  SQLITE_API int W
4a40: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 72  INAPI sqlite3_cr
4a50: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e  eate_function_in
4a60: 74 65 72 6f 70 28 73 71 6c 69 74 65 33 20 2a 70  terop(sqlite3 *p
4a70: 73 71 6c 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  sql, const char 
4a80: 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20  *zFunctionName, 
4a90: 69 6e 74 20 6e 41 72 67 2c 20 69 6e 74 20 65 54  int nArg, int eT
4aa0: 65 78 74 52 65 70 2c 20 76 6f 69 64 20 2a 70 76  extRep, void *pv
4ab0: 55 73 65 72 2c 20 53 51 4c 49 54 45 55 53 45 52  User, SQLITEUSER
4ac0: 46 55 4e 43 20 66 75 6e 63 2c 20 53 51 4c 49 54  FUNC func, SQLIT
4ad0: 45 55 53 45 52 46 55 4e 43 20 66 75 6e 63 73 74  EUSERFUNC funcst
4ae0: 65 70 2c 20 53 51 4c 49 54 45 46 55 4e 43 46 49  ep, SQLITEFUNCFI
4af0: 4e 41 4c 20 66 75 6e 63 66 69 6e 61 6c 2c 20 69  NAL funcfinal, i
4b00: 6e 74 20 6e 65 65 64 43 6f 6c 6c 53 65 71 29 0d  nt needCollSeq).
4b10: 0a 7b 0d 0a 20 20 69 6e 74 20 6e 3b 0d 0a 0d 0a  .{..  int n;....
4b20: 20 20 69 66 20 28 65 54 65 78 74 52 65 70 20 3d    if (eTextRep =
4b30: 3d 20 53 51 4c 49 54 45 5f 55 54 46 31 36 29 0d  = SQLITE_UTF16).
4b40: 0a 20 20 20 20 65 54 65 78 74 52 65 70 20 3d 20  .    eTextRep = 
4b50: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
4b60: 56 45 3b 0d 0a 0d 0a 20 20 6e 20 3d 20 73 71 6c  VE;....  n = sql
4b70: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
4b80: 74 69 6f 6e 28 70 73 71 6c 2c 20 7a 46 75 6e 63  tion(psql, zFunc
4b90: 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  tionName, nArg, 
4ba0: 65 54 65 78 74 52 65 70 2c 20 30 2c 20 66 75 6e  eTextRep, 0, fun
4bb0: 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e  c, funcstep, fun
4bc0: 63 66 69 6e 61 6c 29 3b 0d 0a 20 20 69 66 20 28  cfinal);..  if (
4bd0: 6e 20 3d 3d 20 53 51 4c 49 54 45 5f 4f 4b 29 0d  n == SQLITE_OK).
4be0: 0a 20 20 7b 0d 0a 20 20 20 20 69 66 20 28 6e 65  .  {..    if (ne
4bf0: 65 64 43 6f 6c 6c 53 65 71 29 0d 0a 20 20 20 20  edCollSeq)..    
4c00: 7b 0d 0a 20 20 20 20 20 20 46 75 6e 63 44 65 66  {..      FuncDef
4c10: 20 2a 70 46 75 6e 63 20 3d 20 73 71 6c 69 74 65   *pFunc = sqlite
4c20: 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 70 73  3FindFunction(ps
4c30: 71 6c 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d  ql, zFunctionNam
4c40: 65 2c 20 73 74 72 6c 65 6e 28 7a 46 75 6e 63 74  e, strlen(zFunct
4c50: 69 6f 6e 4e 61 6d 65 29 2c 20 6e 41 72 67 2c 20  ionName), nArg, 
4c60: 65 54 65 78 74 52 65 70 2c 20 30 29 3b 0d 0a 20  eTextRep, 0);.. 
4c70: 20 20 20 20 20 69 66 28 20 70 46 75 6e 63 20 29       if( pFunc )
4c80: 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 53  ..      {..#if S
4c90: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
4ca0: 4d 42 45 52 20 3e 3d 20 33 30 30 38 30 30 31 0d  MBER >= 3008001.
4cb0: 0a 20 20 20 20 20 20 20 20 70 46 75 6e 63 2d 3e  .        pFunc->
4cc0: 66 75 6e 63 46 6c 61 67 73 20 7c 3d 20 53 51 4c  funcFlags |= SQL
4cd0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
4ce0: 4c 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  L;..#else..     
4cf0: 20 20 20 70 46 75 6e 63 2d 3e 66 6c 61 67 73 20     pFunc->flags 
4d00: 7c 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  |= SQLITE_FUNC_N
4d10: 45 45 44 43 4f 4c 4c 3b 0d 0a 23 65 6e 64 69 66  EEDCOLL;..#endif
4d20: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
4d30: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 72 65 74 75 72  ..  }....  retur
4d40: 6e 20 6e 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54  n n;..}....SQLIT
4d50: 45 5f 41 50 49 20 76 6f 69 64 20 57 49 4e 41 50  E_API void WINAP
4d60: 49 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  I sqlite3_value_
4d70: 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73  double_interop(s
4d80: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 76  qlite3_value *pv
4d90: 61 6c 2c 20 64 6f 75 62 6c 65 20 2a 76 61 6c 29  al, double *val)
4da0: 0d 0a 7b 0d 0a 20 20 2a 76 61 6c 20 3d 20 73 71  ..{..  *val = sq
4db0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62  lite3_value_doub
4dc0: 6c 65 28 70 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d 0a  le(pval);..}....
4dd0: 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69 64 20  SQLITE_API void 
4de0: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 76  WINAPI sqlite3_v
4df0: 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e 74 65 72  alue_int64_inter
4e00: 6f 70 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  op(sqlite3_value
4e10: 20 2a 70 76 61 6c 2c 20 73 71 6c 69 74 65 5f 69   *pval, sqlite_i
4e20: 6e 74 36 34 20 2a 76 61 6c 29 0d 0a 7b 0d 0a 20  nt64 *val)..{.. 
4e30: 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f   *val = sqlite3_
4e40: 76 61 6c 75 65 5f 69 6e 74 36 34 28 70 76 61 6c  value_int64(pval
4e50: 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f  );..}....SQLITE_
4e60: 41 50 49 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  API const unsign
4e70: 65 64 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49  ed char * WINAPI
4e80: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
4e90: 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  ext_interop(sqli
4ea0: 74 65 33 5f 76 61 6c 75 65 20 2a 76 61 6c 2c 20  te3_value *val, 
4eb0: 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20  int *plen)..{.. 
4ec0: 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
4ed0: 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73 71 6c  char *pval = sql
4ee0: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
4ef0: 76 61 6c 29 3b 0d 0a 20 20 2a 70 6c 65 6e 20 3d  val);..  *plen =
4f00: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62   sqlite3_value_b
4f10: 79 74 65 73 28 76 61 6c 29 3b 0d 0a 20 20 72 65  ytes(val);..  re
4f20: 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d  turn pval;..}...
4f30: 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73  .SQLITE_API cons
4f40: 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20  t void * WINAPI 
4f50: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
4f60: 78 74 31 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c  xt16_interop(sql
4f70: 69 74 65 33 5f 76 61 6c 75 65 20 2a 76 61 6c 2c  ite3_value *val,
4f80: 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a   int *plen)..{..
4f90: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76    const void *pv
4fa0: 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c  al = sqlite3_val
4fb0: 75 65 5f 74 65 78 74 31 36 28 76 61 6c 29 3b 0d  ue_text16(val);.
4fc0: 0a 20 20 2a 70 6c 65 6e 20 3d 20 73 71 6c 69 74  .  *plen = sqlit
4fd0: 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 31 36  e3_value_bytes16
4fe0: 28 76 61 6c 29 3b 0d 0a 20 20 72 65 74 75 72 6e  (val);..  return
4ff0: 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c   pval;..}....SQL
5000: 49 54 45 5f 41 50 49 20 76 6f 69 64 20 57 49 4e  ITE_API void WIN
5010: 41 50 49 20 73 71 6c 69 74 65 33 5f 72 65 73 75  API sqlite3_resu
5020: 6c 74 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f  lt_double_intero
5030: 70 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  p(sqlite3_contex
5040: 74 20 2a 70 63 74 78 2c 20 64 6f 75 62 6c 65 20  t *pctx, double 
5050: 2a 76 61 6c 29 0d 0a 7b 0d 0a 20 20 73 71 6c 69  *val)..{..  sqli
5060: 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c  te3_result_doubl
5070: 65 28 70 63 74 78 2c 20 2a 76 61 6c 29 3b 0d 0a  e(pctx, *val);..
5080: 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20  }....SQLITE_API 
5090: 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69  void WINAPI sqli
50a0: 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34  te3_result_int64
50b0: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
50c0: 5f 63 6f 6e 74 65 78 74 20 2a 70 63 74 78 2c 20  _context *pctx, 
50d0: 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a 76 61  sqlite_int64 *va
50e0: 6c 29 0d 0a 7b 0d 0a 20 20 73 71 6c 69 74 65 33  l)..{..  sqlite3
50f0: 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 70 63  _result_int64(pc
5100: 74 78 2c 20 2a 76 61 6c 29 3b 0d 0a 7d 0d 0a 0d  tx, *val);..}...
5110: 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74 20  .SQLITE_API int 
5120: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63  WINAPI sqlite3_c
5130: 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61  ontext_collcompa
5140: 72 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  re_interop(sqlit
5150: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 74 78 2c  e3_context *ctx,
5160: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 31 2c   const void *p1,
5170: 20 69 6e 74 20 70 31 6c 65 6e 2c 20 63 6f 6e 73   int p1len, cons
5180: 74 20 76 6f 69 64 20 2a 70 32 2c 20 69 6e 74 20  t void *p2, int 
5190: 70 32 6c 65 6e 29 0d 0a 7b 0d 0a 23 69 66 20 53  p2len)..{..#if S
51a0: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
51b0: 4d 42 45 52 20 3e 3d 20 33 30 30 38 30 30 31 0d  MBER >= 3008001.
51c0: 0a 20 20 69 66 20 28 28 63 74 78 2d 3e 70 46 75  .  if ((ctx->pFu
51d0: 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26 20  nc->funcFlags & 
51e0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
51f0: 43 4f 4c 4c 29 20 3d 3d 20 30 29 20 72 65 74 75  COLL) == 0) retu
5200: 72 6e 20 32 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  rn 2;..#else..  
5210: 69 66 20 28 28 63 74 78 2d 3e 70 46 75 6e 63 2d  if ((ctx->pFunc-
5220: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
5230: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 20 3d  FUNC_NEEDCOLL) =
5240: 3d 20 30 29 20 72 65 74 75 72 6e 20 32 3b 0d 0a  = 0) return 2;..
5250: 23 65 6e 64 69 66 0d 0a 20 20 72 65 74 75 72 6e  #endif..  return
5260: 20 63 74 78 2d 3e 70 43 6f 6c 6c 2d 3e 78 43 6d   ctx->pColl->xCm
5270: 70 28 63 74 78 2d 3e 70 43 6f 6c 6c 2d 3e 70 55  p(ctx->pColl->pU
5280: 73 65 72 2c 20 70 31 6c 65 6e 2c 20 70 31 2c 20  ser, p1len, p1, 
5290: 70 32 6c 65 6e 2c 20 70 32 29 3b 0d 0a 7d 0d 0a  p2len, p2);..}..
52a0: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e  ..SQLITE_API con
52b0: 73 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49  st char * WINAPI
52c0: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
52d0: 5f 63 6f 6c 6c 73 65 71 5f 69 6e 74 65 72 6f 70  _collseq_interop
52e0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
52f0: 20 2a 63 74 78 2c 20 69 6e 74 20 2a 70 74 79 70   *ctx, int *ptyp
5300: 65 2c 20 69 6e 74 20 2a 65 6e 63 2c 20 69 6e 74  e, int *enc, int
5310: 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 43 6f   *plen)..{..  Co
5320: 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20 3d 20 63  llSeq *pColl = c
5330: 74 78 2d 3e 70 43 6f 6c 6c 3b 0d 0a 20 20 2a 70  tx->pColl;..  *p
5340: 74 79 70 65 20 3d 20 30 3b 0d 0a 20 20 2a 70 6c  type = 0;..  *pl
5350: 65 6e 20 3d 20 30 3b 0d 0a 20 20 2a 65 6e 63 20  en = 0;..  *enc 
5360: 3d 20 30 3b 0d 0a 0d 0a 23 69 66 20 53 51 4c 49  = 0;....#if SQLI
5370: 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45  TE_VERSION_NUMBE
5380: 52 20 3e 3d 20 33 30 30 38 30 30 31 0d 0a 20 20  R >= 3008001..  
5390: 69 66 20 28 28 63 74 78 2d 3e 70 46 75 6e 63 2d  if ((ctx->pFunc-
53a0: 3e 66 75 6e 63 46 6c 61 67 73 20 26 20 53 51 4c  >funcFlags & SQL
53b0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
53c0: 4c 29 20 3d 3d 20 30 29 20 72 65 74 75 72 6e 20  L) == 0) return 
53d0: 4e 55 4c 4c 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  NULL;..#else..  
53e0: 69 66 20 28 28 63 74 78 2d 3e 70 46 75 6e 63 2d  if ((ctx->pFunc-
53f0: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
5400: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 20 3d  FUNC_NEEDCOLL) =
5410: 3d 20 30 29 20 72 65 74 75 72 6e 20 4e 55 4c 4c  = 0) return NULL
5420: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 69  ;..#endif....  i
5430: 66 20 28 70 43 6f 6c 6c 29 0d 0a 20 20 7b 0d 0a  f (pColl)..  {..
5440: 20 20 20 20 2a 65 6e 63 20 3d 20 70 43 6f 6c 6c      *enc = pColl
5450: 2d 3e 65 6e 63 3b 0d 0a 23 69 66 20 53 51 4c 49  ->enc;..#if SQLI
5460: 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45  TE_VERSION_NUMBE
5470: 52 20 3c 20 33 30 30 37 30 31 30 0d 0a 20 20 20  R < 3007010..   
5480: 20 2a 70 74 79 70 65 20 3d 20 70 43 6f 6c 6c 2d   *ptype = pColl-
5490: 3e 74 79 70 65 3b 0d 0a 23 65 6e 64 69 66 0d 0a  >type;..#endif..
54a0: 20 20 20 20 2a 70 6c 65 6e 20 3d 20 28 70 43 6f      *plen = (pCo
54b0: 6c 6c 2d 3e 7a 4e 61 6d 65 20 21 3d 20 30 29 20  ll->zName != 0) 
54c0: 3f 20 73 74 72 6c 65 6e 28 70 43 6f 6c 6c 2d 3e  ? strlen(pColl->
54d0: 7a 4e 61 6d 65 29 20 3a 20 30 3b 0d 0a 0d 0a 20  zName) : 0;.... 
54e0: 20 20 20 72 65 74 75 72 6e 20 70 43 6f 6c 6c 2d     return pColl-
54f0: 3e 7a 4e 61 6d 65 3b 0d 0a 20 20 7d 0d 0a 20 20  >zName;..  }..  
5500: 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 7d 0d  return NULL;..}.
5510: 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f  ...SQLITE_API co
5520: 6e 73 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50  nst char * WINAP
5530: 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  I sqlite3_column
5540: 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 5f 69  _database_name_i
5550: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73  nterop(sqlite3_s
5560: 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69  tmt *stmt, int i
5570: 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d  Col, int *plen).
5580: 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  .{..  const char
5590: 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33   *pval = sqlite3
55a0: 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65  _column_database
55b0: 5f 6e 61 6d 65 28 73 74 6d 74 2c 20 69 43 6f 6c  _name(stmt, iCol
55c0: 29 3b 0d 0a 20 20 2a 70 6c 65 6e 20 3d 20 28 70  );..  *plen = (p
55d0: 76 61 6c 20 21 3d 20 30 29 20 3f 20 73 74 72 6c  val != 0) ? strl
55e0: 65 6e 28 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20  en(pval) : 0;.. 
55f0: 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d   return pval;..}
5600: 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 63  ....SQLITE_API c
5610: 6f 6e 73 74 20 76 6f 69 64 20 2a 20 57 49 4e 41  onst void * WINA
5620: 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  PI sqlite3_colum
5630: 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 31  n_database_name1
5640: 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  6_interop(sqlite
5650: 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e  3_stmt *stmt, in
5660: 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65  t iCol, int *ple
5670: 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 76  n)..{..  const v
5680: 6f 69 64 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69  oid *pval = sqli
5690: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62  te3_column_datab
56a0: 61 73 65 5f 6e 61 6d 65 31 36 28 73 74 6d 74 2c  ase_name16(stmt,
56b0: 20 69 43 6f 6c 29 3b 0d 0a 20 20 2a 70 6c 65 6e   iCol);..  *plen
56c0: 20 3d 20 28 70 76 61 6c 20 21 3d 20 30 29 20 3f   = (pval != 0) ?
56d0: 20 77 63 73 6c 65 6e 28 28 77 63 68 61 72 5f 74   wcslen((wchar_t
56e0: 20 2a 29 70 76 61 6c 29 20 2a 20 73 69 7a 65 6f   *)pval) * sizeo
56f0: 66 28 77 63 68 61 72 5f 74 29 20 3a 20 30 3b 0d  f(wchar_t) : 0;.
5700: 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0d  .  return pval;.
5710: 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41 50 49  .}....SQLITE_API
5720: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 57 49   const char * WI
5730: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c  NAPI sqlite3_col
5740: 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f 69  umn_table_name_i
5750: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73  nterop(sqlite3_s
5760: 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69  tmt *stmt, int i
5770: 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d  Col, int *plen).
5780: 0a 7b 0d 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  .{..  const char
5790: 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33   *pval = sqlite3
57a0: 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61  _column_table_na
57b0: 6d 65 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d  me(stmt, iCol);.
57c0: 0a 20 20 2a 70 6c 65 6e 20 3d 20 28 70 76 61 6c  .  *plen = (pval
57d0: 20 21 3d 20 30 29 20 3f 20 73 74 72 6c 65 6e 28   != 0) ? strlen(
57e0: 70 76 61 6c 29 20 3a 20 30 3b 0d 0a 20 20 72 65  pval) : 0;..  re
57f0: 74 75 72 6e 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d  turn pval;..}...
5800: 0a 53 51 4c 49 54 45 5f 41 50 49 20 63 6f 6e 73  .SQLITE_API cons
5810: 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20  t void * WINAPI 
5820: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
5830: 61 62 6c 65 5f 6e 61 6d 65 31 36 5f 69 6e 74 65  able_name16_inte
5840: 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  rop(sqlite3_stmt
5850: 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c   *stmt, int iCol
5860: 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0d 0a 7b 0d  , int *plen)..{.
5870: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  .  const void *p
5880: 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  val = sqlite3_co
5890: 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31  lumn_table_name1
58a0: 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0d 0a  6(stmt, iCol);..
58b0: 20 20 2a 70 6c 65 6e 20 3d 20 28 70 76 61 6c 20    *plen = (pval 
58c0: 21 3d 20 30 29 20 3f 20 77 63 73 6c 65 6e 28 28  != 0) ? wcslen((
58d0: 77 63 68 61 72 5f 74 20 2a 29 70 76 61 6c 29 20  wchar_t *)pval) 
58e0: 2a 20 73 69 7a 65 6f 66 28 77 63 68 61 72 5f 74  * sizeof(wchar_t
58f0: 29 20 3a 20 30 3b 0d 0a 20 20 72 65 74 75 72 6e  ) : 0;..  return
5900: 20 70 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c   pval;..}....SQL
5910: 49 54 45 5f 41 50 49 20 63 6f 6e 73 74 20 63 68  ITE_API const ch
5920: 61 72 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69  ar * WINAPI sqli
5930: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69  te3_column_origi
5940: 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73  n_name_interop(s
5950: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d  qlite3_stmt *stm
5960: 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74  t, int iCol, int
5970: 20 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f   *plen)..{..  co
5980: 6e 73 74 20 63 68 61 72 20 2a 70 76 61 6c 20 3d  nst char *pval =
5990: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
59a0: 6f 72 69 67 69 6e 5f 6e 61 6d 65 28 73 74 6d 74  origin_name(stmt
59b0: 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 2a 70 6c 65  , iCol);..  *ple
59c0: 6e 20 3d 20 28 70 76 61 6c 20 21 3d 20 30 29 20  n = (pval != 0) 
59d0: 3f 20 73 74 72 6c 65 6e 28 70 76 61 6c 29 20 3a  ? strlen(pval) :
59e0: 20 30 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70 76   0;..  return pv
59f0: 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45  al;..}....SQLITE
5a00: 5f 41 50 49 20 63 6f 6e 73 74 20 76 6f 69 64 20  _API const void 
5a10: 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  * WINAPI sqlite3
5a20: 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e  _column_origin_n
5a30: 61 6d 65 31 36 5f 69 6e 74 65 72 6f 70 28 73 71  ame16_interop(sq
5a40: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74  lite3_stmt *stmt
5a50: 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20  , int iCol, int 
5a60: 2a 70 6c 65 6e 29 0d 0a 7b 0d 0a 20 20 63 6f 6e  *plen)..{..  con
5a70: 73 74 20 76 6f 69 64 20 2a 70 76 61 6c 20 3d 20  st void *pval = 
5a80: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
5a90: 72 69 67 69 6e 5f 6e 61 6d 65 31 36 28 73 74 6d  rigin_name16(stm
5aa0: 74 2c 20 69 43 6f 6c 29 3b 0d 0a 20 20 2a 70 6c  t, iCol);..  *pl
5ab0: 65 6e 20 3d 20 28 70 76 61 6c 20 21 3d 20 30 29  en = (pval != 0)
5ac0: 20 3f 20 77 63 73 6c 65 6e 28 28 77 63 68 61 72   ? wcslen((wchar
5ad0: 5f 74 20 2a 29 70 76 61 6c 29 20 2a 20 73 69 7a  _t *)pval) * siz
5ae0: 65 6f 66 28 77 63 68 61 72 5f 74 29 20 3a 20 30  eof(wchar_t) : 0
5af0: 3b 0d 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c  ;..  return pval
5b00: 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 49 54 45 5f 41  ;..}....SQLITE_A
5b10: 50 49 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71  PI int WINAPI sq
5b20: 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75  lite3_table_colu
5b30: 6d 6e 5f 6d 65 74 61 64 61 74 61 5f 69 6e 74 65  mn_metadata_inte
5b40: 72 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  rop(sqlite3 *db,
5b50: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
5b60: 4e 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  Name, const char
5b70: 20 2a 7a 54 61 62 6c 65 4e 61 6d 65 2c 20 63 6f   *zTableName, co
5b80: 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 75 6d  nst char *zColum
5b90: 6e 4e 61 6d 65 2c 20 63 68 61 72 20 2a 2a 70 7a  nName, char **pz
5ba0: 44 61 74 61 54 79 70 65 2c 20 63 68 61 72 20 2a  DataType, char *
5bb0: 2a 70 7a 43 6f 6c 6c 53 65 71 2c 20 69 6e 74 20  *pzCollSeq, int 
5bc0: 2a 70 4e 6f 74 4e 75 6c 6c 2c 20 69 6e 74 20 2a  *pNotNull, int *
5bd0: 70 50 72 69 6d 61 72 79 4b 65 79 2c 20 69 6e 74  pPrimaryKey, int
5be0: 20 2a 70 41 75 74 6f 69 6e 63 2c 20 69 6e 74 20   *pAutoinc, int 
5bf0: 2a 70 64 74 4c 65 6e 2c 20 69 6e 74 20 2a 70 63  *pdtLen, int *pc
5c00: 73 4c 65 6e 29 0d 0a 7b 0d 0a 20 20 69 6e 74 20  sLen)..{..  int 
5c10: 6e 3b 0d 0a 0d 0a 20 20 6e 20 3d 20 73 71 6c 69  n;....  n = sqli
5c20: 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
5c30: 5f 6d 65 74 61 64 61 74 61 28 64 62 2c 20 7a 44  _metadata(db, zD
5c40: 62 4e 61 6d 65 2c 20 7a 54 61 62 6c 65 4e 61 6d  bName, zTableNam
5c50: 65 2c 20 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20  e, zColumnName, 
5c60: 70 7a 44 61 74 61 54 79 70 65 2c 20 70 7a 43 6f  pzDataType, pzCo
5c70: 6c 6c 53 65 71 2c 20 70 4e 6f 74 4e 75 6c 6c 2c  llSeq, pNotNull,
5c80: 20 70 50 72 69 6d 61 72 79 4b 65 79 2c 20 70 41   pPrimaryKey, pA
5c90: 75 74 6f 69 6e 63 29 3b 0d 0a 20 20 2a 70 64 74  utoinc);..  *pdt
5ca0: 4c 65 6e 20 3d 20 28 2a 70 7a 44 61 74 61 54 79  Len = (*pzDataTy
5cb0: 70 65 20 21 3d 20 30 29 20 3f 20 73 74 72 6c 65  pe != 0) ? strle
5cc0: 6e 28 2a 70 7a 44 61 74 61 54 79 70 65 29 20 3a  n(*pzDataType) :
5cd0: 20 30 3b 0d 0a 20 20 2a 70 63 73 4c 65 6e 20 3d   0;..  *pcsLen =
5ce0: 20 28 2a 70 7a 43 6f 6c 6c 53 65 71 20 21 3d 20   (*pzCollSeq != 
5cf0: 30 29 20 3f 20 73 74 72 6c 65 6e 28 2a 70 7a 43  0) ? strlen(*pzC
5d00: 6f 6c 6c 53 65 71 29 20 3a 20 30 3b 0d 0a 0d 0a  ollSeq) : 0;....
5d10: 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 7d 0d 0a    return n;..}..
5d20: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74  ..SQLITE_API int
5d30: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
5d40: 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69 6e 66  index_column_inf
5d50: 6f 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  o_interop(sqlite
5d60: 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61  3 *db, const cha
5d70: 72 20 2a 7a 44 62 2c 20 63 6f 6e 73 74 20 63 68  r *zDb, const ch
5d80: 61 72 20 2a 7a 49 6e 64 65 78 4e 61 6d 65 2c 20  ar *zIndexName, 
5d90: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c  const char *zCol
5da0: 75 6d 6e 4e 61 6d 65 2c 20 69 6e 74 20 2a 73 6f  umnName, int *so
5db0: 72 74 4f 72 64 65 72 2c 20 69 6e 74 20 2a 6f 6e  rtOrder, int *on
5dc0: 45 72 72 6f 72 2c 20 63 68 61 72 20 2a 2a 70 7a  Error, char **pz
5dd0: 43 6f 6c 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29  Coll, int *plen)
5de0: 0d 0a 7b 0d 0a 20 20 49 6e 64 65 78 20 2a 70 49  ..{..  Index *pI
5df0: 64 78 3b 0d 0a 20 20 54 61 62 6c 65 20 2a 70 54  dx;..  Table *pT
5e00: 61 62 3b 0d 0a 20 20 69 6e 74 20 6e 3b 0d 0a 0d  ab;..  int n;...
5e10: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
5e20: 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78  _enter(db->mutex
5e30: 29 3b 0d 0a 20 20 73 71 6c 69 74 65 33 42 74 72  );..  sqlite3Btr
5e40: 65 65 45 6e 74 65 72 41 6c 6c 28 64 62 29 3b 0d  eeEnterAll(db);.
5e50: 0a 0d 0a 20 20 70 49 64 78 20 3d 20 73 71 6c 69  ...  pIdx = sqli
5e60: 74 65 33 46 69 6e 64 49 6e 64 65 78 28 64 62 2c  te3FindIndex(db,
5e70: 20 7a 49 6e 64 65 78 4e 61 6d 65 2c 20 7a 44 62   zIndexName, zDb
5e80: 29 3b 0d 0a 0d 0a 20 20 73 71 6c 69 74 65 33 42  );....  sqlite3B
5e90: 74 72 65 65 4c 65 61 76 65 41 6c 6c 28 64 62 29  treeLeaveAll(db)
5ea0: 3b 0d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  ;..  sqlite3_mut
5eb0: 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74  ex_leave(db->mut
5ec0: 65 78 29 3b 0d 0a 0d 0a 20 20 69 66 20 28 21 70  ex);....  if (!p
5ed0: 49 64 78 29 20 72 65 74 75 72 6e 20 53 51 4c 49  Idx) return SQLI
5ee0: 54 45 5f 45 52 52 4f 52 3b 0d 0a 0d 0a 20 20 70  TE_ERROR;....  p
5ef0: 54 61 62 20 3d 20 70 49 64 78 2d 3e 70 54 61 62  Tab = pIdx->pTab
5f00: 6c 65 3b 0d 0a 20 20 66 6f 72 20 28 6e 20 3d 20  le;..  for (n = 
5f10: 30 3b 20 6e 20 3c 20 70 49 64 78 2d 3e 6e 43 6f  0; n < pIdx->nCo
5f20: 6c 75 6d 6e 3b 20 6e 2b 2b 29 0d 0a 20 20 7b 0d  lumn; n++)..  {.
5f30: 0a 20 20 20 20 69 6e 74 20 63 6e 75 6d 20 3d 20  .    int cnum = 
5f40: 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6e  pIdx->aiColumn[n
5f50: 5d 3b 0d 0a 20 20 20 20 69 66 20 28 73 71 6c 69  ];..    if (sqli
5f60: 74 65 33 53 74 72 49 43 6d 70 28 70 54 61 62 2d  te3StrICmp(pTab-
5f70: 3e 61 43 6f 6c 5b 63 6e 75 6d 5d 2e 7a 4e 61 6d  >aCol[cnum].zNam
5f80: 65 2c 20 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 29 20  e, zColumnName) 
5f90: 3d 3d 20 30 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  == 0)..    {..  
5fa0: 20 20 20 20 2a 73 6f 72 74 4f 72 64 65 72 20 3d      *sortOrder =
5fb0: 20 70 49 64 78 2d 3e 61 53 6f 72 74 4f 72 64 65   pIdx->aSortOrde
5fc0: 72 5b 6e 5d 3b 0d 0a 20 20 20 20 20 20 2a 70 7a  r[n];..      *pz
5fd0: 43 6f 6c 6c 20 3d 20 70 49 64 78 2d 3e 61 7a 43  Coll = pIdx->azC
5fe0: 6f 6c 6c 5b 6e 5d 3b 0d 0a 20 20 20 20 20 20 2a  oll[n];..      *
5ff0: 70 6c 65 6e 20 3d 20 73 74 72 6c 65 6e 28 2a 70  plen = strlen(*p
6000: 7a 43 6f 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 2a  zColl);..      *
6010: 6f 6e 45 72 72 6f 72 20 3d 20 70 49 64 78 2d 3e  onError = pIdx->
6020: 6f 6e 45 72 72 6f 72 3b 0d 0a 0d 0a 20 20 20 20  onError;....    
6030: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
6040: 4f 4b 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d  OK;..    }..  }.
6050: 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  .  return SQLITE
6060: 5f 45 52 52 4f 52 3b 0d 0a 7d 0d 0a 0d 0a 53 51  _ERROR;..}....SQ
6070: 4c 49 54 45 5f 41 50 49 20 69 6e 74 20 57 49 4e  LITE_API int WIN
6080: 41 50 49 20 73 71 6c 69 74 65 33 5f 74 61 62 6c  API sqlite3_tabl
6090: 65 5f 63 75 72 73 6f 72 5f 69 6e 74 65 72 6f 70  e_cursor_interop
60a0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70  (sqlite3_stmt *p
60b0: 73 74 6d 74 2c 20 69 6e 74 20 69 44 62 2c 20 50  stmt, int iDb, P
60c0: 67 6e 6f 20 74 61 62 6c 65 52 6f 6f 74 50 61 67  gno tableRootPag
60d0: 65 29 0d 0a 7b 0d 0a 20 20 56 64 62 65 20 2a 70  e)..{..  Vdbe *p
60e0: 20 3d 20 28 56 64 62 65 20 2a 29 70 73 74 6d 74   = (Vdbe *)pstmt
60f0: 3b 0d 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ;..  sqlite3 *db
6100: 20 3d 20 28 70 20 3d 3d 20 4e 55 4c 4c 29 20 3f   = (p == NULL) ?
6110: 20 4e 55 4c 4c 20 3a 20 70 2d 3e 64 62 3b 0d 0a   NULL : p->db;..
6120: 20 20 69 6e 74 20 6e 3b 0d 0a 20 20 69 6e 74 20    int n;..  int 
6130: 72 65 74 20 3d 20 2d 31 3b 0d 0a 0d 0a 20 20 73  ret = -1;....  s
6140: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
6150: 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a  er(db->mutex);..
6160: 20 20 66 6f 72 20 28 6e 20 3d 20 30 3b 20 6e 20    for (n = 0; n 
6170: 3c 20 70 2d 3e 6e 43 75 72 73 6f 72 20 26 26 20  < p->nCursor && 
6180: 70 2d 3e 61 70 43 73 72 5b 6e 5d 20 21 3d 20 4e  p->apCsr[n] != N
6190: 55 4c 4c 3b 20 6e 2b 2b 29 0d 0a 20 20 7b 0d 0a  ULL; n++)..  {..
61a0: 20 20 20 20 69 66 20 28 70 2d 3e 61 70 43 73 72      if (p->apCsr
61b0: 5b 6e 5d 2d 3e 69 73 54 61 62 6c 65 20 3d 3d 20  [n]->isTable == 
61c0: 46 41 4c 53 45 29 20 63 6f 6e 74 69 6e 75 65 3b  FALSE) continue;
61d0: 0d 0a 20 20 20 20 69 66 20 28 70 2d 3e 61 70 43  ..    if (p->apC
61e0: 73 72 5b 6e 5d 2d 3e 69 44 62 20 21 3d 20 69 44  sr[n]->iDb != iD
61f0: 62 29 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20  b) continue;..  
6200: 20 20 69 66 20 28 70 2d 3e 61 70 43 73 72 5b 6e    if (p->apCsr[n
6210: 5d 2d 3e 70 43 75 72 73 6f 72 2d 3e 70 67 6e 6f  ]->pCursor->pgno
6220: 52 6f 6f 74 20 3d 3d 20 74 61 62 6c 65 52 6f 6f  Root == tableRoo
6230: 74 50 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  tPage)..    {.. 
6240: 20 20 20 20 20 72 65 74 20 3d 20 6e 3b 0d 0a 20       ret = n;.. 
6250: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
6260: 20 7d 0d 0a 20 20 7d 0d 0a 20 20 73 71 6c 69 74   }..  }..  sqlit
6270: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64  e3_mutex_leave(d
6280: 62 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20 20  b->mutex);....  
6290: 72 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a  return ret;..}..
62a0: 0d 0a 53 51 4c 49 54 45 5f 41 50 49 20 69 6e 74  ..SQLITE_API int
62b0: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
62c0: 63 75 72 73 6f 72 5f 72 6f 77 69 64 5f 69 6e 74  cursor_rowid_int
62d0: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
62e0: 74 20 2a 70 73 74 6d 74 2c 20 69 6e 74 20 63 75  t *pstmt, int cu
62f0: 72 73 6f 72 2c 20 73 71 6c 69 74 65 5f 69 6e 74  rsor, sqlite_int
6300: 36 34 20 2a 70 72 6f 77 69 64 29 0d 0a 7b 0d 0a  64 *prowid)..{..
6310: 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62    Vdbe *p = (Vdb
6320: 65 20 2a 29 70 73 74 6d 74 3b 0d 0a 20 20 73 71  e *)pstmt;..  sq
6330: 6c 69 74 65 33 20 2a 64 62 20 3d 20 28 70 20 3d  lite3 *db = (p =
6340: 3d 20 4e 55 4c 4c 29 20 3f 20 4e 55 4c 4c 20 3a  = NULL) ? NULL :
6350: 20 70 2d 3e 64 62 3b 0d 0a 20 20 56 64 62 65 43   p->db;..  VdbeC
6360: 75 72 73 6f 72 20 2a 70 43 3b 0d 0a 20 20 69 6e  ursor *pC;..  in
6370: 74 20 72 65 74 20 3d 20 53 51 4c 49 54 45 5f 4f  t ret = SQLITE_O
6380: 4b 3b 0d 0a 0d 0a 20 20 73 71 6c 69 74 65 33 5f  K;....  sqlite3_
6390: 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e  mutex_enter(db->
63a0: 6d 75 74 65 78 29 3b 0d 0a 20 20 77 68 69 6c 65  mutex);..  while
63b0: 20 28 31 29 0d 0a 20 20 7b 0d 0a 20 20 20 20 69   (1)..  {..    i
63c0: 66 20 28 63 75 72 73 6f 72 20 3c 20 30 20 7c 7c  f (cursor < 0 ||
63d0: 20 63 75 72 73 6f 72 20 3e 3d 20 70 2d 3e 6e 43   cursor >= p->nC
63e0: 75 72 73 6f 72 29 0d 0a 20 20 20 20 7b 0d 0a 20  ursor)..    {.. 
63f0: 20 20 20 20 20 72 65 74 20 3d 20 53 51 4c 49 54       ret = SQLIT
6400: 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 20 20 20 20  E_ERROR;..      
6410: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 7d 0d 0a 20  break;..    }.. 
6420: 20 20 20 69 66 20 28 70 2d 3e 61 70 43 73 72 5b     if (p->apCsr[
6430: 63 75 72 73 6f 72 5d 20 3d 3d 20 4e 55 4c 4c 29  cursor] == NULL)
6440: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
6450: 65 74 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  et = SQLITE_ERRO
6460: 52 3b 0d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  R;..      break;
6470: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70  ..    }....    p
6480: 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 63 75 72  C = p->apCsr[cur
6490: 73 6f 72 5d 3b 0d 0a 0d 0a 20 20 20 20 72 65 74  sor];....    ret
64a0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
64b0: 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0d  rsorMoveto(pC);.
64c0: 0a 20 20 20 20 69 66 28 72 65 74 29 0d 0a 20 20  .    if(ret)..  
64d0: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 0d 0a 20 20      break;....  
64e0: 20 20 69 66 28 70 43 2d 3e 72 6f 77 69 64 49 73    if(pC->rowidIs
64f0: 56 61 6c 69 64 29 0d 0a 20 20 20 20 7b 0d 0a 20  Valid)..    {.. 
6500: 20 20 20 20 20 2a 70 72 6f 77 69 64 20 3d 20 70       *prowid = p
6510: 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0d 0a 20  C->lastRowid;.. 
6520: 20 20 20 7d 0d 0a 20 20 20 20 65 6c 73 65 20 69     }..    else i
6530: 66 28 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  f(pC->pseudoTabl
6540: 65 52 65 67 20 3e 20 30 29 0d 0a 20 20 20 20 7b  eReg > 0)..    {
6550: 0d 0a 20 20 20 20 20 20 72 65 74 20 3d 20 53 51  ..      ret = SQ
6560: 4c 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 20  LITE_ERROR;..   
6570: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 7d     break;..    }
6580: 0d 0a 20 20 20 20 65 6c 73 65 20 69 66 28 70 43  ..    else if(pC
6590: 2d 3e 6e 75 6c 6c 52 6f 77 20 7c 7c 20 70 43 2d  ->nullRow || pC-
65a0: 3e 70 43 75 72 73 6f 72 3d 3d 30 29 0d 0a 20 20  >pCursor==0)..  
65b0: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 20 3d    {..      ret =
65c0: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0d 0a   SQLITE_ERROR;..
65d0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
65e0: 20 20 7d 0d 0a 20 20 20 20 65 6c 73 65 0d 0a 20    }..    else.. 
65f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28     {..      if (
6600: 70 43 2d 3e 70 43 75 72 73 6f 72 20 3d 3d 20 4e  pC->pCursor == N
6610: 55 4c 4c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ULL)..      {.. 
6620: 20 20 20 20 20 20 20 72 65 74 20 3d 20 53 51 4c         ret = SQL
6630: 49 54 45 5f 45 52 52 4f 52 3b 0d 0a 20 20 20 20  ITE_ERROR;..    
6640: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20      break;..    
6650: 20 20 7d 0d 0a 20 20 20 20 20 20 73 71 6c 69 74    }..      sqlit
6660: 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
6670: 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70 72 6f 77  C->pCursor, prow
6680: 69 64 29 3b 0d 0a 20 20 20 20 20 20 2a 70 72 6f  id);..      *pro
6690: 77 69 64 20 3d 20 2a 70 72 6f 77 69 64 3b 0d 0a  wid = *prowid;..
66a0: 20 20 20 20 7d 0d 0a 20 20 20 20 62 72 65 61 6b      }..    break
66b0: 3b 0d 0a 20 20 7d 0d 0a 20 20 73 71 6c 69 74 65  ;..  }..  sqlite
66c0: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62  3_mutex_leave(db
66d0: 2d 3e 6d 75 74 65 78 29 3b 0d 0a 0d 0a 20 20 72  ->mutex);....  r
66e0: 65 74 75 72 6e 20 72 65 74 3b 0d 0a 7d 0d 0a 23  eturn ret;..}..#
66f0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
6700: 4f 53 5f 57 49 4e 20 2a 2f 0d 0a 0d 0a 2f 2a 2a  OS_WIN */..../**
6710: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6720: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6730: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6740: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6750: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0d 0a 0d 0a  ***********/....
6760: 2f 2a 0d 0a 2a 2a 20 54 68 65 20 49 4e 54 45 52  /*..** The INTER
6770: 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e 53 49 4f  OP_TEST_EXTENSIO
6780: 4e 20 62 6c 6f 63 6b 20 6d 75 73 74 20 62 65 20  N block must be 
6790: 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
67a0: 69 73 20 73 6f 75 72 63 65 20 66 69 6c 65 0d 0a  is source file..
67b0: 2a 2a 20 62 65 63 61 75 73 65 20 69 74 20 69 6e  ** because it in
67c0: 63 6c 75 64 65 73 20 74 68 65 20 22 73 71 6c 69  cludes the "sqli
67d0: 74 65 33 65 78 74 2e 68 22 20 66 69 6c 65 2c 20  te3ext.h" file, 
67e0: 77 68 69 63 68 20 64 65 66 69 6e 65 73 20 74 68  which defines th
67f0: 65 20 73 71 6c 69 74 65 33 0d 0a 2a 2a 20 70 75  e sqlite3..** pu
6800: 62 6c 69 63 20 41 50 49 20 66 75 6e 63 74 69 6f  blic API functio
6810: 6e 20 6e 61 6d 65 73 20 74 6f 20 62 65 20 6d 61  n names to be ma
6820: 63 72 6f 73 20 61 6e 64 20 74 68 61 74 20 77 6f  cros and that wo
6830: 75 6c 64 20 63 61 75 73 65 20 74 68 65 20 63 6f  uld cause the co
6840: 64 65 0d 0a 2a 2a 20 61 62 6f 76 65 20 74 68 69  de..** above thi
6850: 73 20 70 6f 69 6e 74 20 74 6f 20 6d 61 6c 66 75  s point to malfu
6860: 6e 63 74 69 6f 6e 2e 0d 0a 2a 2f 0d 0a 23 69 66  nction...*/..#if
6870: 20 64 65 66 69 6e 65 64 28 49 4e 54 45 52 4f 50   defined(INTEROP
6880: 5f 54 45 53 54 5f 45 58 54 45 4e 53 49 4f 4e 29  _TEST_EXTENSION)
6890: 0d 0a 23 69 6e 63 6c 75 64 65 20 22 2e 2e 2f 63  ..#include "../c
68a0: 6f 72 65 2f 73 71 6c 69 74 65 33 65 78 74 2e 68  ore/sqlite3ext.h
68b0: 22 0d 0a 53 51 4c 49 54 45 5f 45 58 54 45 4e 53  "..SQLITE_EXTENS
68c0: 49 4f 4e 5f 49 4e 49 54 31 0d 0a 0d 0a 2f 2a 0d  ION_INIT1..../*.
68d0: 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 6f 70 54  .** The interopT
68e0: 65 73 74 28 29 20 53 51 4c 20 66 75 6e 63 74 69  est() SQL functi
68f0: 6f 6e 20 72 65 74 75 72 6e 73 20 69 74 73 20 66  on returns its f
6900: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 6f 72  irst argument or
6910: 20 72 61 69 73 65 73 20 61 6e 0d 0a 2a 2a 20 65   raises an..** e
6920: 72 72 6f 72 20 69 66 20 74 68 65 72 65 20 61 72  rror if there ar
6930: 65 20 6e 6f 74 20 65 6e 6f 75 67 68 20 61 72 67  e not enough arg
6940: 75 6d 65 6e 74 73 2e 0d 0a 2a 2f 0d 0a 53 51 4c  uments...*/..SQL
6950: 49 54 45 5f 50 52 49 56 41 54 45 20 76 6f 69 64  ITE_PRIVATE void
6960: 20 69 6e 74 65 72 6f 70 54 65 73 74 46 75 6e 63   interopTestFunc
6970: 28 0d 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  (..  sqlite3_con
6980: 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 0d 0a  text *context,..
6990: 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 73    int argc,..  s
69a0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
69b0: 72 67 76 0d 0a 29 7b 0d 0a 20 20 63 6f 6e 73 74  rgv..){..  const
69c0: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
69d0: 7a 3b 0d 0a 20 20 69 66 28 20 61 72 67 63 21 3d  z;..  if( argc!=
69e0: 31 20 29 7b 0d 0a 20 20 20 20 73 71 6c 69 74 65  1 ){..    sqlite
69f0: 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63  3_result_error(c
6a00: 6f 6e 74 65 78 74 2c 20 22 6e 65 65 64 20 65 78  ontext, "need ex
6a10: 61 63 74 6c 79 20 6f 6e 65 20 61 72 67 75 6d 65  actly one argume
6a20: 6e 74 22 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 72  nt", -1);..    r
6a30: 65 74 75 72 6e 3b 0d 0a 20 20 7d 0d 0a 20 20 7a  eturn;..  }..  z
6a40: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
6a50: 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29 3b 0d  _text(argv[0]);.
6a60: 0a 20 20 69 66 28 20 7a 20 29 7b 0d 0a 20 20 20  .  if( z ){..   
6a70: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
6a80: 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 28 63  text(context, (c
6a90: 68 61 72 2a 29 7a 2c 20 2d 31 2c 20 53 51 4c 49  har*)z, -1, SQLI
6aa0: 54 45 5f 53 54 41 54 49 43 29 3b 0d 0a 20 20 7d  TE_STATIC);..  }
6ab0: 65 6c 73 65 7b 0d 0a 20 20 20 20 73 71 6c 69 74  else{..    sqlit
6ac0: 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63  e3_result_null(c
6ad0: 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 7d 0d 0a 7d  ontext);..  }..}
6ae0: 0d 0a 0d 0a 2f 2a 0d 0a 2a 2a 20 54 68 65 20 69  ..../*..** The i
6af0: 6e 74 65 72 6f 70 53 6c 65 65 70 28 29 20 53 51  nteropSleep() SQ
6b00: 4c 20 66 75 6e 63 74 69 6f 6e 20 77 61 69 74 73  L function waits
6b10: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6e   the specified n
6b20: 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65  umber of millise
6b30: 63 6f 6e 64 73 0d 0a 2a 2a 20 6f 72 20 72 61 69  conds..** or rai
6b40: 73 65 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20  ses an error if 
6b50: 74 68 65 72 65 20 61 72 65 20 6e 6f 74 20 65 6e  there are not en
6b60: 6f 75 67 68 20 61 72 67 75 6d 65 6e 74 73 2e 0d  ough arguments..
6b70: 0a 2a 2f 0d 0a 53 51 4c 49 54 45 5f 50 52 49 56  .*/..SQLITE_PRIV
6b80: 41 54 45 20 76 6f 69 64 20 69 6e 74 65 72 6f 70  ATE void interop
6b90: 53 6c 65 65 70 46 75 6e 63 28 0d 0a 20 20 73 71  SleepFunc(..  sq
6ba0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63  lite3_context *c
6bb0: 6f 6e 74 65 78 74 2c 0d 0a 20 20 69 6e 74 20 61  ontext,..  int a
6bc0: 72 67 63 2c 0d 0a 20 20 73 71 6c 69 74 65 33 5f  rgc,..  sqlite3_
6bd0: 76 61 6c 75 65 20 2a 2a 61 72 67 76 0d 0a 29 7b  value **argv..){
6be0: 0d 0a 20 20 69 6e 74 20 6d 3b 0d 0a 20 20 69 66  ..  int m;..  if
6bf0: 28 20 61 72 67 63 21 3d 31 20 29 7b 0d 0a 20 20  ( argc!=1 ){..  
6c00: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
6c10: 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20  _error(context, 
6c20: 22 6e 65 65 64 20 65 78 61 63 74 6c 79 20 6f 6e  "need exactly on
6c30: 65 20 61 72 67 75 6d 65 6e 74 22 2c 20 2d 31 29  e argument", -1)
6c40: 3b 0d 0a 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a  ;..    return;..
6c50: 20 20 7d 0d 0a 20 20 6d 20 3d 20 73 71 6c 69 74    }..  m = sqlit
6c60: 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 61 72 67  e3_value_int(arg
6c70: 76 5b 30 5d 29 3b 0d 0a 23 69 66 20 53 51 4c 49  v[0]);..#if SQLI
6c80: 54 45 5f 4f 53 5f 57 49 4e 43 45 0d 0a 20 20 53  TE_OS_WINCE..  S
6c90: 6c 65 65 70 28 6d 29 3b 0d 0a 20 20 73 71 6c 69  leep(m);..  sqli
6ca0: 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63  te3_result_int(c
6cb0: 6f 6e 74 65 78 74 2c 20 57 41 49 54 5f 4f 42 4a  ontext, WAIT_OBJ
6cc0: 45 43 54 5f 30 29 3b 0d 0a 23 65 6c 73 65 0d 0a  ECT_0);..#else..
6cd0: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
6ce0: 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 53 6c  _int(context, Sl
6cf0: 65 65 70 45 78 28 6d 2c 20 54 52 55 45 29 29 3b  eepEx(m, TRUE));
6d00: 0d 0a 23 65 6e 64 69 66 0d 0a 7d 0d 0a 0d 0a 2f  ..#endif..}..../
6d10: 2a 20 53 51 4c 69 74 65 20 69 6e 76 6f 6b 65 73  * SQLite invokes
6d20: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 6f 6e   this routine on
6d30: 63 65 20 77 68 65 6e 20 69 74 20 6c 6f 61 64 73  ce when it loads
6d40: 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d   the extension..
6d50: 0a 2a 2a 20 43 72 65 61 74 65 20 6e 65 77 20 66  .** Create new f
6d60: 75 6e 63 74 69 6f 6e 73 2c 20 63 6f 6c 6c 61 74  unctions, collat
6d70: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 2c 20 61  ing sequences, a
6d80: 6e 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  nd virtual table
6d90: 0d 0a 2a 2a 20 6d 6f 64 75 6c 65 73 20 68 65 72  ..** modules her
6da0: 65 2e 20 20 54 68 69 73 20 69 73 20 75 73 75 61  e.  This is usua
6db0: 6c 6c 79 20 74 68 65 20 6f 6e 6c 79 20 65 78 70  lly the only exp
6dc0: 6f 72 74 65 64 20 73 79 6d 62 6f 6c 20 69 6e 0d  orted symbol in.
6dd0: 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64 20 6c  .** the shared l
6de0: 69 62 72 61 72 79 2e 0d 0a 2a 2f 0d 0a 53 51 4c  ibrary...*/..SQL
6df0: 49 54 45 5f 41 50 49 20 69 6e 74 20 69 6e 74 65  ITE_API int inte
6e00: 72 6f 70 5f 74 65 73 74 5f 65 78 74 65 6e 73 69  rop_test_extensi
6e10: 6f 6e 5f 69 6e 69 74 28 0d 0a 20 20 73 71 6c 69  on_init(..  sqli
6e20: 74 65 33 20 2a 64 62 2c 0d 0a 20 20 63 68 61 72  te3 *db,..  char
6e30: 20 2a 2a 70 7a 45 72 72 4d 73 67 2c 0d 0a 20 20   **pzErrMsg,..  
6e40: 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 61 70  const sqlite3_ap
6e50: 69 5f 72 6f 75 74 69 6e 65 73 20 2a 70 41 70 69  i_routines *pApi
6e60: 0d 0a 29 7b 0d 0a 20 20 69 6e 74 20 72 63 3b 0d  ..){..  int rc;.
6e70: 0a 20 20 53 51 4c 49 54 45 5f 45 58 54 45 4e 53  .  SQLITE_EXTENS
6e80: 49 4f 4e 5f 49 4e 49 54 32 28 70 41 70 69 29 0d  ION_INIT2(pApi).
6e90: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
6ea0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
6eb0: 64 62 2c 20 22 69 6e 74 65 72 6f 70 54 65 73 74  db, "interopTest
6ec0: 22 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 41 4e  ", -1, SQLITE_AN
6ed0: 59 2c 20 30 2c 0d 0a 20 20 20 20 20 20 69 6e 74  Y, 0,..      int
6ee0: 65 72 6f 70 54 65 73 74 46 75 6e 63 2c 20 30 2c  eropTestFunc, 0,
6ef0: 20 30 29 3b 0d 0a 20 20 69 66 28 20 72 63 3d 3d   0);..  if( rc==
6f00: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0d 0a 20 20  SQLITE_OK ){..  
6f10: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63    rc = sqlite3_c
6f20: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64  reate_function(d
6f30: 62 2c 20 22 69 6e 74 65 72 6f 70 53 6c 65 65 70  b, "interopSleep
6f40: 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f 41 4e 59  ", 1, SQLITE_ANY
6f50: 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e  , 0,..        in
6f60: 74 65 72 6f 70 53 6c 65 65 70 46 75 6e 63 2c 20  teropSleepFunc, 
6f70: 30 2c 20 30 29 3b 0d 0a 20 20 7d 0d 0a 20 20 72  0, 0);..  }..  r
6f80: 65 74 75 72 6e 20 72 63 3b 0d 0a 7d 0d 0a 23 65  eturn rc;..}..#e
6f90: 6e 64 69 66 0d 0a                                ndif..