System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 11e6b4b1e6feef2d16a2944526a95efdce85f4cf:


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 31 30 30 30 30 30  ntClose 0x100000
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 2f 2f 20 52 65 74 75 72 6e  et;.}..// Return
11f0: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1200: 64 61 74 61 62 61 73 65 73 20 61 74 74 61 63 68  databases attach
1210: 65 64 20 74 6f 20 74 68 69 73 20 6f 6e 65 0a 5f  ed to this one._
1220: 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70  _declspec(dllexp
1230: 6f 72 74 29 20 76 6f 69 64 20 57 49 4e 41 50 49  ort) void WINAPI
1240: 20 73 71 6c 69 74 65 33 5f 64 65 74 61 63 68 5f   sqlite3_detach_
1250: 61 6c 6c 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  all_interop(sqli
1260: 74 65 33 20 2a 64 62 29 0a 7b 0a 7d 0a 0a 5f 5f  te3 *db).{.}..__
1270: 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f  declspec(dllexpo
1280: 72 74 29 20 69 6e 74 20 57 49 4e 41 50 49 20 73  rt) int WINAPI s
1290: 71 6c 69 74 65 33 5f 65 78 65 63 5f 69 6e 74 65  qlite3_exec_inte
12a0: 72 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  rop(sqlite3 *db,
12b0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c   const char *sql
12c0: 2c 20 73 71 6c 69 74 65 33 5f 63 61 6c 6c 62 61  , sqlite3_callba
12d0: 63 6b 20 63 62 2c 20 76 6f 69 64 20 2a 70 76 2c  ck cb, void *pv,
12e0: 20 63 68 61 72 20 2a 2a 65 72 72 6d 73 67 2c 20   char **errmsg, 
12f0: 69 6e 74 20 2a 70 6c 65 6e 29 0a 7b 20 0a 20 20  int *plen).{ .  
1300: 69 6e 74 20 6e 3b 0a 0a 20 20 45 6e 74 65 72 44  int n;..  EnterD
1310: 62 4d 75 74 65 78 28 64 62 29 3b 0a 20 20 6e 20  bMutex(db);.  n 
1320: 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64  = sqlite3_exec(d
1330: 62 2c 20 73 71 6c 2c 20 63 62 2c 20 70 76 2c 20  b, sql, cb, pv, 
1340: 65 72 72 6d 73 67 29 3b 0a 20 20 2a 70 6c 65 6e  errmsg);.  *plen
1350: 20 3d 20 28 2a 65 72 72 6d 73 67 20 21 3d 20 30   = (*errmsg != 0
1360: 29 20 3f 20 73 74 72 6c 65 6e 28 2a 65 72 72 6d  ) ? strlen(*errm
1370: 73 67 29 20 3a 20 30 3b 0a 20 20 4c 65 61 76 65  sg) : 0;.  Leave
1380: 44 62 4d 75 74 65 78 28 64 62 29 3b 0a 0a 20 20  DbMutex(db);..  
1390: 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a 0a 5f 5f 64  return n;.}..__d
13a0: 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72  eclspec(dllexpor
13b0: 74 29 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  t) sqlite_int64 
13c0: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 6c  WINAPI sqlite3_l
13d0: 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
13e0: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
13f0: 20 2a 64 62 29 0a 7b 0a 20 20 72 65 74 75 72 6e   *db).{.  return
1400: 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e   sqlite3_last_in
1410: 73 65 72 74 5f 72 6f 77 69 64 28 64 62 29 3b 0a  sert_rowid(db);.
1420: 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c  }..__declspec(dl
1430: 6c 65 78 70 6f 72 74 29 20 69 6e 74 20 57 49 4e  lexport) int WIN
1440: 41 50 49 20 73 71 6c 69 74 65 33 5f 63 68 61 6e  API sqlite3_chan
1450: 67 65 73 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  ges_interop(sqli
1460: 74 65 33 20 2a 64 62 29 0a 7b 0a 20 20 72 65 74  te3 *db).{.  ret
1470: 75 72 6e 20 73 71 6c 69 74 65 33 5f 63 68 61 6e  urn sqlite3_chan
1480: 67 65 73 28 64 62 29 3b 0a 7d 0a 0a 5f 5f 64 65  ges(db);.}..__de
1490: 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74  clspec(dllexport
14a0: 29 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c  ) int WINAPI sql
14b0: 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67  ite3_total_chang
14c0: 65 73 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  es_interop(sqlit
14d0: 65 33 20 2a 64 62 29 0a 7b 0a 20 20 72 65 74 75  e3 *db).{.  retu
14e0: 72 6e 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  rn sqlite3_total
14f0: 5f 63 68 61 6e 67 65 73 28 64 62 29 3b 0a 7d 0a  _changes(db);.}.
1500: 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65  .__declspec(dlle
1510: 78 70 6f 72 74 29 20 76 6f 69 64 20 57 49 4e 41  xport) void WINA
1520: 50 49 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  PI sqlite3_inter
1530: 72 75 70 74 5f 69 6e 74 65 72 6f 70 28 73 71 6c  rupt_interop(sql
1540: 69 74 65 33 20 2a 64 62 29 0a 7b 0a 20 20 73 71  ite3 *db).{.  sq
1550: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
1560: 64 62 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70  db);.}..__declsp
1570: 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 69 6e  ec(dllexport) in
1580: 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  t WINAPI sqlite3
1590: 5f 63 6f 6d 70 6c 65 74 65 5f 69 6e 74 65 72 6f  _complete_intero
15a0: 70 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  p(const char *sq
15b0: 6c 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20 73 71  l).{.  return sq
15c0: 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 28 73  lite3_complete(s
15d0: 71 6c 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70  ql);.}..__declsp
15e0: 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 69 6e  ec(dllexport) in
15f0: 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  t WINAPI sqlite3
1600: 5f 63 6f 6d 70 6c 65 74 65 31 36 5f 69 6e 74 65  _complete16_inte
1610: 72 6f 70 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a  rop(const void *
1620: 73 71 6c 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20  sql).{.  return 
1630: 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65  sqlite3_complete
1640: 31 36 28 73 71 6c 29 3b 0a 7d 0a 0a 5f 5f 64 65  16(sql);.}..__de
1650: 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74  clspec(dllexport
1660: 29 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c  ) int WINAPI sql
1670: 69 74 65 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65  ite3_busy_handle
1680: 72 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  r_interop(sqlite
1690: 33 20 2a 64 62 2c 20 69 6e 74 28 2a 63 62 29 28  3 *db, int(*cb)(
16a0: 76 6f 69 64 20 2a 2c 20 69 6e 74 29 2c 20 76 6f  void *, int), vo
16b0: 69 64 20 2a 70 76 29 0a 7b 0a 20 20 72 65 74 75  id *pv).{.  retu
16c0: 72 6e 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f  rn sqlite3_busy_
16d0: 68 61 6e 64 6c 65 72 28 64 62 2c 20 63 62 2c 20  handler(db, cb, 
16e0: 70 76 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70  pv);.}..__declsp
16f0: 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 69 6e  ec(dllexport) in
1700: 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  t WINAPI sqlite3
1710: 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 5f 69 6e  _busy_timeout_in
1720: 74 65 72 6f 70 28 73 71 6c 69 74 65 33 20 2a 64  terop(sqlite3 *d
1730: 62 2c 20 69 6e 74 20 6d 73 29 0a 7b 0a 20 20 72  b, int ms).{.  r
1740: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 62 75  eturn sqlite3_bu
1750: 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20 6d  sy_timeout(db, m
1760: 73 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65  s);.}..__declspe
1770: 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 69 6e 74  c(dllexport) int
1780: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
1790: 67 65 74 5f 74 61 62 6c 65 5f 69 6e 74 65 72 6f  get_table_intero
17a0: 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63  p(sqlite3 *db, c
17b0: 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 2c 20  onst char *sql, 
17c0: 63 68 61 72 20 2a 2a 2a 72 65 73 75 6c 74 70 2c  char ***resultp,
17d0: 20 69 6e 74 20 2a 6e 72 6f 77 2c 20 69 6e 74 20   int *nrow, int 
17e0: 2a 6e 63 6f 6c 75 6d 6e 2c 20 63 68 61 72 20 2a  *ncolumn, char *
17f0: 2a 65 72 72 6d 73 67 2c 20 69 6e 74 20 2a 70 6c  *errmsg, int *pl
1800: 65 6e 29 0a 7b 0a 20 20 69 6e 74 20 6e 20 3d 20  en).{.  int n = 
1810: 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c  sqlite3_get_tabl
1820: 65 28 64 62 2c 20 73 71 6c 2c 20 72 65 73 75 6c  e(db, sql, resul
1830: 74 70 2c 20 6e 72 6f 77 2c 20 6e 63 6f 6c 75 6d  tp, nrow, ncolum
1840: 6e 2c 20 65 72 72 6d 73 67 29 3b 0a 20 20 2a 70  n, errmsg);.  *p
1850: 6c 65 6e 20 3d 20 28 2a 65 72 72 6d 73 67 20 21  len = (*errmsg !
1860: 3d 20 30 29 20 3f 20 73 74 72 6c 65 6e 28 28 63  = 0) ? strlen((c
1870: 68 61 72 20 2a 29 2a 65 72 72 6d 73 67 29 20 3a  har *)*errmsg) :
1880: 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0a   0;.  return n;.
1890: 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c  }..__declspec(dl
18a0: 6c 65 78 70 6f 72 74 29 20 76 6f 69 64 20 57 49  lexport) void WI
18b0: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 66 72 65  NAPI sqlite3_fre
18c0: 65 5f 74 61 62 6c 65 5f 69 6e 74 65 72 6f 70 28  e_table_interop(
18d0: 63 68 61 72 20 2a 2a 72 65 73 75 6c 74 29 0a 7b  char **result).{
18e0: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 5f  .  sqlite3_free_
18f0: 74 61 62 6c 65 28 72 65 73 75 6c 74 29 3b 0a 7d  table(result);.}
1900: 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c  ..__declspec(dll
1910: 65 78 70 6f 72 74 29 20 76 6f 69 64 20 57 49 4e  export) void WIN
1920: 41 50 49 20 73 71 6c 69 74 65 33 5f 66 72 65 65  API sqlite3_free
1930: 5f 69 6e 74 65 72 6f 70 28 63 68 61 72 20 2a 7a  _interop(char *z
1940: 29 0a 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  ).{.  sqlite3_fr
1950: 65 65 28 7a 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c  ee(z);.}..__decl
1960: 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20  spec(dllexport) 
1970: 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74  int WINAPI sqlit
1980: 65 33 5f 6f 70 65 6e 5f 69 6e 74 65 72 6f 70 28  e3_open_interop(
1990: 63 6f 6e 73 74 20 63 68 61 72 2a 66 69 6c 65 6e  const char*filen
19a0: 61 6d 65 2c 20 73 71 6c 69 74 65 33 20 2a 2a 70  ame, sqlite3 **p
19b0: 70 64 62 29 0a 7b 0a 20 20 69 6e 74 20 72 65 74  pdb).{.  int ret
19c0: 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28   = sqlite3_open(
19d0: 66 69 6c 65 6e 61 6d 65 2c 20 70 70 64 62 29 3b  filename, ppdb);
19e0: 0a 20 20 69 66 20 28 72 65 74 20 3d 3d 20 53 51  .  if (ret == SQ
19f0: 4c 49 54 45 5f 4f 4b 29 20 49 6e 69 74 69 61 6c  LITE_OK) Initial
1a00: 69 7a 65 44 62 4d 75 74 65 78 28 2a 70 70 64 62  izeDbMutex(*ppdb
1a10: 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20 72 65 74  );..  return ret
1a20: 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28  ;.}..__declspec(
1a30: 64 6c 6c 65 78 70 6f 72 74 29 20 69 6e 74 20 57  dllexport) int W
1a40: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 6f 70  INAPI sqlite3_op
1a50: 65 6e 31 36 5f 69 6e 74 65 72 6f 70 28 63 6f 6e  en16_interop(con
1a60: 73 74 20 76 6f 69 64 20 2a 66 69 6c 65 6e 61 6d  st void *filenam
1a70: 65 2c 20 73 71 6c 69 74 65 33 20 2a 2a 70 70 64  e, sqlite3 **ppd
1a80: 62 29 0a 7b 0a 20 20 69 6e 74 20 72 65 74 20 3d  b).{.  int ret =
1a90: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28   sqlite3_open16(
1aa0: 66 69 6c 65 6e 61 6d 65 2c 20 70 70 64 62 29 3b  filename, ppdb);
1ab0: 0a 20 20 69 66 20 28 72 65 74 20 3d 3d 20 53 51  .  if (ret == SQ
1ac0: 4c 49 54 45 5f 4f 4b 29 20 49 6e 69 74 69 61 6c  LITE_OK) Initial
1ad0: 69 7a 65 44 62 4d 75 74 65 78 28 2a 70 70 64 62  izeDbMutex(*ppdb
1ae0: 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20 72 65 74  );..  return ret
1af0: 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28  ;.}..__declspec(
1b00: 64 6c 6c 65 78 70 6f 72 74 29 20 69 6e 74 20 57  dllexport) int W
1b10: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 65 72  INAPI sqlite3_er
1b20: 72 63 6f 64 65 5f 69 6e 74 65 72 6f 70 28 73 71  rcode_interop(sq
1b30: 6c 69 74 65 33 20 2a 64 62 29 0a 7b 0a 20 20 72  lite3 *db).{.  r
1b40: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 65 72  eturn sqlite3_er
1b50: 72 63 6f 64 65 28 64 62 29 3b 0a 7d 0a 0a 5f 5f  rcode(db);.}..__
1b60: 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f  declspec(dllexpo
1b70: 72 74 29 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  rt) const char *
1b80: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
1b90: 65 72 72 6d 73 67 5f 69 6e 74 65 72 6f 70 28 73  errmsg_interop(s
1ba0: 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 20  qlite3 *db, int 
1bb0: 2a 70 6c 65 6e 29 0a 7b 0a 20 20 63 6f 6e 73 74  *plen).{.  const
1bc0: 20 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73 71   char *pval = sq
1bd0: 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29  lite3_errmsg(db)
1be0: 3b 0a 20 20 2a 70 6c 65 6e 20 3d 20 28 70 76 61  ;.  *plen = (pva
1bf0: 6c 20 21 3d 20 30 29 20 3f 20 73 74 72 6c 65 6e  l != 0) ? strlen
1c00: 28 70 76 61 6c 29 20 3a 20 30 3b 0a 20 20 72 65  (pval) : 0;.  re
1c10: 74 75 72 6e 20 70 76 61 6c 3b 0a 7d 0a 0a 5f 5f  turn pval;.}..__
1c20: 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f  declspec(dllexpo
1c30: 72 74 29 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  rt) const char *
1c40: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
1c50: 65 72 72 6d 73 67 5f 73 74 6d 74 5f 69 6e 74 65  errmsg_stmt_inte
1c60: 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  rop(sqlite3_stmt
1c70: 20 2a 73 74 6d 74 2c 20 69 6e 74 20 2a 70 6c 65   *stmt, int *ple
1c80: 6e 29 0a 7b 0a 20 20 56 64 62 65 20 2a 70 20 3d  n).{.  Vdbe *p =
1c90: 20 28 56 64 62 65 20 2a 29 73 74 6d 74 3b 0a 0a   (Vdbe *)stmt;..
1ca0: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
1cb0: 5f 65 72 72 6d 73 67 5f 69 6e 74 65 72 6f 70 28  _errmsg_interop(
1cc0: 70 2d 3e 64 62 2c 20 70 6c 65 6e 29 3b 0a 7d 0a  p->db, plen);.}.
1cd0: 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65  .__declspec(dlle
1ce0: 78 70 6f 72 74 29 20 69 6e 74 20 57 49 4e 41 50  xport) int WINAP
1cf0: 49 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  I sqlite3_prepar
1d00: 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  e_interop(sqlite
1d10: 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61  3 *db, const cha
1d20: 72 20 2a 73 71 6c 2c 20 69 6e 74 20 6e 62 79 74  r *sql, int nbyt
1d30: 65 73 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  es, sqlite3_stmt
1d40: 20 2a 2a 70 70 73 74 6d 74 2c 20 63 6f 6e 73 74   **ppstmt, const
1d50: 20 63 68 61 72 20 2a 2a 70 7a 74 61 69 6c 2c 20   char **pztail, 
1d60: 69 6e 74 20 2a 70 6c 65 6e 29 0a 7b 0a 20 20 69  int *plen).{.  i
1d70: 6e 74 20 6e 3b 0a 0a 20 20 45 6e 74 65 72 44 62  nt n;..  EnterDb
1d80: 4d 75 74 65 78 28 64 62 29 3b 0a 20 20 6e 20 3d  Mutex(db);.  n =
1d90: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
1da0: 28 64 62 2c 20 73 71 6c 2c 20 6e 62 79 74 65 73  (db, sql, nbytes
1db0: 2c 20 70 70 73 74 6d 74 2c 20 70 7a 74 61 69 6c  , ppstmt, pztail
1dc0: 29 3b 0a 20 20 2a 70 6c 65 6e 20 3d 20 28 2a 70  );.  *plen = (*p
1dd0: 7a 74 61 69 6c 20 21 3d 20 30 29 20 3f 20 73 74  ztail != 0) ? st
1de0: 72 6c 65 6e 28 2a 70 7a 74 61 69 6c 29 20 3a 20  rlen(*pztail) : 
1df0: 30 3b 0a 20 20 4c 65 61 76 65 44 62 4d 75 74 65  0;.  LeaveDbMute
1e00: 78 28 64 62 29 3b 0a 20 20 72 65 74 75 72 6e 20  x(db);.  return 
1e10: 6e 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63  n;.}..__declspec
1e20: 28 64 6c 6c 65 78 70 6f 72 74 29 20 69 6e 74 20  (dllexport) int 
1e30: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 70  WINAPI sqlite3_p
1e40: 72 65 70 61 72 65 31 36 5f 69 6e 74 65 72 6f 70  repare16_interop
1e50: 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f  (sqlite3 *db, co
1e60: 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 2c 20 69  nst void *sql, i
1e70: 6e 74 20 6e 63 68 61 72 73 2c 20 73 71 6c 69 74  nt nchars, sqlit
1e80: 65 33 5f 73 74 6d 74 20 2a 2a 70 70 73 74 6d 74  e3_stmt **ppstmt
1e90: 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2a 70  , const void **p
1ea0: 7a 74 61 69 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e  ztail, int *plen
1eb0: 29 0a 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20  ).{.  int n;..  
1ec0: 45 6e 74 65 72 44 62 4d 75 74 65 78 28 64 62 29  EnterDbMutex(db)
1ed0: 3b 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f  ;.  n = sqlite3_
1ee0: 70 72 65 70 61 72 65 31 36 28 64 62 2c 20 73 71  prepare16(db, sq
1ef0: 6c 2c 20 6e 63 68 61 72 73 20 2a 20 73 69 7a 65  l, nchars * size
1f00: 6f 66 28 77 63 68 61 72 5f 74 29 2c 20 70 70 73  of(wchar_t), pps
1f10: 74 6d 74 2c 20 70 7a 74 61 69 6c 29 3b 0a 20 20  tmt, pztail);.  
1f20: 2a 70 6c 65 6e 20 3d 20 28 2a 70 7a 74 61 69 6c  *plen = (*pztail
1f30: 20 21 3d 20 30 29 20 3f 20 77 63 73 6c 65 6e 28   != 0) ? wcslen(
1f40: 28 77 63 68 61 72 5f 74 20 2a 29 2a 70 7a 74 61  (wchar_t *)*pzta
1f50: 69 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77 63 68  il) * sizeof(wch
1f60: 61 72 5f 74 29 20 3a 20 30 3b 0a 20 20 4c 65 61  ar_t) : 0;.  Lea
1f70: 76 65 44 62 4d 75 74 65 78 28 64 62 29 3b 0a 20  veDbMutex(db);. 
1f80: 20 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a 0a 5f 5f   return n;.}..__
1f90: 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f  declspec(dllexpo
1fa0: 72 74 29 20 69 6e 74 20 57 49 4e 41 50 49 20 73  rt) int WINAPI s
1fb0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62  qlite3_bind_blob
1fc0: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
1fd0: 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74  _stmt *stmt, int
1fe0: 20 69 43 6f 6c 2c 20 63 6f 6e 73 74 20 76 6f 69   iCol, const voi
1ff0: 64 20 2a 70 76 2c 20 69 6e 74 20 6e 2c 20 76 6f  d *pv, int n, vo
2000: 69 64 28 2a 63 62 29 28 76 6f 69 64 2a 29 29 0a  id(*cb)(void*)).
2010: 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74  {.  return sqlit
2020: 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 73 74 6d  e3_bind_blob(stm
2030: 74 2c 20 69 43 6f 6c 2c 20 70 76 2c 20 6e 2c 20  t, iCol, pv, n, 
2040: 63 62 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70  cb);.}..__declsp
2050: 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 69 6e  ec(dllexport) in
2060: 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  t WINAPI sqlite3
2070: 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74  _bind_double_int
2080: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
2090: 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f  t *stmt, int iCo
20a0: 6c 2c 20 64 6f 75 62 6c 65 20 2a 76 61 6c 29 0a  l, double *val).
20b0: 7b 0a 09 72 65 74 75 72 6e 20 73 71 6c 69 74 65  {..return sqlite
20c0: 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 73 74  3_bind_double(st
20d0: 6d 74 2c 69 43 6f 6c 2c 2a 76 61 6c 29 3b 0a 7d  mt,iCol,*val);.}
20e0: 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c  ..__declspec(dll
20f0: 65 78 70 6f 72 74 29 20 69 6e 74 20 57 49 4e 41  export) int WINA
2100: 50 49 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  PI sqlite3_bind_
2110: 69 6e 74 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  int_interop(sqli
2120: 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20  te3_stmt *stmt, 
2130: 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20 76 61  int iCol, int va
2140: 6c 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20 73 71  l).{.  return sq
2150: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 73  lite3_bind_int(s
2160: 74 6d 74 2c 20 69 43 6f 6c 2c 20 76 61 6c 29 3b  tmt, iCol, val);
2170: 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64  .}..__declspec(d
2180: 6c 6c 65 78 70 6f 72 74 29 20 69 6e 74 20 57 49  llexport) int WI
2190: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 62 69 6e  NAPI sqlite3_bin
21a0: 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  d_int64_interop(
21b0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74  sqlite3_stmt *st
21c0: 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 73 71  mt, int iCol, sq
21d0: 6c 69 74 65 5f 69 6e 74 36 34 20 2a 76 61 6c 29  lite_int64 *val)
21e0: 0a 7b 0a 09 72 65 74 75 72 6e 20 73 71 6c 69 74  .{..return sqlit
21f0: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 73 74  e3_bind_int64(st
2200: 6d 74 2c 69 43 6f 6c 2c 2a 76 61 6c 29 3b 0a 7d  mt,iCol,*val);.}
2210: 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c  ..__declspec(dll
2220: 65 78 70 6f 72 74 29 20 69 6e 74 20 57 49 4e 41  export) int WINA
2230: 50 49 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  PI sqlite3_bind_
2240: 6e 75 6c 6c 5f 69 6e 74 65 72 6f 70 28 73 71 6c  null_interop(sql
2250: 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c  ite3_stmt *stmt,
2260: 20 69 6e 74 20 69 43 6f 6c 29 0a 7b 0a 20 20 72   int iCol).{.  r
2270: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 62 69  eturn sqlite3_bi
2280: 6e 64 5f 6e 75 6c 6c 28 73 74 6d 74 2c 20 69 43  nd_null(stmt, iC
2290: 6f 6c 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70  ol);.}..__declsp
22a0: 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 69 6e  ec(dllexport) in
22b0: 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33  t WINAPI sqlite3
22c0: 5f 62 69 6e 64 5f 74 65 78 74 5f 69 6e 74 65 72  _bind_text_inter
22d0: 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  op(sqlite3_stmt 
22e0: 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c  *stmt, int iCol,
22f0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 76 61 6c   const char *val
2300: 2c 20 69 6e 74 20 6e 2c 20 76 6f 69 64 28 2a 63  , int n, void(*c
2310: 62 29 28 76 6f 69 64 20 2a 29 29 0a 7b 0a 20 20  b)(void *)).{.  
2320: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 62  return sqlite3_b
2330: 69 6e 64 5f 74 65 78 74 28 73 74 6d 74 2c 20 69  ind_text(stmt, i
2340: 43 6f 6c 2c 20 76 61 6c 2c 20 6e 2c 20 63 62 29  Col, val, n, cb)
2350: 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28  ;.}..__declspec(
2360: 64 6c 6c 65 78 70 6f 72 74 29 20 69 6e 74 20 57  dllexport) int W
2370: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 62 69  INAPI sqlite3_bi
2380: 6e 64 5f 74 65 78 74 31 36 5f 69 6e 74 65 72 6f  nd_text16_intero
2390: 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  p(sqlite3_stmt *
23a0: 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20  stmt, int iCol, 
23b0: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 76 61 6c 2c  const void *val,
23c0: 20 69 6e 74 20 6e 2c 20 76 6f 69 64 28 2a 63 62   int n, void(*cb
23d0: 29 28 76 6f 69 64 20 2a 29 29 0a 7b 0a 20 20 72  )(void *)).{.  r
23e0: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 62 69  eturn sqlite3_bi
23f0: 6e 64 5f 74 65 78 74 31 36 28 73 74 6d 74 2c 20  nd_text16(stmt, 
2400: 69 43 6f 6c 2c 20 76 61 6c 2c 20 6e 2c 20 63 62  iCol, val, n, cb
2410: 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63  );.}..__declspec
2420: 28 64 6c 6c 65 78 70 6f 72 74 29 20 69 6e 74 20  (dllexport) int 
2430: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 62  WINAPI sqlite3_b
2440: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f  ind_parameter_co
2450: 75 6e 74 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  unt_interop(sqli
2460: 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 29 0a  te3_stmt *stmt).
2470: 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74  {.  return sqlit
2480: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
2490: 72 5f 63 6f 75 6e 74 28 73 74 6d 74 29 3b 0a 7d  r_count(stmt);.}
24a0: 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c  ..__declspec(dll
24b0: 65 78 70 6f 72 74 29 20 63 6f 6e 73 74 20 63 68  export) const ch
24c0: 61 72 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69  ar * WINAPI sqli
24d0: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
24e0: 65 72 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28  er_name_interop(
24f0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74  sqlite3_stmt *st
2500: 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e  mt, int iCol, in
2510: 74 20 2a 70 6c 65 6e 29 0a 7b 0a 20 20 63 6f 6e  t *plen).{.  con
2520: 73 74 20 63 68 61 72 20 2a 70 76 61 6c 20 3d 20  st char *pval = 
2530: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
2540: 61 6d 65 74 65 72 5f 6e 61 6d 65 28 73 74 6d 74  ameter_name(stmt
2550: 2c 20 69 43 6f 6c 29 3b 0a 20 20 2a 70 6c 65 6e  , iCol);.  *plen
2560: 20 3d 20 28 70 76 61 6c 20 21 3d 20 30 29 20 3f   = (pval != 0) ?
2570: 20 73 74 72 6c 65 6e 28 70 76 61 6c 29 20 3a 20   strlen(pval) : 
2580: 30 3b 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c  0;.  return pval
2590: 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28  ;.}..__declspec(
25a0: 64 6c 6c 65 78 70 6f 72 74 29 20 69 6e 74 20 57  dllexport) int W
25b0: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 62 69  INAPI sqlite3_bi
25c0: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64  nd_parameter_ind
25d0: 65 78 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  ex_interop(sqlit
25e0: 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 63  e3_stmt *stmt, c
25f0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
2600: 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c  ).{.  return sql
2610: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
2620: 74 65 72 5f 69 6e 64 65 78 28 73 74 6d 74 2c 20  ter_index(stmt, 
2630: 7a 4e 61 6d 65 29 3b 0a 7d 0a 0a 5f 5f 64 65 63  zName);.}..__dec
2640: 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29  lspec(dllexport)
2650: 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69   int WINAPI sqli
2660: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
2670: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
2680: 5f 73 74 6d 74 20 2a 73 74 6d 74 29 0a 7b 0a 20  _stmt *stmt).{. 
2690: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f   return sqlite3_
26a0: 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 73 74 6d  column_count(stm
26b0: 74 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65  t);.}..__declspe
26c0: 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 63 6f 6e  c(dllexport) con
26d0: 73 74 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49  st char * WINAPI
26e0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
26f0: 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c  name_interop(sql
2700: 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c  ite3_stmt *stmt,
2710: 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a   int iCol, int *
2720: 70 6c 65 6e 29 0a 7b 0a 20 20 63 6f 6e 73 74 20  plen).{.  const 
2730: 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73 71 6c  char *pval = sql
2740: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
2750: 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0a 20 20  (stmt, iCol);.  
2760: 2a 70 6c 65 6e 20 3d 20 28 70 76 61 6c 20 21 3d  *plen = (pval !=
2770: 20 30 29 20 3f 20 73 74 72 6c 65 6e 28 70 76 61   0) ? strlen(pva
2780: 6c 29 20 3a 20 30 3b 0a 20 20 72 65 74 75 72 6e  l) : 0;.  return
2790: 20 70 76 61 6c 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c   pval;.}..__decl
27a0: 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20  spec(dllexport) 
27b0: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 20 57 49 4e  const void * WIN
27c0: 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  API sqlite3_colu
27d0: 6d 6e 5f 6e 61 6d 65 31 36 5f 69 6e 74 65 72 6f  mn_name16_intero
27e0: 70 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  p(sqlite3_stmt *
27f0: 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20  stmt, int iCol, 
2800: 69 6e 74 20 2a 70 6c 65 6e 29 0a 7b 0a 20 20 63  int *plen).{.  c
2810: 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76 61 6c 20  onst void *pval 
2820: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
2830: 5f 6e 61 6d 65 31 36 28 73 74 6d 74 2c 20 69 43  _name16(stmt, iC
2840: 6f 6c 29 3b 0a 20 20 2a 70 6c 65 6e 20 3d 20 28  ol);.  *plen = (
2850: 70 76 61 6c 20 21 3d 20 30 29 20 3f 20 77 63 73  pval != 0) ? wcs
2860: 6c 65 6e 28 28 77 63 68 61 72 5f 74 20 2a 29 70  len((wchar_t *)p
2870: 76 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77 63  val) * sizeof(wc
2880: 68 61 72 5f 74 29 20 3a 20 30 3b 0a 20 20 72 65  har_t) : 0;.  re
2890: 74 75 72 6e 20 70 76 61 6c 3b 0a 7d 0a 0a 5f 5f  turn pval;.}..__
28a0: 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f  declspec(dllexpo
28b0: 72 74 29 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  rt) const char *
28c0: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
28d0: 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 5f  column_decltype_
28e0: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f  interop(sqlite3_
28f0: 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20  stmt *stmt, int 
2900: 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29  iCol, int *plen)
2910: 0a 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .{.  const char 
2920: 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f  *pval = sqlite3_
2930: 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 28  column_decltype(
2940: 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0a 20 20 2a  stmt, iCol);.  *
2950: 70 6c 65 6e 20 3d 20 28 70 76 61 6c 20 21 3d 20  plen = (pval != 
2960: 30 29 20 3f 20 73 74 72 6c 65 6e 28 70 76 61 6c  0) ? strlen(pval
2970: 29 20 3a 20 30 3b 0a 20 20 72 65 74 75 72 6e 20  ) : 0;.  return 
2980: 70 76 61 6c 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73  pval;.}..__decls
2990: 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 63  pec(dllexport) c
29a0: 6f 6e 73 74 20 76 6f 69 64 20 2a 20 57 49 4e 41  onst void * WINA
29b0: 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  PI sqlite3_colum
29c0: 6e 5f 64 65 63 6c 74 79 70 65 31 36 5f 69 6e 74  n_decltype16_int
29d0: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74 6d  erop(sqlite3_stm
29e0: 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43 6f  t *stmt, int iCo
29f0: 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0a 7b 0a  l, int *plen).{.
2a00: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76    const void *pv
2a10: 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  al = sqlite3_col
2a20: 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36 28 73  umn_decltype16(s
2a30: 74 6d 74 2c 20 69 43 6f 6c 29 3b 0a 20 20 2a 70  tmt, iCol);.  *p
2a40: 6c 65 6e 20 3d 20 28 70 76 61 6c 20 21 3d 20 30  len = (pval != 0
2a50: 29 20 3f 20 77 63 73 6c 65 6e 28 28 77 63 68 61  ) ? wcslen((wcha
2a60: 72 5f 74 20 2a 29 70 76 61 6c 29 20 2a 20 73 69  r_t *)pval) * si
2a70: 7a 65 6f 66 28 77 63 68 61 72 5f 74 29 20 3a 20  zeof(wchar_t) : 
2a80: 30 3b 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c  0;.  return pval
2a90: 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28  ;.}..__declspec(
2aa0: 64 6c 6c 65 78 70 6f 72 74 29 20 69 6e 74 20 57  dllexport) int W
2ab0: 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 73 74  INAPI sqlite3_st
2ac0: 65 70 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  ep_interop(sqlit
2ad0: 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 29 0a 7b  e3_stmt *stmt).{
2ae0: 0a 20 20 69 6e 74 20 72 65 74 3b 0a 0a 20 20 45  .  int ret;..  E
2af0: 6e 74 65 72 44 62 4d 75 74 65 78 28 28 28 56 64  nterDbMutex(((Vd
2b00: 62 65 20 2a 29 73 74 6d 74 29 2d 3e 64 62 29 3b  be *)stmt)->db);
2b10: 0a 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33  .  ret = sqlite3
2b20: 5f 73 74 65 70 28 73 74 6d 74 29 3b 0a 20 20 4c  _step(stmt);.  L
2b30: 65 61 76 65 44 62 4d 75 74 65 78 28 28 28 56 64  eaveDbMutex(((Vd
2b40: 62 65 20 2a 29 73 74 6d 74 29 2d 3e 64 62 29 3b  be *)stmt)->db);
2b50: 0a 0a 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0a  ..  return ret;.
2b60: 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c  }..__declspec(dl
2b70: 6c 65 78 70 6f 72 74 29 20 69 6e 74 20 57 49 4e  lexport) int WIN
2b80: 41 50 49 20 73 71 6c 69 74 65 33 5f 64 61 74 61  API sqlite3_data
2b90: 5f 63 6f 75 6e 74 5f 69 6e 74 65 72 6f 70 28 73  _count_interop(s
2ba0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d  qlite3_stmt *stm
2bb0: 74 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20 73 71  t).{.  return sq
2bc0: 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74  lite3_data_count
2bd0: 28 73 74 6d 74 29 3b 0a 7d 0a 0a 5f 5f 64 65 63  (stmt);.}..__dec
2be0: 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29  lspec(dllexport)
2bf0: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 20 57 49   const void * WI
2c00: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c  NAPI sqlite3_col
2c10: 75 6d 6e 5f 62 6c 6f 62 5f 69 6e 74 65 72 6f 70  umn_blob_interop
2c20: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73  (sqlite3_stmt *s
2c30: 74 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 29 0a 7b  tmt, int iCol).{
2c40: 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65  .  return sqlite
2c50: 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 73 74  3_column_blob(st
2c60: 6d 74 2c 20 69 43 6f 6c 29 3b 0a 7d 0a 0a 5f 5f  mt, iCol);.}..__
2c70: 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f  declspec(dllexpo
2c80: 72 74 29 20 69 6e 74 20 57 49 4e 41 50 49 20 73  rt) int WINAPI s
2c90: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
2ca0: 74 65 73 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  tes_interop(sqli
2cb0: 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20  te3_stmt *stmt, 
2cc0: 69 6e 74 20 69 43 6f 6c 29 0a 7b 0a 20 20 72 65  int iCol).{.  re
2cd0: 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6c  turn sqlite3_col
2ce0: 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2c 20  umn_bytes(stmt, 
2cf0: 69 43 6f 6c 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c  iCol);.}..__decl
2d00: 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20  spec(dllexport) 
2d10: 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74  int WINAPI sqlit
2d20: 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31  e3_column_bytes1
2d30: 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  6_interop(sqlite
2d40: 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e  3_stmt *stmt, in
2d50: 74 20 69 43 6f 6c 29 0a 7b 0a 20 20 72 65 74 75  t iCol).{.  retu
2d60: 72 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  rn sqlite3_colum
2d70: 6e 5f 62 79 74 65 73 31 36 28 73 74 6d 74 2c 20  n_bytes16(stmt, 
2d80: 69 43 6f 6c 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c  iCol);.}..__decl
2d90: 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20  spec(dllexport) 
2da0: 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69  void WINAPI sqli
2db0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  te3_column_doubl
2dc0: 65 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  e_interop(sqlite
2dd0: 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e  3_stmt *stmt, in
2de0: 74 20 69 43 6f 6c 2c 20 64 6f 75 62 6c 65 20 2a  t iCol, double *
2df0: 76 61 6c 29 0a 7b 0a 09 2a 76 61 6c 20 3d 20 73  val).{..*val = s
2e00: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
2e10: 75 62 6c 65 28 73 74 6d 74 2c 69 43 6f 6c 29 3b  uble(stmt,iCol);
2e20: 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64  .}..__declspec(d
2e30: 6c 6c 65 78 70 6f 72 74 29 20 69 6e 74 20 57 49  llexport) int WI
2e40: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c  NAPI sqlite3_col
2e50: 75 6d 6e 5f 69 6e 74 5f 69 6e 74 65 72 6f 70 28  umn_int_interop(
2e60: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74  sqlite3_stmt *st
2e70: 6d 74 2c 20 69 6e 74 20 69 43 6f 6c 29 0a 7b 0a  mt, int iCol).{.
2e80: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
2e90: 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 28 73 74 6d 74  _column_int(stmt
2ea0: 2c 20 69 43 6f 6c 29 3b 0a 7d 0a 0a 5f 5f 64 65  , iCol);.}..__de
2eb0: 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74  clspec(dllexport
2ec0: 29 20 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71  ) void WINAPI sq
2ed0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
2ee0: 36 34 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  64_interop(sqlit
2ef0: 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69  e3_stmt *stmt, i
2f00: 6e 74 20 69 43 6f 6c 2c 20 73 71 6c 69 74 65 5f  nt iCol, sqlite_
2f10: 69 6e 74 36 34 20 2a 76 61 6c 29 0a 7b 0a 09 2a  int64 *val).{..*
2f20: 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  val = sqlite3_co
2f30: 6c 75 6d 6e 5f 69 6e 74 36 34 28 73 74 6d 74 2c  lumn_int64(stmt,
2f40: 69 43 6f 6c 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c  iCol);.}..__decl
2f50: 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20  spec(dllexport) 
2f60: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
2f70: 68 61 72 20 2a 20 57 49 4e 41 50 49 20 73 71 6c  har * WINAPI sql
2f80: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
2f90: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
2fa0: 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74  _stmt *stmt, int
2fb0: 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e   iCol, int *plen
2fc0: 29 0a 7b 0a 20 20 63 6f 6e 73 74 20 75 6e 73 69  ).{.  const unsi
2fd0: 67 6e 65 64 20 63 68 61 72 20 2a 70 76 61 6c 20  gned char *pval 
2fe0: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
2ff0: 5f 74 65 78 74 28 73 74 6d 74 2c 20 69 43 6f 6c  _text(stmt, iCol
3000: 29 3b 0a 20 20 2a 70 6c 65 6e 20 3d 20 28 70 76  );.  *plen = (pv
3010: 61 6c 20 21 3d 20 30 29 20 3f 20 73 74 72 6c 65  al != 0) ? strle
3020: 6e 28 28 63 68 61 72 20 2a 29 70 76 61 6c 29 20  n((char *)pval) 
3030: 3a 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 70 76  : 0;.  return pv
3040: 61 6c 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65  al;.}..__declspe
3050: 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 63 6f 6e  c(dllexport) con
3060: 73 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49  st void * WINAPI
3070: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
3080: 74 65 78 74 31 36 5f 69 6e 74 65 72 6f 70 28 73  text16_interop(s
3090: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d  qlite3_stmt *stm
30a0: 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74  t, int iCol, int
30b0: 20 2a 70 6c 65 6e 29 0a 7b 0a 20 20 63 6f 6e 73   *plen).{.  cons
30c0: 74 20 76 6f 69 64 20 2a 70 76 61 6c 20 3d 20 73  t void *pval = s
30d0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
30e0: 78 74 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29  xt16(stmt, iCol)
30f0: 3b 0a 20 20 2a 70 6c 65 6e 20 3d 20 28 70 76 61  ;.  *plen = (pva
3100: 6c 20 21 3d 20 30 29 20 3f 20 77 63 73 6c 65 6e  l != 0) ? wcslen
3110: 28 28 77 63 68 61 72 5f 74 20 2a 29 70 76 61 6c  ((wchar_t *)pval
3120: 29 20 2a 20 73 69 7a 65 6f 66 28 77 63 68 61 72  ) * sizeof(wchar
3130: 5f 74 29 3a 20 30 3b 0a 20 20 72 65 74 75 72 6e  _t): 0;.  return
3140: 20 70 76 61 6c 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c   pval;.}..__decl
3150: 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20  spec(dllexport) 
3160: 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74  int WINAPI sqlit
3170: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 5f 69  e3_column_type_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 2c 20 69 6e 74 20 69  tmt *stmt, int i
31a0: 43 6f 6c 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20  Col).{.  return 
31b0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
31c0: 79 70 65 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b  ype(stmt, iCol);
31d0: 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64  .}..__declspec(d
31e0: 6c 6c 65 78 70 6f 72 74 29 20 69 6e 74 20 57 49  llexport) int WI
31f0: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 66 69 6e  NAPI sqlite3_fin
3200: 61 6c 69 7a 65 5f 69 6e 74 65 72 6f 70 28 73 71  alize_interop(sq
3210: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74  lite3_stmt *stmt
3220: 29 0a 7b 0a 20 20 2f 2f 20 54 72 79 20 61 6e 64  ).{.  // Try and
3230: 20 66 69 6e 61 6c 69 7a 65 20 61 20 73 74 61 74   finalize a stat
3240: 65 6d 65 6e 74 2c 20 61 6e 64 20 63 6c 6f 73 65  ement, and close
3250: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 74   the database it
3260: 20 62 65 6c 6f 6e 67 65 64 20 74 6f 20 69 66 20   belonged to if 
3270: 74 68 65 20 64 61 74 61 62 61 73 65 20 77 61 73  the database was
3280: 20 6d 61 72 6b 65 64 20 66 6f 72 20 63 6c 6f 73   marked for clos
3290: 69 6e 67 0a 20 20 56 64 62 65 20 2a 70 20 3d 20  ing.  Vdbe *p = 
32a0: 28 56 64 62 65 20 2a 29 73 74 6d 74 3b 0a 20 20  (Vdbe *)stmt;.  
32b0: 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 28 70  sqlite3 *db = (p
32c0: 20 3d 3d 20 4e 55 4c 4c 29 20 3f 20 4e 55 4c 4c   == NULL) ? NULL
32d0: 20 3a 20 70 2d 3e 64 62 3b 0a 20 20 69 6e 74 20   : p->db;.  int 
32e0: 72 65 74 3b 0a 0a 20 20 45 6e 74 65 72 44 62 4d  ret;..  EnterDbM
32f0: 75 74 65 78 28 64 62 29 3b 0a 20 20 72 65 74 20  utex(db);.  ret 
3300: 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  = sqlite3_finali
3310: 7a 65 28 73 74 6d 74 29 3b 0a 20 20 4c 65 61 76  ze(stmt);.  Leav
3320: 65 44 62 4d 75 74 65 78 28 64 62 29 3b 0a 0a 20  eDbMutex(db);.. 
3330: 20 69 66 20 28 72 65 74 20 3d 3d 20 53 51 4c 49   if (ret == SQLI
3340: 54 45 5f 4f 4b 29 0a 20 20 7b 0a 20 20 20 20 69  TE_OK).  {.    i
3350: 66 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  f (db->flags & S
3360: 51 4c 49 54 45 5f 57 61 6e 74 43 6c 6f 73 65 29  QLITE_WantClose)
3370: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 66 20  .    {.      if 
3380: 28 64 62 2d 3e 70 56 64 62 65 20 3d 3d 20 4e 55  (db->pVdbe == NU
3390: 4c 4c 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  LL).      {.    
33a0: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73      sqlite3_clos
33b0: 65 41 6e 64 46 72 65 65 4d 75 74 65 78 28 64 62  eAndFreeMutex(db
33c0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
33d0: 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 72  .  }..  return r
33e0: 65 74 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65  et;.}..__declspe
33f0: 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 69 6e 74  c(dllexport) int
3400: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
3410: 72 65 73 65 74 5f 69 6e 74 65 72 6f 70 28 73 71  reset_interop(sq
3420: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d 74  lite3_stmt *stmt
3430: 29 0a 7b 0a 20 20 69 6e 74 20 72 65 74 3b 0a 0a  ).{.  int ret;..
3440: 20 20 45 6e 74 65 72 44 62 4d 75 74 65 78 28 28    EnterDbMutex((
3450: 28 56 64 62 65 20 2a 29 73 74 6d 74 29 2d 3e 64  (Vdbe *)stmt)->d
3460: 62 29 3b 0a 20 20 72 65 74 20 3d 20 73 71 6c 69  b);.  ret = sqli
3470: 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74 29 3b  te3_reset(stmt);
3480: 0a 20 20 4c 65 61 76 65 44 62 4d 75 74 65 78 28  .  LeaveDbMutex(
3490: 28 28 56 64 62 65 20 2a 29 73 74 6d 74 29 2d 3e  ((Vdbe *)stmt)->
34a0: 64 62 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 65  db);.  return re
34b0: 74 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63  t;.}..__declspec
34c0: 28 64 6c 6c 65 78 70 6f 72 74 29 20 69 6e 74 20  (dllexport) int 
34d0: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63  WINAPI sqlite3_c
34e0: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 69  reate_function_i
34f0: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 20 2a  nterop(sqlite3 *
3500: 70 73 71 6c 2c 20 63 6f 6e 73 74 20 63 68 61 72  psql, const char
3510: 20 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c   *zFunctionName,
3520: 20 69 6e 74 20 6e 41 72 67 2c 20 69 6e 74 20 65   int nArg, int e
3530: 54 65 78 74 52 65 70 2c 20 53 51 4c 49 54 45 55  TextRep, SQLITEU
3540: 53 45 52 46 55 4e 43 20 66 75 6e 63 2c 20 53 51  SERFUNC func, SQ
3550: 4c 49 54 45 55 53 45 52 46 55 4e 43 20 66 75 6e  LITEUSERFUNC fun
3560: 63 73 74 65 70 2c 20 53 51 4c 49 54 45 55 53 45  cstep, SQLITEUSE
3570: 52 46 55 4e 43 20 66 75 6e 63 66 69 6e 61 6c 2c  RFUNC funcfinal,
3580: 20 76 6f 69 64 20 2a 2a 70 70 43 6f 6f 6b 69 65   void **ppCookie
3590: 29 0a 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 53  ).{.  int n;.  S
35a0: 51 4c 49 54 45 55 53 45 52 46 55 4e 43 20 2a 70  QLITEUSERFUNC *p
35b0: 20 3d 20 28 53 51 4c 49 54 45 55 53 45 52 46 55   = (SQLITEUSERFU
35c0: 4e 43 20 2a 29 6d 61 6c 6c 6f 63 28 73 69 7a 65  NC *)malloc(size
35d0: 6f 66 28 53 51 4c 49 54 45 55 53 45 52 46 55 4e  of(SQLITEUSERFUN
35e0: 43 29 20 2a 20 33 29 3b 0a 0a 20 20 70 5b 30 5d  C) * 3);..  p[0]
35f0: 20 3d 20 66 75 6e 63 3b 0a 20 20 70 5b 31 5d 20   = func;.  p[1] 
3600: 3d 20 66 75 6e 63 73 74 65 70 3b 0a 20 20 70 5b  = funcstep;.  p[
3610: 32 5d 20 3d 20 66 75 6e 63 66 69 6e 61 6c 3b 0a  2] = funcfinal;.
3620: 0a 20 20 2a 70 70 43 6f 6f 6b 69 65 20 3d 20 30  .  *ppCookie = 0
3630: 3b 0a 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33  ;..  n = sqlite3
3640: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
3650: 28 70 73 71 6c 2c 20 7a 46 75 6e 63 74 69 6f 6e  (psql, zFunction
3660: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 65 54 65 78  Name, nArg, eTex
3670: 74 52 65 70 2c 20 70 2c 20 28 66 75 6e 63 20 21  tRep, p, (func !
3680: 3d 20 30 29 20 3f 20 73 71 6c 69 74 65 33 5f 69  = 0) ? sqlite3_i
3690: 6e 74 65 72 6f 70 5f 66 75 6e 63 20 3a 20 30 2c  nterop_func : 0,
36a0: 20 28 66 75 6e 63 73 74 65 70 20 21 3d 20 30 29   (funcstep != 0)
36b0: 20 3f 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72   ? sqlite3_inter
36c0: 6f 70 5f 73 74 65 70 20 3a 20 30 2c 20 28 66 75  op_step : 0, (fu
36d0: 6e 63 66 69 6e 61 6c 20 21 3d 20 30 29 20 3f 20  ncfinal != 0) ? 
36e0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 6f 70 5f  sqlite3_interop_
36f0: 66 69 6e 61 6c 20 3a 20 30 29 3b 0a 20 20 69 66  final : 0);.  if
3700: 20 28 6e 20 21 3d 20 30 29 0a 20 20 20 20 66 72   (n != 0).    fr
3710: 65 65 28 70 29 3b 0a 20 20 65 6c 73 65 0a 20 20  ee(p);.  else.  
3720: 20 20 2a 70 70 43 6f 6f 6b 69 65 20 3d 20 70 3b    *ppCookie = p;
3730: 0a 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a  ..  return n;.}.
3740: 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65  .__declspec(dlle
3750: 78 70 6f 72 74 29 20 69 6e 74 20 57 49 4e 41 50  xport) int WINAP
3760: 49 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  I sqlite3_create
3770: 5f 66 75 6e 63 74 69 6f 6e 31 36 5f 69 6e 74 65  _function16_inte
3780: 72 6f 70 28 73 71 6c 69 74 65 33 20 2a 70 73 71  rop(sqlite3 *psq
3790: 6c 2c 20 76 6f 69 64 20 2a 7a 46 75 6e 63 74 69  l, void *zFuncti
37a0: 6f 6e 4e 61 6d 65 2c 20 69 6e 74 20 6e 41 72 67  onName, int nArg
37b0: 2c 20 69 6e 74 20 65 54 65 78 74 52 65 70 2c 20  , int eTextRep, 
37c0: 53 51 4c 49 54 45 55 53 45 52 46 55 4e 43 20 66  SQLITEUSERFUNC f
37d0: 75 6e 63 2c 20 53 51 4c 49 54 45 55 53 45 52 46  unc, SQLITEUSERF
37e0: 55 4e 43 20 66 75 6e 63 73 74 65 70 2c 20 53 51  UNC funcstep, SQ
37f0: 4c 49 54 45 55 53 45 52 46 55 4e 43 20 66 75 6e  LITEUSERFUNC fun
3800: 63 66 69 6e 61 6c 2c 20 76 6f 69 64 20 2a 2a 70  cfinal, void **p
3810: 70 43 6f 6f 6b 69 65 29 0a 7b 0a 20 20 69 6e 74  pCookie).{.  int
3820: 20 6e 3b 0a 20 20 53 51 4c 49 54 45 55 53 45 52   n;.  SQLITEUSER
3830: 46 55 4e 43 20 2a 70 20 3d 20 28 53 51 4c 49 54  FUNC *p = (SQLIT
3840: 45 55 53 45 52 46 55 4e 43 20 2a 29 6d 61 6c 6c  EUSERFUNC *)mall
3850: 6f 63 28 73 69 7a 65 6f 66 28 53 51 4c 49 54 45  oc(sizeof(SQLITE
3860: 55 53 45 52 46 55 4e 43 29 20 2a 20 33 29 3b 0a  USERFUNC) * 3);.
3870: 0a 20 20 70 5b 30 5d 20 3d 20 66 75 6e 63 3b 0a  .  p[0] = func;.
3880: 20 20 70 5b 31 5d 20 3d 20 66 75 6e 63 73 74 65    p[1] = funcste
3890: 70 3b 0a 20 20 70 5b 32 5d 20 3d 20 66 75 6e 63  p;.  p[2] = func
38a0: 66 69 6e 61 6c 3b 0a 0a 20 20 2a 70 70 43 6f 6f  final;..  *ppCoo
38b0: 6b 69 65 20 3d 20 30 3b 0a 0a 20 20 6e 20 3d 20  kie = 0;..  n = 
38c0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
38d0: 75 6e 63 74 69 6f 6e 31 36 28 70 73 71 6c 2c 20  unction16(psql, 
38e0: 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e  zFunctionName, n
38f0: 41 72 67 2c 20 65 54 65 78 74 52 65 70 2c 20 70  Arg, eTextRep, p
3900: 2c 20 28 66 75 6e 63 20 21 3d 20 30 29 20 3f 20  , (func != 0) ? 
3910: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 6f 70 5f  sqlite3_interop_
3920: 66 75 6e 63 20 3a 20 30 2c 20 28 66 75 6e 63 73  func : 0, (funcs
3930: 74 65 70 20 21 3d 20 30 29 20 3f 20 73 71 6c 69  tep != 0) ? sqli
3940: 74 65 33 5f 69 6e 74 65 72 6f 70 5f 73 74 65 70  te3_interop_step
3950: 20 3a 20 30 2c 20 28 66 75 6e 63 66 69 6e 61 6c   : 0, (funcfinal
3960: 20 21 3d 20 30 29 20 3f 20 73 71 6c 69 74 65 33   != 0) ? sqlite3
3970: 5f 69 6e 74 65 72 6f 70 5f 66 69 6e 61 6c 20 3a  _interop_final :
3980: 20 30 29 3b 0a 20 20 69 66 20 28 6e 20 21 3d 20   0);.  if (n != 
3990: 30 29 0a 20 20 20 20 66 72 65 65 28 70 29 3b 0a  0).    free(p);.
39a0: 20 20 65 6c 73 65 0a 20 20 20 20 2a 70 70 43 6f    else.    *ppCo
39b0: 6f 6b 69 65 20 3d 20 70 3b 0a 0a 20 20 72 65 74  okie = p;..  ret
39c0: 75 72 6e 20 6e 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c  urn n;.}..__decl
39d0: 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20  spec(dllexport) 
39e0: 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74  int WINAPI sqlit
39f0: 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
3a00: 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  ion_interop(sqli
3a10: 74 65 33 2a 20 64 62 2c 20 63 6f 6e 73 74 20 63  te3* db, const c
3a20: 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 69 6e 74 20  har *zName, int 
3a30: 65 54 65 78 74 52 65 70 2c 20 76 6f 69 64 2a 20  eTextRep, void* 
3a40: 70 76 55 73 65 72 2c 20 53 51 4c 49 54 45 43 4f  pvUser, SQLITECO
3a50: 4c 4c 41 54 49 4f 4e 20 66 75 6e 63 2c 20 76 6f  LLATION func, vo
3a60: 69 64 20 2a 2a 70 70 43 6f 6f 6b 69 65 29 0a 7b  id **ppCookie).{
3a70: 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 53 51 4c 49  .  int n;.  SQLI
3a80: 54 45 43 4f 4c 4c 41 54 49 4f 4e 20 2a 70 20 3d  TECOLLATION *p =
3a90: 20 28 53 51 4c 49 54 45 43 4f 4c 4c 41 54 49 4f   (SQLITECOLLATIO
3aa0: 4e 20 2a 29 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f  N *)malloc(sizeo
3ab0: 66 28 53 51 4c 49 54 45 43 4f 4c 4c 41 54 49 4f  f(SQLITECOLLATIO
3ac0: 4e 29 29 3b 0a 20 20 0a 20 20 70 5b 30 5d 20 3d  N));.  .  p[0] =
3ad0: 20 66 75 6e 63 3b 0a 0a 20 20 2a 70 70 43 6f 6f   func;..  *ppCoo
3ae0: 6b 69 65 20 3d 20 30 3b 0a 0a 20 20 6e 20 3d 20  kie = 0;..  n = 
3af0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
3b00: 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 7a 4e 61  ollation(db, zNa
3b10: 6d 65 2c 20 65 54 65 78 74 52 65 70 2c 20 70 2c  me, eTextRep, p,
3b20: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 6f 70   sqlite3_interop
3b30: 5f 63 6f 6c 6c 61 74 69 6f 6e 66 75 6e 63 29 3b  _collationfunc);
3b40: 0a 20 20 69 66 20 28 6e 20 21 3d 20 30 29 0a 20  .  if (n != 0). 
3b50: 20 20 20 66 72 65 65 28 70 29 3b 0a 20 20 65 6c     free(p);.  el
3b60: 73 65 0a 20 20 20 20 2a 70 70 43 6f 6f 6b 69 65  se.    *ppCookie
3b70: 20 3d 20 70 3b 0a 0a 20 20 72 65 74 75 72 6e 20   = p;..  return 
3b80: 6e 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63  n;.}..__declspec
3b90: 28 64 6c 6c 65 78 70 6f 72 74 29 20 69 6e 74 20  (dllexport) int 
3ba0: 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63  WINAPI sqlite3_c
3bb0: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 31  reate_collation1
3bc0: 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  6_interop(sqlite
3bd0: 33 2a 20 64 62 2c 20 63 6f 6e 73 74 20 76 6f 69  3* db, const voi
3be0: 64 20 2a 7a 4e 61 6d 65 2c 20 69 6e 74 20 65 54  d *zName, int eT
3bf0: 65 78 74 52 65 70 2c 20 76 6f 69 64 2a 20 70 76  extRep, void* pv
3c00: 55 73 65 72 2c 20 53 51 4c 49 54 45 43 4f 4c 4c  User, SQLITECOLL
3c10: 41 54 49 4f 4e 20 66 75 6e 63 2c 20 76 6f 69 64  ATION func, void
3c20: 20 2a 2a 70 70 43 6f 6f 6b 69 65 29 0a 7b 0a 20   **ppCookie).{. 
3c30: 20 69 6e 74 20 6e 3b 0a 20 20 53 51 4c 49 54 45   int n;.  SQLITE
3c40: 43 4f 4c 4c 41 54 49 4f 4e 20 2a 70 20 3d 20 28  COLLATION *p = (
3c50: 53 51 4c 49 54 45 43 4f 4c 4c 41 54 49 4f 4e 20  SQLITECOLLATION 
3c60: 2a 29 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28  *)malloc(sizeof(
3c70: 53 51 4c 49 54 45 43 4f 4c 4c 41 54 49 4f 4e 29  SQLITECOLLATION)
3c80: 29 3b 0a 20 20 0a 20 20 70 5b 30 5d 20 3d 20 66  );.  .  p[0] = f
3c90: 75 6e 63 3b 0a 0a 20 20 2a 70 70 43 6f 6f 6b 69  unc;..  *ppCooki
3ca0: 65 20 3d 20 30 3b 0a 0a 20 20 6e 20 3d 20 73 71  e = 0;..  n = sq
3cb0: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c  lite3_create_col
3cc0: 6c 61 74 69 6f 6e 31 36 28 64 62 2c 20 28 63 6f  lation16(db, (co
3cd0: 6e 73 74 20 63 68 61 72 20 2a 29 7a 4e 61 6d 65  nst char *)zName
3ce0: 2c 20 65 54 65 78 74 52 65 70 2c 20 70 2c 20 73  , eTextRep, p, s
3cf0: 71 6c 69 74 65 33 5f 69 6e 74 65 72 6f 70 5f 63  qlite3_interop_c
3d00: 6f 6c 6c 61 74 69 6f 6e 66 75 6e 63 29 3b 0a 20  ollationfunc);. 
3d10: 20 69 66 20 28 6e 20 21 3d 20 30 29 0a 20 20 20   if (n != 0).   
3d20: 20 66 72 65 65 28 70 29 3b 0a 20 20 65 6c 73 65   free(p);.  else
3d30: 0a 20 20 20 20 2a 70 70 43 6f 6f 6b 69 65 20 3d  .    *ppCookie =
3d40: 20 70 3b 0a 0a 20 20 72 65 74 75 72 6e 20 6e 3b   p;..  return n;
3d50: 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64  .}..__declspec(d
3d60: 6c 6c 65 78 70 6f 72 74 29 20 69 6e 74 20 57 49  llexport) int WI
3d70: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 61 67 67  NAPI sqlite3_agg
3d80: 72 65 67 61 74 65 5f 63 6f 75 6e 74 5f 69 6e 74  regate_count_int
3d90: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 63 6f 6e  erop(sqlite3_con
3da0: 74 65 78 74 20 2a 70 63 74 78 29 0a 7b 0a 20 20  text *pctx).{.  
3db0: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 61  return sqlite3_a
3dc0: 67 67 72 65 67 61 74 65 5f 63 6f 75 6e 74 28 70  ggregate_count(p
3dd0: 63 74 78 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73  ctx);.}..__decls
3de0: 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 63  pec(dllexport) c
3df0: 6f 6e 73 74 20 76 6f 69 64 20 2a 20 57 49 4e 41  onst void * WINA
3e00: 50 49 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  PI sqlite3_value
3e10: 5f 62 6c 6f 62 5f 69 6e 74 65 72 6f 70 28 73 71  _blob_interop(sq
3e20: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 76 61 6c  lite3_value *val
3e30: 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c  ).{.  return sql
3e40: 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28  ite3_value_blob(
3e50: 76 61 6c 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73  val);.}..__decls
3e60: 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 69  pec(dllexport) i
3e70: 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  nt WINAPI sqlite
3e80: 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 5f 69 6e  3_value_bytes_in
3e90: 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 76 61  terop(sqlite3_va
3ea0: 6c 75 65 20 2a 76 61 6c 29 0a 7b 0a 20 20 72 65  lue *val).{.  re
3eb0: 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c  turn sqlite3_val
3ec0: 75 65 5f 62 79 74 65 73 28 76 61 6c 29 3b 0a 7d  ue_bytes(val);.}
3ed0: 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c  ..__declspec(dll
3ee0: 65 78 70 6f 72 74 29 20 69 6e 74 20 57 49 4e 41  export) int WINA
3ef0: 50 49 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  PI sqlite3_value
3f00: 5f 62 79 74 65 73 31 36 5f 69 6e 74 65 72 6f 70  _bytes16_interop
3f10: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
3f20: 76 61 6c 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20  val).{.  return 
3f30: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
3f40: 74 65 73 31 36 28 76 61 6c 29 3b 0a 7d 0a 0a 5f  tes16(val);.}.._
3f50: 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70  _declspec(dllexp
3f60: 6f 72 74 29 20 76 6f 69 64 20 57 49 4e 41 50 49  ort) void WINAPI
3f70: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64   sqlite3_value_d
3f80: 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73 71  ouble_interop(sq
3f90: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 76 61  lite3_value *pva
3fa0: 6c 2c 20 64 6f 75 62 6c 65 20 2a 76 61 6c 29 0a  l, double *val).
3fb0: 7b 0a 20 20 2a 76 61 6c 20 3d 20 73 71 6c 69 74  {.  *val = sqlit
3fc0: 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28  e3_value_double(
3fd0: 70 76 61 6c 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c  pval);.}..__decl
3fe0: 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20  spec(dllexport) 
3ff0: 69 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74  int WINAPI sqlit
4000: 65 33 5f 76 61 6c 75 65 5f 69 6e 74 5f 69 6e 74  e3_value_int_int
4010: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 76 61 6c  erop(sqlite3_val
4020: 75 65 20 2a 76 61 6c 29 0a 7b 0a 20 20 72 65 74  ue *val).{.  ret
4030: 75 72 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  urn sqlite3_valu
4040: 65 5f 69 6e 74 28 76 61 6c 29 3b 0a 7d 0a 0a 5f  e_int(val);.}.._
4050: 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70  _declspec(dllexp
4060: 6f 72 74 29 20 76 6f 69 64 20 57 49 4e 41 50 49  ort) void WINAPI
4070: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69   sqlite3_value_i
4080: 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 73 71 6c  nt64_interop(sql
4090: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 76 61 6c  ite3_value *pval
40a0: 2c 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 2a  , sqlite_int64 *
40b0: 76 61 6c 29 0a 7b 0a 20 20 2a 76 61 6c 20 3d 20  val).{.  *val = 
40c0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e  sqlite3_value_in
40d0: 74 36 34 28 70 76 61 6c 29 3b 0a 7d 0a 0a 5f 5f  t64(pval);.}..__
40e0: 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f  declspec(dllexpo
40f0: 72 74 29 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  rt) const unsign
4100: 65 64 20 63 68 61 72 20 2a 20 57 49 4e 41 50 49  ed char * WINAPI
4110: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
4120: 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69  ext_interop(sqli
4130: 74 65 33 5f 76 61 6c 75 65 20 2a 76 61 6c 2c 20  te3_value *val, 
4140: 69 6e 74 20 2a 70 6c 65 6e 29 0a 7b 0a 20 20 63  int *plen).{.  c
4150: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
4160: 61 72 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74  ar *pval = sqlit
4170: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 76 61  e3_value_text(va
4180: 6c 29 3b 0a 20 20 2a 70 6c 65 6e 20 3d 20 28 70  l);.  *plen = (p
4190: 76 61 6c 20 21 3d 20 30 29 20 3f 20 73 74 72 6c  val != 0) ? strl
41a0: 65 6e 28 28 63 68 61 72 20 2a 29 70 76 61 6c 29  en((char *)pval)
41b0: 20 3a 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 70   : 0;.  return p
41c0: 76 61 6c 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70  val;.}..__declsp
41d0: 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 63 6f  ec(dllexport) co
41e0: 6e 73 74 20 76 6f 69 64 20 2a 20 57 49 4e 41 50  nst void * WINAP
41f0: 49 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  I sqlite3_value_
4200: 74 65 78 74 31 36 5f 69 6e 74 65 72 6f 70 28 73  text16_interop(s
4210: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 76 61  qlite3_value *va
4220: 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0a 7b 0a  l, int *plen).{.
4230: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 76    const void *pv
4240: 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c  al = sqlite3_val
4250: 75 65 5f 74 65 78 74 31 36 28 76 61 6c 29 3b 0a  ue_text16(val);.
4260: 20 20 2a 70 6c 65 6e 20 3d 20 28 70 76 61 6c 20    *plen = (pval 
4270: 21 3d 20 30 29 20 3f 20 77 63 73 6c 65 6e 28 28  != 0) ? wcslen((
4280: 77 63 68 61 72 5f 74 20 2a 29 70 76 61 6c 29 20  wchar_t *)pval) 
4290: 2a 20 73 69 7a 65 6f 66 28 77 63 68 61 72 5f 74  * sizeof(wchar_t
42a0: 29 20 3a 20 30 3b 0a 20 20 72 65 74 75 72 6e 20  ) : 0;.  return 
42b0: 70 76 61 6c 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73  pval;.}..__decls
42c0: 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 69  pec(dllexport) i
42d0: 6e 74 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  nt WINAPI sqlite
42e0: 33 5f 76 61 6c 75 65 5f 74 79 70 65 5f 69 6e 74  3_value_type_int
42f0: 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 76 61 6c  erop(sqlite3_val
4300: 75 65 20 2a 76 61 6c 29 0a 7b 0a 20 20 72 65 74  ue *val).{.  ret
4310: 75 72 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  urn sqlite3_valu
4320: 65 5f 74 79 70 65 28 76 61 6c 29 3b 0a 7d 0a 0a  e_type(val);.}..
4330: 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78  __declspec(dllex
4340: 70 6f 72 74 29 20 76 6f 69 64 20 2a 20 57 49 4e  port) void * WIN
4350: 41 50 49 20 73 71 6c 69 74 65 33 5f 61 67 67 72  API sqlite3_aggr
4360: 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 5f 69 6e  egate_context_in
4370: 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 63 6f  terop(sqlite3_co
4380: 6e 74 65 78 74 20 2a 70 63 74 78 2c 20 69 6e 74  ntext *pctx, int
4390: 20 6e 29 0a 7b 0a 20 20 72 65 74 75 72 6e 20 73   n).{.  return s
43a0: 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65  qlite3_aggregate
43b0: 5f 63 6f 6e 74 65 78 74 28 70 63 74 78 2c 20 6e  _context(pctx, n
43c0: 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63  );.}..__declspec
43d0: 28 64 6c 6c 65 78 70 6f 72 74 29 20 76 6f 69 64  (dllexport) void
43e0: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
43f0: 72 65 73 75 6c 74 5f 62 6c 6f 62 5f 69 6e 74 65  result_blob_inte
4400: 72 6f 70 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  rop(sqlite3_cont
4410: 65 78 74 20 2a 63 74 78 2c 20 63 6f 6e 73 74 20  ext *ctx, const 
4420: 76 6f 69 64 20 2a 70 76 2c 20 69 6e 74 20 6e 2c  void *pv, int n,
4430: 20 76 6f 69 64 28 2a 63 62 29 28 76 6f 69 64 20   void(*cb)(void 
4440: 2a 29 29 0a 7b 0a 20 20 73 71 6c 69 74 65 33 5f  *)).{.  sqlite3_
4450: 72 65 73 75 6c 74 5f 62 6c 6f 62 28 63 74 78 2c  result_blob(ctx,
4460: 20 70 76 2c 20 6e 2c 20 63 62 29 3b 0a 7d 0a 0a   pv, n, cb);.}..
4470: 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78  __declspec(dllex
4480: 70 6f 72 74 29 20 76 6f 69 64 20 57 49 4e 41 50  port) void WINAP
4490: 49 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  I sqlite3_result
44a0: 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
44b0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
44c0: 2a 70 63 74 78 2c 20 64 6f 75 62 6c 65 20 2a 76  *pctx, double *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 64 6f 75 62 6c 65 28 70 63  result_double(pc
44f0: 74 78 2c 20 2a 76 61 6c 29 3b 0a 7d 0a 0a 5f 5f  tx, *val);.}..__
4500: 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f  declspec(dllexpo
4510: 72 74 29 20 76 6f 69 64 20 57 49 4e 41 50 49 20  rt) void WINAPI 
4520: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
4530: 6e 74 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74  nt_interop(sqlit
4540: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 63 74 78  e3_context *pctx
4550: 2c 20 69 6e 74 20 76 61 6c 29 0a 7b 0a 20 20 73  , int val).{.  s
4560: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e  qlite3_result_in
4570: 74 28 70 63 74 78 2c 20 76 61 6c 29 3b 0a 7d 0a  t(pctx, val);.}.
4580: 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65  .__declspec(dlle
4590: 78 70 6f 72 74 29 20 76 6f 69 64 20 57 49 4e 41  xport) void WINA
45a0: 50 49 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  PI sqlite3_resul
45b0: 74 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  t_int64_interop(
45c0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
45d0: 2a 70 63 74 78 2c 20 73 71 6c 69 74 65 5f 69 6e  *pctx, sqlite_in
45e0: 74 36 34 20 2a 76 61 6c 29 0a 7b 0a 20 20 73 71  t64 *val).{.  sq
45f0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
4600: 36 34 28 70 63 74 78 2c 20 2a 76 61 6c 29 3b 0a  64(pctx, *val);.
4610: 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c  }..__declspec(dl
4620: 6c 65 78 70 6f 72 74 29 20 76 6f 69 64 20 57 49  lexport) void WI
4630: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 72 65 73  NAPI sqlite3_res
4640: 75 6c 74 5f 6e 75 6c 6c 5f 69 6e 74 65 72 6f 70  ult_null_interop
4650: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
4660: 20 2a 70 63 74 78 29 0a 7b 0a 20 20 73 71 6c 69   *pctx).{.  sqli
4670: 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28  te3_result_null(
4680: 70 63 74 78 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c  pctx);.}..__decl
4690: 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20  spec(dllexport) 
46a0: 76 6f 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69  void WINAPI sqli
46b0: 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72  te3_result_error
46c0: 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33  _interop(sqlite3
46d0: 5f 63 6f 6e 74 65 78 74 20 2a 63 74 78 2c 20 63  _context *ctx, c
46e0: 6f 6e 73 74 20 63 68 61 72 20 2a 70 76 2c 20 69  onst char *pv, i
46f0: 6e 74 20 6e 29 0a 7b 0a 20 20 73 71 6c 69 74 65  nt n).{.  sqlite
4700: 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63  3_result_error(c
4710: 74 78 2c 20 70 76 2c 20 6e 29 3b 0a 7d 0a 0a 5f  tx, pv, n);.}.._
4720: 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70  _declspec(dllexp
4730: 6f 72 74 29 20 76 6f 69 64 20 57 49 4e 41 50 49  ort) void WINAPI
4740: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
4750: 65 72 72 6f 72 31 36 5f 69 6e 74 65 72 6f 70 28  error16_interop(
4760: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
4770: 2a 63 74 78 2c 20 63 6f 6e 73 74 20 76 6f 69 64  *ctx, const void
4780: 20 2a 70 76 2c 20 69 6e 74 20 6e 29 0a 7b 0a 20   *pv, int n).{. 
4790: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
47a0: 65 72 72 6f 72 31 36 28 63 74 78 2c 20 70 76 2c  error16(ctx, pv,
47b0: 20 6e 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70   n);.}..__declsp
47c0: 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 76 6f  ec(dllexport) vo
47d0: 69 64 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65  id WINAPI sqlite
47e0: 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 5f 69 6e  3_result_text_in
47f0: 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 63 6f  terop(sqlite3_co
4800: 6e 74 65 78 74 20 2a 63 74 78 2c 20 63 6f 6e 73  ntext *ctx, cons
4810: 74 20 63 68 61 72 20 2a 70 76 2c 20 69 6e 74 20  t char *pv, int 
4820: 6e 2c 20 76 6f 69 64 28 2a 63 62 29 28 76 6f 69  n, void(*cb)(voi
4830: 64 20 2a 29 29 0a 7b 0a 20 20 73 71 6c 69 74 65  d *)).{.  sqlite
4840: 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 63 74  3_result_text(ct
4850: 78 2c 20 70 76 2c 20 6e 2c 20 63 62 29 3b 0a 7d  x, pv, n, cb);.}
4860: 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c  ..__declspec(dll
4870: 65 78 70 6f 72 74 29 20 76 6f 69 64 20 57 49 4e  export) void WIN
4880: 41 50 49 20 73 71 6c 69 74 65 33 5f 72 65 73 75  API sqlite3_resu
4890: 6c 74 5f 74 65 78 74 31 36 5f 69 6e 74 65 72 6f  lt_text16_intero
48a0: 70 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  p(sqlite3_contex
48b0: 74 20 2a 63 74 78 2c 20 63 6f 6e 73 74 20 76 6f  t *ctx, const vo
48c0: 69 64 20 2a 70 76 2c 20 69 6e 74 20 6e 2c 20 76  id *pv, int n, v
48d0: 6f 69 64 28 2a 63 62 29 28 76 6f 69 64 20 2a 29  oid(*cb)(void *)
48e0: 29 0a 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65  ).{.  sqlite3_re
48f0: 73 75 6c 74 5f 74 65 78 74 31 36 28 63 74 78 2c  sult_text16(ctx,
4900: 20 70 76 2c 20 6e 2c 20 63 62 29 3b 0a 7d 0a 0a   pv, n, cb);.}..
4910: 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78  __declspec(dllex
4920: 70 6f 72 74 29 20 63 6f 6e 73 74 20 63 68 61 72  port) const char
4930: 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65   * WINAPI sqlite
4940: 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73  3_column_databas
4950: 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73  e_name_interop(s
4960: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 73 74 6d  qlite3_stmt *stm
4970: 74 2c 20 69 6e 74 20 69 43 6f 6c 2c 20 69 6e 74  t, int iCol, int
4980: 20 2a 70 6c 65 6e 29 0a 7b 0a 20 20 63 6f 6e 73   *plen).{.  cons
4990: 74 20 63 68 61 72 20 2a 70 76 61 6c 20 3d 20 73  t char *pval = s
49a0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61  qlite3_column_da
49b0: 74 61 62 61 73 65 5f 6e 61 6d 65 28 73 74 6d 74  tabase_name(stmt
49c0: 2c 20 69 43 6f 6c 29 3b 0a 20 20 2a 70 6c 65 6e  , iCol);.  *plen
49d0: 20 3d 20 28 70 76 61 6c 20 21 3d 20 30 29 20 3f   = (pval != 0) ?
49e0: 20 73 74 72 6c 65 6e 28 70 76 61 6c 29 20 3a 20   strlen(pval) : 
49f0: 30 3b 0a 20 20 72 65 74 75 72 6e 20 70 76 61 6c  0;.  return pval
4a00: 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28  ;.}..__declspec(
4a10: 64 6c 6c 65 78 70 6f 72 74 29 20 63 6f 6e 73 74  dllexport) const
4a20: 20 76 6f 69 64 20 2a 20 57 49 4e 41 50 49 20 73   void * WINAPI s
4a30: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61  qlite3_column_da
4a40: 74 61 62 61 73 65 5f 6e 61 6d 65 31 36 5f 69 6e  tabase_name16_in
4a50: 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73 74  terop(sqlite3_st
4a60: 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69 43  mt *stmt, int iC
4a70: 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0a 7b  ol, int *plen).{
4a80: 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  .  const void *p
4a90: 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  val = sqlite3_co
4aa0: 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61  lumn_database_na
4ab0: 6d 65 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29  me16(stmt, iCol)
4ac0: 3b 0a 20 20 2a 70 6c 65 6e 20 3d 20 28 70 76 61  ;.  *plen = (pva
4ad0: 6c 20 21 3d 20 30 29 20 3f 20 77 63 73 6c 65 6e  l != 0) ? wcslen
4ae0: 28 28 77 63 68 61 72 5f 74 20 2a 29 70 76 61 6c  ((wchar_t *)pval
4af0: 29 20 2a 20 73 69 7a 65 6f 66 28 77 63 68 61 72  ) * sizeof(wchar
4b00: 5f 74 29 20 3a 20 30 3b 0a 20 20 72 65 74 75 72  _t) : 0;.  retur
4b10: 6e 20 70 76 61 6c 3b 0a 7d 0a 0a 5f 5f 64 65 63  n pval;.}..__dec
4b20: 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29  lspec(dllexport)
4b30: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 57 49   const char * WI
4b40: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c  NAPI sqlite3_col
4b50: 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f 69  umn_table_name_i
4b60: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73  nterop(sqlite3_s
4b70: 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69  tmt *stmt, int i
4b80: 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0a  Col, int *plen).
4b90: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
4ba0: 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  pval = sqlite3_c
4bb0: 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
4bc0: 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0a 20 20  (stmt, iCol);.  
4bd0: 2a 70 6c 65 6e 20 3d 20 28 70 76 61 6c 20 21 3d  *plen = (pval !=
4be0: 20 30 29 20 3f 20 73 74 72 6c 65 6e 28 70 76 61   0) ? strlen(pva
4bf0: 6c 29 20 3a 20 30 3b 0a 20 20 72 65 74 75 72 6e  l) : 0;.  return
4c00: 20 70 76 61 6c 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c   pval;.}..__decl
4c10: 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20  spec(dllexport) 
4c20: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 20 57 49 4e  const void * WIN
4c30: 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  API sqlite3_colu
4c40: 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31 36 5f  mn_table_name16_
4c50: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f  interop(sqlite3_
4c60: 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20  stmt *stmt, int 
4c70: 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29  iCol, int *plen)
4c80: 0a 7b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  .{.  const void 
4c90: 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f  *pval = sqlite3_
4ca0: 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d  column_table_nam
4cb0: 65 31 36 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b  e16(stmt, iCol);
4cc0: 0a 20 20 2a 70 6c 65 6e 20 3d 20 28 70 76 61 6c  .  *plen = (pval
4cd0: 20 21 3d 20 30 29 20 3f 20 77 63 73 6c 65 6e 28   != 0) ? wcslen(
4ce0: 28 77 63 68 61 72 5f 74 20 2a 29 70 76 61 6c 29  (wchar_t *)pval)
4cf0: 20 2a 20 73 69 7a 65 6f 66 28 77 63 68 61 72 5f   * sizeof(wchar_
4d00: 74 29 20 3a 20 30 3b 0a 20 20 72 65 74 75 72 6e  t) : 0;.  return
4d10: 20 70 76 61 6c 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c   pval;.}..__decl
4d20: 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20  spec(dllexport) 
4d30: 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 57 49 4e  const char * WIN
4d40: 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  API sqlite3_colu
4d50: 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f 69  mn_origin_name_i
4d60: 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 5f 73  nterop(sqlite3_s
4d70: 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e 74 20 69  tmt *stmt, int i
4d80: 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65 6e 29 0a  Col, int *plen).
4d90: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
4da0: 70 76 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63  pval = sqlite3_c
4db0: 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d  olumn_origin_nam
4dc0: 65 28 73 74 6d 74 2c 20 69 43 6f 6c 29 3b 0a 20  e(stmt, iCol);. 
4dd0: 20 2a 70 6c 65 6e 20 3d 20 28 70 76 61 6c 20 21   *plen = (pval !
4de0: 3d 20 30 29 20 3f 20 73 74 72 6c 65 6e 28 70 76  = 0) ? strlen(pv
4df0: 61 6c 29 20 3a 20 30 3b 0a 20 20 72 65 74 75 72  al) : 0;.  retur
4e00: 6e 20 70 76 61 6c 3b 0a 7d 0a 0a 5f 5f 64 65 63  n pval;.}..__dec
4e10: 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29  lspec(dllexport)
4e20: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 20 57 49   const void * WI
4e30: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 63 6f 6c  NAPI sqlite3_col
4e40: 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 31  umn_origin_name1
4e50: 36 5f 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65  6_interop(sqlite
4e60: 33 5f 73 74 6d 74 20 2a 73 74 6d 74 2c 20 69 6e  3_stmt *stmt, in
4e70: 74 20 69 43 6f 6c 2c 20 69 6e 74 20 2a 70 6c 65  t iCol, int *ple
4e80: 6e 29 0a 7b 0a 20 20 63 6f 6e 73 74 20 76 6f 69  n).{.  const voi
4e90: 64 20 2a 70 76 61 6c 20 3d 20 73 71 6c 69 74 65  d *pval = sqlite
4ea0: 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f  3_column_origin_
4eb0: 6e 61 6d 65 31 36 28 73 74 6d 74 2c 20 69 43 6f  name16(stmt, iCo
4ec0: 6c 29 3b 0a 20 20 2a 70 6c 65 6e 20 3d 20 28 70  l);.  *plen = (p
4ed0: 76 61 6c 20 21 3d 20 30 29 20 3f 20 77 63 73 6c  val != 0) ? wcsl
4ee0: 65 6e 28 28 77 63 68 61 72 5f 74 20 2a 29 70 76  en((wchar_t *)pv
4ef0: 61 6c 29 20 2a 20 73 69 7a 65 6f 66 28 77 63 68  al) * sizeof(wch
4f00: 61 72 5f 74 29 20 3a 20 30 3b 0a 20 20 72 65 74  ar_t) : 0;.  ret
4f10: 75 72 6e 20 70 76 61 6c 3b 0a 7d 0a 0a 5f 5f 64  urn pval;.}..__d
4f20: 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72  eclspec(dllexpor
4f30: 74 29 20 69 6e 74 20 57 49 4e 41 50 49 20 73 71  t) int WINAPI sq
4f40: 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75  lite3_table_colu
4f50: 6d 6e 5f 6d 65 74 61 64 61 74 61 5f 69 6e 74 65  mn_metadata_inte
4f60: 72 6f 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  rop(sqlite3 *db,
4f70: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
4f80: 4e 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  Name, const char
4f90: 20 2a 7a 54 61 62 6c 65 4e 61 6d 65 2c 20 63 6f   *zTableName, co
4fa0: 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 75 6d  nst char *zColum
4fb0: 6e 4e 61 6d 65 2c 20 63 68 61 72 20 2a 2a 70 7a  nName, char **pz
4fc0: 44 61 74 61 54 79 70 65 2c 20 63 68 61 72 20 2a  DataType, char *
4fd0: 2a 70 7a 43 6f 6c 6c 53 65 71 2c 20 69 6e 74 20  *pzCollSeq, int 
4fe0: 2a 70 4e 6f 74 4e 75 6c 6c 2c 20 69 6e 74 20 2a  *pNotNull, int *
4ff0: 70 50 72 69 6d 61 72 79 4b 65 79 2c 20 69 6e 74  pPrimaryKey, int
5000: 20 2a 70 41 75 74 6f 69 6e 63 2c 20 69 6e 74 20   *pAutoinc, int 
5010: 2a 70 64 74 4c 65 6e 2c 20 69 6e 74 20 2a 70 63  *pdtLen, int *pc
5020: 73 4c 65 6e 29 0a 7b 0a 20 20 69 6e 74 20 6e 3b  sLen).{.  int n;
5030: 0a 20 20 0a 20 20 45 6e 74 65 72 44 62 4d 75 74  .  .  EnterDbMut
5040: 65 78 28 64 62 29 3b 0a 20 20 6e 20 3d 20 73 71  ex(db);.  n = sq
5050: 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75  lite3_table_colu
5060: 6d 6e 5f 6d 65 74 61 64 61 74 61 28 64 62 2c 20  mn_metadata(db, 
5070: 7a 44 62 4e 61 6d 65 2c 20 7a 54 61 62 6c 65 4e  zDbName, zTableN
5080: 61 6d 65 2c 20 7a 43 6f 6c 75 6d 6e 4e 61 6d 65  ame, zColumnName
5090: 2c 20 70 7a 44 61 74 61 54 79 70 65 2c 20 70 7a  , pzDataType, pz
50a0: 43 6f 6c 6c 53 65 71 2c 20 70 4e 6f 74 4e 75 6c  CollSeq, pNotNul
50b0: 6c 2c 20 70 50 72 69 6d 61 72 79 4b 65 79 2c 20  l, pPrimaryKey, 
50c0: 70 41 75 74 6f 69 6e 63 29 3b 0a 20 20 2a 70 64  pAutoinc);.  *pd
50d0: 74 4c 65 6e 20 3d 20 28 2a 70 7a 44 61 74 61 54  tLen = (*pzDataT
50e0: 79 70 65 20 21 3d 20 30 29 20 3f 20 73 74 72 6c  ype != 0) ? strl
50f0: 65 6e 28 2a 70 7a 44 61 74 61 54 79 70 65 29 20  en(*pzDataType) 
5100: 3a 20 30 3b 0a 20 20 2a 70 63 73 4c 65 6e 20 3d  : 0;.  *pcsLen =
5110: 20 28 2a 70 7a 43 6f 6c 6c 53 65 71 20 21 3d 20   (*pzCollSeq != 
5120: 30 29 20 3f 20 73 74 72 6c 65 6e 28 2a 70 7a 43  0) ? strlen(*pzC
5130: 6f 6c 6c 53 65 71 29 20 3a 20 30 3b 0a 20 20 4c  ollSeq) : 0;.  L
5140: 65 61 76 65 44 62 4d 75 74 65 78 28 64 62 29 3b  eaveDbMutex(db);
5150: 0a 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a  ..  return n;.}.
5160: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 75 70  .void sqlite3_up
5170: 64 61 74 65 5f 63 61 6c 6c 62 61 63 6b 28 76 6f  date_callback(vo
5180: 69 64 20 2a 70 41 72 67 2c 20 69 6e 74 20 74 79  id *pArg, int ty
5190: 70 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  pe, const char *
51a0: 70 44 61 74 61 62 61 73 65 2c 20 63 6f 6e 73 74  pDatabase, const
51b0: 20 63 68 61 72 20 2a 70 54 61 62 6c 65 2c 20 73   char *pTable, s
51c0: 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69  qlite_int64 rowi
51d0: 64 29 0a 7b 0a 20 20 53 51 4c 49 54 45 55 50 44  d).{.  SQLITEUPD
51e0: 41 54 45 48 4f 4f 4b 20 66 75 6e 63 20 3d 20 28  ATEHOOK func = (
51f0: 53 51 4c 49 54 45 55 50 44 41 54 45 48 4f 4f 4b  SQLITEUPDATEHOOK
5200: 29 70 41 72 67 3b 0a 0a 20 20 66 75 6e 63 28 74  )pArg;..  func(t
5210: 79 70 65 2c 20 70 44 61 74 61 62 61 73 65 2c 20  ype, pDatabase, 
5220: 73 74 72 6c 65 6e 28 70 44 61 74 61 62 61 73 65  strlen(pDatabase
5230: 29 2c 20 70 54 61 62 6c 65 2c 20 73 74 72 6c 65  ), pTable, strle
5240: 6e 28 70 54 61 62 6c 65 29 2c 20 72 6f 77 69 64  n(pTable), rowid
5250: 29 3b 0a 7d 0a 0a 69 6e 74 20 73 71 6c 69 74 65  );.}..int sqlite
5260: 33 5f 63 6f 6d 6d 69 74 5f 63 61 6c 6c 62 61 63  3_commit_callbac
5270: 6b 28 76 6f 69 64 20 2a 70 41 72 67 29 0a 7b 0a  k(void *pArg).{.
5280: 20 20 72 65 74 75 72 6e 20 28 28 53 51 4c 49 54    return ((SQLIT
5290: 45 43 4f 4d 4d 49 54 48 4f 4f 4b 29 70 41 72 67  ECOMMITHOOK)pArg
52a0: 29 28 29 3b 0a 7d 0a 0a 76 6f 69 64 20 73 71 6c  )();.}..void sql
52b0: 69 74 65 33 5f 72 6f 6c 6c 62 61 63 6b 5f 63 61  ite3_rollback_ca
52c0: 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a 70 41 72  llback(void *pAr
52d0: 67 29 0a 7b 0a 20 20 28 28 53 51 4c 49 54 45 52  g).{.  ((SQLITER
52e0: 4f 4c 4c 42 41 43 4b 48 4f 4f 4b 29 70 41 72 67  OLLBACKHOOK)pArg
52f0: 29 28 29 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70  )();.}..__declsp
5300: 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 76 6f  ec(dllexport) vo
5310: 69 64 20 2a 20 57 49 4e 41 50 49 20 73 71 6c 69  id * WINAPI sqli
5320: 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 5f  te3_update_hook_
5330: 69 6e 74 65 72 6f 70 28 73 71 6c 69 74 65 33 20  interop(sqlite3 
5340: 2a 70 44 62 2c 20 53 51 4c 49 54 45 55 50 44 41  *pDb, SQLITEUPDA
5350: 54 45 48 4f 4f 4b 20 66 75 6e 63 29 0a 7b 0a 20  TEHOOK func).{. 
5360: 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f   return sqlite3_
5370: 75 70 64 61 74 65 5f 68 6f 6f 6b 28 70 44 62 2c  update_hook(pDb,
5380: 20 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f   sqlite3_update_
5390: 63 61 6c 6c 62 61 63 6b 2c 20 66 75 6e 63 29 3b  callback, func);
53a0: 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64  .}..__declspec(d
53b0: 6c 6c 65 78 70 6f 72 74 29 20 76 6f 69 64 20 2a  llexport) void *
53c0: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
53d0: 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 5f 69 6e 74 65  commit_hook_inte
53e0: 72 6f 70 28 73 71 6c 69 74 65 33 20 2a 70 44 62  rop(sqlite3 *pDb
53f0: 2c 20 53 51 4c 49 54 45 43 4f 4d 4d 49 54 48 4f  , SQLITECOMMITHO
5400: 4f 4b 20 66 75 6e 63 29 0a 7b 0a 20 20 72 65 74  OK func).{.  ret
5410: 75 72 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6d 6d  urn sqlite3_comm
5420: 69 74 5f 68 6f 6f 6b 28 70 44 62 2c 20 73 71 6c  it_hook(pDb, sql
5430: 69 74 65 33 5f 63 6f 6d 6d 69 74 5f 63 61 6c 6c  ite3_commit_call
5440: 62 61 63 6b 2c 20 66 75 6e 63 29 3b 0a 7d 0a 0a  back, func);.}..
5450: 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78  __declspec(dllex
5460: 70 6f 72 74 29 20 76 6f 69 64 20 2a 20 57 49 4e  port) void * WIN
5470: 41 50 49 20 73 71 6c 69 74 65 33 5f 72 6f 6c 6c  API sqlite3_roll
5480: 62 61 63 6b 5f 68 6f 6f 6b 5f 69 6e 74 65 72 6f  back_hook_intero
5490: 70 28 73 71 6c 69 74 65 33 20 2a 70 44 62 2c 20  p(sqlite3 *pDb, 
54a0: 53 51 4c 49 54 45 52 4f 4c 4c 42 41 43 4b 48 4f  SQLITEROLLBACKHO
54b0: 4f 4b 20 66 75 6e 63 29 0a 7b 0a 20 20 72 65 74  OK func).{.  ret
54c0: 75 72 6e 20 73 71 6c 69 74 65 33 5f 72 6f 6c 6c  urn sqlite3_roll
54d0: 62 61 63 6b 5f 68 6f 6f 6b 28 70 44 62 2c 20 73  back_hook(pDb, s
54e0: 71 6c 69 74 65 33 5f 72 6f 6c 6c 62 61 63 6b 5f  qlite3_rollback_
54f0: 63 61 6c 6c 62 61 63 6b 2c 20 66 75 6e 63 29 3b  callback, func);
5500: 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64  .}..__declspec(d
5510: 6c 6c 65 78 70 6f 72 74 29 20 69 6e 74 20 57 49  llexport) int WI
5520: 4e 41 50 49 20 73 71 6c 69 74 65 33 5f 74 61 62  NAPI sqlite3_tab
5530: 6c 65 5f 63 75 72 73 6f 72 28 73 71 6c 69 74 65  le_cursor(sqlite
5540: 33 5f 73 74 6d 74 20 2a 70 73 74 6d 74 2c 20 69  3_stmt *pstmt, i
5550: 6e 74 20 69 44 62 2c 20 50 67 6e 6f 20 74 61 62  nt iDb, Pgno tab
5560: 6c 65 52 6f 6f 74 50 61 67 65 29 0a 7b 0a 20 20  leRootPage).{.  
5570: 56 64 62 65 20 2a 70 20 3d 20 28 56 64 62 65 20  Vdbe *p = (Vdbe 
5580: 2a 29 70 73 74 6d 74 3b 0a 20 20 73 71 6c 69 74  *)pstmt;.  sqlit
5590: 65 33 20 2a 64 62 20 3d 20 28 70 20 3d 3d 20 4e  e3 *db = (p == N
55a0: 55 4c 4c 29 20 3f 20 4e 55 4c 4c 20 3a 20 70 2d  ULL) ? NULL : p-
55b0: 3e 64 62 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  >db;.  int n;.  
55c0: 69 6e 74 20 72 65 74 20 3d 20 2d 31 3b 0a 0a 20  int ret = -1;.. 
55d0: 20 45 6e 74 65 72 44 62 4d 75 74 65 78 28 64 62   EnterDbMutex(db
55e0: 29 3b 0a 20 20 66 6f 72 20 28 6e 20 3d 20 30 3b  );.  for (n = 0;
55f0: 20 6e 20 3c 20 70 2d 3e 6e 43 75 72 73 6f 72 20   n < p->nCursor 
5600: 26 26 20 70 2d 3e 61 70 43 73 72 5b 6e 5d 20 21  && p->apCsr[n] !
5610: 3d 20 4e 55 4c 4c 3b 20 6e 2b 2b 29 0a 20 20 7b  = NULL; n++).  {
5620: 0a 20 20 20 20 69 66 20 28 70 2d 3e 61 70 43 73  .    if (p->apCs
5630: 72 5b 6e 5d 2d 3e 69 73 54 61 62 6c 65 20 3d 3d  r[n]->isTable ==
5640: 20 46 41 4c 53 45 29 20 63 6f 6e 74 69 6e 75 65   FALSE) continue
5650: 3b 0a 20 20 20 20 69 66 20 28 70 2d 3e 61 70 43  ;.    if (p->apC
5660: 73 72 5b 6e 5d 2d 3e 69 44 62 20 21 3d 20 69 44  sr[n]->iDb != iD
5670: 62 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20  b) continue;.   
5680: 20 69 66 20 28 70 2d 3e 61 70 43 73 72 5b 6e 5d   if (p->apCsr[n]
5690: 2d 3e 70 43 75 72 73 6f 72 2d 3e 70 67 6e 6f 52  ->pCursor->pgnoR
56a0: 6f 6f 74 20 3d 3d 20 74 61 62 6c 65 52 6f 6f 74  oot == tableRoot
56b0: 50 61 67 65 29 0a 20 20 20 20 7b 0a 20 20 20 20  Page).    {.    
56c0: 20 20 72 65 74 20 3d 20 6e 3b 0a 20 20 20 20 20    ret = n;.     
56d0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
56e0: 7d 0a 20 20 4c 65 61 76 65 44 62 4d 75 74 65 78  }.  LeaveDbMutex
56f0: 28 64 62 29 3b 0a 20 20 72 65 74 75 72 6e 20 72  (db);.  return r
5700: 65 74 3b 0a 7d 0a 0a 5f 5f 64 65 63 6c 73 70 65  et;.}..__declspe
5710: 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 69 6e 74  c(dllexport) int
5720: 20 57 49 4e 41 50 49 20 73 71 6c 69 74 65 33 5f   WINAPI sqlite3_
5730: 63 75 72 73 6f 72 5f 72 6f 77 69 64 28 73 71 6c  cursor_rowid(sql
5740: 69 74 65 33 5f 73 74 6d 74 20 2a 70 73 74 6d 74  ite3_stmt *pstmt
5750: 2c 20 69 6e 74 20 63 75 72 73 6f 72 2c 20 73 71  , int cursor, sq
5760: 6c 69 74 65 5f 69 6e 74 36 34 20 2a 70 72 6f 77  lite_int64 *prow
5770: 69 64 29 0a 7b 0a 20 20 56 64 62 65 20 2a 70 20  id).{.  Vdbe *p 
5780: 3d 20 28 56 64 62 65 20 2a 29 70 73 74 6d 74 3b  = (Vdbe *)pstmt;
5790: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d  .  sqlite3 *db =
57a0: 20 28 70 20 3d 3d 20 4e 55 4c 4c 29 20 3f 20 4e   (p == NULL) ? N
57b0: 55 4c 4c 20 3a 20 70 2d 3e 64 62 3b 0a 20 20 69  ULL : p->db;.  i
57c0: 6e 74 20 72 63 20 3d 20 30 3b 0a 20 20 43 75 72  nt rc = 0;.  Cur
57d0: 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
57e0: 65 74 20 3d 20 30 3b 0a 0a 20 20 45 6e 74 65 72  et = 0;..  Enter
57f0: 44 62 4d 75 74 65 78 28 64 62 29 3b 0a 20 20 77  DbMutex(db);.  w
5800: 68 69 6c 65 20 28 31 29 0a 20 20 7b 0a 20 20 20  hile (1).  {.   
5810: 20 69 66 20 28 63 75 72 73 6f 72 20 3c 20 30 20   if (cursor < 0 
5820: 7c 7c 20 63 75 72 73 6f 72 20 3e 3d 20 70 2d 3e  || cursor >= p->
5830: 6e 43 75 72 73 6f 72 29 0a 20 20 20 20 7b 0a 20  nCursor).    {. 
5840: 20 20 20 20 20 72 65 74 20 3d 20 53 51 4c 49 54       ret = SQLIT
5850: 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 62  E_ERROR;.      b
5860: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
5870: 69 66 20 28 70 2d 3e 61 70 43 73 72 5b 63 75 72  if (p->apCsr[cur
5880: 73 6f 72 5d 20 3d 3d 20 4e 55 4c 4c 29 0a 20 20  sor] == NULL).  
5890: 20 20 7b 0a 20 20 20 20 20 20 72 65 74 20 3d 20    {.      ret = 
58a0: 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
58b0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
58c0: 0a 0a 20 20 20 20 70 43 20 3d 20 70 2d 3e 61 70  ..    pC = p->ap
58d0: 43 73 72 5b 63 75 72 73 6f 72 5d 3b 0a 0a 20 20  Csr[cursor];..  
58e0: 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33 56    ret = sqlite3V
58f0: 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
5900: 70 43 29 3b 0a 20 20 20 20 69 66 28 72 65 74 29  pC);.    if(ret)
5910: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20  .      break;.. 
5920: 20 20 20 69 66 28 70 43 2d 3e 72 6f 77 69 64 49     if(pC->rowidI
5930: 73 56 61 6c 69 64 29 0a 20 20 20 20 7b 0a 20 20  sValid).    {.  
5940: 20 20 20 20 2a 70 72 6f 77 69 64 20 3d 20 70 43      *prowid = pC
5950: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20  ->lastRowid;.   
5960: 20 7d 0a 20 20 20 20 65 6c 73 65 20 69 66 28 70   }.    else if(p
5970: 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 29 0a  C->pseudoTable).
5980: 20 20 20 20 7b 0a 20 20 20 20 20 20 2a 70 72 6f      {.      *pro
5990: 77 69 64 20 3d 20 6b 65 79 54 6f 49 6e 74 28 70  wid = keyToInt(p
59a0: 43 2d 3e 69 4b 65 79 29 3b 0a 20 20 20 20 7d 0a  C->iKey);.    }.
59b0: 20 20 20 20 65 6c 73 65 20 69 66 28 70 43 2d 3e      else if(pC->
59c0: 6e 75 6c 6c 52 6f 77 20 7c 7c 20 70 43 2d 3e 70  nullRow || pC->p
59d0: 43 75 72 73 6f 72 3d 3d 30 29 0a 20 20 20 20 7b  Cursor==0).    {
59e0: 0a 20 20 20 20 20 20 72 65 74 20 3d 20 53 51 4c  .      ret = SQL
59f0: 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20  ITE_ERROR;.     
5a00: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
5a10: 20 20 65 6c 73 65 0a 20 20 20 20 7b 0a 20 20 20    else.    {.   
5a20: 20 20 20 69 66 20 28 70 43 2d 3e 70 43 75 72 73     if (pC->pCurs
5a30: 6f 72 20 3d 3d 20 4e 55 4c 4c 29 0a 20 20 20 20  or == NULL).    
5a40: 20 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 20    {.        ret 
5a50: 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
5a60: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
5a70: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
5a80: 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
5a90: 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70 72  (pC->pCursor, pr
5aa0: 6f 77 69 64 29 3b 0a 20 20 20 20 20 20 2a 70 72  owid);.      *pr
5ab0: 6f 77 69 64 20 3d 20 6b 65 79 54 6f 49 6e 74 28  owid = keyToInt(
5ac0: 2a 70 72 6f 77 69 64 29 3b 0a 20 20 20 20 7d 0a  *prowid);.    }.
5ad0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
5ae0: 20 4c 65 61 76 65 44 62 4d 75 74 65 78 28 64 62   LeaveDbMutex(db
5af0: 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20 72 65 74  );..  return ret
5b00: 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2f 20 4f  ;.}..#endif // O
5b10: 53 5f 57 49 4e 0a                                S_WIN.