System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact dae4690a95e04a0afec2756dbf557636b35b81c8:


0000: 23 69 6e 63 6c 75 64 65 20 22 73 72 63 2f 73 71  #include "src/sq
0010: 6c 69 74 65 33 2e 63 22 0a 23 69 6e 63 6c 75 64  lite3.c".#includ
0020: 65 20 22 63 72 79 70 74 2e 63 22 0a 23 69 6e 63  e "crypt.c".#inc
0030: 6c 75 64 65 20 3c 74 63 68 61 72 2e 68 3e 0a 0a  lude <tchar.h>..
0040: 23 69 66 20 4e 44 45 42 55 47 0a 0a 23 69 66 20  #if NDEBUG..#if 
0050: 5f 57 49 4e 33 32 5f 57 43 45 0a 23 69 6e 63 6c  _WIN32_WCE.#incl
0060: 75 64 65 20 22 6d 65 72 67 65 2e 68 22 0a 0a 2f  ude "merge.h"../
0070: 2f 20 49 4d 50 4f 52 54 41 4e 54 3a 20 54 68 69  / IMPORTANT: Thi
0080: 73 20 70 6c 61 63 65 68 6f 6c 64 65 72 20 69 73  s placeholder is
0090: 20 68 65 72 65 20 66 6f 72 20 61 20 72 65 61 73   here for a reas
00a0: 6f 6e 21 21 21 0a 2f 2f 20 4f 6e 20 74 68 65 20  on!!!.// On the 
00b0: 43 6f 6d 70 61 63 74 20 46 72 61 6d 65 77 6f 72  Compact Framewor
00c0: 6b 20 74 68 65 20 2e 64 61 74 61 20 73 65 63 74  k the .data sect
00d0: 69 6f 6e 20 6f 66 20 74 68 65 20 44 4c 4c 20 6d  ion of the DLL m
00e0: 75 73 74 20 68 61 76 65 20 69 74 73 20 52 61 77  ust have its Raw
00f0: 44 61 74 61 53 69 7a 65 20 6c 61 72 67 65 72 20  DataSize larger 
0100: 74 68 61 6e 20 74 68 65 20 56 69 72 74 75 61 6c  than the Virtual
0110: 53 69 7a 65 21 0a 2f 2f 20 49 66 20 69 74 73 20  Size!.// If its 
0120: 6e 6f 74 2c 20 73 74 72 6f 6e 67 20 6e 61 6d 65  not, strong name
0130: 20 76 61 6c 69 64 61 74 69 6f 6e 20 77 69 6c 6c   validation will
0140: 20 66 61 69 6c 20 61 6e 64 20 6f 74 68 65 72 20   fail and other 
0150: 62 61 64 20 74 68 69 6e 67 73 20 77 69 6c 6c 20  bad things will 
0160: 68 61 70 70 65 6e 2e 0a 44 57 4f 52 44 20 5f 70  happen..DWORD _p
0170: 68 5b 5d 20 3d 20 7b 30 2c 31 2c 32 2c 33 2c 34  h[] = {0,1,2,3,4
0180: 2c 35 2c 36 2c 37 2c 38 2c 39 2c 31 30 2c 31 31  ,5,6,7,8,9,10,11
0190: 2c 31 32 2c 31 33 2c 31 34 2c 31 35 7d 3b 0a 0a  ,12,13,14,15};..
01a0: 23 65 6c 73 65 0a 23 69 6e 63 6c 75 64 65 20 22  #else.#include "
01b0: 6d 65 72 67 65 5f 66 75 6c 6c 2e 68 22 0a 23 65  merge_full.h".#e
01c0: 6e 64 69 66 20 2f 2f 20 5f 57 49 4e 33 32 5f 57  ndif // _WIN32_W
01d0: 43 45 0a 23 65 6e 64 69 66 20 2f 2f 20 4e 44 45  CE.#endif // NDE
01e0: 42 55 47 0a 0a 23 69 66 64 65 66 20 4f 53 5f 57  BUG..#ifdef OS_W
01f0: 49 4e 0a 0a 23 69 6e 63 6c 75 64 65 20 3c 74 63  IN..#include <tc
0200: 68 61 72 2e 68 3e 0a 0a 2f 2f 20 41 64 64 69 74  har.h>..// Addit
0210: 69 6f 6e 61 6c 20 66 6c 61 67 20 66 6f 72 20 73  ional flag for s
0220: 71 6c 69 74 65 33 2e 66 6c 61 67 73 2c 20 77 65  qlite3.flags, we
0230: 20 75 73 65 20 69 74 20 61 73 20 61 20 72 65 66   use it as a ref
0240: 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 0a 23  erence counter.#
0250: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 61  define SQLITE_Wa
0260: 6e 74 43 6c 6f 73 65 20 30 78 30 31 30 30 30 30  ntClose 0x010000
0270: 30 30 0a 0a 74 79 70 65 64 65 66 20 76 6f 69 64  00..typedef void
0280: 20 28 57 49 4e 41 50 49 20 2a 53 51 4c 49 54 45   (WINAPI *SQLITE
0290: 55 53 45 52 46 55 4e 43 29 28 76 6f 69 64 20 2a  USERFUNC)(void *
02a0: 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2a 29 3b  , int, void **);
02b0: 0a 74 79 70 65 64 65 66 20 69 6e 74 20 20 28 57  .typedef int  (W
02c0: 49 4e 41 50 49 20 2a 53 51 4c 49 54 45 43 4f 4c  INAPI *SQLITECOL
02d0: 4c 41 54 49 4f 4e 29 28 69 6e 74 2c 20 63 6f 6e  LATION)(int, con
02e0: 73 74 20 76 6f 69 64 20 2a 2c 20 69 6e 74 2c 20  st void *, int, 
02f0: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 0a 74  const void*);..t
0300: 79 70 65 64 65 66 20 76 6f 69 64 20 28 57 49 4e  ypedef void (WIN
0310: 41 50 49 20 2a 53 51 4c 49 54 45 55 50 44 41 54  API *SQLITEUPDAT
0320: 45 48 4f 4f 4b 29 28 69 6e 74 2c 20 63 6f 6e 73  EHOOK)(int, cons
0330: 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 63  t char *, int, c
0340: 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
0350: 2c 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b  , sqlite_int64);
0360: 0a 74 79 70 65 64 65 66 20 69 6e 74 20 20 28 57  .typedef int  (W
0370: 49 4e 41 50 49 20 2a 53 51 4c 49 54 45 43 4f 4d  INAPI *SQLITECOM
0380: 4d 49 54 48 4f 4f 4b 29 28 29 3b 0a 74 79 70 65  MITHOOK)();.type
0390: 64 65 66 20 76 6f 69 64 20 28 57 49 4e 41 50 49  def void (WINAPI
03a0: 20 2a 53 51 4c 49 54 45 52 4f 4c 4c 42 41 43 4b   *SQLITEROLLBACK
03b0: 48 4f 4f 4b 29 28 29 3b 0a 0a 74 79 70 65 64 65  HOOK)();..typede
03c0: 66 20 48 41 4e 44 4c 45 20 28 57 49 4e 41 50 49  f HANDLE (WINAPI
03d0: 20 2a 43 52 45 41 54 45 46 49 4c 45 57 29 28 0a   *CREATEFILEW)(.
03e0: 20 20 20 20 4c 50 43 57 53 54 52 2c 0a 20 20 20      LPCWSTR,.   
03f0: 20 44 57 4f 52 44 2c 0a 20 20 20 20 44 57 4f 52   DWORD,.    DWOR
0400: 44 2c 0a 20 20 20 20 4c 50 53 45 43 55 52 49 54  D,.    LPSECURIT
0410: 59 5f 41 54 54 52 49 42 55 54 45 53 2c 0a 20 20  Y_ATTRIBUTES,.  
0420: 20 20 44 57 4f 52 44 2c 0a 20 20 20 20 44 57 4f    DWORD,.    DWO
0430: 52 44 2c 0a 20 20 20 20 48 41 4e 44 4c 45 29 3b  RD,.    HANDLE);
0440: 0a 0a 2f 2f 20 43 61 6c 6c 62 61 63 6b 20 77 72  ..// Callback wr
0450: 61 70 70 65 72 73 0a 69 6e 74 20 73 71 6c 69 74  appers.int sqlit
0460: 65 33 5f 69 6e 74 65 72 6f 70 5f 63 6f 6c 6c 61  e3_interop_colla
0470: 74 69 6f 6e 66 75 6e 63 28 76 6f 69 64 20 2a 70  tionfunc(void *p
0480: 76 2c 20 69 6e 74 20 6c 65 6e 31 2c 20 63 6f 6e  v, int len1, con
0490: 73 74 20 76 6f 69 64 20 2a 70 76 31 2c 20 69 6e  st void *pv1, in
04a0: 74 20 6c 65 6e 32 2c 20 63 6f 6e 73 74 20 76 6f  t len2, const vo
04b0: 69 64 20 2a 70 76 32 29 0a 7b 0a 20 20 53 51 4c  id *pv2).{.  SQL
04c0: 49 54 45 43 4f 4c 4c 41 54 49 4f 4e 20 2a 70 20  ITECOLLATION *p 
04d0: 3d 20 28 53 51 4c 49 54 45 43 4f 4c 4c 41 54 49  = (SQLITECOLLATI
04e0: 4f 4e 20 2a 29 70 76 3b 0a 20 20 72 65 74 75 72  ON *)pv;.  retur
04f0: 6e 20 70 5b 30 5d 28 6c 65 6e 31 2c 20 70 76 31  n p[0](len1, pv1
0500: 2c 20 6c 65 6e 32 2c 20 70 76 32 29 3b 0a 7d 0a  , len2, pv2);.}.
0510: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 69 6e  .void sqlite3_in
0520: 74 65 72 6f 70 5f 66 75 6e 63 28 73 71 6c 69 74  terop_func(sqlit
0530: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 63 74 78  e3_context *pctx
0540: 2c 20 69 6e 74 20 6e 2c 20 73 71 6c 69 74 65 33  , int n, sqlite3
0550: 5f 76 61 6c 75 65 20 2a 2a 70 76 29 0a 7b 0a 20  _value **pv).{. 
0560: 20 53 51 4c 49 54 45 55 53 45 52 46 55 4e 43 20   SQLITEUSERFUNC 
0570: 2a 70 66 20 3d 20 28 53 51 4c 49 54 45 55 53 45  *pf = (SQLITEUSE
0580: 52 46 55 4e 43 20 2a 29 73 71 6c 69 74 65 33 5f  RFUNC *)sqlite3_
0590: 75 73 65 72 5f 64 61 74 61 28 70 63 74 78 29 3b  user_data(pctx);
05a0: 0a 20 20 70 66 5b 30 5d 28 70 63 74 78 2c 20 6e  .  pf[0](pctx, n
05b0: 2c 20 28 76 6f 69 64 20 2a 2a 29 70 76 29 3b 0a  , (void **)pv);.
05c0: 7d 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  }..void sqlite3_
05d0: 69 6e 74 65 72 6f 70 5f 73 74 65 70 28 73 71 6c  interop_step(sql
05e0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 63  ite3_context *pc
05f0: 74 78 2c 20 69 6e 74 20 6e 2c 20 73 71 6c 69 74  tx, int n, sqlit
0600: 65 33 5f 76 61 6c 75 65 20 2a 2a 70 76 29 0a 7b  e3_value **pv).{
0610: 0a 20 20 53 51 4c 49 54 45 55 53 45 52 46 55 4e  .  SQLITEUSERFUN
0620: 43 20 2a 70 66 20 3d 20 28 53 51 4c 49 54 45 55  C *pf = (SQLITEU
0630: 53 45 52 46 55 4e 43 20 2a 29 73 71 6c 69 74 65  SERFUNC *)sqlite
0640: 33 5f 75 73 65 72 5f 64 61 74 61 28 70 63 74 78  3_user_data(pctx
0650: 29 3b 0a 20 20 70 66 5b 31 5d 28 70 63 74 78 2c  );.  pf[1](pctx,
0660: 20 6e 2c 20 28 76 6f 69 64 20 2a 2a 29 70 76 29   n, (void **)pv)
0670: 3b 0a 7d 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  ;.}..void sqlite
0680: 33 5f 69 6e 74 65 72 6f 70 5f 66 69 6e 61 6c 28  3_interop_final(
0690: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
06a0: 2a 70 63 74 78 29 0a 7b 0a 20 20 53 51 4c 49 54  *pctx).{.  SQLIT
06b0: 45 55 53 45 52 46 55 4e 43 20 2a 70 66 20 3d 20  EUSERFUNC *pf = 
06c0: 28 53 51 4c 49 54 45 55 53 45 52 46 55 4e 43 20  (SQLITEUSERFUNC 
06d0: 2a 29 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64  *)sqlite3_user_d
06e0: 61 74 61 28 70 63 74 78 29 3b 0a 20 20 70 66 5b  ata(pctx);.  pf[
06f0: 32 5d 28 70 63 74 78 2c 20 30 2c 20 30 29 3b 0a  2](pctx, 0, 0);.
0700: 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c  }..__declspec(dl
0710: 6c 65 78 70 6f 72 74 29 20 76 6f 69 64 20 57 49  lexport) void WI
0720: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 73 6c 65  NAPI sqlite3_sle
0730: 65 70 5f 69 6e 74 65 72 6f 70 28 69 6e 74 20 6d  ep_interop(int m
0740: 69 6c 6c 69 73 65 63 6f 6e 64 73 29 0a 7b 0a 20  illiseconds).{. 
0750: 20 53 6c 65 65 70 28 6d 69 6c 6c 69 73 65 63 6f   Sleep(milliseco
0760: 6e 64 73 29 3b 0a 7d 0a 0a 76 6f 69 64 20 49 6e  nds);.}..void In
0770: 69 74 69 61 6c 69 7a 65 44 62 4d 75 74 65 78 28  itializeDbMutex(
0780: 73 71 6c 69 74 65 33 20 2a 70 64 62 29 0a 7b 0a  sqlite3 *pdb).{.
0790: 20 20 70 64 62 2d 3e 70 54 72 61 63 65 41 72 67    pdb->pTraceArg
07a0: 20 3d 20 28 43 52 49 54 49 43 41 4c 5f 53 45 43   = (CRITICAL_SEC
07b0: 54 49 4f 4e 20 2a 29 73 71 6c 69 74 65 4d 61 6c  TION *)sqliteMal
07c0: 6c 6f 63 28 73 69 7a 65 6f 66 28 43 52 49 54 49  loc(sizeof(CRITI
07d0: 43 41 4c 5f 53 45 43 54 49 4f 4e 29 29 3b 0a 20  CAL_SECTION));. 
07e0: 20 49 6e 69 74 69 61 6c 69 7a 65 43 72 69 74 69   InitializeCriti
07f0: 63 61 6c 53 65 63 74 69 6f 6e 28 70 64 62 2d 3e  calSection(pdb->
0800: 70 54 72 61 63 65 41 72 67 29 3b 0a 7d 0a 0a 76  pTraceArg);.}..v
0810: 6f 69 64 20 45 6e 74 65 72 44 62 4d 75 74 65 78  oid EnterDbMutex
0820: 28 73 71 6c 69 74 65 33 20 2a 70 64 62 29 0a 7b  (sqlite3 *pdb).{
0830: 0a 20 20 69 66 20 28 70 64 62 2d 3e 70 54 72 61  .  if (pdb->pTra
0840: 63 65 41 72 67 29 0a 20 20 7b 0a 20 20 20 20 45  ceArg).  {.    E
0850: 6e 74 65 72 43 72 69 74 69 63 61 6c 53 65 63 74  nterCriticalSect
0860: 69 6f 6e 28 70 64 62 2d 3e 70 54 72 61 63 65 41  ion(pdb->pTraceA
0870: 72 67 29 3b 0a 20 20 7d 0a 7d 0a 0a 76 6f 69 64  rg);.  }.}..void
0880: 20 4c 65 61 76 65 44 62 4d 75 74 65 78 28 73 71   LeaveDbMutex(sq
0890: 6c 69 74 65 33 20 2a 70 64 62 29 0a 7b 0a 20 20  lite3 *pdb).{.  
08a0: 69 66 20 28 70 64 62 2d 3e 70 54 72 61 63 65 41  if (pdb->pTraceA
08b0: 72 67 29 0a 20 20 7b 0a 20 20 20 20 4c 65 61 76  rg).  {.    Leav
08c0: 65 43 72 69 74 69 63 61 6c 53 65 63 74 69 6f 6e  eCriticalSection
08d0: 28 70 64 62 2d 3e 70 54 72 61 63 65 41 72 67 29  (pdb->pTraceArg)
08e0: 3b 0a 20 20 7d 0a 7d 0a 0a 69 6e 74 20 73 71 6c  ;.  }.}..int sql
08f0: 69 74 65 33 5f 63 6c 6f 73 65 41 6e 64 46 72 65  ite3_closeAndFre
0900: 65 4d 75 74 65 78 28 73 71 6c 69 74 65 33 20 2a  eMutex(sqlite3 *
0910: 64 62 29 0a 7b 0a 20 20 43 52 49 54 49 43 41 4c  db).{.  CRITICAL
0920: 5f 53 45 43 54 49 4f 4e 20 2a 70 63 72 69 74 20  _SECTION *pcrit 
0930: 3d 20 64 62 2d 3e 70 54 72 61 63 65 41 72 67 3b  = db->pTraceArg;
0940: 0a 20 20 69 6e 74 20 72 65 74 3b 0a 20 20 45 6e  .  int ret;.  En
0950: 74 65 72 44 62 4d 75 74 65 78 28 64 62 29 3b 0a  terDbMutex(db);.
0960: 0a 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33  .  ret = sqlite3
0970: 5f 63 6c 6f 73 65 28 64 62 29 3b 0a 20 20 69 66  _close(db);.  if
0980: 20 28 72 65 74 20 3d 3d 20 53 51 4c 49 54 45 5f   (ret == SQLITE_
0990: 4f 4b 29 0a 20 20 7b 0a 20 20 20 20 69 66 20 28  OK).  {.    if (
09a0: 70 63 72 69 74 29 0a 20 20 20 20 7b 0a 20 20 20  pcrit).    {.   
09b0: 20 20 20 4c 65 61 76 65 43 72 69 74 69 63 61 6c     LeaveCritical
09c0: 53 65 63 74 69 6f 6e 28 70 63 72 69 74 29 3b 0a  Section(pcrit);.
09d0: 20 20 20 20 20 20 44 65 6c 65 74 65 43 72 69 74        DeleteCrit
09e0: 69 63 61 6c 53 65 63 74 69 6f 6e 28 70 63 72 69  icalSection(pcri
09f0: 74 29 3b 0a 20 20 20 20 20 20 66 72 65 65 28 70  t);.      free(p
0a00: 63 72 69 74 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  crit);.    }.  }
0a10: 0a 20 20 65 6c 73 65 0a 20 20 20 20 4c 65 61 76  .  else.    Leav
0a20: 65 44 62 4d 75 74 65 78 28 64 62 29 3b 0a 0a 20  eDbMutex(db);.. 
0a30: 20 72 65 74 75 72 6e 20 72 65 74 3b 0a 7d 0a 0a   return ret;.}..
0a40: 69 6e 74 20 53 65 74 43 6f 6d 70 72 65 73 73 69  int SetCompressi
0a50: 6f 6e 28 63 6f 6e 73 74 20 77 63 68 61 72 5f 74  on(const wchar_t
0a60: 20 2a 70 77 73 7a 46 69 6c 65 6e 61 6d 65 2c 20   *pwszFilename, 
0a70: 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 75  unsigned short u
0a80: 66 4c 65 76 65 6c 29 0a 7b 0a 23 69 66 64 65 66  fLevel).{.#ifdef
0a90: 20 46 53 43 54 4c 5f 53 45 54 5f 43 4f 4d 50 52   FSCTL_SET_COMPR
0aa0: 45 53 53 49 4f 4e 0a 20 20 48 4d 4f 44 55 4c 45  ESSION.  HMODULE
0ab0: 20 68 4d 6f 64 20 3d 20 47 65 74 4d 6f 64 75 6c   hMod = GetModul
0ac0: 65 48 61 6e 64 6c 65 28 5f 54 28 22 4b 45 52 4e  eHandle(_T("KERN
0ad0: 45 4c 33 32 22 29 29 3b 0a 20 20 43 52 45 41 54  EL32"));.  CREAT
0ae0: 45 46 49 4c 45 57 20 70 66 75 6e 63 3b 0a 20 20  EFILEW pfunc;.  
0af0: 48 41 4e 44 4c 45 20 68 46 69 6c 65 3b 0a 20 20  HANDLE hFile;.  
0b00: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 64 77  unsigned long dw
0b10: 20 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a   = 0;.  int n;..
0b20: 20 20 69 66 20 28 68 4d 6f 64 20 3d 3d 20 4e 55    if (hMod == NU
0b30: 4c 4c 29 0a 20 20 7b 0a 20 20 20 20 53 65 74 4c  LL).  {.    SetL
0b40: 61 73 74 45 72 72 6f 72 28 45 52 52 4f 52 5f 4e  astError(ERROR_N
0b50: 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 20  OT_SUPPORTED);. 
0b60: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
0b70: 0a 0a 20 20 70 66 75 6e 63 20 3d 20 28 43 52 45  ..  pfunc = (CRE
0b80: 41 54 45 46 49 4c 45 57 29 47 65 74 50 72 6f 63  ATEFILEW)GetProc
0b90: 41 64 64 72 65 73 73 28 68 4d 6f 64 2c 20 5f 54  Address(hMod, _T
0ba0: 28 22 43 72 65 61 74 65 46 69 6c 65 57 22 29 29  ("CreateFileW"))
0bb0: 3b 0a 20 20 69 66 20 28 70 66 75 6e 63 20 3d 3d  ;.  if (pfunc ==
0bc0: 20 4e 55 4c 4c 29 0a 20 20 7b 0a 20 20 20 20 53   NULL).  {.    S
0bd0: 65 74 4c 61 73 74 45 72 72 6f 72 28 45 52 52 4f  etLastError(ERRO
0be0: 52 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29  R_NOT_SUPPORTED)
0bf0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  ;.    return 0;.
0c00: 20 20 7d 0a 0a 20 20 68 46 69 6c 65 20 3d 20 70    }..  hFile = p
0c10: 66 75 6e 63 28 70 77 73 7a 46 69 6c 65 6e 61 6d  func(pwszFilenam
0c20: 65 2c 20 47 45 4e 45 52 49 43 5f 52 45 41 44 7c  e, GENERIC_READ|
0c30: 47 45 4e 45 52 49 43 5f 57 52 49 54 45 2c 20 30  GENERIC_WRITE, 0
0c40: 2c 20 4e 55 4c 4c 2c 20 4f 50 45 4e 5f 45 58 49  , NULL, OPEN_EXI
0c50: 53 54 49 4e 47 2c 20 46 49 4c 45 5f 41 54 54 52  STING, FILE_ATTR
0c60: 49 42 55 54 45 5f 4e 4f 52 4d 41 4c 2c 20 4e 55  IBUTE_NORMAL, NU
0c70: 4c 4c 29 3b 0a 20 20 69 66 20 28 68 46 69 6c 65  LL);.  if (hFile
0c80: 20 3d 3d 20 4e 55 4c 4c 29 0a 20 20 20 20 72 65   == NULL).    re
0c90: 74 75 72 6e 20 30 3b 0a 0a 20 20 6e 20 3d 20 44  turn 0;..  n = D
0ca0: 65 76 69 63 65 49 6f 43 6f 6e 74 72 6f 6c 28 68  eviceIoControl(h
0cb0: 46 69 6c 65 2c 20 46 53 43 54 4c 5f 53 45 54 5f  File, FSCTL_SET_
0cc0: 43 4f 4d 50 52 45 53 53 49 4f 4e 2c 20 26 75 66  COMPRESSION, &uf
0cd0: 4c 65 76 65 6c 2c 20 73 69 7a 65 6f 66 28 75 66  Level, sizeof(uf
0ce0: 4c 65 76 65 6c 29 2c 20 4e 55 4c 4c 2c 20 30 2c  Level), NULL, 0,
0cf0: 20 26 64 77 2c 20 4e 55 4c 4c 29 3b 0a 0a 20 20   &dw, NULL);..  
0d00: 43 6c 6f 73 65 48 61 6e 64 6c 65 28 68 46 69 6c  CloseHandle(hFil
0d10: 65 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20 6e 3b  e);..  return n;
0d20: 0a 23 65 6c 73 65 0a 20 20 53 65 74 4c 61 73 74  .#else.  SetLast
0d30: 45 72 72 6f 72 28 45 52 52 4f 52 5f 4e 4f 54 5f  Error(ERROR_NOT_
0d40: 53 55 50 50 4f 52 54 45 44 29 3b 0a 20 20 72 65  SUPPORTED);.  re
0d50: 74 75 72 6e 20 30 3b 0a 23 65 6e 64 69 66 0a 7d  turn 0;.#endif.}
0d60: 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c  ..__declspec(dll
0d70: 65 78 70 6f 72 74 29 20 69 6e 74 20 57 49 4e 41  export) int WINA
0d80: 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 72  PI sqlite3_compr
0d90: 65 73 73 66 69 6c 65 28 63 6f 6e 73 74 20 77 63  essfile(const wc
0da0: 68 61 72 5f 74 20 2a 70 77 73 7a 46 69 6c 65 6e  har_t *pwszFilen
0db0: 61 6d 65 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20  ame).{.  return 
0dc0: 53 65 74 43 6f 6d 70 72 65 73 73 69 6f 6e 28 70  SetCompression(p
0dd0: 77 73 7a 46 69 6c 65 6e 61 6d 65 2c 20 43 4f 4d  wszFilename, COM
0de0: 50 52 45 53 53 49 4f 4e 5f 46 4f 52 4d 41 54 5f  PRESSION_FORMAT_
0df0: 44 45 46 41 55 4c 54 29 3b 0a 7d 0a 0a 5f 5f 64  DEFAULT);.}..__d
0e00: 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72  eclspec(dllexpor
0e10: 74 29 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71  t) int WINAPI sq
0e20: 6c 69 74 65 33 5f 64 65 63 6f 6d 70 72 65 73 73  lite3_decompress
0e30: 66 69 6c 65 28 63 6f 6e 73 74 20 77 63 68 61 72  file(const wchar
0e40: 5f 74 20 2a 70 77 73 7a 46 69 6c 65 6e 61 6d 65  _t *pwszFilename
0e50: 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20 53 65 74  ).{.  return Set
0e60: 43 6f 6d 70 72 65 73 73 69 6f 6e 28 70 77 73 7a  Compression(pwsz
0e70: 46 69 6c 65 6e 61 6d 65 2c 20 43 4f 4d 50 52 45  Filename, COMPRE
0e80: 53 53 49 4f 4e 5f 46 4f 52 4d 41 54 5f 4e 4f 4e  SSION_FORMAT_NON
0e90: 45 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65  E);.}..__declspe
0ea0: 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 76 6f 69  c(dllexport) voi
0eb0: 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  d WINAPI sqlite3
0ec0: 5f 66 75 6e 63 74 69 6f 6e 5f 66 72 65 65 5f 63  _function_free_c
0ed0: 61 6c 6c 62 61 63 6b 63 6f 6f 6b 69 65 28 76 6f  allbackcookie(vo
0ee0: 69 64 20 2a 70 43 6f 6f 6b 69 65 29 0a 7b 0a 20  id *pCookie).{. 
0ef0: 20 69 66 20 28 70 43 6f 6f 6b 69 65 29 0a 20 20   if (pCookie).  
0f00: 20 20 66 72 65 65 28 70 43 6f 6f 6b 69 65 29 3b    free(pCookie);
0f10: 0a 7d 0a 0a 2f 2f 20 73 71 6c 69 74 65 33 20 77  .}..// sqlite3 w
0f20: 72 61 70 70 65 72 73 0a 5f 5f 64 65 63 6c 73 70  rappers.__declsp
0f30: 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 63 6f  ec(dllexport) co
0f40: 6e 73 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50  nst char * WINAP
0f50: 49 20 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72  I sqlite3_libver
0f60: 73 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 69 6e 74  sion_interop(int
0f70: 20 2a 70 6c 65 6e 29 0a 7b 0a 20 20 63 6f 6e 73   *plen).{.  cons
0f80: 74 20 63 68 61 72 20 2a 76 61 6c 20 3d 20 73 71  t char *val = sq
0f90: 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e  lite3_libversion
0fa0: 28 29 3b 0a 20 20 2a 70 6c 65 6e 20 3d 20 28 76  ();.  *plen = (v
0fb0: 61 6c 20 21 3d 20 30 29 20 3f 20 73 74 72 6c 65  al != 0) ? strle
0fc0: 6e 28 76 61 6c 29 20 3a 20 30 3b 0a 0a 20 20 72  n(val) : 0;..  r
0fd0: 65 74 75 72 6e 20 76 61 6c 3b 0a 7d 0a 0a 5f 5f  eturn val;.}..__
0fe0: 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f  declspec(dllexpo
0ff0: 72 74 29 20 69 6e 74 20 57 49 4e 41 50 49 20 73  rt) int WINAPI s
1000: 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f  qlite3_libversio
1010: 6e 5f 6e 75 6d 62 65 72 5f 69 6e 74 65 72 6f 70  n_number_interop
1020: 28 76 6f 69 64 29 0a 7b 0a 20 20 72 65 74 75 72  (void).{.  retur
1030: 6e 20 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72  n sqlite3_libver
1040: 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29 3b 0a 7d  sion_number();.}
1050: 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c  ..__declspec(dll
1060: 65 78 70 6f 72 74 29 20 69 6e 74 20 57 49 4e 41  export) int WINA
1070: 50 49 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  PI sqlite3_close
1080: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
1090: 20 2a 64 62 29 0a 7b 0a 20 20 2f 2f 20 54 72 79   *db).{.  // Try
10a0: 20 61 6e 64 20 63 6c 6f 73 65 20 74 68 65 20 64   and close the d
10b0: 61 74 61 62 61 73 65 2e 20 20 49 66 20 74 68 65  atabase.  If the
10c0: 72 65 20 61 72 65 20 75 6e 66 69 6e 61 6c 69 7a  re are unfinaliz
10d0: 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 6d  ed statements, m
10e0: 61 72 6b 20 74 68 65 20 64 61 74 61 62 61 73 65  ark the database
10f0: 20 74 6f 20 62 65 20 63 6c 6f 73 65 64 20 61 73   to be closed as
1100: 0a 20 20 2f 2f 20 73 6f 6f 6e 20 61 73 20 74 68  .  // soon as th
1110: 65 20 6c 61 73 74 20 66 69 6e 61 6c 69 7a 65 64  e last finalized
1120: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 63 6c   statement is cl
1130: 6f 73 65 64 0a 20 20 69 6e 74 20 72 65 74 20 3d  osed.  int ret =
1140: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 41 6e   sqlite3_closeAn
1150: 64 46 72 65 65 4d 75 74 65 78 28 64 62 29 3b 0a  dFreeMutex(db);.
1160: 20 20 69 66 20 28 72 65 74 20 3d 3d 20 53 51 4c    if (ret == SQL
1170: 49 54 45 5f 42 55 53 59 29 0a 20 20 7b 0a 20 20  ITE_BUSY).  {.  
1180: 20 20 69 66 20 28 64 62 2d 3e 70 56 64 62 65 29    if (db->pVdbe)
1190: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 64 62 2d  .    {.      db-
11a0: 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45  >flags |= SQLITE
11b0: 5f 57 61 6e 74 43 6c 6f 73 65 3b 0a 20 20 20 20  _WantClose;.    
11c0: 20 20 72 65 74 20 3d 20 30 3b 0a 20 20 20 20 7d    ret = 0;.    }
11d0: 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 72  .  }..  return r
11e0: 65 74 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65  et;.}..__declspe
11f0: 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 69 6e 74  c(dllexport) int
1200: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
1210: 65 78 65 63 5f 69 6e 74 65 72 6f 70 28 73 71 6c  exec_interop(sql
1220: 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20  ite3 *db, const 
1230: 63 68 61 72 20 2a 73 71 6c 2c 20 73 71 6c 69 74  char *sql, sqlit
1240: 65 33 5f 63 61 6c 6c 62 61 63 6b 20 63 62 2c 20  e3_callback cb, 
1250: 76 6f 69 64 20 2a 70 76 2c 20 63 68 61 72 20 2a  void *pv, char *
1260: 2a 65 72 72 6d 73 67 2c 20 69 6e 74 20 2a 70 6c  *errmsg, int *pl
1270: 65 6e 29 0a 7b 20 0a 20 20 69 6e 74 20 6e 3b 0a  en).{ .  int n;.
1280: 0a 20 20 45 6e 74 65 72 44 62 4d 75 74 65 78 28  .  EnterDbMutex(
1290: 64 62 29 3b 0a 20 20 6e 20 3d 20 73 71 6c 69 74  db);.  n = sqlit
12a0: 65 33 5f 65 78 65 63 28 64 62 2c 20 73 71 6c 2c  e3_exec(db, sql,
12b0: 20 63 62 2c 20 70 76 2c 20 65 72 72 6d 73 67 29   cb, pv, errmsg)
12c0: 3b 0a 20 20 2a 70 6c 65 6e 20 3d 20 28 2a 65 72  ;.  *plen = (*er
12d0: 72 6d 73 67 20 21 3d 20 30 29 20 3f 20 73 74 72  rmsg != 0) ? str
12e0: 6c 65 6e 28 2a 65 72 72 6d 73 67 29 20 3a 20 30  len(*errmsg) : 0
12f0: 3b 0a 20 20 4c 65 61 76 65 44 62 4d 75 74 65 78  ;.  LeaveDbMutex
1300: 28 64 62 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20  (db);..  return 
1310: 6e 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63  n;.}..__declspec
1320: 28 64 6c 6c 65 78 70 6f 72 74 29 20 73 71 6c 69  (dllexport) sqli
1330: 74 65 5f 69 6e 74 36 34 20 57 49 4e 41 50 49 20  te_int64 WINAPI 
1340: 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
1350: 65 72 74 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f  ert_rowid_intero
1360: 70 28 73 71 6c 69 74 65 33 20 2a 64 62 29 0a 7b  p(sqlite3 *db).{
1370: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
1380: 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
1390: 77 69 64 28 64 62 29 3b 0a 7d 0a 0a 5f 5f 64 65  wid(db);.}..__de
13a0: 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74  clspec(dllexport
13b0: 29 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c  ) int WINAPI sql
13c0: 69 74 65 33 5f 63 68 61 6e 67 65 73 5f 69 6e 74  ite3_changes_int
13d0: 65 72 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62  erop(sqlite3 *db
13e0: 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c  ).{.  return sql
13f0: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 64 62 29  ite3_changes(db)
1400: 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28  ;.}..__declspec(
1410: 64 6c 6c 65 78 70 6f 72 74 29 20 69 6e 74 20 57  dllexport) int W
1420: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 74 6f  INAPI sqlite3_to
1430: 74 61 6c 5f 63 68 61 6e 67 65 73 5f 69 6e 74 65  tal_changes_inte
1440: 72 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62 29  rop(sqlite3 *db)
1450: 0a 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  .{.  return sqli
1460: 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65  te3_total_change
1470: 73 28 64 62 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c  s(db);.}..__decl
1480: 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20  spec(dllexport) 
1490: 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69  void WINAPI sqli
14a0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 69 6e  te3_interrupt_in
14b0: 74 65 72 6f 70 28 73 71 6c 69 74 65 33 20 2a 64  terop(sqlite3 *d
14c0: 62 29 0a 7b 0a 20 20 73 71 6c 69 74 65 33 5f 69  b).{.  sqlite3_i
14d0: 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 7d 0a  nterrupt(db);.}.
14e0: 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65  .__declspec(dlle
14f0: 78 70 6f 72 74 29 20 69 6e 74 20 57 49 4e 41 50  xport) int WINAP
1500: 49 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65  I sqlite3_comple
1510: 74 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 73 74  te_interop(const
1520: 20 63 68 61 72 20 2a 73 71 6c 29 0a 7b 0a 20 20   char *sql).{.  
1530: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 63  return sqlite3_c
1540: 6f 6d 70 6c 65 74 65 28 73 71 6c 29 3b 0a 7d 0a  omplete(sql);.}.
1550: 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65  .__declspec(dlle
1560: 78 70 6f 72 74 29 20 69 6e 74 20 57 49 4e 41 50  xport) int WINAP
1570: 49 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65  I sqlite3_comple
1580: 74 65 31 36 5f 69 6e 74 65 72 6f 70 28 63 6f 6e  te16_interop(con
1590: 73 74 20 76 6f 69 64 20 2a 73 71 6c 29 0a 7b 0a  st void *sql).{.
15a0: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
15b0: 5f 63 6f 6d 70 6c 65 74 65 31 36 28 73 71 6c 29  _complete16(sql)
15c0: 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28  ;.}..__declspec(
15d0: 64 6c 6c 65 78 70 6f 72 74 29 20 69 6e 74 20 57  dllexport) int W
15e0: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 62 75  INAPI sqlite3_bu
15f0: 73 79 5f 68 61 6e 64 6c 65 72 5f 69 6e 74 65 72  sy_handler_inter
1600: 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  op(sqlite3 *db, 
1610: 69 6e 74 28 2a 63 62 29 28 76 6f 69 64 20 2a 2c  int(*cb)(void *,
1620: 20 69 6e 74 29 2c 20 76 6f 69 64 20 2a 70 76 29   int), void *pv)
1630: 0a 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  .{.  return sqli
1640: 74 65 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72  te3_busy_handler
1650: 28 64 62 2c 20 63 62 2c 20 70 76 29 3b 0a 7d 0a  (db, cb, pv);.}.
1660: 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65  .__declspec(dlle
1670: 78 70 6f 72 74 29 20 69 6e 74 20 57 49 4e 41 50  xport) int WINAP
1680: 49 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74  I sqlite3_busy_t
1690: 69 6d 65 6f 75 74 5f 69 6e 74 65 72 6f 70 28 73  imeout_interop(s
16a0: 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 20  qlite3 *db, int 
16b0: 6d 73 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20 73  ms).{.  return s
16c0: 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65  qlite3_busy_time
16d0: 6f 75 74 28 64 62 2c 20 6d 73 29 3b 0a 7d 0a 0a  out(db, ms);.}..
16e0: 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78  __declspec(dllex
16f0: 70 6f 72 74 29 20 69 6e 74 20 57 49 4e 41 50 49  port) int WINAPI
1700: 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61 62   sqlite3_get_tab
1710: 6c 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  le_interop(sqlit
1720: 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68  e3 *db, const ch
1730: 61 72 20 2a 73 71 6c 2c 20 63 68 61 72 20 2a 2a  ar *sql, char **
1740: 2a 72 65 73 75 6c 74 70 2c 20 69 6e 74 20 2a 6e  *resultp, int *n
1750: 72 6f 77 2c 20 69 6e 74 20 2a 6e 63 6f 6c 75 6d  row, int *ncolum
1760: 6e 2c 20 63 68 61 72 20 2a 2a 65 72 72 6d 73 67  n, char **errmsg
1770: 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0a 7b 0a 20  , int *plen).{. 
1780: 20 69 6e 74 20 6e 20 3d 20 73 71 6c 69 74 65 33   int n = sqlite3
1790: 5f 67 65 74 5f 74 61 62 6c 65 28 64 62 2c 20 73  _get_table(db, s
17a0: 71 6c 2c 20 72 65 73 75 6c 74 70 2c 20 6e 72 6f  ql, resultp, nro
17b0: 77 2c 20 6e 63 6f 6c 75 6d 6e 2c 20 65 72 72 6d  w, ncolumn, errm
17c0: 73 67 29 3b 0a 20 20 2a 70 6c 65 6e 20 3d 20 28  sg);.  *plen = (
17d0: 2a 65 72 72 6d 73 67 20 21 3d 20 30 29 20 3f 20  *errmsg != 0) ? 
17e0: 73 74 72 6c 65 6e 28 28 63 68 61 72 20 2a 29 2a  strlen((char *)*
17f0: 65 72 72 6d 73 67 29 20 3a 20 30 3b 0a 20 20 72  errmsg) : 0;.  r
1800: 65 74 75 72 6e 20 6e 3b 0a 7d 0a 0a 5f 5f 64 65  eturn n;.}..__de
1810: 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74  clspec(dllexport
1820: 29 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71  ) void WINAPI sq
1830: 6c 69 74 65 33 5f 66 72 65 65 5f 74 61 62 6c 65  lite3_free_table
1840: 5f 69 6e 74 65 72 6f 70 28 63 68 61 72 20 2a 2a  _interop(char **
1850: 72 65 73 75 6c 74 29 0a 7b 0a 20 20 73 71 6c 69  result).{.  sqli
1860: 74 65 33 5f 66 72 65 65 5f 74 61 62 6c 65 28 72  te3_free_table(r
1870: 65 73 75 6c 74 29 3b 0a 7d 0a 0a 5f 5f 64 65 63  esult);.}..__dec
1880: 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29  lspec(dllexport)
1890: 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c   void WINAPI sql
18a0: 69 74 65 33 5f 66 72 65 65 5f 69 6e 74 65 72 6f  ite3_free_intero
18b0: 70 28 63 68 61 72 20 2a 7a 29 0a 7b 0a 20 20 73  p(char *z).{.  s
18c0: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a  qlite3_free(z);.
18d0: 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c  }..__declspec(dl
18e0: 6c 65 78 70 6f 72 74 29 20 69 6e 74 20 57 49 4e  lexport) int WIN
18f0: 41 50 49 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  API sqlite3_open
1900: 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 73 74 20 63  _interop(const c
1910: 68 61 72 2a 66 69 6c 65 6e 61 6d 65 2c 20 73 71  har*filename, sq
1920: 6c 69 74 65 33 20 2a 2a 70 70 64 62 29 0a 7b 0a  lite3 **ppdb).{.
1930: 20 20 69 6e 74 20 72 65 74 20 3d 20 73 71 6c 69    int ret = sqli
1940: 74 65 33 5f 6f 70 65 6e 28 66 69 6c 65 6e 61 6d  te3_open(filenam
1950: 65 2c 20 70 70 64 62 29 3b 0a 20 20 69 66 20 28  e, ppdb);.  if (
1960: 72 65 74 20 3d 3d 20 53 51 4c 49 54 45 5f 4f 4b  ret == SQLITE_OK
1970: 29 20 49 6e 69 74 69 61 6c 69 7a 65 44 62 4d 75  ) InitializeDbMu
1980: 74 65 78 28 2a 70 70 64 62 29 3b 0a 0a 20 20 72  tex(*ppdb);..  r
1990: 65 74 75 72 6e 20 72 65 74 3b 0a 7d 0a 0a 5f 5f  eturn ret;.}..__
19a0: 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f  declspec(dllexpo
19b0: 72 74 29 20 69 6e 74 20 57 49 4e 41 50 49 20 73  rt) int WINAPI s
19c0: 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 5f 69 6e  qlite3_open16_in
19d0: 74 65 72 6f 70 28 63 6f 6e 73 74 20 76 6f 69 64  terop(const void
19e0: 20 2a 66 69 6c 65 6e 61 6d 65 2c 20 73 71 6c 69   *filename, sqli
19f0: 74 65 33 20 2a 2a 70 70 64 62 29 0a 7b 0a 20 20  te3 **ppdb).{.  
1a00: 69 6e 74 20 72 65 74 20 3d 20 73 71 6c 69 74 65  int ret = sqlite
1a10: 33 5f 6f 70 65 6e 31 36 28 66 69 6c 65 6e 61 6d  3_open16(filenam
1a20: 65 2c 20 70 70 64 62 29 3b 0a 20 20 69 66 20 28  e, ppdb);.  if (
1a30: 72 65 74 20 3d 3d 20 53 51 4c 49 54 45 5f 4f 4b  ret == SQLITE_OK
1a40: 29 20 49 6e 69 74 69 61 6c 69 7a 65 44 62 4d 75  ) InitializeDbMu
1a50: 74 65 78 28 2a 70 70 64 62 29 3b 0a 0a 20 20 72  tex(*ppdb);..  r
1a60: 65 74 75 72 6e 20 72 65 74 3b 0a 7d 0a 0a 5f 5f  eturn ret;.}..__
1a70: 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f  declspec(dllexpo
1a80: 72 74 29 20 69 6e 74 20 57 49 4e 41 50 49 20 73  rt) int WINAPI s
1a90: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 5f 69  qlite3_errcode_i
1aa0: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 20 2a  nterop(sqlite3 *
1ab0: 64 62 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20 73  db).{.  return s
1ac0: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 64  qlite3_errcode(d
1ad0: 62 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65  b);.}..__declspe
1ae0: 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 63 6f 6e  c(dllexport) con
1af0: 73 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49  st char * WINAPI
1b00: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 5f   sqlite3_errmsg_
1b10: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 20  interop(sqlite3 
1b20: 2a 64 62 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0a  *db, int *plen).
1b30: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
1b40: 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 65  pval = sqlite3_e
1b50: 72 72 6d 73 67 28 64 62 29 3b 0a 20 20 2a 70 6c  rrmsg(db);.  *pl
1b60: 65 6e 20 3d 20 28 70 76 61 6c 20 21 3d 20 30 29  en = (pval != 0)
1b70: 20 3f 20 73 74 72 6c 65 6e 28 70 76 61 6c 29 20   ? strlen(pval) 
1b80: 3a 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 70 76  : 0;.  return pv
1b90: 61 6c 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65  al;.}..__declspe
1ba0: 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 63 6f 6e  c(dllexport) con
1bb0: 73 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49  st char * WINAPI
1bc0: 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 5f   sqlite3_errmsg_
1bd0: 73 74 6d 74 5f 69 6e 74 65 72 6f 70 28 73 71 6c  stmt_interop(sql
1be0: 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c  ite3_stmt *stmt,
1bf0: 20 69 6e 74 20 2a 70 6c 65 6e 29 0a 7b 0a 20 20   int *plen).{.  
1c00: 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65 20  Vdbe *p = (Vdbe 
1c10: 2a 29 73 74 6d 74 3b 0a 0a 20 20 72 65 74 75 72  *)stmt;..  retur
1c20: 6e 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  n sqlite3_errmsg
1c30: 5f 69 6e 74 65 72 6f 70 28 70 2d 3e 64 62 2c 20  _interop(p->db, 
1c40: 70 6c 65 6e 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c  plen);.}..__decl
1c50: 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20  spec(dllexport) 
1c60: 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74  int WINAPI sqlit
1c70: 65 33 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72  e3_prepare_inter
1c80: 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  op(sqlite3 *db, 
1c90: 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 2c  const char *sql,
1ca0: 20 69 6e 74 20 6e 62 79 74 65 73 2c 20 73 71 6c   int nbytes, sql
1cb0: 69 74 65 33 5f 73 74 6d 74 20 2a 2a 70 70 73 74  ite3_stmt **ppst
1cc0: 6d 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  mt, const char *
1cd0: 2a 70 7a 74 61 69 6c 2c 20 69 6e 74 20 2a 70 6c  *pztail, int *pl
1ce0: 65 6e 29 0a 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a  en).{.  int n;..
1cf0: 20 20 45 6e 74 65 72 44 62 4d 75 74 65 78 28 64    EnterDbMutex(d
1d00: 62 29 3b 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65  b);.  n = sqlite
1d10: 33 5f 70 72 65 70 61 72 65 28 64 62 2c 20 73 71  3_prepare(db, sq
1d20: 6c 2c 20 6e 62 79 74 65 73 2c 20 70 70 73 74 6d  l, nbytes, ppstm
1d30: 74 2c 20 70 7a 74 61 69 6c 29 3b 0a 20 20 2a 70  t, pztail);.  *p
1d40: 6c 65 6e 20 3d 20 28 2a 70 7a 74 61 69 6c 20 21  len = (*pztail !
1d50: 3d 20 30 29 20 3f 20 73 74 72 6c 65 6e 28 2a 70  = 0) ? strlen(*p
1d60: 7a 74 61 69 6c 29 20 3a 20 30 3b 0a 20 20 4c 65  ztail) : 0;.  Le
1d70: 61 76 65 44 62 4d 75 74 65 78 28 64 62 29 3b 0a  aveDbMutex(db);.
1d80: 20 20 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a 0a 5f    return n;.}.._
1d90: 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70  _declspec(dllexp
1da0: 6f 72 74 29 20 69 6e 74 20 57 49 4e 41 50 49 20  ort) int WINAPI 
1db0: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31  sqlite3_prepare1
1dc0: 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  6_interop(sqlite
1dd0: 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 76 6f 69  3 *db, const voi
1de0: 64 20 2a 73 71 6c 2c 20 69 6e 74 20 6e 63 68 61  d *sql, int ncha
1df0: 72 73 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  rs, sqlite3_stmt
1e00: 20 2a 2a 70 70 73 74 6d 74 2c 20 63 6f 6e 73 74   **ppstmt, const
1e10: 20 76 6f 69 64 20 2a 2a 70 7a 74 61 69 6c 2c 20   void **pztail, 
1e20: 69 6e 74 20 2a 70 6c 65 6e 29 0a 7b 0a 20 20 69  int *plen).{.  i
1e30: 6e 74 20 6e 3b 0a 0a 20 20 45 6e 74 65 72 44 62  nt n;..  EnterDb
1e40: 4d 75 74 65 78 28 64 62 29 3b 0a 20 20 6e 20 3d  Mutex(db);.  n =
1e50: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
1e60: 31 36 28 64 62 2c 20 73 71 6c 2c 20 6e 63 68 61  16(db, sql, ncha
1e70: 72 73 20 2a 20 73 69 7a 65 6f 66 28 77 63 68 61  rs * sizeof(wcha
1e80: 72 5f 74 29 2c 20 70 70 73 74 6d 74 2c 20 70 7a  r_t), ppstmt, pz
1e90: 74 61 69 6c 29 3b 0a 20 20 2a 70 6c 65 6e 20 3d  tail);.  *plen =
1ea0: 20 28 2a 70 7a 74 61 69 6c 20 21 3d 20 30 29 20   (*pztail != 0) 
1eb0: 3f 20 77 63 73 6c 65 6e 28 28 77 63 68 61 72 5f  ? wcslen((wchar_
1ec0: 74 20 2a 29 2a 70 7a 74 61 69 6c 29 20 2a 20 73  t *)*pztail) * s
1ed0: 69 7a 65 6f 66 28 77 63 68 61 72 5f 74 29 20 3a  izeof(wchar_t) :
1ee0: 20 30 3b 0a 20 20 4c 65 61 76 65 44 62 4d 75 74   0;.  LeaveDbMut
1ef0: 65 78 28 64 62 29 3b 0a 20 20 72 65 74 75 72 6e  ex(db);.  return
1f00: 20 6e 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65   n;.}..__declspe
1f10: 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 69 6e 74  c(dllexport) int
1f20: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
1f30: 62 69 6e 64 5f 62 6c 6f 62 5f 69 6e 74 65 72 6f  bind_blob_intero
1f40: 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  p(sqlite3_stmt *
1f50: 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20  stmt, int iCol, 
1f60: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 2c 20  const void *pv, 
1f70: 69 6e 74 20 6e 2c 20 76 6f 69 64 28 2a 63 62 29  int n, void(*cb)
1f80: 28 76 6f 69 64 2a 29 29 0a 7b 0a 20 20 72 65 74  (void*)).{.  ret
1f90: 75 72 6e 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  urn sqlite3_bind
1fa0: 5f 62 6c 6f 62 28 73 74 6d 74 2c 20 69 43 6f 6c  _blob(stmt, iCol
1fb0: 2c 20 70 76 2c 20 6e 2c 20 63 62 29 3b 0a 7d 0a  , pv, n, cb);.}.
1fc0: 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65  .__declspec(dlle
1fd0: 78 70 6f 72 74 29 20 69 6e 74 20 57 49 4e 41 50  xport) int WINAP
1fe0: 49 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64  I sqlite3_bind_d
1ff0: 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73 71  ouble_interop(sq
2000: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74  lite3_stmt *stmt
2010: 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 64 6f 75 62  , int iCol, doub
2020: 6c 65 20 2a 76 61 6c 29 0a 7b 0a 09 72 65 74 75  le *val).{..retu
2030: 72 6e 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  rn sqlite3_bind_
2040: 64 6f 75 62 6c 65 28 73 74 6d 74 2c 69 43 6f 6c  double(stmt,iCol
2050: 2c 2a 76 61 6c 29 3b 0a 7d 0a 0a 5f 5f 64 65 63  ,*val);.}..__dec
2060: 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29  lspec(dllexport)
2070: 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69   int WINAPI sqli
2080: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 5f 69 6e 74  te3_bind_int_int
2090: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
20a0: 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f  t *stmt, int iCo
20b0: 6c 2c 20 69 6e 74 20 76 61 6c 29 0a 7b 0a 20 20  l, int val).{.  
20c0: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 62  return sqlite3_b
20d0: 69 6e 64 5f 69 6e 74 28 73 74 6d 74 2c 20 69 43  ind_int(stmt, iC
20e0: 6f 6c 2c 20 76 61 6c 29 3b 0a 7d 0a 0a 5f 5f 64  ol, val);.}..__d
20f0: 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72  eclspec(dllexpor
2100: 74 29 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71  t) int WINAPI sq
2110: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
2120: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
2130: 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74  _stmt *stmt, int
2140: 20 69 43 6f 6c 2c 20 73 71 6c 69 74 65 5f 69 6e   iCol, sqlite_in
2150: 74 36 34 20 2a 76 61 6c 29 0a 7b 0a 09 72 65 74  t64 *val).{..ret
2160: 75 72 6e 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  urn sqlite3_bind
2170: 5f 69 6e 74 36 34 28 73 74 6d 74 2c 69 43 6f 6c  _int64(stmt,iCol
2180: 2c 2a 76 61 6c 29 3b 0a 7d 0a 0a 5f 5f 64 65 63  ,*val);.}..__dec
2190: 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29  lspec(dllexport)
21a0: 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69   int WINAPI sqli
21b0: 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 5f 69 6e  te3_bind_null_in
21c0: 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74  terop(sqlite3_st
21d0: 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43  mt *stmt, int iC
21e0: 6f 6c 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20 73  ol).{.  return s
21f0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c  qlite3_bind_null
2200: 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0a 7d 0a  (stmt, iCol);.}.
2210: 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65  .__declspec(dlle
2220: 78 70 6f 72 74 29 20 69 6e 74 20 57 49 4e 41 50  xport) int WINAP
2230: 49 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74  I sqlite3_bind_t
2240: 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  ext_interop(sqli
2250: 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20  te3_stmt *stmt, 
2260: 69 6e 74 20 69 43 6f 6c 2c 20 63 6f 6e 73 74 20  int iCol, const 
2270: 63 68 61 72 20 2a 76 61 6c 2c 20 69 6e 74 20 6e  char *val, int n
2280: 2c 20 76 6f 69 64 28 2a 63 62 29 28 76 6f 69 64  , void(*cb)(void
2290: 20 2a 29 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20   *)).{.  return 
22a0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
22b0: 74 28 73 74 6d 74 2c 20 69 43 6f 6c 2c 20 76 61  t(stmt, iCol, va
22c0: 6c 2c 20 6e 2c 20 63 62 29 3b 0a 7d 0a 0a 5f 5f  l, n, cb);.}..__
22d0: 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f  declspec(dllexpo
22e0: 72 74 29 20 69 6e 74 20 57 49 4e 41 50 49 20 73  rt) int WINAPI s
22f0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
2300: 31 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  16_interop(sqlit
2310: 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69  e3_stmt *stmt, i
2320: 6e 74 20 69 43 6f 6c 2c 20 63 6f 6e 73 74 20 76  nt iCol, const v
2330: 6f 69 64 20 2a 76 61 6c 2c 20 69 6e 74 20 6e 2c  oid *val, int n,
2340: 20 76 6f 69 64 28 2a 63 62 29 28 76 6f 69 64 20   void(*cb)(void 
2350: 2a 29 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20 73  *)).{.  return s
2360: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
2370: 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 2c 20 76  16(stmt, iCol, v
2380: 61 6c 2c 20 6e 2c 20 63 62 29 3b 0a 7d 0a 0a 5f  al, n, cb);.}.._
2390: 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70  _declspec(dllexp
23a0: 6f 72 74 29 20 69 6e 74 20 57 49 4e 41 50 49 20  ort) int WINAPI 
23b0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
23c0: 61 6d 65 74 65 72 5f 63 6f 75 6e 74 5f 69 6e 74  ameter_count_int
23d0: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
23e0: 74 20 2a 73 74 6d 74 29 0a 7b 0a 20 20 72 65 74  t *stmt).{.  ret
23f0: 75 72 6e 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  urn sqlite3_bind
2400: 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74  _parameter_count
2410: 28 73 74 6d 74 29 3b 0a 7d 0a 0a 5f 5f 64 65 63  (stmt);.}..__dec
2420: 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29  lspec(dllexport)
2430: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 57 49   const char * WI
2440: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 62 69 6e  NAPI sqlite3_bin
2450: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
2460: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
2470: 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74  _stmt *stmt, int
2480: 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e   iCol, int *plen
2490: 29 0a 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  ).{.  const char
24a0: 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33   *pval = sqlite3
24b0: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
24c0: 6e 61 6d 65 28 73 74 6d 74 2c 20 69 43 6f 6c 29  name(stmt, iCol)
24d0: 3b 0a 20 20 2a 70 6c 65 6e 20 3d 20 28 70 76 61  ;.  *plen = (pva
24e0: 6c 20 21 3d 20 30 29 20 3f 20 73 74 72 6c 65 6e  l != 0) ? strlen
24f0: 28 70 76 61 6c 29 20 3a 20 30 3b 0a 20 20 72 65  (pval) : 0;.  re
2500: 74 75 72 6e 20 70 76 61 6c 3b 0a 7d 0a 0a 5f 5f  turn pval;.}..__
2510: 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f  declspec(dllexpo
2520: 72 74 29 20 69 6e 74 20 57 49 4e 41 50 49 20 73  rt) int WINAPI s
2530: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
2540: 6d 65 74 65 72 5f 69 6e 64 65 78 5f 69 6e 74 65  meter_index_inte
2550: 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  rop(sqlite3_stmt
2560: 20 2a 73 74 6d 74 2c 20 63 6f 6e 73 74 20 63 68   *stmt, const ch
2570: 61 72 20 2a 7a 4e 61 6d 65 29 0a 7b 0a 20 20 72  ar *zName).{.  r
2580: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 62 69  eturn sqlite3_bi
2590: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64  nd_parameter_ind
25a0: 65 78 28 73 74 6d 74 2c 20 7a 4e 61 6d 65 29 3b  ex(stmt, zName);
25b0: 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64  .}..__declspec(d
25c0: 6c 6c 65 78 70 6f 72 74 29 20 69 6e 74 20 57 49  llexport) int WI
25d0: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c  NAPI sqlite3_col
25e0: 75 6d 6e 5f 63 6f 75 6e 74 5f 69 6e 74 65 72 6f  umn_count_intero
25f0: 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  p(sqlite3_stmt *
2600: 73 74 6d 74 29 0a 7b 0a 20 20 72 65 74 75 72 6e  stmt).{.  return
2610: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
2620: 63 6f 75 6e 74 28 73 74 6d 74 29 3b 0a 7d 0a 0a  count(stmt);.}..
2630: 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78  __declspec(dllex
2640: 70 6f 72 74 29 20 63 6f 6e 73 74 20 63 68 61 72  port) const char
2650: 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65   * WINAPI sqlite
2660: 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e  3_column_name_in
2670: 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74  terop(sqlite3_st
2680: 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43  mt *stmt, int iC
2690: 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0a 7b  ol, int *plen).{
26a0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 70  .  const char *p
26b0: 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  val = sqlite3_co
26c0: 6c 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2c 20  lumn_name(stmt, 
26d0: 69 43 6f 6c 29 3b 0a 20 20 2a 70 6c 65 6e 20 3d  iCol);.  *plen =
26e0: 20 28 70 76 61 6c 20 21 3d 20 30 29 20 3f 20 73   (pval != 0) ? s
26f0: 74 72 6c 65 6e 28 70 76 61 6c 29 20 3a 20 30 3b  trlen(pval) : 0;
2700: 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0a  .  return pval;.
2710: 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c  }..__declspec(dl
2720: 6c 65 78 70 6f 72 74 29 20 63 6f 6e 73 74 20 76  lexport) const v
2730: 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71 6c  oid * WINAPI sql
2740: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
2750: 31 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  16_interop(sqlit
2760: 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69  e3_stmt *stmt, i
2770: 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c  nt iCol, int *pl
2780: 65 6e 29 0a 7b 0a 20 20 63 6f 6e 73 74 20 76 6f  en).{.  const vo
2790: 69 64 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74  id *pval = sqlit
27a0: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36  e3_column_name16
27b0: 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0a 20 20  (stmt, iCol);.  
27c0: 2a 70 6c 65 6e 20 3d 20 28 70 76 61 6c 20 21 3d  *plen = (pval !=
27d0: 20 30 29 20 3f 20 77 63 73 6c 65 6e 28 28 77 63   0) ? wcslen((wc
27e0: 68 61 72 5f 74 20 2a 29 70 76 61 6c 29 20 2a 20  har_t *)pval) * 
27f0: 73 69 7a 65 6f 66 28 77 63 68 61 72 5f 74 29 20  sizeof(wchar_t) 
2800: 3a 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 70 76  : 0;.  return pv
2810: 61 6c 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65  al;.}..__declspe
2820: 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 63 6f 6e  c(dllexport) con
2830: 73 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49  st char * WINAPI
2840: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
2850: 64 65 63 6c 74 79 70 65 5f 69 6e 74 65 72 6f 70  decltype_interop
2860: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73  (sqlite3_stmt *s
2870: 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69  tmt, int iCol, i
2880: 6e 74 20 2a 70 6c 65 6e 29 0a 7b 0a 20 20 63 6f  nt *plen).{.  co
2890: 6e 73 74 20 63 68 61 72 20 2a 70 76 61 6c 20 3d  nst char *pval =
28a0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
28b0: 64 65 63 6c 74 79 70 65 28 73 74 6d 74 2c 20 69  decltype(stmt, i
28c0: 43 6f 6c 29 3b 0a 20 20 2a 70 6c 65 6e 20 3d 20  Col);.  *plen = 
28d0: 28 70 76 61 6c 20 21 3d 20 30 29 20 3f 20 73 74  (pval != 0) ? st
28e0: 72 6c 65 6e 28 70 76 61 6c 29 20 3a 20 30 3b 0a  rlen(pval) : 0;.
28f0: 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0a 7d    return pval;.}
2900: 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c  ..__declspec(dll
2910: 65 78 70 6f 72 74 29 20 63 6f 6e 73 74 20 76 6f  export) const vo
2920: 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69  id * WINAPI sqli
2930: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
2940: 79 70 65 31 36 5f 69 6e 74 65 72 6f 70 28 73 71  ype16_interop(sq
2950: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74  lite3_stmt *stmt
2960: 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20  , int iCol, int 
2970: 2a 70 6c 65 6e 29 0a 7b 0a 20 20 63 6f 6e 73 74  *plen).{.  const
2980: 20 76 6f 69 64 20 2a 70 76 61 6c 20 3d 20 73 71   void *pval = sq
2990: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
29a0: 6c 74 79 70 65 31 36 28 73 74 6d 74 2c 20 69 43  ltype16(stmt, iC
29b0: 6f 6c 29 3b 0a 20 20 2a 70 6c 65 6e 20 3d 20 28  ol);.  *plen = (
29c0: 70 76 61 6c 20 21 3d 20 30 29 20 3f 20 77 63 73  pval != 0) ? wcs
29d0: 6c 65 6e 28 28 77 63 68 61 72 5f 74 20 2a 29 70  len((wchar_t *)p
29e0: 76 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77 63  val) * sizeof(wc
29f0: 68 61 72 5f 74 29 20 3a 20 30 3b 0a 20 20 72 65  har_t) : 0;.  re
2a00: 74 75 72 6e 20 70 76 61 6c 3b 0a 7d 0a 0a 5f 5f  turn pval;.}..__
2a10: 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f  declspec(dllexpo
2a20: 72 74 29 20 69 6e 74 20 57 49 4e 41 50 49 20 73  rt) int WINAPI s
2a30: 71 6c 69 74 65 33 5f 73 74 65 70 5f 69 6e 74 65  qlite3_step_inte
2a40: 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  rop(sqlite3_stmt
2a50: 20 2a 73 74 6d 74 29 0a 7b 0a 20 20 69 6e 74 20   *stmt).{.  int 
2a60: 72 65 74 3b 0a 0a 20 20 45 6e 74 65 72 44 62 4d  ret;..  EnterDbM
2a70: 75 74 65 78 28 28 28 56 64 62 65 20 2a 29 73 74  utex(((Vdbe *)st
2a80: 6d 74 29 2d 3e 64 62 29 3b 0a 20 20 72 65 74 20  mt)->db);.  ret 
2a90: 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 73  = sqlite3_step(s
2aa0: 74 6d 74 29 3b 0a 20 20 4c 65 61 76 65 44 62 4d  tmt);.  LeaveDbM
2ab0: 75 74 65 78 28 28 28 56 64 62 65 20 2a 29 73 74  utex(((Vdbe *)st
2ac0: 6d 74 29 2d 3e 64 62 29 3b 0a 0a 20 20 72 65 74  mt)->db);..  ret
2ad0: 75 72 6e 20 72 65 74 3b 0a 7d 0a 0a 5f 5f 64 65  urn ret;.}..__de
2ae0: 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74  clspec(dllexport
2af0: 29 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c  ) int WINAPI sql
2b00: 69 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74 5f  ite3_data_count_
2b10: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f  interop(sqlite3_
2b20: 73 74 6d 74 20 2a 73 74 6d 74 29 0a 7b 0a 20 20  stmt *stmt).{.  
2b30: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 64  return sqlite3_d
2b40: 61 74 61 5f 63 6f 75 6e 74 28 73 74 6d 74 29 3b  ata_count(stmt);
2b50: 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64  .}..__declspec(d
2b60: 6c 6c 65 78 70 6f 72 74 29 20 63 6f 6e 73 74 20  llexport) const 
2b70: 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71  void * WINAPI sq
2b80: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f  lite3_column_blo
2b90: 62 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  b_interop(sqlite
2ba0: 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e  3_stmt *stmt, in
2bb0: 74 20 69 43 6f 6c 29 0a 7b 0a 20 20 72 65 74 75  t iCol).{.  retu
2bc0: 72 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  rn sqlite3_colum
2bd0: 6e 5f 62 6c 6f 62 28 73 74 6d 74 2c 20 69 43 6f  n_blob(stmt, iCo
2be0: 6c 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65  l);.}..__declspe
2bf0: 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 69 6e 74  c(dllexport) int
2c00: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
2c10: 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 5f 69 6e 74  column_bytes_int
2c20: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
2c30: 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f  t *stmt, int iCo
2c40: 6c 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20 73 71  l).{.  return sq
2c50: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
2c60: 65 73 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0a  es(stmt, iCol);.
2c70: 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c  }..__declspec(dl
2c80: 6c 65 78 70 6f 72 74 29 20 69 6e 74 20 57 49 4e  lexport) int WIN
2c90: 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  API sqlite3_colu
2ca0: 6d 6e 5f 62 79 74 65 73 31 36 5f 69 6e 74 65 72  mn_bytes16_inter
2cb0: 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  op(sqlite3_stmt 
2cc0: 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 29  *stmt, int iCol)
2cd0: 0a 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  .{.  return sqli
2ce0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
2cf0: 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0a  16(stmt, iCol);.
2d00: 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c  }..__declspec(dl
2d10: 6c 65 78 70 6f 72 74 29 20 76 6f 69 64 20 57 49  lexport) void WI
2d20: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c  NAPI sqlite3_col
2d30: 75 6d 6e 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72  umn_double_inter
2d40: 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  op(sqlite3_stmt 
2d50: 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c  *stmt, int iCol,
2d60: 20 64 6f 75 62 6c 65 20 2a 76 61 6c 29 0a 7b 0a   double *val).{.
2d70: 09 2a 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f  .*val = sqlite3_
2d80: 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 73 74  column_double(st
2d90: 6d 74 2c 69 43 6f 6c 29 3b 0a 7d 0a 0a 5f 5f 64  mt,iCol);.}..__d
2da0: 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72  eclspec(dllexpor
2db0: 74 29 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71  t) int WINAPI sq
2dc0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
2dd0: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
2de0: 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74  _stmt *stmt, int
2df0: 20 69 43 6f 6c 29 0a 7b 0a 20 20 72 65 74 75 72   iCol).{.  retur
2e00: 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  n sqlite3_column
2e10: 5f 69 6e 74 28 73 74 6d 74 2c 20 69 43 6f 6c 29  _int(stmt, iCol)
2e20: 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28  ;.}..__declspec(
2e30: 64 6c 6c 65 78 70 6f 72 74 29 20 76 6f 69 64 20  dllexport) void 
2e40: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63  WINAPI sqlite3_c
2e50: 6f 6c 75 6d 6e 5f 69 6e 74 36 34 5f 69 6e 74 65  olumn_int64_inte
2e60: 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  rop(sqlite3_stmt
2e70: 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c   *stmt, int iCol
2e80: 2c 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a  , sqlite_int64 *
2e90: 76 61 6c 29 0a 7b 0a 09 2a 76 61 6c 20 3d 20 73  val).{..*val = s
2ea0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
2eb0: 74 36 34 28 73 74 6d 74 2c 69 43 6f 6c 29 3b 0a  t64(stmt,iCol);.
2ec0: 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c  }..__declspec(dl
2ed0: 6c 65 78 70 6f 72 74 29 20 63 6f 6e 73 74 20 75  lexport) const u
2ee0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 20 57  nsigned char * W
2ef0: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f  INAPI sqlite3_co
2f00: 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72 6f  lumn_text_intero
2f10: 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  p(sqlite3_stmt *
2f20: 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20  stmt, int iCol, 
2f30: 69 6e 74 20 2a 70 6c 65 6e 29 0a 7b 0a 20 20 63  int *plen).{.  c
2f40: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
2f50: 61 72 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74  ar *pval = sqlit
2f60: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73  e3_column_text(s
2f70: 74 6d 74 2c 20 69 43 6f 6c 29 3b 0a 20 20 2a 70  tmt, iCol);.  *p
2f80: 6c 65 6e 20 3d 20 28 70 76 61 6c 20 21 3d 20 30  len = (pval != 0
2f90: 29 20 3f 20 73 74 72 6c 65 6e 28 28 63 68 61 72  ) ? strlen((char
2fa0: 20 2a 29 70 76 61 6c 29 20 3a 20 30 3b 0a 20 20   *)pval) : 0;.  
2fb0: 72 65 74 75 72 6e 20 70 76 61 6c 3b 0a 7d 0a 0a  return pval;.}..
2fc0: 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78  __declspec(dllex
2fd0: 70 6f 72 74 29 20 63 6f 6e 73 74 20 76 6f 69 64  port) const void
2fe0: 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65   * WINAPI sqlite
2ff0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 5f  3_column_text16_
3000: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f  interop(sqlite3_
3010: 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20  stmt *stmt, int 
3020: 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29  iCol, int *plen)
3030: 0a 7b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  .{.  const void 
3040: 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f  *pval = sqlite3_
3050: 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 73 74  column_text16(st
3060: 6d 74 2c 20 69 43 6f 6c 29 3b 0a 20 20 2a 70 6c  mt, iCol);.  *pl
3070: 65 6e 20 3d 20 28 70 76 61 6c 20 21 3d 20 30 29  en = (pval != 0)
3080: 20 3f 20 77 63 73 6c 65 6e 28 28 77 63 68 61 72   ? wcslen((wchar
3090: 5f 74 20 2a 29 70 76 61 6c 29 20 2a 20 73 69 7a  _t *)pval) * siz
30a0: 65 6f 66 28 77 63 68 61 72 5f 74 29 3a 20 30 3b  eof(wchar_t): 0;
30b0: 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0a  .  return pval;.
30c0: 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c  }..__declspec(dl
30d0: 6c 65 78 70 6f 72 74 29 20 69 6e 74 20 57 49 4e  lexport) int WIN
30e0: 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  API sqlite3_colu
30f0: 6d 6e 5f 74 79 70 65 5f 69 6e 74 65 72 6f 70 28  mn_type_interop(
3100: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74  sqlite3_stmt *st
3110: 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 29 0a 7b 0a  mt, int iCol).{.
3120: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
3130: 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 73 74 6d  _column_type(stm
3140: 74 2c 20 69 43 6f 6c 29 3b 0a 7d 0a 0a 5f 5f 64  t, iCol);.}..__d
3150: 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72  eclspec(dllexpor
3160: 74 29 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71  t) int WINAPI sq
3170: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 5f 69  lite3_finalize_i
3180: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73  nterop(sqlite3_s
3190: 74 6d 74 20 2a 73 74 6d 74 29 0a 7b 0a 20 20 2f  tmt *stmt).{.  /
31a0: 2f 20 54 72 79 20 61 6e 64 20 66 69 6e 61 6c 69  / Try and finali
31b0: 7a 65 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20  ze a statement, 
31c0: 61 6e 64 20 63 6c 6f 73 65 20 74 68 65 20 64 61  and close the da
31d0: 74 61 62 61 73 65 20 69 74 20 62 65 6c 6f 6e 67  tabase it belong
31e0: 65 64 20 74 6f 20 69 66 20 74 68 65 20 64 61 74  ed to if the dat
31f0: 61 62 61 73 65 20 77 61 73 20 6d 61 72 6b 65 64  abase was marked
3200: 20 66 6f 72 20 63 6c 6f 73 69 6e 67 0a 20 20 56   for closing.  V
3210: 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65 20 2a  dbe *p = (Vdbe *
3220: 29 73 74 6d 74 3b 0a 20 20 73 71 6c 69 74 65 33  )stmt;.  sqlite3
3230: 20 2a 64 62 20 3d 20 28 70 20 3d 3d 20 4e 55 4c   *db = (p == NUL
3240: 4c 29 20 3f 20 4e 55 4c 4c 20 3a 20 70 2d 3e 64  L) ? NULL : p->d
3250: 62 3b 0a 20 20 69 6e 74 20 72 65 74 3b 0a 0a 20  b;.  int ret;.. 
3260: 20 45 6e 74 65 72 44 62 4d 75 74 65 78 28 64 62   EnterDbMutex(db
3270: 29 3b 0a 20 20 72 65 74 20 3d 20 73 71 6c 69 74  );.  ret = sqlit
3280: 65 33 5f 66 69 6e 61 6c 69 7a 65 28 73 74 6d 74  e3_finalize(stmt
3290: 29 3b 0a 20 20 4c 65 61 76 65 44 62 4d 75 74 65  );.  LeaveDbMute
32a0: 78 28 64 62 29 3b 0a 0a 20 20 69 66 20 28 72 65  x(db);..  if (re
32b0: 74 20 3d 3d 20 53 51 4c 49 54 45 5f 4f 4b 29 0a  t == SQLITE_OK).
32c0: 20 20 7b 0a 20 20 20 20 69 66 20 28 64 62 2d 3e    {.    if (db->
32d0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 57  flags & SQLITE_W
32e0: 61 6e 74 43 6c 6f 73 65 29 0a 20 20 20 20 7b 0a  antClose).    {.
32f0: 20 20 20 20 20 20 69 66 20 28 64 62 2d 3e 70 56        if (db->pV
3300: 64 62 65 20 3d 3d 20 4e 55 4c 4c 29 0a 20 20 20  dbe == NULL).   
3310: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 73 71 6c     {.        sql
3320: 69 74 65 33 5f 63 6c 6f 73 65 41 6e 64 46 72 65  ite3_closeAndFre
3330: 65 4d 75 74 65 78 28 64 62 29 3b 0a 20 20 20 20  eMutex(db);.    
3340: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20    }.    }.  }.. 
3350: 20 72 65 74 75 72 6e 20 72 65 74 3b 0a 7d 0a 0a   return ret;.}..
3360: 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78  __declspec(dllex
3370: 70 6f 72 74 29 20 69 6e 74 20 57 49 4e 41 50 49  port) int WINAPI
3380: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 5f 69   sqlite3_reset_i
3390: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73  nterop(sqlite3_s
33a0: 74 6d 74 20 2a 73 74 6d 74 29 0a 7b 0a 20 20 69  tmt *stmt).{.  i
33b0: 6e 74 20 72 65 74 3b 0a 0a 20 20 45 6e 74 65 72  nt ret;..  Enter
33c0: 44 62 4d 75 74 65 78 28 28 28 56 64 62 65 20 2a  DbMutex(((Vdbe *
33d0: 29 73 74 6d 74 29 2d 3e 64 62 29 3b 0a 20 20 72  )stmt)->db);.  r
33e0: 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 73  et = sqlite3_res
33f0: 65 74 28 73 74 6d 74 29 3b 0a 20 20 4c 65 61 76  et(stmt);.  Leav
3400: 65 44 62 4d 75 74 65 78 28 28 28 56 64 62 65 20  eDbMutex(((Vdbe 
3410: 2a 29 73 74 6d 74 29 2d 3e 64 62 29 3b 0a 20 20  *)stmt)->db);.  
3420: 72 65 74 75 72 6e 20 72 65 74 3b 0a 7d 0a 0a 5f  return ret;.}.._
3430: 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70  _declspec(dllexp
3440: 6f 72 74 29 20 69 6e 74 20 57 49 4e 41 50 49 20  ort) int WINAPI 
3450: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
3460: 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28  unction_interop(
3470: 73 71 6c 69 74 65 33 20 2a 70 73 71 6c 2c 20 63  sqlite3 *psql, c
3480: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 75 6e 63  onst char *zFunc
3490: 74 69 6f 6e 4e 61 6d 65 2c 20 69 6e 74 20 6e 41  tionName, int nA
34a0: 72 67 2c 20 69 6e 74 20 65 54 65 78 74 52 65 70  rg, int eTextRep
34b0: 2c 20 53 51 4c 49 54 45 55 53 45 52 46 55 4e 43  , SQLITEUSERFUNC
34c0: 20 66 75 6e 63 2c 20 53 51 4c 49 54 45 55 53 45   func, SQLITEUSE
34d0: 52 46 55 4e 43 20 66 75 6e 63 73 74 65 70 2c 20  RFUNC funcstep, 
34e0: 53 51 4c 49 54 45 55 53 45 52 46 55 4e 43 20 66  SQLITEUSERFUNC f
34f0: 75 6e 63 66 69 6e 61 6c 2c 20 76 6f 69 64 20 2a  uncfinal, void *
3500: 2a 70 70 43 6f 6f 6b 69 65 29 0a 7b 0a 20 20 69  *ppCookie).{.  i
3510: 6e 74 20 6e 3b 0a 20 20 53 51 4c 49 54 45 55 53  nt n;.  SQLITEUS
3520: 45 52 46 55 4e 43 20 2a 70 20 3d 20 28 53 51 4c  ERFUNC *p = (SQL
3530: 49 54 45 55 53 45 52 46 55 4e 43 20 2a 29 6d 61  ITEUSERFUNC *)ma
3540: 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 53 51 4c 49  lloc(sizeof(SQLI
3550: 54 45 55 53 45 52 46 55 4e 43 29 20 2a 20 33 29  TEUSERFUNC) * 3)
3560: 3b 0a 0a 20 20 70 5b 30 5d 20 3d 20 66 75 6e 63  ;..  p[0] = func
3570: 3b 0a 20 20 70 5b 31 5d 20 3d 20 66 75 6e 63 73  ;.  p[1] = funcs
3580: 74 65 70 3b 0a 20 20 70 5b 32 5d 20 3d 20 66 75  tep;.  p[2] = fu
3590: 6e 63 66 69 6e 61 6c 3b 0a 0a 20 20 2a 70 70 43  ncfinal;..  *ppC
35a0: 6f 6f 6b 69 65 20 3d 20 30 3b 0a 0a 20 20 6e 20  ookie = 0;..  n 
35b0: 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  = sqlite3_create
35c0: 5f 66 75 6e 63 74 69 6f 6e 28 70 73 71 6c 2c 20  _function(psql, 
35d0: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e  zFunctionName, n
35e0: 41 72 67 2c 20 65 54 65 78 74 52 65 70 2c 20 70  Arg, eTextRep, p
35f0: 2c 20 28 66 75 6e 63 20 21 3d 20 30 29 20 3f 20  , (func != 0) ? 
3600: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 6f 70 5f  sqlite3_interop_
3610: 66 75 6e 63 20 3a 20 30 2c 20 28 66 75 6e 63 73  func : 0, (funcs
3620: 74 65 70 20 21 3d 20 30 29 20 3f 20 73 71 6c 69  tep != 0) ? sqli
3630: 74 65 33 5f 69 6e 74 65 72 6f 70 5f 73 74 65 70  te3_interop_step
3640: 20 3a 20 30 2c 20 28 66 75 6e 63 66 69 6e 61 6c   : 0, (funcfinal
3650: 20 21 3d 20 30 29 20 3f 20 73 71 6c 69 74 65 33   != 0) ? sqlite3
3660: 5f 69 6e 74 65 72 6f 70 5f 66 69 6e 61 6c 20 3a  _interop_final :
3670: 20 30 29 3b 0a 20 20 69 66 20 28 6e 20 21 3d 20   0);.  if (n != 
3680: 30 29 0a 20 20 20 20 66 72 65 65 28 70 29 3b 0a  0).    free(p);.
3690: 20 20 65 6c 73 65 0a 20 20 20 20 2a 70 70 43 6f    else.    *ppCo
36a0: 6f 6b 69 65 20 3d 20 70 3b 0a 0a 20 20 72 65 74  okie = p;..  ret
36b0: 75 72 6e 20 6e 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c  urn n;.}..__decl
36c0: 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20  spec(dllexport) 
36d0: 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74  int WINAPI sqlit
36e0: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
36f0: 6f 6e 31 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c  on16_interop(sql
3700: 69 74 65 33 20 2a 70 73 71 6c 2c 20 76 6f 69 64  ite3 *psql, void
3710: 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c   *zFunctionName,
3720: 20 69 6e 74 20 6e 41 72 67 2c 20 69 6e 74 20 65   int nArg, int e
3730: 54 65 78 74 52 65 70 2c 20 53 51 4c 49 54 45 55  TextRep, SQLITEU
3740: 53 45 52 46 55 4e 43 20 66 75 6e 63 2c 20 53 51  SERFUNC func, SQ
3750: 4c 49 54 45 55 53 45 52 46 55 4e 43 20 66 75 6e  LITEUSERFUNC fun
3760: 63 73 74 65 70 2c 20 53 51 4c 49 54 45 55 53 45  cstep, SQLITEUSE
3770: 52 46 55 4e 43 20 66 75 6e 63 66 69 6e 61 6c 2c  RFUNC funcfinal,
3780: 20 76 6f 69 64 20 2a 2a 70 70 43 6f 6f 6b 69 65   void **ppCookie
3790: 29 0a 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 53  ).{.  int n;.  S
37a0: 51 4c 49 54 45 55 53 45 52 46 55 4e 43 20 2a 70  QLITEUSERFUNC *p
37b0: 20 3d 20 28 53 51 4c 49 54 45 55 53 45 52 46 55   = (SQLITEUSERFU
37c0: 4e 43 20 2a 29 6d 61 6c 6c 6f 63 28 73 69 7a 65  NC *)malloc(size
37d0: 6f 66 28 53 51 4c 49 54 45 55 53 45 52 46 55 4e  of(SQLITEUSERFUN
37e0: 43 29 20 2a 20 33 29 3b 0a 0a 20 20 70 5b 30 5d  C) * 3);..  p[0]
37f0: 20 3d 20 66 75 6e 63 3b 0a 20 20 70 5b 31 5d 20   = func;.  p[1] 
3800: 3d 20 66 75 6e 63 73 74 65 70 3b 0a 20 20 70 5b  = funcstep;.  p[
3810: 32 5d 20 3d 20 66 75 6e 63 66 69 6e 61 6c 3b 0a  2] = funcfinal;.
3820: 0a 20 20 2a 70 70 43 6f 6f 6b 69 65 20 3d 20 30  .  *ppCookie = 0
3830: 3b 0a 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33  ;..  n = sqlite3
3840: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
3850: 31 36 28 70 73 71 6c 2c 20 7a 46 75 6e 63 74 69  16(psql, zFuncti
3860: 6f 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 65 54  onName, nArg, eT
3870: 65 78 74 52 65 70 2c 20 70 2c 20 28 66 75 6e 63  extRep, p, (func
3880: 20 21 3d 20 30 29 20 3f 20 73 71 6c 69 74 65 33   != 0) ? sqlite3
3890: 5f 69 6e 74 65 72 6f 70 5f 66 75 6e 63 20 3a 20  _interop_func : 
38a0: 30 2c 20 28 66 75 6e 63 73 74 65 70 20 21 3d 20  0, (funcstep != 
38b0: 30 29 20 3f 20 73 71 6c 69 74 65 33 5f 69 6e 74  0) ? sqlite3_int
38c0: 65 72 6f 70 5f 73 74 65 70 20 3a 20 30 2c 20 28  erop_step : 0, (
38d0: 66 75 6e 63 66 69 6e 61 6c 20 21 3d 20 30 29 20  funcfinal != 0) 
38e0: 3f 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 6f  ? sqlite3_intero
38f0: 70 5f 66 69 6e 61 6c 20 3a 20 30 29 3b 0a 20 20  p_final : 0);.  
3900: 69 66 20 28 6e 20 21 3d 20 30 29 0a 20 20 20 20  if (n != 0).    
3910: 66 72 65 65 28 70 29 3b 0a 20 20 65 6c 73 65 0a  free(p);.  else.
3920: 20 20 20 20 2a 70 70 43 6f 6f 6b 69 65 20 3d 20      *ppCookie = 
3930: 70 3b 0a 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0a  p;..  return n;.
3940: 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c  }..__declspec(dl
3950: 6c 65 78 70 6f 72 74 29 20 69 6e 74 20 57 49 4e  lexport) int WIN
3960: 41 50 49 20 73 71 6c 69 74 65 33 5f 63 72 65 61  API sqlite3_crea
3970: 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 69 6e 74  te_collation_int
3980: 65 72 6f 70 28 73 71 6c 69 74 65 33 2a 20 64 62  erop(sqlite3* db
3990: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e  , const char *zN
39a0: 61 6d 65 2c 20 69 6e 74 20 65 54 65 78 74 52 65  ame, int eTextRe
39b0: 70 2c 20 76 6f 69 64 2a 20 70 76 55 73 65 72 2c  p, void* pvUser,
39c0: 20 53 51 4c 49 54 45 43 4f 4c 4c 41 54 49 4f 4e   SQLITECOLLATION
39d0: 20 66 75 6e 63 2c 20 76 6f 69 64 20 2a 2a 70 70   func, void **pp
39e0: 43 6f 6f 6b 69 65 29 0a 7b 0a 20 20 69 6e 74 20  Cookie).{.  int 
39f0: 6e 3b 0a 20 20 53 51 4c 49 54 45 43 4f 4c 4c 41  n;.  SQLITECOLLA
3a00: 54 49 4f 4e 20 2a 70 20 3d 20 28 53 51 4c 49 54  TION *p = (SQLIT
3a10: 45 43 4f 4c 4c 41 54 49 4f 4e 20 2a 29 6d 61 6c  ECOLLATION *)mal
3a20: 6c 6f 63 28 73 69 7a 65 6f 66 28 53 51 4c 49 54  loc(sizeof(SQLIT
3a30: 45 43 4f 4c 4c 41 54 49 4f 4e 29 29 3b 0a 20 20  ECOLLATION));.  
3a40: 0a 20 20 70 5b 30 5d 20 3d 20 66 75 6e 63 3b 0a  .  p[0] = func;.
3a50: 0a 20 20 2a 70 70 43 6f 6f 6b 69 65 20 3d 20 30  .  *ppCookie = 0
3a60: 3b 0a 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33  ;..  n = sqlite3
3a70: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
3a80: 6e 28 64 62 2c 20 7a 4e 61 6d 65 2c 20 65 54 65  n(db, zName, eTe
3a90: 78 74 52 65 70 2c 20 70 2c 20 73 71 6c 69 74 65  xtRep, p, sqlite
3aa0: 33 5f 69 6e 74 65 72 6f 70 5f 63 6f 6c 6c 61 74  3_interop_collat
3ab0: 69 6f 6e 66 75 6e 63 29 3b 0a 20 20 69 66 20 28  ionfunc);.  if (
3ac0: 6e 20 21 3d 20 30 29 0a 20 20 20 20 66 72 65 65  n != 0).    free
3ad0: 28 70 29 3b 0a 20 20 65 6c 73 65 0a 20 20 20 20  (p);.  else.    
3ae0: 2a 70 70 43 6f 6f 6b 69 65 20 3d 20 70 3b 0a 0a  *ppCookie = p;..
3af0: 20 20 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a 0a 5f    return n;.}.._
3b00: 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70  _declspec(dllexp
3b10: 6f 72 74 29 20 69 6e 74 20 57 49 4e 41 50 49 20  ort) int WINAPI 
3b20: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
3b30: 6f 6c 6c 61 74 69 6f 6e 31 36 5f 69 6e 74 65 72  ollation16_inter
3b40: 6f 70 28 73 71 6c 69 74 65 33 2a 20 64 62 2c 20  op(sqlite3* db, 
3b50: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 4e 61 6d  const void *zNam
3b60: 65 2c 20 69 6e 74 20 65 54 65 78 74 52 65 70 2c  e, int eTextRep,
3b70: 20 76 6f 69 64 2a 20 70 76 55 73 65 72 2c 20 53   void* pvUser, S
3b80: 51 4c 49 54 45 43 4f 4c 4c 41 54 49 4f 4e 20 66  QLITECOLLATION f
3b90: 75 6e 63 2c 20 76 6f 69 64 20 2a 2a 70 70 43 6f  unc, void **ppCo
3ba0: 6f 6b 69 65 29 0a 7b 0a 20 20 69 6e 74 20 6e 3b  okie).{.  int n;
3bb0: 0a 20 20 53 51 4c 49 54 45 43 4f 4c 4c 41 54 49  .  SQLITECOLLATI
3bc0: 4f 4e 20 2a 70 20 3d 20 28 53 51 4c 49 54 45 43  ON *p = (SQLITEC
3bd0: 4f 4c 4c 41 54 49 4f 4e 20 2a 29 6d 61 6c 6c 6f  OLLATION *)mallo
3be0: 63 28 73 69 7a 65 6f 66 28 53 51 4c 49 54 45 43  c(sizeof(SQLITEC
3bf0: 4f 4c 4c 41 54 49 4f 4e 29 29 3b 0a 20 20 0a 20  OLLATION));.  . 
3c00: 20 70 5b 30 5d 20 3d 20 66 75 6e 63 3b 0a 0a 20   p[0] = func;.. 
3c10: 20 2a 70 70 43 6f 6f 6b 69 65 20 3d 20 30 3b 0a   *ppCookie = 0;.
3c20: 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63  .  n = sqlite3_c
3c30: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 31  reate_collation1
3c40: 36 28 64 62 2c 20 28 63 6f 6e 73 74 20 63 68 61  6(db, (const cha
3c50: 72 20 2a 29 7a 4e 61 6d 65 2c 20 65 54 65 78 74  r *)zName, eText
3c60: 52 65 70 2c 20 70 2c 20 73 71 6c 69 74 65 33 5f  Rep, p, sqlite3_
3c70: 69 6e 74 65 72 6f 70 5f 63 6f 6c 6c 61 74 69 6f  interop_collatio
3c80: 6e 66 75 6e 63 29 3b 0a 20 20 69 66 20 28 6e 20  nfunc);.  if (n 
3c90: 21 3d 20 30 29 0a 20 20 20 20 66 72 65 65 28 70  != 0).    free(p
3ca0: 29 3b 0a 20 20 65 6c 73 65 0a 20 20 20 20 2a 70  );.  else.    *p
3cb0: 70 43 6f 6f 6b 69 65 20 3d 20 70 3b 0a 0a 20 20  pCookie = p;..  
3cc0: 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a 0a 5f 5f 64  return n;.}..__d
3cd0: 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72  eclspec(dllexpor
3ce0: 74 29 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71  t) int WINAPI sq
3cf0: 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f  lite3_aggregate_
3d00: 63 6f 75 6e 74 5f 69 6e 74 65 72 6f 70 28 73 71  count_interop(sq
3d10: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
3d20: 63 74 78 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20  ctx).{.  return 
3d30: 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74  sqlite3_aggregat
3d40: 65 5f 63 6f 75 6e 74 28 70 63 74 78 29 3b 0a 7d  e_count(pctx);.}
3d50: 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c  ..__declspec(dll
3d60: 65 78 70 6f 72 74 29 20 63 6f 6e 73 74 20 76 6f  export) const vo
3d70: 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69  id * WINAPI sqli
3d80: 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 5f 69  te3_value_blob_i
3d90: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 76  nterop(sqlite3_v
3da0: 61 6c 75 65 20 2a 76 61 6c 29 0a 7b 0a 20 20 72  alue *val).{.  r
3db0: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 76 61  eturn sqlite3_va
3dc0: 6c 75 65 5f 62 6c 6f 62 28 76 61 6c 29 3b 0a 7d  lue_blob(val);.}
3dd0: 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c  ..__declspec(dll
3de0: 65 78 70 6f 72 74 29 20 69 6e 74 20 57 49 4e 41  export) int WINA
3df0: 50 49 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  PI sqlite3_value
3e00: 5f 62 79 74 65 73 5f 69 6e 74 65 72 6f 70 28 73  _bytes_interop(s
3e10: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 76 61  qlite3_value *va
3e20: 6c 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20 73 71  l).{.  return sq
3e30: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65  lite3_value_byte
3e40: 73 28 76 61 6c 29 3b 0a 7d 0a 0a 5f 5f 64 65 63  s(val);.}..__dec
3e50: 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29  lspec(dllexport)
3e60: 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69   int WINAPI sqli
3e70: 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 31  te3_value_bytes1
3e80: 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  6_interop(sqlite
3e90: 33 5f 76 61 6c 75 65 20 2a 76 61 6c 29 0a 7b 0a  3_value *val).{.
3ea0: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
3eb0: 5f 76 61 6c 75 65 5f 62 79 74 65 73 31 36 28 76  _value_bytes16(v
3ec0: 61 6c 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70  al);.}..__declsp
3ed0: 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 76 6f  ec(dllexport) vo
3ee0: 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  id WINAPI sqlite
3ef0: 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69  3_value_double_i
3f00: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 76  nterop(sqlite3_v
3f10: 61 6c 75 65 20 2a 70 76 61 6c 2c 20 64 6f 75 62  alue *pval, doub
3f20: 6c 65 20 2a 76 61 6c 29 0a 7b 0a 20 20 2a 76 61  le *val).{.  *va
3f30: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  l = sqlite3_valu
3f40: 65 5f 64 6f 75 62 6c 65 28 70 76 61 6c 29 3b 0a  e_double(pval);.
3f50: 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c  }..__declspec(dl
3f60: 6c 65 78 70 6f 72 74 29 20 69 6e 74 20 57 49 4e  lexport) int WIN
3f70: 41 50 49 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  API sqlite3_valu
3f80: 65 5f 69 6e 74 5f 69 6e 74 65 72 6f 70 28 73 71  e_int_interop(sq
3f90: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 76 61 6c  lite3_value *val
3fa0: 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c  ).{.  return sql
3fb0: 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 76  ite3_value_int(v
3fc0: 61 6c 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70  al);.}..__declsp
3fd0: 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 76 6f  ec(dllexport) vo
3fe0: 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  id WINAPI sqlite
3ff0: 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 5f 69 6e  3_value_int64_in
4000: 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 76 61  terop(sqlite3_va
4010: 6c 75 65 20 2a 70 76 61 6c 2c 20 73 71 6c 69 74  lue *pval, sqlit
4020: 65 5f 69 6e 74 36 34 20 2a 76 61 6c 29 0a 7b 0a  e_int64 *val).{.
4030: 20 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74 65 33    *val = sqlite3
4040: 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28 70 76 61  _value_int64(pva
4050: 6c 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65  l);.}..__declspe
4060: 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 63 6f 6e  c(dllexport) con
4070: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
4080: 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65   * WINAPI sqlite
4090: 33 5f 76 61 6c 75 65 5f 74 65 78 74 5f 69 6e 74  3_value_text_int
40a0: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 76 61 6c  erop(sqlite3_val
40b0: 75 65 20 2a 76 61 6c 2c 20 69 6e 74 20 2a 70 6c  ue *val, int *pl
40c0: 65 6e 29 0a 7b 0a 20 20 63 6f 6e 73 74 20 75 6e  en).{.  const un
40d0: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70 76 61  signed char *pva
40e0: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  l = sqlite3_valu
40f0: 65 5f 74 65 78 74 28 76 61 6c 29 3b 0a 20 20 2a  e_text(val);.  *
4100: 70 6c 65 6e 20 3d 20 28 70 76 61 6c 20 21 3d 20  plen = (pval != 
4110: 30 29 20 3f 20 73 74 72 6c 65 6e 28 28 63 68 61  0) ? strlen((cha
4120: 72 20 2a 29 70 76 61 6c 29 20 3a 20 30 3b 0a 20  r *)pval) : 0;. 
4130: 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0a 7d 0a   return pval;.}.
4140: 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65  .__declspec(dlle
4150: 78 70 6f 72 74 29 20 63 6f 6e 73 74 20 76 6f 69  xport) const voi
4160: 64 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74  d * WINAPI sqlit
4170: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 5f  e3_value_text16_
4180: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f  interop(sqlite3_
4190: 76 61 6c 75 65 20 2a 76 61 6c 2c 20 69 6e 74 20  value *val, int 
41a0: 2a 70 6c 65 6e 29 0a 7b 0a 20 20 63 6f 6e 73 74  *plen).{.  const
41b0: 20 76 6f 69 64 20 2a 70 76 61 6c 20 3d 20 73 71   void *pval = sq
41c0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
41d0: 31 36 28 76 61 6c 29 3b 0a 20 20 2a 70 6c 65 6e  16(val);.  *plen
41e0: 20 3d 20 28 70 76 61 6c 20 21 3d 20 30 29 20 3f   = (pval != 0) ?
41f0: 20 77 63 73 6c 65 6e 28 28 77 63 68 61 72 5f 74   wcslen((wchar_t
4200: 20 2a 29 70 76 61 6c 29 20 2a 20 73 69 7a 65 6f   *)pval) * sizeo
4210: 66 28 77 63 68 61 72 5f 74 29 20 3a 20 30 3b 0a  f(wchar_t) : 0;.
4220: 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0a 7d    return pval;.}
4230: 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c  ..__declspec(dll
4240: 65 78 70 6f 72 74 29 20 69 6e 74 20 57 49 4e 41  export) int WINA
4250: 50 49 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  PI sqlite3_value
4260: 5f 74 79 70 65 5f 69 6e 74 65 72 6f 70 28 73 71  _type_interop(sq
4270: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 76 61 6c  lite3_value *val
4280: 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c  ).{.  return sql
4290: 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28  ite3_value_type(
42a0: 76 61 6c 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73  val);.}..__decls
42b0: 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 76  pec(dllexport) v
42c0: 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71 6c  oid * WINAPI sql
42d0: 69 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63  ite3_aggregate_c
42e0: 6f 6e 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 73  ontext_interop(s
42f0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
4300: 70 63 74 78 2c 20 69 6e 74 20 6e 29 0a 7b 0a 20  pctx, int n).{. 
4310: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f   return sqlite3_
4320: 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74 65 78  aggregate_contex
4330: 74 28 70 63 74 78 2c 20 6e 29 3b 0a 7d 0a 0a 5f  t(pctx, n);.}.._
4340: 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70  _declspec(dllexp
4350: 6f 72 74 29 20 76 6f 69 64 20 57 49 4e 41 50 49  ort) void WINAPI
4360: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
4370: 62 6c 6f 62 5f 69 6e 74 65 72 6f 70 28 73 71 6c  blob_interop(sql
4380: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 74  ite3_context *ct
4390: 78 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  x, const void *p
43a0: 76 2c 20 69 6e 74 20 6e 2c 20 76 6f 69 64 28 2a  v, int n, void(*
43b0: 63 62 29 28 76 6f 69 64 20 2a 29 29 0a 7b 0a 20  cb)(void *)).{. 
43c0: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
43d0: 62 6c 6f 62 28 63 74 78 2c 20 70 76 2c 20 6e 2c  blob(ctx, pv, n,
43e0: 20 63 62 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73   cb);.}..__decls
43f0: 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 76  pec(dllexport) v
4400: 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74  oid WINAPI sqlit
4410: 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65  e3_result_double
4420: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
4430: 5f 63 6f 6e 74 65 78 74 20 2a 70 63 74 78 2c 20  _context *pctx, 
4440: 64 6f 75 62 6c 65 20 2a 76 61 6c 29 0a 7b 0a 20  double *val).{. 
4450: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
4460: 64 6f 75 62 6c 65 28 70 63 74 78 2c 20 2a 76 61  double(pctx, *va
4470: 6c 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65  l);.}..__declspe
4480: 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 76 6f 69  c(dllexport) voi
4490: 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  d WINAPI sqlite3
44a0: 5f 72 65 73 75 6c 74 5f 69 6e 74 5f 69 6e 74 65  _result_int_inte
44b0: 72 6f 70 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  rop(sqlite3_cont
44c0: 65 78 74 20 2a 70 63 74 78 2c 20 69 6e 74 20 76  ext *pctx, int v
44d0: 61 6c 29 0a 7b 0a 20 20 73 71 6c 69 74 65 33 5f  al).{.  sqlite3_
44e0: 72 65 73 75 6c 74 5f 69 6e 74 28 70 63 74 78 2c  result_int(pctx,
44f0: 20 76 61 6c 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c   val);.}..__decl
4500: 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20  spec(dllexport) 
4510: 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69  void WINAPI sqli
4520: 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34  te3_result_int64
4530: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
4540: 5f 63 6f 6e 74 65 78 74 20 2a 70 63 74 78 2c 20  _context *pctx, 
4550: 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a 76 61  sqlite_int64 *va
4560: 6c 29 0a 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72  l).{.  sqlite3_r
4570: 65 73 75 6c 74 5f 69 6e 74 36 34 28 70 63 74 78  esult_int64(pctx
4580: 2c 20 2a 76 61 6c 29 3b 0a 7d 0a 0a 5f 5f 64 65  , *val);.}..__de
4590: 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74  clspec(dllexport
45a0: 29 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71  ) void WINAPI sq
45b0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c  lite3_result_nul
45c0: 6c 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  l_interop(sqlite
45d0: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 63 74 78 29  3_context *pctx)
45e0: 0a 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73  .{.  sqlite3_res
45f0: 75 6c 74 5f 6e 75 6c 6c 28 70 63 74 78 29 3b 0a  ult_null(pctx);.
4600: 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c  }..__declspec(dl
4610: 6c 65 78 70 6f 72 74 29 20 76 6f 69 64 20 57 49  lexport) void WI
4620: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 72 65 73  NAPI sqlite3_res
4630: 75 6c 74 5f 65 72 72 6f 72 5f 69 6e 74 65 72 6f  ult_error_intero
4640: 70 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  p(sqlite3_contex
4650: 74 20 2a 63 74 78 2c 20 63 6f 6e 73 74 20 63 68  t *ctx, const ch
4660: 61 72 20 2a 70 76 2c 20 69 6e 74 20 6e 29 0a 7b  ar *pv, int n).{
4670: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  .  sqlite3_resul
4680: 74 5f 65 72 72 6f 72 28 63 74 78 2c 20 70 76 2c  t_error(ctx, pv,
4690: 20 6e 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70   n);.}..__declsp
46a0: 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 76 6f  ec(dllexport) vo
46b0: 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  id WINAPI sqlite
46c0: 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 31 36  3_result_error16
46d0: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
46e0: 5f 63 6f 6e 74 65 78 74 20 2a 63 74 78 2c 20 63  _context *ctx, c
46f0: 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 2c 20 69  onst void *pv, i
4700: 6e 74 20 6e 29 0a 7b 0a 20 20 73 71 6c 69 74 65  nt n).{.  sqlite
4710: 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 31 36  3_result_error16
4720: 28 63 74 78 2c 20 70 76 2c 20 6e 29 3b 0a 7d 0a  (ctx, pv, n);.}.
4730: 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65  .__declspec(dlle
4740: 78 70 6f 72 74 29 20 76 6f 69 64 20 57 49 4e 41  xport) void WINA
4750: 50 49 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  PI sqlite3_resul
4760: 74 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 73  t_text_interop(s
4770: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
4780: 63 74 78 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  ctx, const char 
4790: 2a 70 76 2c 20 69 6e 74 20 6e 2c 20 76 6f 69 64  *pv, int n, void
47a0: 28 2a 63 62 29 28 76 6f 69 64 20 2a 29 29 0a 7b  (*cb)(void *)).{
47b0: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  .  sqlite3_resul
47c0: 74 5f 74 65 78 74 28 63 74 78 2c 20 70 76 2c 20  t_text(ctx, pv, 
47d0: 6e 2c 20 63 62 29 3b 0a 7d 0a 0a 5f 5f 64 65 63  n, cb);.}..__dec
47e0: 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29  lspec(dllexport)
47f0: 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c   void WINAPI sql
4800: 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
4810: 31 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  16_interop(sqlit
4820: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 74 78 2c  e3_context *ctx,
4830: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 2c   const void *pv,
4840: 20 69 6e 74 20 6e 2c 20 76 6f 69 64 28 2a 63 62   int n, void(*cb
4850: 29 28 76 6f 69 64 20 2a 29 29 0a 7b 0a 20 20 73  )(void *)).{.  s
4860: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65  qlite3_result_te
4870: 78 74 31 36 28 63 74 78 2c 20 70 76 2c 20 6e 2c  xt16(ctx, pv, n,
4880: 20 63 62 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73   cb);.}..__decls
4890: 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 63  pec(dllexport) c
48a0: 6f 6e 73 74 20 63 68 61 72 20 2a 20 57 49 4e 41  onst char * WINA
48b0: 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  PI sqlite3_colum
48c0: 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 5f  n_database_name_
48d0: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f  interop(sqlite3_
48e0: 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20  stmt *stmt, int 
48f0: 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29  iCol, int *plen)
4900: 0a 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .{.  const char 
4910: 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f  *pval = sqlite3_
4920: 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f  column_database_
4930: 6e 61 6d 65 28 73 74 6d 74 2c 20 69 43 6f 6c 29  name(stmt, iCol)
4940: 3b 0a 20 20 2a 70 6c 65 6e 20 3d 20 28 70 76 61  ;.  *plen = (pva
4950: 6c 20 21 3d 20 30 29 20 3f 20 73 74 72 6c 65 6e  l != 0) ? strlen
4960: 28 70 76 61 6c 29 20 3a 20 30 3b 0a 20 20 72 65  (pval) : 0;.  re
4970: 74 75 72 6e 20 70 76 61 6c 3b 0a 7d 0a 0a 5f 5f  turn pval;.}..__
4980: 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f  declspec(dllexpo
4990: 72 74 29 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  rt) const void *
49a0: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
49b0: 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f  column_database_
49c0: 6e 61 6d 65 31 36 5f 69 6e 74 65 72 6f 70 28 73  name16_interop(s
49d0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d  qlite3_stmt *stm
49e0: 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74  t, int iCol, int
49f0: 20 2a 70 6c 65 6e 29 0a 7b 0a 20 20 63 6f 6e 73   *plen).{.  cons
4a00: 74 20 76 6f 69 64 20 2a 70 76 61 6c 20 3d 20 73  t void *pval = s
4a10: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61  qlite3_column_da
4a20: 74 61 62 61 73 65 5f 6e 61 6d 65 31 36 28 73 74  tabase_name16(st
4a30: 6d 74 2c 20 69 43 6f 6c 29 3b 0a 20 20 2a 70 6c  mt, iCol);.  *pl
4a40: 65 6e 20 3d 20 28 70 76 61 6c 20 21 3d 20 30 29  en = (pval != 0)
4a50: 20 3f 20 77 63 73 6c 65 6e 28 28 77 63 68 61 72   ? wcslen((wchar
4a60: 5f 74 20 2a 29 70 76 61 6c 29 20 2a 20 73 69 7a  _t *)pval) * siz
4a70: 65 6f 66 28 77 63 68 61 72 5f 74 29 20 3a 20 30  eof(wchar_t) : 0
4a80: 3b 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b  ;.  return pval;
4a90: 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64  .}..__declspec(d
4aa0: 6c 6c 65 78 70 6f 72 74 29 20 63 6f 6e 73 74 20  llexport) const 
4ab0: 63 68 61 72 20 2a 20 57 49 4e 41 50 49 20 73 71  char * WINAPI sq
4ac0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62  lite3_column_tab
4ad0: 6c 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28  le_name_interop(
4ae0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74  sqlite3_stmt *st
4af0: 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e  mt, int iCol, in
4b00: 74 20 2a 70 6c 65 6e 29 0a 7b 0a 20 20 63 6f 6e  t *plen).{.  con
4b10: 73 74 20 63 68 61 72 20 2a 70 76 61 6c 20 3d 20  st char *pval = 
4b20: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
4b30: 61 62 6c 65 5f 6e 61 6d 65 28 73 74 6d 74 2c 20  able_name(stmt, 
4b40: 69 43 6f 6c 29 3b 0a 20 20 2a 70 6c 65 6e 20 3d  iCol);.  *plen =
4b50: 20 28 70 76 61 6c 20 21 3d 20 30 29 20 3f 20 73   (pval != 0) ? s
4b60: 74 72 6c 65 6e 28 70 76 61 6c 29 20 3a 20 30 3b  trlen(pval) : 0;
4b70: 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0a  .  return pval;.
4b80: 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c  }..__declspec(dl
4b90: 6c 65 78 70 6f 72 74 29 20 63 6f 6e 73 74 20 76  lexport) const v
4ba0: 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71 6c  oid * WINAPI sql
4bb0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c  ite3_column_tabl
4bc0: 65 5f 6e 61 6d 65 31 36 5f 69 6e 74 65 72 6f 70  e_name16_interop
4bd0: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73  (sqlite3_stmt *s
4be0: 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69  tmt, int iCol, i
4bf0: 6e 74 20 2a 70 6c 65 6e 29 0a 7b 0a 20 20 63 6f  nt *plen).{.  co
4c00: 6e 73 74 20 76 6f 69 64 20 2a 70 76 61 6c 20 3d  nst void *pval =
4c10: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4c20: 74 61 62 6c 65 5f 6e 61 6d 65 31 36 28 73 74 6d  table_name16(stm
4c30: 74 2c 20 69 43 6f 6c 29 3b 0a 20 20 2a 70 6c 65  t, iCol);.  *ple
4c40: 6e 20 3d 20 28 70 76 61 6c 20 21 3d 20 30 29 20  n = (pval != 0) 
4c50: 3f 20 77 63 73 6c 65 6e 28 28 77 63 68 61 72 5f  ? wcslen((wchar_
4c60: 74 20 2a 29 70 76 61 6c 29 20 2a 20 73 69 7a 65  t *)pval) * size
4c70: 6f 66 28 77 63 68 61 72 5f 74 29 20 3a 20 30 3b  of(wchar_t) : 0;
4c80: 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b 0a  .  return pval;.
4c90: 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c  }..__declspec(dl
4ca0: 6c 65 78 70 6f 72 74 29 20 63 6f 6e 73 74 20 63  lexport) const c
4cb0: 68 61 72 20 2a 20 57 49 4e 41 50 49 20 73 71 6c  har * WINAPI sql
4cc0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
4cd0: 69 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28  in_name_interop(
4ce0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74  sqlite3_stmt *st
4cf0: 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e  mt, int iCol, in
4d00: 74 20 2a 70 6c 65 6e 29 0a 7b 0a 20 20 63 6f 6e  t *plen).{.  con
4d10: 73 74 20 63 68 61 72 20 2a 70 76 61 6c 20 3d 20  st char *pval = 
4d20: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
4d30: 72 69 67 69 6e 5f 6e 61 6d 65 28 73 74 6d 74 2c  rigin_name(stmt,
4d40: 20 69 43 6f 6c 29 3b 0a 20 20 2a 70 6c 65 6e 20   iCol);.  *plen 
4d50: 3d 20 28 70 76 61 6c 20 21 3d 20 30 29 20 3f 20  = (pval != 0) ? 
4d60: 73 74 72 6c 65 6e 28 70 76 61 6c 29 20 3a 20 30  strlen(pval) : 0
4d70: 3b 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c 3b  ;.  return pval;
4d80: 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64  .}..__declspec(d
4d90: 6c 6c 65 78 70 6f 72 74 29 20 63 6f 6e 73 74 20  llexport) const 
4da0: 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71  void * WINAPI sq
4db0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69  lite3_column_ori
4dc0: 67 69 6e 5f 6e 61 6d 65 31 36 5f 69 6e 74 65 72  gin_name16_inter
4dd0: 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  op(sqlite3_stmt 
4de0: 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c  *stmt, int iCol,
4df0: 20 69 6e 74 20 2a 70 6c 65 6e 29 0a 7b 0a 20 20   int *plen).{.  
4e00: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 61 6c  const void *pval
4e10: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
4e20: 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 31 36 28  n_origin_name16(
4e30: 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0a 20 20 2a  stmt, iCol);.  *
4e40: 70 6c 65 6e 20 3d 20 28 70 76 61 6c 20 21 3d 20  plen = (pval != 
4e50: 30 29 20 3f 20 77 63 73 6c 65 6e 28 28 77 63 68  0) ? wcslen((wch
4e60: 61 72 5f 74 20 2a 29 70 76 61 6c 29 20 2a 20 73  ar_t *)pval) * s
4e70: 69 7a 65 6f 66 28 77 63 68 61 72 5f 74 29 20 3a  izeof(wchar_t) :
4e80: 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 70 76 61   0;.  return pva
4e90: 6c 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63  l;.}..__declspec
4ea0: 28 64 6c 6c 65 78 70 6f 72 74 29 20 69 6e 74 20  (dllexport) int 
4eb0: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 74  WINAPI sqlite3_t
4ec0: 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61  able_column_meta
4ed0: 64 61 74 61 5f 69 6e 74 65 72 6f 70 28 73 71 6c  data_interop(sql
4ee0: 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20  ite3 *db, const 
4ef0: 63 68 61 72 20 2a 7a 44 62 4e 61 6d 65 2c 20 63  char *zDbName, c
4f00: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 62 6c  onst char *zTabl
4f10: 65 4e 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61  eName, const cha
4f20: 72 20 2a 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20  r *zColumnName, 
4f30: 63 68 61 72 20 2a 2a 70 7a 44 61 74 61 54 79 70  char **pzDataTyp
4f40: 65 2c 20 63 68 61 72 20 2a 2a 70 7a 43 6f 6c 6c  e, char **pzColl
4f50: 53 65 71 2c 20 69 6e 74 20 2a 70 4e 6f 74 4e 75  Seq, int *pNotNu
4f60: 6c 6c 2c 20 69 6e 74 20 2a 70 50 72 69 6d 61 72  ll, int *pPrimar
4f70: 79 4b 65 79 2c 20 69 6e 74 20 2a 70 41 75 74 6f  yKey, int *pAuto
4f80: 69 6e 63 2c 20 69 6e 74 20 2a 70 64 74 4c 65 6e  inc, int *pdtLen
4f90: 2c 20 69 6e 74 20 2a 70 63 73 4c 65 6e 29 0a 7b  , int *pcsLen).{
4fa0: 0a 20 20 69 6e 74 20 6e 20 3d 20 73 71 6c 69 74  .  int n = sqlit
4fb0: 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f  e3_table_column_
4fc0: 6d 65 74 61 64 61 74 61 28 64 62 2c 20 7a 44 62  metadata(db, zDb
4fd0: 4e 61 6d 65 2c 20 7a 54 61 62 6c 65 4e 61 6d 65  Name, zTableName
4fe0: 2c 20 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 70  , zColumnName, p
4ff0: 7a 44 61 74 61 54 79 70 65 2c 20 70 7a 43 6f 6c  zDataType, pzCol
5000: 6c 53 65 71 2c 20 70 4e 6f 74 4e 75 6c 6c 2c 20  lSeq, pNotNull, 
5010: 70 50 72 69 6d 61 72 79 4b 65 79 2c 20 70 41 75  pPrimaryKey, pAu
5020: 74 6f 69 6e 63 29 3b 0a 20 20 2a 70 64 74 4c 65  toinc);.  *pdtLe
5030: 6e 20 3d 20 28 2a 70 7a 44 61 74 61 54 79 70 65  n = (*pzDataType
5040: 20 21 3d 20 30 29 20 3f 20 73 74 72 6c 65 6e 28   != 0) ? strlen(
5050: 2a 70 7a 44 61 74 61 54 79 70 65 29 20 3a 20 30  *pzDataType) : 0
5060: 3b 0a 20 20 2a 70 63 73 4c 65 6e 20 3d 20 28 2a  ;.  *pcsLen = (*
5070: 70 7a 43 6f 6c 6c 53 65 71 20 21 3d 20 30 29 20  pzCollSeq != 0) 
5080: 3f 20 73 74 72 6c 65 6e 28 2a 70 7a 43 6f 6c 6c  ? strlen(*pzColl
5090: 53 65 71 29 20 3a 20 30 3b 0a 0a 20 20 72 65 74  Seq) : 0;..  ret
50a0: 75 72 6e 20 6e 3b 0a 7d 0a 0a 76 6f 69 64 20 73  urn n;.}..void s
50b0: 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f 63 61  qlite3_update_ca
50c0: 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a 70 41 72  llback(void *pAr
50d0: 67 2c 20 69 6e 74 20 74 79 70 65 2c 20 63 6f 6e  g, int type, con
50e0: 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 62 61  st char *pDataba
50f0: 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  se, const char *
5100: 70 54 61 62 6c 65 2c 20 73 71 6c 69 74 65 5f 69  pTable, sqlite_i
5110: 6e 74 36 34 20 72 6f 77 69 64 29 0a 7b 0a 20 20  nt64 rowid).{.  
5120: 53 51 4c 49 54 45 55 50 44 41 54 45 48 4f 4f 4b  SQLITEUPDATEHOOK
5130: 20 66 75 6e 63 20 3d 20 28 53 51 4c 49 54 45 55   func = (SQLITEU
5140: 50 44 41 54 45 48 4f 4f 4b 29 70 41 72 67 3b 0a  PDATEHOOK)pArg;.
5150: 0a 20 20 66 75 6e 63 28 74 79 70 65 2c 20 70 44  .  func(type, pD
5160: 61 74 61 62 61 73 65 2c 20 73 74 72 6c 65 6e 28  atabase, strlen(
5170: 70 44 61 74 61 62 61 73 65 29 2c 20 70 54 61 62  pDatabase), pTab
5180: 6c 65 2c 20 73 74 72 6c 65 6e 28 70 54 61 62 6c  le, strlen(pTabl
5190: 65 29 2c 20 72 6f 77 69 64 29 3b 0a 7d 0a 0a 69  e), rowid);.}..i
51a0: 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6d 6d 69  nt sqlite3_commi
51b0: 74 5f 63 61 6c 6c 62 61 63 6b 28 76 6f 69 64 20  t_callback(void 
51c0: 2a 70 41 72 67 29 0a 7b 0a 20 20 72 65 74 75 72  *pArg).{.  retur
51d0: 6e 20 28 28 53 51 4c 49 54 45 43 4f 4d 4d 49 54  n ((SQLITECOMMIT
51e0: 48 4f 4f 4b 29 70 41 72 67 29 28 29 3b 0a 7d 0a  HOOK)pArg)();.}.
51f0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 72 6f  .void sqlite3_ro
5200: 6c 6c 62 61 63 6b 5f 63 61 6c 6c 62 61 63 6b 28  llback_callback(
5210: 76 6f 69 64 20 2a 70 41 72 67 29 0a 7b 0a 20 20  void *pArg).{.  
5220: 28 28 53 51 4c 49 54 45 52 4f 4c 4c 42 41 43 4b  ((SQLITEROLLBACK
5230: 48 4f 4f 4b 29 70 41 72 67 29 28 29 3b 0a 7d 0a  HOOK)pArg)();.}.
5240: 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65  .__declspec(dlle
5250: 78 70 6f 72 74 29 20 76 6f 69 64 20 2a 20 57 49  xport) void * WI
5260: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 75 70 64  NAPI sqlite3_upd
5270: 61 74 65 5f 68 6f 6f 6b 5f 69 6e 74 65 72 6f 70  ate_hook_interop
5280: 28 73 71 6c 69 74 65 33 20 2a 70 44 62 2c 20 53  (sqlite3 *pDb, S
5290: 51 4c 49 54 45 55 50 44 41 54 45 48 4f 4f 4b 20  QLITEUPDATEHOOK 
52a0: 66 75 6e 63 29 0a 7b 0a 20 20 72 65 74 75 72 6e  func).{.  return
52b0: 20 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f   sqlite3_update_
52c0: 68 6f 6f 6b 28 70 44 62 2c 20 73 71 6c 69 74 65  hook(pDb, sqlite
52d0: 33 5f 75 70 64 61 74 65 5f 63 61 6c 6c 62 61 63  3_update_callbac
52e0: 6b 2c 20 66 75 6e 63 29 3b 0a 7d 0a 0a 5f 5f 64  k, func);.}..__d
52f0: 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72  eclspec(dllexpor
5300: 74 29 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49  t) void * WINAPI
5310: 20 73 71 6c 69 74 65 33 5f 63 6f 6d 6d 69 74 5f   sqlite3_commit_
5320: 68 6f 6f 6b 5f 69 6e 74 65 72 6f 70 28 73 71 6c  hook_interop(sql
5330: 69 74 65 33 20 2a 70 44 62 2c 20 53 51 4c 49 54  ite3 *pDb, SQLIT
5340: 45 43 4f 4d 4d 49 54 48 4f 4f 4b 20 66 75 6e 63  ECOMMITHOOK func
5350: 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c  ).{.  return sql
5360: 69 74 65 33 5f 63 6f 6d 6d 69 74 5f 68 6f 6f 6b  ite3_commit_hook
5370: 28 70 44 62 2c 20 73 71 6c 69 74 65 33 5f 63 6f  (pDb, sqlite3_co
5380: 6d 6d 69 74 5f 63 61 6c 6c 62 61 63 6b 2c 20 66  mmit_callback, f
5390: 75 6e 63 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73  unc);.}..__decls
53a0: 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 76  pec(dllexport) v
53b0: 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71 6c  oid * WINAPI sql
53c0: 69 74 65 33 5f 72 6f 6c 6c 62 61 63 6b 5f 68 6f  ite3_rollback_ho
53d0: 6f 6b 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  ok_interop(sqlit
53e0: 65 33 20 2a 70 44 62 2c 20 53 51 4c 49 54 45 52  e3 *pDb, SQLITER
53f0: 4f 4c 4c 42 41 43 4b 48 4f 4f 4b 20 66 75 6e 63  OLLBACKHOOK func
5400: 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c  ).{.  return sql
5410: 69 74 65 33 5f 72 6f 6c 6c 62 61 63 6b 5f 68 6f  ite3_rollback_ho
5420: 6f 6b 28 70 44 62 2c 20 73 71 6c 69 74 65 33 5f  ok(pDb, sqlite3_
5430: 72 6f 6c 6c 62 61 63 6b 5f 63 61 6c 6c 62 61 63  rollback_callbac
5440: 6b 2c 20 66 75 6e 63 29 3b 0a 7d 0a 0a 5f 5f 64  k, func);.}..__d
5450: 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72  eclspec(dllexpor
5460: 74 29 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71  t) int WINAPI sq
5470: 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 75 72 73  lite3_table_curs
5480: 6f 72 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  or(sqlite3_stmt 
5490: 2a 70 73 74 6d 74 2c 20 69 6e 74 20 69 44 62 2c  *pstmt, int iDb,
54a0: 20 50 67 6e 6f 20 74 61 62 6c 65 52 6f 6f 74 50   Pgno tableRootP
54b0: 61 67 65 29 0a 7b 0a 20 20 56 64 62 65 20 2a 70  age).{.  Vdbe *p
54c0: 20 3d 20 28 56 64 62 65 20 2a 29 70 73 74 6d 74   = (Vdbe *)pstmt
54d0: 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 66 6f  ;.  int n;..  fo
54e0: 72 20 28 6e 20 3d 20 30 3b 20 6e 20 3c 20 70 2d  r (n = 0; n < p-
54f0: 3e 6e 43 75 72 73 6f 72 20 26 26 20 70 2d 3e 61  >nCursor && p->a
5500: 70 43 73 72 5b 6e 5d 20 21 3d 20 4e 55 4c 4c 3b  pCsr[n] != NULL;
5510: 20 6e 2b 2b 29 0a 20 20 7b 0a 20 20 20 20 69 66   n++).  {.    if
5520: 20 28 70 2d 3e 61 70 43 73 72 5b 6e 5d 2d 3e 69   (p->apCsr[n]->i
5530: 73 54 61 62 6c 65 20 3d 3d 20 46 41 4c 53 45 29  sTable == FALSE)
5540: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 69   continue;.    i
5550: 66 20 28 70 2d 3e 61 70 43 73 72 5b 6e 5d 2d 3e  f (p->apCsr[n]->
5560: 69 44 62 20 21 3d 20 69 44 62 29 20 63 6f 6e 74  iDb != iDb) cont
5570: 69 6e 75 65 3b 0a 20 20 20 20 69 66 20 28 70 2d  inue;.    if (p-
5580: 3e 61 70 43 73 72 5b 6e 5d 2d 3e 70 43 75 72 73  >apCsr[n]->pCurs
5590: 6f 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 3d 20  or->pgnoRoot == 
55a0: 74 61 62 6c 65 52 6f 6f 74 50 61 67 65 29 0a 20  tableRootPage). 
55b0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0a 20       return n;. 
55c0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 2d 31 3b 0a   }.  return -1;.
55d0: 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c  }..__declspec(dl
55e0: 6c 65 78 70 6f 72 74 29 20 69 6e 74 20 57 49 4e  lexport) int WIN
55f0: 41 50 49 20 73 71 6c 69 74 65 33 5f 63 75 72 73  API sqlite3_curs
5600: 6f 72 5f 72 6f 77 69 64 28 73 71 6c 69 74 65 33  or_rowid(sqlite3
5610: 5f 73 74 6d 74 20 2a 70 73 74 6d 74 2c 20 69 6e  _stmt *pstmt, in
5620: 74 20 63 75 72 73 6f 72 2c 20 73 71 6c 69 74 65  t cursor, sqlite
5630: 5f 69 6e 74 36 34 20 2a 70 72 6f 77 69 64 29 0a  _int64 *prowid).
5640: 7b 0a 20 20 56 64 62 65 20 2a 70 20 3d 20 28 56  {.  Vdbe *p = (V
5650: 64 62 65 20 2a 29 70 73 74 6d 74 3b 0a 20 20 69  dbe *)pstmt;.  i
5660: 6e 74 20 72 63 20 3d 20 30 3b 0a 20 20 43 75 72  nt rc = 0;.  Cur
5670: 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 69 66 20 28  sor *pC;..  if (
5680: 63 75 72 73 6f 72 20 3c 20 30 20 7c 7c 20 63 75  cursor < 0 || cu
5690: 72 73 6f 72 20 3e 3d 20 70 2d 3e 6e 43 75 72 73  rsor >= p->nCurs
56a0: 6f 72 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54  or) return SQLIT
56b0: 45 5f 45 52 52 4f 52 3b 0a 20 20 69 66 20 28 70  E_ERROR;.  if (p
56c0: 2d 3e 61 70 43 73 72 5b 63 75 72 73 6f 72 5d 20  ->apCsr[cursor] 
56d0: 3d 3d 20 4e 55 4c 4c 29 20 72 65 74 75 72 6e 20  == NULL) return 
56e0: 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
56f0: 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 63 75  pC = p->apCsr[cu
5700: 72 73 6f 72 5d 3b 0a 0a 20 20 72 63 20 3d 20 73  rsor];..  rc = s
5710: 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
5720: 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66  Moveto(pC);.  if
5730: 28 20 72 63 20 29 20 72 65 74 75 72 6e 20 72 63  ( rc ) return rc
5740: 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 72 6f 77  ;..  if( pC->row
5750: 69 64 49 73 56 61 6c 69 64 20 29 0a 20 20 7b 0a  idIsValid ).  {.
5760: 20 20 20 20 2a 70 72 6f 77 69 64 20 3d 20 70 43      *prowid = pC
5770: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 7d  ->lastRowid;.  }
5780: 0a 20 20 65 6c 73 65 20 69 66 28 70 43 2d 3e 70  .  else if(pC->p
5790: 73 65 75 64 6f 54 61 62 6c 65 20 29 0a 20 20 7b  seudoTable ).  {
57a0: 0a 20 20 20 20 2a 70 72 6f 77 69 64 20 3d 20 6b  .    *prowid = k
57b0: 65 79 54 6f 49 6e 74 28 70 43 2d 3e 69 4b 65 79  eyToInt(pC->iKey
57c0: 29 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66  );.  }.  else if
57d0: 28 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c 7c 20  (pC->nullRow || 
57e0: 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 29 0a  pC->pCursor==0).
57f0: 20 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53    {.    return S
5800: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
5810: 0a 20 20 65 6c 73 65 0a 20 20 7b 0a 20 20 20 20  .  else.  {.    
5820: 69 66 20 28 70 43 2d 3e 70 43 75 72 73 6f 72 20  if (pC->pCursor 
5830: 3d 3d 20 4e 55 4c 4c 29 20 72 65 74 75 72 6e 20  == NULL) return 
5840: 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
5850: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65    sqlite3BtreeKe
5860: 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f  ySize(pC->pCurso
5870: 72 2c 20 70 72 6f 77 69 64 29 3b 0a 20 20 20 20  r, prowid);.    
5880: 2a 70 72 6f 77 69 64 20 3d 20 6b 65 79 54 6f 49  *prowid = keyToI
5890: 6e 74 28 2a 70 72 6f 77 69 64 29 3b 0a 20 20 7d  nt(*prowid);.  }
58a0: 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a  .  return 0;.}..
58b0: 23 65 6e 64 69 66 20 2f 2f 20 4f 53 5f 57 49 4e  #endif // OS_WIN
58c0: 0a                                               .