System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 96bbc866d0bec522a0a7f402064c74ea28344497:


0000: ef bb bf 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .../************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a  ************.. *
0040: 20 41 44 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74   ADO.NET 2.0 Dat
0050: 61 20 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53  a Provider for S
0060: 51 4c 69 74 65 20 56 65 72 73 69 6f 6e 20 33 2e  QLite Version 3.
0070: 58 0d 0a 20 2a 20 57 72 69 74 74 65 6e 20 62 79  X.. * Written by
0080: 20 52 6f 62 65 72 74 20 53 69 6d 70 73 6f 6e 20   Robert Simpson 
0090: 28 72 6f 62 65 72 74 40 62 6c 61 63 6b 63 61 73  (robert@blackcas
00a0: 74 6c 65 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a  tlesoft.com).. *
00b0: 20 0d 0a 20 2a 20 52 65 6c 65 61 73 65 64 20 74   .. * Released t
00c0: 6f 20 74 68 65 20 70 75 62 6c 69 63 20 64 6f 6d  o the public dom
00d0: 61 69 6e 2c 20 75 73 65 20 61 74 20 79 6f 75 72  ain, use at your
00e0: 20 6f 77 6e 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a   own risk!.. ***
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2a 2a 2a 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70  *****/....namesp
0130: 61 63 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ace System.Data.
0140: 53 51 4c 69 74 65 0d 0a 7b 0d 0a 20 20 75 73 69  SQLite..{..  usi
0150: 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 23 69 66 20  ng System;..#if 
0160: 44 45 42 55 47 0d 0a 20 20 75 73 69 6e 67 20 53  DEBUG..  using S
0170: 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63  ystem.Diagnostic
0180: 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 75 73  s;..#endif..  us
0190: 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74 69  ing System.Runti
01a0: 6d 65 2e 49 6e 74 65 72 6f 70 53 65 72 76 69 63  me.InteropServic
01b0: 65 73 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  es;....#if !PLAT
01c0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
01d0: 45 57 4f 52 4b 0d 0a 20 20 5b 55 6e 6d 61 6e 61  EWORK..  [Unmana
01e0: 67 65 64 46 75 6e 63 74 69 6f 6e 50 6f 69 6e 74  gedFunctionPoint
01f0: 65 72 28 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e  er(CallingConven
0200: 74 69 6f 6e 2e 43 64 65 63 6c 29 5d 0d 0a 23 65  tion.Cdecl)]..#e
0210: 6e 64 69 66 0d 0a 20 20 69 6e 74 65 72 6e 61 6c  ndif..  internal
0220: 20 64 65 6c 65 67 61 74 65 20 76 6f 69 64 20 53   delegate void S
0230: 51 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b  QLiteLogCallback
0240: 28 49 6e 74 50 74 72 20 70 75 73 65 72 2c 20 69  (IntPtr puser, i
0250: 6e 74 20 65 72 72 5f 63 6f 64 65 2c 20 49 6e 74  nt err_code, Int
0260: 50 74 72 20 6d 65 73 73 61 67 65 29 3b 0d 0a 0d  Ptr message);...
0270: 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e  .  /// <summary>
0280: 0d 0a 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61  ..  /// This cla
0290: 73 73 20 69 6d 70 6c 65 6d 65 6e 74 73 20 53 51  ss implements SQ
02a0: 4c 69 74 65 42 61 73 65 20 63 6f 6d 70 6c 65 74  LiteBase complet
02b0: 65 6c 79 2c 20 61 6e 64 20 69 73 20 74 68 65 20  ely, and is the 
02c0: 67 75 74 73 20 6f 66 20 74 68 65 20 63 6f 64 65  guts of the code
02d0: 20 74 68 61 74 20 69 6e 74 65 72 6f 70 27 73 20   that interop's 
02e0: 53 51 4c 69 74 65 20 77 69 74 68 20 2e 4e 45 54  SQLite with .NET
02f0: 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72  ..  /// </summar
0300: 79 3e 0d 0a 20 20 69 6e 74 65 72 6e 61 6c 20 63  y>..  internal c
0310: 6c 61 73 73 20 53 51 4c 69 74 65 33 20 3a 20 53  lass SQLite3 : S
0320: 51 4c 69 74 65 42 61 73 65 0d 0a 20 20 7b 0d 0a  QLiteBase..  {..
0330: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 2f 2f 20 4e      //..    // N
0340: 4f 54 45 3a 20 54 68 69 73 20 69 73 20 74 68 65  OTE: This is the
0350: 20 70 75 62 6c 69 63 20 6b 65 79 20 66 6f 72 20   public key for 
0360: 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
0370: 53 51 4c 69 74 65 20 61 73 73 65 6d 62 6c 79 2e  SQLite assembly.
0380: 20 20 49 66 20 79 6f 75 20 63 68 61 6e 67 65 20    If you change 
0390: 74 68 65 0d 0a 20 20 20 20 2f 2f 20 20 20 20 20  the..    //     
03a0: 20 20 53 4e 4b 20 66 69 6c 65 2c 20 79 6f 75 20    SNK file, you 
03b0: 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 63 68 61  will need to cha
03c0: 6e 67 65 20 74 68 69 73 20 61 73 20 77 65 6c 6c  nge this as well
03d0: 2e 0d 0a 20 20 20 20 2f 2f 0d 0a 20 20 20 20 69  ...    //..    i
03e0: 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73 74  nternal const st
03f0: 72 69 6e 67 20 50 75 62 6c 69 63 4b 65 79 20 3d  ring PublicKey =
0400: 0d 0a 20 20 20 20 20 20 20 20 22 30 30 32 34 30  ..        "00240
0410: 30 30 30 30 34 38 30 30 30 30 30 39 34 30 30 30  0000480000094000
0420: 30 30 30 30 36 30 32 30 30 30 30 30 30 32 34 30  0000602000000240
0430: 30 30 30 35 32 35 33 34 31 33 31 30 30 30 34 30  0005253413100040
0440: 30 30 30 30 31 30 30 30 31 30 30 30 35 61 32 38  0000100010005a28
0450: 38 64 65 35 36 38 37 63 34 65 31 22 20 2b 0d 0a  8de5687c4e1" +..
0460: 20 20 20 20 20 20 20 20 22 62 36 32 31 64 64 66          "b621ddf
0470: 66 35 64 38 34 34 37 32 37 34 31 38 39 35 36 39  f5d8447274189569
0480: 39 37 66 34 37 35 65 62 38 32 39 34 32 39 65 34  97f475eb829429e4
0490: 31 31 61 66 66 33 65 39 33 66 39 37 62 37 30 64  11aff3e93f97b70d
04a0: 65 36 39 38 62 39 37 32 36 34 30 39 32 35 62 64  e698b972640925bd
04b0: 64 34 34 32 38 30 64 66 30 22 20 2b 0d 0a 20 20  d44280df0" +..  
04c0: 20 20 20 20 20 20 22 61 32 35 61 38 34 33 32 36        "a25a84326
04d0: 36 39 37 33 37 30 34 31 33 37 63 62 62 30 65 37  6973704137cbb0e7
04e0: 34 34 31 63 31 66 65 37 63 61 65 34 65 32 34 34  441c1fe7cae4e244
04f0: 30 61 65 39 31 61 62 38 63 64 65 33 39 33 33 66  0ae91ab8cde3933f
0500: 65 62 63 62 31 61 63 34 38 64 64 33 33 62 34 30  ebcb1ac48dd33b40
0510: 65 31 33 63 34 32 31 22 20 2b 0d 0a 20 20 20 20  e13c421" +..    
0520: 20 20 20 20 22 64 38 32 31 35 63 31 38 61 34 33      "d8215c18a43
0530: 34 39 61 34 33 36 64 64 34 39 39 65 33 63 33 38  49a436dd499e3c38
0540: 35 63 63 36 38 33 30 31 35 66 38 38 36 66 36 63  5cc683015f886f6c
0550: 31 30 62 64 39 30 31 31 35 65 62 32 62 64 36 31  10bd90115eb2bd61
0560: 62 36 37 37 35 30 38 33 39 65 33 61 31 39 39 34  b67750839e3a1994
0570: 31 64 63 39 63 22 3b 0d 0a 0d 0a 23 69 66 20 21  1dc9c";....#if !
0580: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
0590: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 69  FRAMEWORK..    i
05a0: 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 73 74  nternal const st
05b0: 72 69 6e 67 20 44 65 73 69 67 6e 65 72 56 65 72  ring DesignerVer
05c0: 73 69 6f 6e 20 3d 20 22 31 2e 30 2e 37 38 2e 30  sion = "1.0.78.0
05d0: 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  ";..#endif....  
05e0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
05f0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f 70 61  .    /// The opa
0600: 71 75 65 20 70 6f 69 6e 74 65 72 20 72 65 74 75  que pointer retu
0610: 72 6e 65 64 20 74 6f 20 75 73 20 62 79 20 74 68  rned to us by th
0620: 65 20 73 71 6c 69 74 65 20 70 72 6f 76 69 64 65  e sqlite provide
0630: 72 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  r..    /// </sum
0640: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65  mary>..    prote
0650: 63 74 65 64 20 53 51 4c 69 74 65 43 6f 6e 6e 65  cted SQLiteConne
0660: 63 74 69 6f 6e 48 61 6e 64 6c 65 20 5f 73 71 6c  ctionHandle _sql
0670: 3b 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  ;..    protected
0680: 20 73 74 72 69 6e 67 20 5f 66 69 6c 65 4e 61 6d   string _fileNam
0690: 65 3b 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  e;..    protecte
06a0: 64 20 62 6f 6f 6c 20 5f 75 73 65 50 6f 6f 6c 3b  d bool _usePool;
06b0: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
06c0: 69 6e 74 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e  int _poolVersion
06d0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
06e0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
06f0: 4f 52 4b 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ORK..    private
0700: 20 62 6f 6f 6c 20 5f 62 75 69 6c 64 69 6e 67 53   bool _buildingS
0710: 63 68 65 6d 61 3b 0d 0a 23 65 6e 64 69 66 0d 0a  chema;..#endif..
0720: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0730: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 75  >..    /// The u
0740: 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  ser-defined func
0750: 74 69 6f 6e 73 20 72 65 67 69 73 74 65 72 65 64  tions registered
0760: 20 6f 6e 20 74 68 69 73 20 63 6f 6e 6e 65 63 74   on this connect
0770: 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ion..    /// </s
0780: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f  ummary>..    pro
0790: 74 65 63 74 65 64 20 53 51 4c 69 74 65 46 75 6e  tected SQLiteFun
07a0: 63 74 69 6f 6e 5b 5d 20 5f 66 75 6e 63 74 69 6f  ction[] _functio
07b0: 6e 73 41 72 72 61 79 3b 0d 0a 0d 0a 20 20 20 20  nsArray;....    
07c0: 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 33  internal SQLite3
07d0: 28 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61  (SQLiteDateForma
07e0: 74 73 20 66 6d 74 2c 20 44 61 74 65 54 69 6d 65  ts fmt, DateTime
07f0: 4b 69 6e 64 20 6b 69 6e 64 29 0d 0a 20 20 20 20  Kind kind)..    
0800: 20 20 3a 20 62 61 73 65 28 66 6d 74 2c 20 6b 69    : base(fmt, ki
0810: 6e 64 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nd)..    {..    
0820: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
0830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0880: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
0890: 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61  #region IDisposa
08a0: 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65  ble "Pattern" Me
08b0: 6d 62 65 72 73 0d 0a 20 20 20 20 70 72 69 76 61  mbers..    priva
08c0: 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64  te bool disposed
08d0: 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 76  ;..    private v
08e0: 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65  oid CheckDispose
08f0: 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  d() /* throw */.
0900: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f  .    {..#if THRO
0910: 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20  W_ON_DISPOSED.. 
0920: 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f         if (dispo
0930: 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  sed)..          
0940: 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65    throw new Obje
0950: 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70 74  ctDisposedExcept
0960: 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c 69 74  ion(typeof(SQLit
0970: 65 33 29 2e 4e 61 6d 65 29 3b 0d 0a 23 65 6e 64  e3).Name);..#end
0980: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
0990: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
09a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
09b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
09c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
09d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
09e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
09f0: 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  ....    protecte
0a00: 64 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  d override void 
0a10: 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73  Dispose(bool dis
0a20: 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a  posing)..    {..
0a30: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
0a40: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
0a50: 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65      if (!dispose
0a60: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
0a70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
0a80: 20 20 20 2f 2f 69 66 20 28 64 69 73 70 6f 73 69     //if (disposi
0a90: 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng)..           
0aa0: 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20       //{..      
0ab0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
0ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ae0: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
0af0: 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64        //    // d
0b00: 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72  ispose managed r
0b10: 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e  esources here...
0b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0b30: 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f    //    ////////
0b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
0b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
0b70: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
0b80: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
0b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
0bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
0bc0: 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65  release unmanage
0bd0: 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65  d resources here
0be0: 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .....           
0bf0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
0c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
0c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
0c30: 6c 6f 73 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  lose();....     
0c40: 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f             dispo
0c50: 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  sed = true;..   
0c60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
0c70: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66      }..        f
0c80: 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
0c90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  {..            b
0ca0: 61 73 65 2e 44 69 73 70 6f 73 65 28 64 69 73 70  ase.Dispose(disp
0cb0: 6f 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20 20 20  osing);..       
0cc0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23   }..    }..    #
0cd0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
0ce0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
0cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d40: 0d 0a 0d 0a 20 20 20 20 2f 2f 20 49 74 20 69 73  ....    // It is
0d50: 6e 27 74 20 6e 65 63 65 73 73 61 72 79 20 74 6f  n't necessary to
0d60: 20 63 6c 65 61 6e 75 70 20 61 6e 79 20 66 75 6e   cleanup any fun
0d70: 63 74 69 6f 6e 73 20 77 65 27 76 65 20 72 65 67  ctions we've reg
0d80: 69 73 74 65 72 65 64 2e 20 20 49 66 20 74 68 65  istered.  If the
0d90: 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20   connection..   
0da0: 20 2f 2f 20 67 6f 65 73 20 74 6f 20 74 68 65 20   // goes to the 
0db0: 70 6f 6f 6c 20 61 6e 64 20 69 73 20 72 65 73 75  pool and is resu
0dc0: 72 72 65 63 74 65 64 20 6c 61 74 65 72 2c 20 72  rrected later, r
0dd0: 65 2d 72 65 67 69 73 74 65 72 65 64 20 66 75 6e  e-registered fun
0de0: 63 74 69 6f 6e 73 20 77 69 6c 6c 20 6f 76 65 72  ctions will over
0df0: 77 72 69 74 65 20 74 68 65 0d 0a 20 20 20 20 2f  write the..    /
0e00: 2f 20 70 72 65 76 69 6f 75 73 20 66 75 6e 63 74  / previous funct
0e10: 69 6f 6e 73 2e 20 20 54 68 65 20 53 51 4c 69 74  ions.  The SQLit
0e20: 65 46 75 6e 63 74 69 6f 6e 43 6f 6f 6b 69 65 48  eFunctionCookieH
0e30: 61 6e 64 6c 65 20 77 69 6c 6c 20 74 61 6b 65 20  andle will take 
0e40: 63 61 72 65 20 6f 66 20 66 72 65 65 69 6e 67 20  care of freeing 
0e50: 75 6e 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 2f  unmanaged..    /
0e60: 2f 20 72 65 73 6f 75 72 63 65 73 20 62 65 6c 6f  / resources belo
0e70: 6e 67 69 6e 67 20 74 6f 20 74 68 65 20 70 72 65  nging to the pre
0e80: 76 69 6f 75 73 6c 79 2d 72 65 67 69 73 74 65 72  viously-register
0e90: 65 64 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20  ed functions... 
0ea0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
0eb0: 72 69 64 65 20 76 6f 69 64 20 43 6c 6f 73 65 28  ride void Close(
0ec0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
0ed0: 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c  if (_sql != null
0ee0: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
0ef0: 20 20 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f        if (_usePo
0f00: 6f 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  ol)..          {
0f10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0f20: 53 51 4c 69 74 65 42 61 73 65 2e 52 65 73 65 74  SQLiteBase.Reset
0f30: 43 6f 6e 6e 65 63 74 69 6f 6e 28 5f 73 71 6c 29  Connection(_sql)
0f40: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
0f50: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
0f60: 6e 50 6f 6f 6c 2e 41 64 64 28 5f 66 69 6c 65 4e  nPool.Add(_fileN
0f70: 61 6d 65 2c 20 5f 73 71 6c 2c 20 5f 70 6f 6f 6c  ame, _sql, _pool
0f80: 56 65 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20 20  Version);..     
0f90: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
0fa0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
0fb0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
0fc0: 20 20 20 5f 73 71 6c 2e 44 69 73 70 6f 73 65 28     _sql.Dispose(
0fd0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
0fe0: 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 20  .          _sql 
0ff0: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d  = null;..      }
1000: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
1010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1070: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1080: 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 61 6e  verride void Can
1090: 63 65 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  cel()..    {..  
10a0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
10b0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
10c0: 69 6e 74 65 72 72 75 70 74 28 5f 73 71 6c 29 3b  interrupt(_sql);
10d0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
10e0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
10f0: 20 73 74 72 69 6e 67 20 56 65 72 73 69 6f 6e 0d   string Version.
1100: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
1110: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
1120: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
1130: 65 33 2e 53 51 4c 69 74 65 56 65 72 73 69 6f 6e  e3.SQLiteVersion
1140: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
1150: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
1160: 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  l static string 
1170: 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 0d 0a 20  SQLiteVersion.. 
1180: 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
1190: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
11a0: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
11b0: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
11c0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
11d0: 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 2c 20  3_libversion(), 
11e0: 2d 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  -1);..      }.. 
11f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
1200: 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69  rnal static stri
1210: 6e 67 20 53 51 4c 69 74 65 53 6f 75 72 63 65 49  ng SQLiteSourceI
1220: 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  d..    {..      
1230: 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  get..      {..  
1240: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
1250: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
1260: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
1270: 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29  lite3_sourceid()
1280: 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  , -1);..      }.
1290: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
12a0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
12b0: 62 6f 6f 6c 20 41 75 74 6f 43 6f 6d 6d 69 74 0d  bool AutoCommit.
12c0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
12d0: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
12e0: 20 20 20 20 72 65 74 75 72 6e 20 49 73 41 75 74      return IsAut
12f0: 6f 63 6f 6d 6d 69 74 28 5f 73 71 6c 29 3b 0d 0a  ocommit(_sql);..
1300: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
1310: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1320: 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 4c 61 73  verride long Las
1330: 74 49 6e 73 65 72 74 52 6f 77 49 64 0d 0a 20 20  tInsertRowId..  
1340: 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a    {..      get..
1350: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1360: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
1370: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
1380: 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
1390: 72 6f 77 69 64 28 5f 73 71 6c 29 3b 0d 0a 20 20  rowid(_sql);..  
13a0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
13b0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
13c0: 72 72 69 64 65 20 69 6e 74 20 43 68 61 6e 67 65  rride int Change
13d0: 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  s..    {..      
13e0: 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  get..      {..  
13f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
1400: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1410: 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73  .sqlite3_changes
1420: 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d  (_sql);..      }
1430: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
1440: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1450: 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79 55 73 65 64   long MemoryUsed
1460: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
1470: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
1480: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
1490: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
14a0: 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75  sqlite3_memory_u
14b0: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  sed();..      }.
14c0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
14d0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
14e0: 6c 6f 6e 67 20 4d 65 6d 6f 72 79 48 69 67 68 77  long MemoryHighw
14f0: 61 74 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ater..    {..   
1500: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d     get..      {.
1510: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
1520: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1530: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f  ods.sqlite3_memo
1540: 72 79 5f 68 69 67 68 77 61 74 65 72 28 30 29 3b  ry_highwater(0);
1550: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
1560: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
1570: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53  mary>..    /// S
1580: 68 75 74 64 6f 77 6e 20 74 68 65 20 53 51 4c 69  hutdown the SQLi
1590: 74 65 20 65 6e 67 69 6e 65 20 73 6f 20 74 68 61  te engine so tha
15a0: 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74  t it can be rest
15b0: 61 72 74 65 64 20 77 69 74 68 20 64 69 66 66 65  arted with diffe
15c0: 72 65 6e 74 20 63 6f 6e 66 69 67 20 6f 70 74 69  rent config opti
15d0: 6f 6e 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 57 65  ons...    /// We
15e0: 20 64 65 70 65 6e 64 20 6f 6e 20 61 75 74 6f 20   depend on auto 
15f0: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 74  initialization t
1600: 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20 20 20 20  o recover...    
1610: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1620: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1630: 3e 52 65 74 75 72 6e 73 20 61 20 72 65 73 75 6c  >Returns a resul
1640: 74 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e  t code</returns>
1650: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1660: 76 65 72 72 69 64 65 20 69 6e 74 20 53 68 75 74  verride int Shut
1670: 64 6f 77 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  down()..    {.. 
1680: 20 20 20 20 20 20 20 69 6e 74 20 72 63 20 3d 20         int rc = 
1690: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
16a0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 68 75 74  ods.sqlite3_shut
16b0: 64 6f 77 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20  down();..       
16c0: 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20   return rc;..   
16d0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
16e0: 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  al override bool
16f0: 20 49 73 4f 70 65 6e 28 29 0d 0a 20 20 20 20 7b   IsOpen()..    {
1700: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1710: 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 3b   (_sql != null);
1720: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
1730: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1740: 20 76 6f 69 64 20 4f 70 65 6e 28 73 74 72 69 6e   void Open(strin
1750: 67 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 53  g strFilename, S
1760: 51 4c 69 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e  QLiteOpenFlagsEn
1770: 75 6d 20 66 6c 61 67 73 2c 20 69 6e 74 20 6d 61  um flags, int ma
1780: 78 50 6f 6f 6c 53 69 7a 65 2c 20 62 6f 6f 6c 20  xPoolSize, bool 
1790: 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 7b 0d  usePool)..    {.
17a0: 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20  .      if (_sql 
17b0: 21 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 3b  != null) return;
17c0: 0d 0a 0d 0a 20 20 20 20 20 20 5f 75 73 65 50 6f  ....      _usePo
17d0: 6f 6c 20 3d 20 75 73 65 50 6f 6f 6c 3b 0d 0a 20  ol = usePool;.. 
17e0: 20 20 20 20 20 69 66 20 28 75 73 65 50 6f 6f 6c       if (usePool
17f0: 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
1800: 20 20 20 20 5f 66 69 6c 65 4e 61 6d 65 20 3d 20      _fileName = 
1810: 73 74 72 46 69 6c 65 6e 61 6d 65 3b 0d 0a 20 20  strFilename;..  
1820: 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 53 51 4c        _sql = SQL
1830: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f  iteConnectionPoo
1840: 6c 2e 52 65 6d 6f 76 65 28 73 74 72 46 69 6c 65  l.Remove(strFile
1850: 6e 61 6d 65 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a  name, maxPoolSiz
1860: 65 2c 20 6f 75 74 20 5f 70 6f 6f 6c 56 65 72 73  e, out _poolVers
1870: 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  ion);..      }..
1880: 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c  ..      if (_sql
1890: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
18a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50   {..        IntP
18b0: 74 72 20 64 62 3b 0d 0a 0d 0a 23 69 66 20 21 53  tr db;....#if !S
18c0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
18d0: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20          int n = 
18e0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
18f0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65 6e  ods.sqlite3_open
1900: 5f 69 6e 74 65 72 6f 70 28 54 6f 55 54 46 38 28  _interop(ToUTF8(
1910: 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20 28 69  strFilename), (i
1920: 6e 74 29 66 6c 61 67 73 2c 20 6f 75 74 20 64 62  nt)flags, out db
1930: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
1940: 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66     int n = Unsaf
1950: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
1960: 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 54  qlite3_open_v2(T
1970: 6f 55 54 46 38 28 73 74 72 46 69 6c 65 6e 61 6d  oUTF8(strFilenam
1980: 65 29 2c 20 6f 75 74 20 64 62 2c 20 28 69 6e 74  e), out db, (int
1990: 29 66 6c 61 67 73 2c 20 49 6e 74 50 74 72 2e 5a  )flags, IntPtr.Z
19a0: 65 72 6f 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  ero);..#endif...
19b0: 0a 23 69 66 20 44 45 42 55 47 0d 0a 20 20 20 20  .#if DEBUG..    
19c0: 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
19d0: 69 6e 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ine(String.Forma
19e0: 74 28 22 4f 70 65 6e 3a 20 7b 30 7d 22 2c 20 64  t("Open: {0}", d
19f0: 62 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  b));..#endif....
1a00: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20          if (n > 
1a10: 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  0) throw new SQL
1a20: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
1a30: 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  null);....      
1a40: 20 20 5f 73 71 6c 20 3d 20 64 62 3b 0d 0a 20 20    _sql = db;..  
1a50: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 2f 2f 20      }..      // 
1a60: 42 69 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 74  Bind functions t
1a70: 6f 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f  o this connectio
1a80: 6e 2e 20 20 49 66 20 61 6e 79 20 70 72 65 76 69  n.  If any previ
1a90: 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73 20 6f 66  ous functions of
1aa0: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 0d 0a   the same name..
1ab0: 20 20 20 20 20 20 2f 2f 20 77 65 72 65 20 61 6c        // were al
1ac0: 72 65 61 64 79 20 62 6f 75 6e 64 2c 20 74 68 65  ready bound, the
1ad0: 6e 20 74 68 65 20 6e 65 77 20 62 69 6e 64 69 6e  n the new bindin
1ae0: 67 73 20 72 65 70 6c 61 63 65 20 74 68 65 20 6f  gs replace the o
1af0: 6c 64 2e 0d 0a 20 20 20 20 20 20 5f 66 75 6e 63  ld...      _func
1b00: 74 69 6f 6e 73 41 72 72 61 79 20 3d 20 53 51 4c  tionsArray = SQL
1b10: 69 74 65 46 75 6e 63 74 69 6f 6e 2e 42 69 6e 64  iteFunction.Bind
1b20: 46 75 6e 63 74 69 6f 6e 73 28 74 68 69 73 29 3b  Functions(this);
1b30: 0d 0a 20 20 20 20 20 20 53 65 74 54 69 6d 65 6f  ..      SetTimeo
1b40: 75 74 28 30 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ut(0);..    }...
1b50: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1b60: 65 72 72 69 64 65 20 76 6f 69 64 20 43 6c 65 61  erride void Clea
1b70: 72 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a  rPool()..    {..
1b80: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
1b90: 65 63 74 69 6f 6e 50 6f 6f 6c 2e 43 6c 65 61 72  ectionPool.Clear
1ba0: 50 6f 6f 6c 28 5f 66 69 6c 65 4e 61 6d 65 29 3b  Pool(_fileName);
1bb0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
1bc0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
1bd0: 20 76 6f 69 64 20 53 65 74 54 69 6d 65 6f 75 74   void SetTimeout
1be0: 28 69 6e 74 20 6e 54 69 6d 65 6f 75 74 4d 53 29  (int nTimeoutMS)
1bf0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69  ..    {..      i
1c00: 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  nt n = UnsafeNat
1c10: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1c20: 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28  e3_busy_timeout(
1c30: 5f 73 71 6c 2c 20 6e 54 69 6d 65 6f 75 74 4d 53  _sql, nTimeoutMS
1c40: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
1c50: 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53  > 0) throw new S
1c60: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
1c70: 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f  , SQLiteLastErro
1c80: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
1c90: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
1ca0: 72 72 69 64 65 20 62 6f 6f 6c 20 53 74 65 70 28  rride bool Step(
1cb0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
1cc0: 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  stmt)..    {..  
1cd0: 20 20 20 20 69 6e 74 20 6e 3b 0d 0a 20 20 20 20      int n;..    
1ce0: 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e    Random rnd = n
1cf0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74  ull;..      uint
1d00: 20 73 74 61 72 74 74 69 63 6b 20 3d 20 28 75 69   starttick = (ui
1d10: 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54  nt)Environment.T
1d20: 69 63 6b 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 20  ickCount;..     
1d30: 20 75 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20   uint timeout = 
1d40: 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f 6d  (uint)(stmt._com
1d50: 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69 6d  mand._commandTim
1d60: 65 6f 75 74 20 2a 20 31 30 30 30 29 3b 0d 0a 0d  eout * 1000);...
1d70: 0a 20 20 20 20 20 20 77 68 69 6c 65 20 28 74 72  .      while (tr
1d80: 75 65 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ue)..      {..  
1d90: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
1da0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
1db0: 6c 69 74 65 33 5f 73 74 65 70 28 73 74 6d 74 2e  lite3_step(stmt.
1dc0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a  _sqlite_stmt);..
1dd0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20  ..        if (n 
1de0: 3d 3d 20 31 30 30 29 20 72 65 74 75 72 6e 20 74  == 100) return t
1df0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  rue;..        if
1e00: 20 28 6e 20 3d 3d 20 31 30 31 29 20 72 65 74 75   (n == 101) retu
1e10: 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
1e20: 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 0d       if (n > 0).
1e30: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1e40: 20 20 20 20 20 20 69 6e 74 20 72 3b 0d 0a 0d 0a        int r;....
1e50: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 41 6e 20            // An 
1e60: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 2c 20  error occurred, 
1e70: 61 74 74 65 6d 70 74 20 74 6f 20 72 65 73 65 74  attempt to reset
1e80: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 2e 20   the statement. 
1e90: 20 49 66 20 74 68 65 20 72 65 73 65 74 20 77 6f   If the reset wo
1ea0: 72 6b 65 64 20 62 65 63 61 75 73 65 20 74 68 65  rked because the
1eb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 73  ..          // s
1ec0: 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65  chema has change
1ed0: 64 2c 20 72 65 2d 74 72 79 20 74 68 65 20 73 74  d, re-try the st
1ee0: 65 70 20 61 67 61 69 6e 2e 20 20 49 66 20 69 74  ep again.  If it
1ef0: 20 65 72 72 6f 72 65 64 20 6f 75 72 20 62 65 63   errored our bec
1f00: 61 75 73 65 20 74 68 65 20 64 61 74 61 62 61 73  ause the databas
1f10: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  e..          // 
1f20: 69 73 20 6c 6f 63 6b 65 64 2c 20 74 68 65 6e 20  is locked, then 
1f30: 6b 65 65 70 20 72 65 74 72 79 69 6e 67 20 75 6e  keep retrying un
1f40: 74 69 6c 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  til the command 
1f50: 74 69 6d 65 6f 75 74 20 6f 63 63 75 72 73 2e 0d  timeout occurs..
1f60: 0a 20 20 20 20 20 20 20 20 20 20 72 20 3d 20 52  .          r = R
1f70: 65 73 65 74 28 73 74 6d 74 29 3b 0d 0a 0d 0a 20  eset(stmt);.... 
1f80: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 20 3d           if (r =
1f90: 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
1fa0: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
1fb0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53  teException(n, S
1fc0: 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29  QLiteLastError()
1fd0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1fe0: 65 6c 73 65 20 69 66 20 28 28 72 20 3d 3d 20 36  else if ((r == 6
1ff0: 20 7c 7c 20 72 20 3d 3d 20 35 29 20 26 26 20 73   || r == 5) && s
2000: 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20  tmt._command != 
2010: 6e 75 6c 6c 29 20 2f 2f 20 53 51 4c 49 54 45 5f  null) // SQLITE_
2020: 4c 4f 43 4b 45 44 20 7c 7c 20 53 51 4c 49 54 45  LOCKED || SQLITE
2030: 5f 42 55 53 59 0d 0a 20 20 20 20 20 20 20 20 20  _BUSY..         
2040: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2050: 2f 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a  // Keep trying..
2060: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2070: 72 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20  rnd == null) // 
2080: 46 69 72 73 74 20 74 69 6d 65 20 77 65 27 76 65  First time we've
2090: 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65   encountered the
20a0: 20 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20   lock..         
20b0: 20 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52       rnd = new R
20c0: 61 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20  andom();....    
20d0: 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65          // If we
20e0: 27 76 65 20 65 78 63 65 65 64 65 64 20 74 68 65  've exceeded the
20f0: 20 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f   command's timeo
2100: 75 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20  ut, give up and 
2110: 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a  throw an error..
2120: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2130: 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e  (uint)Environmen
2140: 74 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74  t.TickCount - st
2150: 61 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75  arttick > timeou
2160: 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
2170: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2180: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
2190: 65 45 78 63 65 70 74 69 6f 6e 28 72 2c 20 53 51  eException(r, SQ
21a0: 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29  LiteLastError())
21b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
21c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
21d0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
21e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
21f0: 20 2f 2f 20 4f 74 68 65 72 77 69 73 65 20 73 6c   // Otherwise sl
2200: 65 65 70 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d  eep for a random
2210: 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20   amount of time 
2220: 75 70 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20  up to 150ms..   
2230: 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
2240: 6d 2e 54 68 72 65 61 64 69 6e 67 2e 54 68 72 65  m.Threading.Thre
2250: 61 64 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78  ad.Sleep(rnd.Nex
2260: 74 28 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20  t(1, 150));..   
2270: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2280: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2290: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..   
22a0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
22b0: 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  al override int 
22c0: 52 65 73 65 74 28 53 51 4c 69 74 65 53 74 61 74  Reset(SQLiteStat
22d0: 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20  ement stmt)..   
22e0: 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 3b   {..      int n;
22f0: 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f  ....#if !SQLITE_
2300: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
2310: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
2320: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
2330: 72 65 73 65 74 5f 69 6e 74 65 72 6f 70 28 73 74  reset_interop(st
2340: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29  mt._sqlite_stmt)
2350: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
2360: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
2370: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
2380: 72 65 73 65 74 28 73 74 6d 74 2e 5f 73 71 6c 69  reset(stmt._sqli
2390: 74 65 5f 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69  te_stmt);..#endi
23a0: 66 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66  f....      // If
23b0: 20 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e   the schema chan
23c0: 67 65 64 2c 20 74 72 79 20 61 6e 64 20 72 65 2d  ged, try and re-
23d0: 70 72 65 70 61 72 65 20 69 74 0d 0a 20 20 20 20  prepare it..    
23e0: 20 20 69 66 20 28 6e 20 3d 3d 20 31 37 29 20 2f    if (n == 17) /
23f0: 2f 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 0d  / SQLITE_SCHEMA.
2400: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
2410: 20 20 2f 2f 20 52 65 63 72 65 61 74 65 20 61 20    // Recreate a 
2420: 64 75 6d 6d 79 20 73 74 61 74 65 6d 65 6e 74 0d  dummy statement.
2430: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
2440: 73 74 72 3b 0d 0a 20 20 20 20 20 20 20 20 75 73  str;..        us
2450: 69 6e 67 20 28 53 51 4c 69 74 65 53 74 61 74 65  ing (SQLiteState
2460: 6d 65 6e 74 20 74 6d 70 20 3d 20 50 72 65 70 61  ment tmp = Prepa
2470: 72 65 28 6e 75 6c 6c 2c 20 73 74 6d 74 2e 5f 73  re(null, stmt._s
2480: 71 6c 53 74 61 74 65 6d 65 6e 74 2c 20 6e 75 6c  qlStatement, nul
2490: 6c 2c 20 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f  l, (uint)(stmt._
24a0: 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64  command._command
24b0: 54 69 6d 65 6f 75 74 20 2a 20 31 30 30 30 29 2c  Timeout * 1000),
24c0: 20 6f 75 74 20 73 74 72 29 29 0d 0a 20 20 20 20   out str))..    
24d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24e0: 20 2f 2f 20 46 69 6e 61 6c 69 7a 65 20 74 68 65   // Finalize the
24f0: 20 65 78 69 73 74 69 6e 67 20 73 74 61 74 65 6d   existing statem
2500: 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ent..          s
2510: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
2520: 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20  .Dispose();..   
2530: 20 20 20 20 20 20 20 2f 2f 20 52 65 61 73 73 69         // Reassi
2540: 67 6e 20 61 20 6e 65 77 20 73 74 61 74 65 6d 65  gn a new stateme
2550: 6e 74 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  nt pointer to th
2560: 65 20 6f 6c 64 20 73 74 61 74 65 6d 65 6e 74 20  e old statement 
2570: 61 6e 64 20 63 6c 65 61 72 20 74 68 65 20 74 65  and clear the te
2580: 6d 70 6f 72 61 72 79 20 6f 6e 65 0d 0a 20 20 20  mporary one..   
2590: 20 20 20 20 20 20 20 73 74 6d 74 2e 5f 73 71 6c         stmt._sql
25a0: 69 74 65 5f 73 74 6d 74 20 3d 20 74 6d 70 2e 5f  ite_stmt = tmp._
25b0: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 20 20  sqlite_stmt;..  
25c0: 20 20 20 20 20 20 20 20 74 6d 70 2e 5f 73 71 6c          tmp._sql
25d0: 69 74 65 5f 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b  ite_stmt = null;
25e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  ....          //
25f0: 20 52 65 61 70 70 6c 79 20 70 61 72 61 6d 65 74   Reapply paramet
2600: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ers..          s
2610: 74 6d 74 2e 42 69 6e 64 50 61 72 61 6d 65 74 65  tmt.BindParamete
2620: 72 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rs();..        }
2630: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2640: 20 2d 31 3b 20 2f 2f 20 52 65 73 65 74 20 77 61   -1; // Reset wa
2650: 73 20 4f 4b 2c 20 77 69 74 68 20 73 63 68 65 6d  s OK, with schem
2660: 61 20 63 68 61 6e 67 65 0d 0a 20 20 20 20 20 20  a change..      
2670: 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66  }..      else if
2680: 20 28 6e 20 3d 3d 20 36 20 7c 7c 20 6e 20 3d 3d   (n == 6 || n ==
2690: 20 35 29 20 2f 2f 20 53 51 4c 49 54 45 5f 4c 4f   5) // SQLITE_LO
26a0: 43 4b 45 44 20 7c 7c 20 53 51 4c 49 54 45 5f 42  CKED || SQLITE_B
26b0: 55 53 59 0d 0a 20 20 20 20 20 20 20 20 72 65 74  USY..        ret
26c0: 75 72 6e 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  urn n;....      
26d0: 69 66 20 28 6e 20 3e 20 30 29 0d 0a 20 20 20 20  if (n > 0)..    
26e0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
26f0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
2700: 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72   SQLiteLastError
2710: 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65  ());....      re
2720: 74 75 72 6e 20 30 3b 20 2f 2f 20 57 65 20 72 65  turn 0; // We re
2730: 73 65 74 20 4f 4b 2c 20 6e 6f 20 73 63 68 65 6d  set OK, no schem
2740: 61 20 63 68 61 6e 67 65 73 0d 0a 20 20 20 20 7d  a changes..    }
2750: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
2760: 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
2770: 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72   SQLiteLastError
2780: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
2790: 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 42 61   return SQLiteBa
27a0: 73 65 2e 53 51 4c 69 74 65 4c 61 73 74 45 72 72  se.SQLiteLastErr
27b0: 6f 72 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 7d  or(_sql);..    }
27c0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
27d0: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
27e0: 53 74 61 74 65 6d 65 6e 74 20 50 72 65 70 61 72  Statement Prepar
27f0: 65 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  e(SQLiteConnecti
2800: 6f 6e 20 63 6e 6e 2c 20 73 74 72 69 6e 67 20 73  on cnn, string s
2810: 74 72 53 71 6c 2c 20 53 51 4c 69 74 65 53 74 61  trSql, SQLiteSta
2820: 74 65 6d 65 6e 74 20 70 72 65 76 69 6f 75 73 2c  tement previous,
2830: 20 75 69 6e 74 20 74 69 6d 65 6f 75 74 4d 53 2c   uint timeoutMS,
2840: 20 6f 75 74 20 73 74 72 69 6e 67 20 73 74 72 52   out string strR
2850: 65 6d 61 69 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20  emain)..    {.. 
2860: 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
2870: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73  .IsNullOrEmpty(s
2880: 74 72 53 71 6c 29 29 0d 0a 20 20 20 20 20 20 7b  trSql))..      {
2890: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
28a0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53        // NOTE: S
28b0: 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 73  QLite does not s
28c0: 75 70 70 6f 72 74 20 74 68 65 20 63 6f 6e 63 65  upport the conce
28d0: 70 74 20 6f 66 20 73 65 70 61 72 61 74 65 20 73  pt of separate s
28e0: 63 68 65 6d 61 73 0d 0a 20 20 20 20 20 20 20 20  chemas..        
28f0: 2f 2f 20 20 20 20 20 20 20 69 6e 20 6f 6e 65 20  //       in one 
2900: 64 61 74 61 62 61 73 65 3b 20 74 68 65 72 65 66  database; theref
2910: 6f 72 65 2c 20 72 65 6d 6f 76 65 20 74 68 65 20  ore, remove the 
2920: 62 61 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65  base schema name
2930: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20  ..        //    
2940: 20 20 20 75 73 65 64 20 74 6f 20 73 6d 6f 6f 74     used to smoot
2950: 68 20 69 6e 74 65 67 72 61 74 69 6f 6e 20 77 69  h integration wi
2960: 74 68 20 74 68 65 20 62 61 73 65 20 2e 4e 45 54  th the base .NET
2970: 20 46 72 61 6d 65 77 6f 72 6b 0d 0a 20 20 20 20   Framework..    
2980: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 61 74      //       dat
2990: 61 20 63 6c 61 73 73 65 73 2e 0d 0a 20 20 20 20  a classes...    
29a0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
29b0: 73 74 72 69 6e 67 20 62 61 73 65 53 63 68 65 6d  string baseSchem
29c0: 61 4e 61 6d 65 20 3d 20 28 63 6e 6e 20 21 3d 20  aName = (cnn != 
29d0: 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 5f 62 61 73  null) ? cnn._bas
29e0: 65 53 63 68 65 6d 61 4e 61 6d 65 20 3a 20 6e 75  eSchemaName : nu
29f0: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ll;....        i
2a00: 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c  f (!String.IsNul
2a10: 6c 4f 72 45 6d 70 74 79 28 62 61 73 65 53 63 68  lOrEmpty(baseSch
2a20: 65 6d 61 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  emaName))..     
2a30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a40: 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e  strSql = strSql.
2a50: 52 65 70 6c 61 63 65 28 0d 0a 20 20 20 20 20 20  Replace(..      
2a60: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46          String.F
2a70: 6f 72 6d 61 74 28 22 5b 7b 30 7d 5d 2e 22 2c 20  ormat("[{0}].", 
2a80: 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 2c  baseSchemaName),
2a90: 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d   String.Empty);.
2aa0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72  ...          str
2ab0: 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65 70  Sql = strSql.Rep
2ac0: 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  lace(..         
2ad0: 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
2ae0: 61 74 28 22 7b 30 7d 2e 22 2c 20 62 61 73 65 53  at("{0}.", baseS
2af0: 63 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69  chemaName), Stri
2b00: 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20  ng.Empty);..    
2b10: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
2b20: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 73  ..      IntPtr s
2b30: 74 6d 74 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  tmt = IntPtr.Zer
2b40: 6f 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  o;..      IntPtr
2b50: 20 70 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65   ptr = IntPtr.Ze
2b60: 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ro;..      int l
2b70: 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69  en = 0;..      i
2b80: 6e 74 20 6e 20 3d 20 31 37 3b 0d 0a 20 20 20 20  nt n = 17;..    
2b90: 20 20 69 6e 74 20 72 65 74 72 69 65 73 20 3d 20    int retries = 
2ba0: 30 3b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d  0;..      byte[]
2bb0: 20 62 20 3d 20 54 6f 55 54 46 38 28 73 74 72 53   b = ToUTF8(strS
2bc0: 71 6c 29 3b 0d 0a 20 20 20 20 20 20 73 74 72 69  ql);..      stri
2bd0: 6e 67 20 74 79 70 65 64 65 66 73 20 3d 20 6e 75  ng typedefs = nu
2be0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74  ll;..      SQLit
2bf0: 65 53 74 61 74 65 6d 65 6e 74 20 63 6d 64 20 3d  eStatement cmd =
2c00: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 52 61   null;..      Ra
2c10: 6e 64 6f 6d 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b  ndom rnd = null;
2c20: 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 73 74 61  ..      uint sta
2c30: 72 74 74 69 63 6b 20 3d 20 28 75 69 6e 74 29 45  rttick = (uint)E
2c40: 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43  nvironment.TickC
2c50: 6f 75 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 47  ount;....      G
2c60: 43 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  CHandle handle =
2c70: 20 47 43 48 61 6e 64 6c 65 2e 41 6c 6c 6f 63 28   GCHandle.Alloc(
2c80: 62 2c 20 47 43 48 61 6e 64 6c 65 54 79 70 65 2e  b, GCHandleType.
2c90: 50 69 6e 6e 65 64 29 3b 0d 0a 20 20 20 20 20 20  Pinned);..      
2ca0: 49 6e 74 50 74 72 20 70 73 71 6c 20 3d 20 68 61  IntPtr psql = ha
2cb0: 6e 64 6c 65 2e 41 64 64 72 4f 66 50 69 6e 6e 65  ndle.AddrOfPinne
2cc0: 64 4f 62 6a 65 63 74 28 29 3b 0d 0a 20 20 20 20  dObject();..    
2cd0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a    try..      {..
2ce0: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 28          while ((
2cf0: 6e 20 3d 3d 20 31 37 20 7c 7c 20 6e 20 3d 3d 20  n == 17 || n == 
2d00: 36 20 7c 7c 20 6e 20 3d 3d 20 35 29 20 26 26 20  6 || n == 5) && 
2d10: 72 65 74 72 69 65 73 20 3c 20 33 29 0d 0a 20 20  retries < 3)..  
2d20: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51        {..#if !SQ
2d30: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
2d40: 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73           n = Uns
2d50: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
2d60: 2e 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  .sqlite3_prepare
2d70: 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 70  _interop(_sql, p
2d80: 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20  sql, b.Length - 
2d90: 31 2c 20 6f 75 74 20 73 74 6d 74 2c 20 6f 75 74  1, out stmt, out
2da0: 20 70 74 72 2c 20 6f 75 74 20 6c 65 6e 29 3b 0d   ptr, out len);.
2db0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
2dc0: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
2dd0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
2de0: 33 5f 70 72 65 70 61 72 65 28 5f 73 71 6c 2c 20  3_prepare(_sql, 
2df0: 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d  psql, b.Length -
2e00: 20 31 2c 20 6f 75 74 20 73 74 6d 74 2c 20 6f 75   1, out stmt, ou
2e10: 74 20 70 74 72 29 3b 0d 0a 20 20 20 20 20 20 20  t ptr);..       
2e20: 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 23 65     len = -1;..#e
2e30: 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 44 45 42 55  ndif....#if DEBU
2e40: 47 0d 0a 20 20 20 20 20 20 20 20 20 20 54 72 61  G..          Tra
2e50: 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72  ce.WriteLine(Str
2e60: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 50 72 65 70  ing.Format("Prep
2e70: 61 72 65 3a 20 7b 30 7d 22 2c 20 73 74 6d 74 29  are: {0}", stmt)
2e80: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  );..#endif....  
2e90: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d          if (n ==
2ea0: 20 31 37 29 0d 0a 20 20 20 20 20 20 20 20 20 20   17)..          
2eb0: 20 20 72 65 74 72 69 65 73 2b 2b 3b 0d 0a 20 20    retries++;..  
2ec0: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
2ed0: 28 6e 20 3d 3d 20 31 29 0d 0a 20 20 20 20 20 20  (n == 1)..      
2ee0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ef0: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f     if (String.Co
2f00: 6d 70 61 72 65 28 53 51 4c 69 74 65 4c 61 73 74  mpare(SQLiteLast
2f10: 45 72 72 6f 72 28 29 2c 20 22 6e 65 61 72 20 5c  Error(), "near \
2f20: 22 54 59 50 45 53 5c 22 3a 20 73 79 6e 74 61 78  "TYPES\": syntax
2f30: 20 65 72 72 6f 72 22 2c 20 53 74 72 69 6e 67 43   error", StringC
2f40: 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
2f50: 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20  lIgnoreCase) == 
2f60: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
2f70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2f80: 20 69 6e 74 20 70 6f 73 20 3d 20 73 74 72 53 71   int pos = strSq
2f90: 6c 2e 49 6e 64 65 78 4f 66 28 27 3b 27 29 3b 0d  l.IndexOf(';');.
2fa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
2fb0: 66 20 28 70 6f 73 20 3d 3d 20 2d 31 29 20 70 6f  f (pos == -1) po
2fc0: 73 20 3d 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74  s = strSql.Lengt
2fd0: 68 20 2d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20  h - 1;....      
2fe0: 20 20 20 20 20 20 20 20 74 79 70 65 64 65 66 73          typedefs
2ff0: 20 3d 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72   = strSql.Substr
3000: 69 6e 67 28 30 2c 20 70 6f 73 20 2b 20 31 29 3b  ing(0, pos + 1);
3010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3020: 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e  strSql = strSql.
3030: 53 75 62 73 74 72 69 6e 67 28 70 6f 73 20 2b 20  Substring(pos + 
3040: 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  1);....         
3050: 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d       strRemain =
3060: 20 22 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   "";....        
3070: 20 20 20 20 20 20 77 68 69 6c 65 20 28 63 6d 64        while (cmd
3080: 20 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72 53   == null && strS
3090: 71 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a  ql.Length > 0)..
30a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
30b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30c0: 20 63 6d 64 20 3d 20 50 72 65 70 61 72 65 28 63   cmd = Prepare(c
30d0: 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72 65 76  nn, strSql, prev
30e0: 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 2c  ious, timeoutMS,
30f0: 20 6f 75 74 20 73 74 72 52 65 6d 61 69 6e 29 3b   out strRemain);
3100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3110: 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 52 65    strSql = strRe
3120: 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  main;..         
3130: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
3140: 20 20 20 20 20 20 20 20 69 66 20 28 63 6d 64 20          if (cmd 
3150: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
3160: 20 20 20 20 20 20 20 20 20 20 63 6d 64 2e 53 65            cmd.Se
3170: 74 54 79 70 65 73 28 74 79 70 65 64 65 66 73 29  tTypes(typedefs)
3180: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
3190: 20 20 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a     return cmd;..
31a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23              }..#
31b0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
31c0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
31d0: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
31e0: 69 66 20 28 5f 62 75 69 6c 64 69 6e 67 53 63 68  if (_buildingSch
31f0: 65 6d 61 20 3d 3d 20 66 61 6c 73 65 20 26 26 20  ema == false && 
3200: 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 53  String.Compare(S
3210: 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29  QLiteLastError()
3220: 2c 20 30 2c 20 22 6e 6f 20 73 75 63 68 20 74 61  , 0, "no such ta
3230: 62 6c 65 3a 20 54 45 4d 50 2e 53 43 48 45 4d 41  ble: TEMP.SCHEMA
3240: 22 2c 20 30 2c 20 32 36 2c 20 53 74 72 69 6e 67  ", 0, 26, String
3250: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
3260: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d  alIgnoreCase) ==
3270: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
3280: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3290: 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 22 22    strRemain = ""
32a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
32b0: 20 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61   _buildingSchema
32c0: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
32d0: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
32e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
32f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 53                IS
3300: 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e  QLiteSchemaExten
3310: 73 69 6f 6e 73 20 65 78 74 20 3d 20 28 28 49 53  sions ext = ((IS
3320: 65 72 76 69 63 65 50 72 6f 76 69 64 65 72 29 53  erviceProvider)S
3330: 51 4c 69 74 65 46 61 63 74 6f 72 79 2e 49 6e 73  QLiteFactory.Ins
3340: 74 61 6e 63 65 29 2e 47 65 74 53 65 72 76 69 63  tance).GetServic
3350: 65 28 74 79 70 65 6f 66 28 49 53 51 4c 69 74 65  e(typeof(ISQLite
3360: 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73  SchemaExtensions
3370: 29 29 20 61 73 20 49 53 51 4c 69 74 65 53 63 68  )) as ISQLiteSch
3380: 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 3b 0d 0a  emaExtensions;..
3390: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33a0: 20 20 69 66 20 28 65 78 74 20 21 3d 20 6e 75 6c    if (ext != nul
33b0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
33c0: 20 20 20 20 20 20 65 78 74 2e 42 75 69 6c 64 54        ext.BuildT
33d0: 65 6d 70 53 63 68 65 6d 61 28 63 6e 6e 29 3b 0d  empSchema(cnn);.
33e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
33f0: 20 20 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d     while (cmd ==
3400: 20 6e 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e   null && strSql.
3410: 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20  Length > 0)..   
3420: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
3430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3440: 20 20 63 6d 64 20 3d 20 50 72 65 70 61 72 65 28    cmd = Prepare(
3450: 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72 65  cnn, strSql, pre
3460: 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53  vious, timeoutMS
3470: 2c 20 6f 75 74 20 73 74 72 52 65 6d 61 69 6e 29  , out strRemain)
3480: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3490: 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74       strSql = st
34a0: 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20 20 20  rRemain;..      
34b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
34c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
34d0: 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20  eturn cmd;..    
34e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
34f0: 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c             final
3500: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
3510: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3520: 20 20 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63       _buildingSc
3530: 68 65 6d 61 20 3d 20 66 61 6c 73 65 3b 0d 0a 20  hema = false;.. 
3540: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
3550: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23              }..#
3560: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
3570: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c   }..          el
3580: 73 65 20 69 66 20 28 6e 20 3d 3d 20 36 20 7c 7c  se if (n == 6 ||
3590: 20 6e 20 3d 3d 20 35 29 20 2f 2f 20 4c 6f 63 6b   n == 5) // Lock
35a0: 65 64 20 2d 2d 20 64 65 6c 61 79 20 61 20 73 6d  ed -- delay a sm
35b0: 61 6c 6c 20 61 6d 6f 75 6e 74 20 62 65 66 6f 72  all amount befor
35c0: 65 20 72 65 74 72 79 69 6e 67 0d 0a 20 20 20 20  e retrying..    
35d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35e0: 20 20 20 20 20 2f 2f 20 4b 65 65 70 20 74 72 79       // Keep try
35f0: 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ing..           
3600: 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e 75 6c 6c   if (rnd == null
3610: 29 20 2f 2f 20 46 69 72 73 74 20 74 69 6d 65 20  ) // First time 
3620: 77 65 27 76 65 20 65 6e 63 6f 75 6e 74 65 72 65  we've encountere
3630: 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20 20 20 20  d the lock..    
3640: 20 20 20 20 20 20 20 20 20 20 72 6e 64 20 3d 20            rnd = 
3650: 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d 0a 0d  new Random();...
3660: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
3670: 49 66 20 77 65 27 76 65 20 65 78 63 65 65 64 65  If we've exceede
3680: 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 27 73 20  d the command's 
3690: 74 69 6d 65 6f 75 74 2c 20 67 69 76 65 20 75 70  timeout, give up
36a0: 20 61 6e 64 20 74 68 72 6f 77 20 61 6e 20 65 72   and throw an er
36b0: 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
36c0: 20 69 66 20 28 28 75 69 6e 74 29 45 6e 76 69 72   if ((uint)Envir
36d0: 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74  onment.TickCount
36e0: 20 2d 20 73 74 61 72 74 74 69 63 6b 20 3e 20 74   - starttick > t
36f0: 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20 20 20 20  imeoutMS)..     
3700: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3710: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
3720: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
3730: 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45  n(n, SQLiteLastE
3740: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
3750: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
3760: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
3770: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3780: 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72          // Other
3790: 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61  wise sleep for a
37a0: 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f   random amount o
37b0: 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30  f time up to 150
37c0: 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ms..            
37d0: 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69    System.Threadi
37e0: 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28  ng.Thread.Sleep(
37f0: 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29  rnd.Next(1, 150)
3800: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
3810: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
3820: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
3830: 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20       if (n > 0) 
3840: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
3850: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c  Exception(n, SQL
3860: 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  iteLastError());
3870: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74 72 52  ....        strR
3880: 65 6d 61 69 6e 20 3d 20 55 54 46 38 54 6f 53 74  emain = UTF8ToSt
3890: 72 69 6e 67 28 70 74 72 2c 20 6c 65 6e 29 3b 0d  ring(ptr, len);.
38a0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73  ...        if (s
38b0: 74 6d 74 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  tmt != IntPtr.Ze
38c0: 72 6f 29 20 63 6d 64 20 3d 20 6e 65 77 20 53 51  ro) cmd = new SQ
38d0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 28 74 68  LiteStatement(th
38e0: 69 73 2c 20 73 74 6d 74 2c 20 73 74 72 53 71 6c  is, stmt, strSql
38f0: 2e 53 75 62 73 74 72 69 6e 67 28 30 2c 20 73 74  .Substring(0, st
3900: 72 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20 73 74  rSql.Length - st
3910: 72 52 65 6d 61 69 6e 2e 4c 65 6e 67 74 68 29 2c  rRemain.Length),
3920: 20 70 72 65 76 69 6f 75 73 29 3b 0d 0a 0d 0a 20   previous);.... 
3930: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d         return cm
3940: 64 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  d;..      }..   
3950: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
3960: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 68 61 6e    {..        han
3970: 64 6c 65 2e 46 72 65 65 28 29 3b 0d 0a 20 20 20  dle.Free();..   
3980: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
3990: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
39a0: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 44  ride void Bind_D
39b0: 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74  ouble(SQLiteStat
39c0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
39d0: 69 6e 64 65 78 2c 20 64 6f 75 62 6c 65 20 76 61  index, double va
39e0: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  lue)..    {..#if
39f0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
3a00: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
3a10: 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66     int n = Unsaf
3a20: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
3a30: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62  qlite3_bind_doub
3a40: 6c 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  le(stmt._sqlite_
3a50: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 76 61 6c  stmt, index, val
3a60: 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
3a70: 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66     int n = Unsaf
3a80: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
3a90: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62  qlite3_bind_doub
3aa0: 6c 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  le_interop(stmt.
3ab0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
3ac0: 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  dex, ref value);
3ad0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
3ae0: 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77  if (n > 0) throw
3af0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
3b00: 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61  tion(n, SQLiteLa
3b10: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
3b20: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
3b30: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
3b40: 20 42 69 6e 64 5f 49 6e 74 33 32 28 53 51 4c 69   Bind_Int32(SQLi
3b50: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
3b60: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74  , int index, int
3b70: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
3b80: 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e        int n = Un
3b90: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
3ba0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
3bb0: 6e 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  nt(stmt._sqlite_
3bc0: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 76 61 6c  stmt, index, val
3bd0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  ue);..      if (
3be0: 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77  n > 0) throw new
3bf0: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
3c00: 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72  (n, SQLiteLastEr
3c10: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
3c20: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
3c30: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
3c40: 64 5f 55 49 6e 74 33 32 28 53 51 4c 69 74 65 53  d_UInt32(SQLiteS
3c50: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
3c60: 6e 74 20 69 6e 64 65 78 2c 20 75 69 6e 74 20 76  nt index, uint v
3c70: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
3c80: 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61      int n = Unsa
3c90: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
3ca0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e  sqlite3_bind_uin
3cb0: 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  t(stmt._sqlite_s
3cc0: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  tmt, index, valu
3cd0: 65 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  e);..      if (n
3ce0: 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20   > 0) throw new 
3cf0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
3d00: 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72  n, SQLiteLastErr
3d10: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
3d20: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
3d30: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
3d40: 5f 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61  _Int64(SQLiteSta
3d50: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
3d60: 20 69 6e 64 65 78 2c 20 6c 6f 6e 67 20 76 61 6c   index, long val
3d70: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ue)..    {..#if 
3d80: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
3d90: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
3da0: 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65    int n = Unsafe
3db0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
3dc0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
3dd0: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
3de0: 6d 74 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  mt, index, value
3df0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
3e00: 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e   int n = UnsafeN
3e10: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
3e20: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f  ite3_bind_int64_
3e30: 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
3e40: 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
3e50: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
3e60: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20  endif..      if 
3e70: 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65  (n > 0) throw ne
3e80: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
3e90: 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45  n(n, SQLiteLastE
3ea0: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
3eb0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
3ec0: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69  override void Bi
3ed0: 6e 64 5f 55 49 6e 74 36 34 28 53 51 4c 69 74 65  nd_UInt64(SQLite
3ee0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
3ef0: 69 6e 74 20 69 6e 64 65 78 2c 20 75 6c 6f 6e 67  int index, ulong
3f00: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
3f10: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
3f20: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
3f30: 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e        int n = Un
3f40: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
3f50: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75  s.sqlite3_bind_u
3f60: 69 6e 74 36 34 28 73 74 6d 74 2e 5f 73 71 6c 69  int64(stmt._sqli
3f70: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
3f80: 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a  value);..#else..
3f90: 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e        int n = Un
3fa0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
3fb0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75  s.sqlite3_bind_u
3fc0: 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 73 74  int64_interop(st
3fd0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
3fe0: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
3ff0: 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  e);..#endif..   
4000: 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68     if (n > 0) th
4010: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
4020: 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74  ception(n, SQLit
4030: 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  eLastError());..
4040: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
4050: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
4060: 6f 69 64 20 42 69 6e 64 5f 54 65 78 74 28 53 51  oid Bind_Text(SQ
4070: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
4080: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 73  mt, int index, s
4090: 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20  tring value)..  
40a0: 20 20 7b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b    {..      byte[
40b0: 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 76 61 6c  ] b = ToUTF8(val
40c0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  ue);..      int 
40d0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
40e0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
40f0: 62 69 6e 64 5f 74 65 78 74 28 73 74 6d 74 2e 5f  bind_text(stmt._
4100: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
4110: 65 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20  ex, b, b.Length 
4120: 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31  - 1, (IntPtr)(-1
4130: 29 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  ));..      if (n
4140: 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20   > 0) throw new 
4150: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
4160: 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72  n, SQLiteLastErr
4170: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
4180: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
4190: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
41a0: 5f 44 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65  _DateTime(SQLite
41b0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
41c0: 69 6e 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54  int index, DateT
41d0: 69 6d 65 20 64 74 29 0d 0a 20 20 20 20 7b 0d 0a  ime dt)..    {..
41e0: 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 28          switch (
41f0: 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d 61 74 29  _datetimeFormat)
4200: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
4210: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
4220: 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e  LiteDateFormats.
4230: 54 69 63 6b 73 3a 0d 0a 20 20 20 20 20 20 20 20  Ticks:..        
4240: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
4260: 6f 6e 67 20 76 61 6c 75 65 20 3d 20 64 74 2e 54  ong value = dt.T
4270: 69 63 6b 73 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  icks;....#if !PL
4280: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
4290: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
42a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
42b0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
42c0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
42d0: 5f 62 69 6e 64 5f 69 6e 74 36 34 28 73 74 6d 74  _bind_int64(stmt
42e0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
42f0: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  ndex, value);..#
4300: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
4310: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 20            int n 
4320: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
4330: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
4340: 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70  nd_int64_interop
4350: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
4360: 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76  mt, index, ref v
4370: 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  alue);..#endif..
4380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4390: 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74      if (n > 0) t
43a0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
43b0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69  xception(n, SQLi
43c0: 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  teLastError());.
43d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
43e0: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
43f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
4400: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
4410: 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61   SQLiteDateForma
4420: 74 73 2e 4a 75 6c 69 61 6e 44 61 79 3a 0d 0a 20  ts.JulianDay:.. 
4430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
4440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4450: 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c        double val
4460: 75 65 20 3d 20 54 6f 4a 75 6c 69 61 6e 44 61 79  ue = ToJulianDay
4470: 28 64 74 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  (dt);....#if !PL
4480: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
4490: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
44a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
44b0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
44c0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
44d0: 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 73 74 6d  _bind_double(stm
44e0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
44f0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
4500: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
4510: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e             int n
4520: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
4530: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
4540: 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72  ind_double_inter
4550: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
4560: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65 66  stmt, index, ref
4570: 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66   value);..#endif
4580: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4590: 20 20 20 20 20 20 69 66 20 28 6e 20 3e 20 30 29        if (n > 0)
45a0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
45b0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51  eException(n, SQ
45c0: 4c 69 74 65 4c 61 73 74 45 72 72 6f 72 28 29 29  LiteLastError())
45d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
45e0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
45f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
4600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
4610: 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  se SQLiteDateFor
4620: 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68 3a 0d  mats.UnixEpoch:.
4630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4640: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4650: 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c          long val
4660: 75 65 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49  ue = Convert.ToI
4670: 6e 74 36 34 28 64 74 2e 53 75 62 74 72 61 63 74  nt64(dt.Subtract
4680: 28 55 6e 69 78 45 70 6f 63 68 29 2e 54 6f 74 61  (UnixEpoch).Tota
4690: 6c 53 65 63 6f 6e 64 73 29 3b 0d 0a 0d 0a 23 69  lSeconds);....#i
46a0: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
46b0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
46c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46d0: 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65    int n = Unsafe
46e0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
46f0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
4700: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
4710: 6d 74 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  mt, index, value
4720: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
4730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
4740: 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  nt n = UnsafeNat
4750: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
4760: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e  e3_bind_int64_in
4770: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
4780: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
4790: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e  ref value);..#en
47a0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
47b0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 3e           if (n >
47c0: 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51   0) throw new SQ
47d0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
47e0: 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72   SQLiteLastError
47f0: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
4800: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
4810: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4820: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
4830: 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20   default:..     
4840: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4860: 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55    byte[] b = ToU
4870: 54 46 38 28 64 74 29 3b 0d 0a 20 20 20 20 20 20  TF8(dt);..      
4880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
4890: 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  t n = UnsafeNati
48a0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
48b0: 33 5f 62 69 6e 64 5f 74 65 78 74 28 73 74 6d 74  3_bind_text(stmt
48c0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
48d0: 6e 64 65 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74  ndex, b, b.Lengt
48e0: 68 20 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28  h - 1, (IntPtr)(
48f0: 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  -1));..         
4900: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
4910: 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20   > 0) throw new 
4920: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
4930: 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72  n, SQLiteLastErr
4940: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  or());..        
4950: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
4960: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
4970: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
4980: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
4990: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
49a0: 20 76 6f 69 64 20 42 69 6e 64 5f 42 6c 6f 62 28   void Bind_Blob(
49b0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
49c0: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c  stmt, int index,
49d0: 20 62 79 74 65 5b 5d 20 62 6c 6f 62 44 61 74 61   byte[] blobData
49e0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
49f0: 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  int n = UnsafeNa
4a00: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
4a10: 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 73 74  te3_bind_blob(st
4a20: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
4a30: 20 69 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74 61   index, blobData
4a40: 2c 20 62 6c 6f 62 44 61 74 61 2e 4c 65 6e 67 74  , blobData.Lengt
4a50: 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  h, (IntPtr)(-1))
4a60: 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3e  ;..      if (n >
4a70: 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51   0) throw new SQ
4a80: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
4a90: 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f 72   SQLiteLastError
4aa0: 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ());..    }.... 
4ab0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
4ac0: 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 4e  ride void Bind_N
4ad0: 75 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ull(SQLiteStatem
4ae0: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
4af0: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
4b00: 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66     int n = Unsaf
4b10: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
4b20: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c  qlite3_bind_null
4b30: 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
4b40: 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
4b50: 20 20 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68     if (n > 0) th
4b60: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
4b70: 63 65 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74  ception(n, SQLit
4b80: 65 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  eLastError());..
4b90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
4ba0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
4bb0: 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 43 6f 75  nt Bind_ParamCou
4bc0: 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nt(SQLiteStateme
4bd0: 6e 74 20 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d  nt stmt)..    {.
4be0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
4bf0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
4c00: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  s.sqlite3_bind_p
4c10: 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 73  arameter_count(s
4c20: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
4c30: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
4c40: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
4c50: 64 65 20 73 74 72 69 6e 67 20 42 69 6e 64 5f 50  de string Bind_P
4c60: 61 72 61 6d 4e 61 6d 65 28 53 51 4c 69 74 65 53  aramName(SQLiteS
4c70: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
4c80: 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
4c90: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
4ca0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 69 6e  ANDARD..      in
4cb0: 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 72 65  t len;..      re
4cc0: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
4cd0: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
4ce0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
4cf0: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
4d00: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
4d10: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
4d20: 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65  ex, out len), le
4d30: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
4d40: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
4d50: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
4d60: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
4d70: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
4d80: 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69  _name(stmt._sqli
4d90: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  te_stmt, index),
4da0: 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20   -1);..#endif.. 
4db0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
4dc0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
4dd0: 74 20 42 69 6e 64 5f 50 61 72 61 6d 49 6e 64 65  t Bind_ParamInde
4de0: 78 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  x(SQLiteStatemen
4df0: 74 20 73 74 6d 74 2c 20 73 74 72 69 6e 67 20 70  t stmt, string p
4e00: 61 72 61 6d 4e 61 6d 65 29 0d 0a 20 20 20 20 7b  aramName)..    {
4e10: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
4e20: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
4e30: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
4e40: 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28  parameter_index(
4e50: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
4e60: 74 2c 20 54 6f 55 54 46 38 28 70 61 72 61 6d 4e  t, ToUTF8(paramN
4e70: 61 6d 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ame));..    }...
4e80: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
4e90: 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d  erride int Colum
4ea0: 6e 43 6f 75 6e 74 28 53 51 4c 69 74 65 53 74 61  nCount(SQLiteSta
4eb0: 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20  tement stmt)..  
4ec0: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
4ed0: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
4ee0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
4ef0: 6c 75 6d 6e 5f 63 6f 75 6e 74 28 73 74 6d 74 2e  lumn_count(stmt.
4f00: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a  _sqlite_stmt);..
4f10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
4f20: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
4f30: 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65  tring ColumnName
4f40: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
4f50: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
4f60: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
4f70: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
4f80: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a        int len;..
4f90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
4fa0: 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
4fb0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
4fc0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
4fd0: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  e_interop(stmt._
4fe0: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
4ff0: 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c 65  ex, out len), le
5000: 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
5010: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
5020: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
5030: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
5040: 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73 74  3_column_name(st
5050: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
5060: 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23   index), -1);..#
5070: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
5080: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
5090: 72 72 69 64 65 20 54 79 70 65 41 66 66 69 6e 69  rride TypeAffini
50a0: 74 79 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74  ty ColumnAffinit
50b0: 79 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  y(SQLiteStatemen
50c0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
50d0: 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
50e0: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
50f0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
5100: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28  te3_column_type(
5110: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
5120: 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
5130: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
5140: 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  l override strin
5150: 67 20 43 6f 6c 75 6d 6e 54 79 70 65 28 53 51 4c  g ColumnType(SQL
5160: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
5170: 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 6f 75  t, int index, ou
5180: 74 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 6e  t TypeAffinity n
5190: 41 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20 7b  Affinity)..    {
51a0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b  ..      int len;
51b0: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
51c0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 49 6e  ANDARD..      In
51d0: 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e  tPtr p = UnsafeN
51e0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
51f0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
5200: 74 79 70 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  type_interop(stm
5210: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
5220: 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 3b  index, out len);
5230: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6c  ..#else..      l
5240: 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20  en = -1;..      
5250: 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66  IntPtr p = Unsaf
5260: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
5270: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
5280: 63 6c 74 79 70 65 28 73 74 6d 74 2e 5f 73 71 6c  cltype(stmt._sql
5290: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
52a0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
52b0: 20 6e 41 66 66 69 6e 69 74 79 20 3d 20 43 6f 6c   nAffinity = Col
52c0: 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 74 6d 74  umnAffinity(stmt
52d0: 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20  , index);....   
52e0: 20 20 20 69 66 20 28 70 20 21 3d 20 49 6e 74 50     if (p != IntP
52f0: 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e 20  tr.Zero) return 
5300: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20  UTF8ToString(p, 
5310: 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 65 6c 73  len);..      els
5320: 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  e..      {..    
5330: 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 20      string[] ar 
5340: 3d 20 73 74 6d 74 2e 54 79 70 65 44 65 66 69 6e  = stmt.TypeDefin
5350: 69 74 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20  itions;..       
5360: 20 69 66 20 28 61 72 20 21 3d 20 6e 75 6c 6c 29   if (ar != null)
5370: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
5380: 20 20 20 20 20 20 20 69 66 20 28 69 6e 64 65 78         if (index
5390: 20 3c 20 61 72 2e 4c 65 6e 67 74 68 20 26 26 20   < ar.Length && 
53a0: 61 72 5b 69 6e 64 65 78 5d 20 21 3d 20 6e 75 6c  ar[index] != nul
53b0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
53c0: 72 65 74 75 72 6e 20 61 72 5b 69 6e 64 65 78 5d  return ar[index]
53d0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
53e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
53f0: 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20  ing.Empty;....  
5400: 20 20 20 20 20 20 2f 2f 73 77 69 74 63 68 20 28        //switch (
5410: 6e 41 66 66 69 6e 69 74 79 29 0d 0a 20 20 20 20  nAffinity)..    
5420: 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20      //{..       
5430: 20 2f 2f 20 20 63 61 73 65 20 54 79 70 65 41 66   //  case TypeAf
5440: 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20  finity.Int64:.. 
5450: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74         //    ret
5460: 75 72 6e 20 22 42 49 47 49 4e 54 22 3b 0d 0a 20  urn "BIGINT";.. 
5470: 20 20 20 20 20 20 20 2f 2f 20 20 63 61 73 65 20         //  case 
5480: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75  TypeAffinity.Dou
5490: 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble:..        //
54a0: 20 20 20 20 72 65 74 75 72 6e 20 22 44 4f 55 42      return "DOUB
54b0: 4c 45 22 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  LE";..        //
54c0: 20 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e    case TypeAffin
54d0: 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20  ity.Blob:..     
54e0: 20 20 20 2f 2f 20 20 20 20 72 65 74 75 72 6e 20     //    return 
54f0: 22 42 4c 4f 42 22 3b 0d 0a 20 20 20 20 20 20 20  "BLOB";..       
5500: 20 2f 2f 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20   //  default:.. 
5510: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 72 65 74         //    ret
5520: 75 72 6e 20 22 54 45 58 54 22 3b 0d 0a 20 20 20  urn "TEXT";..   
5530: 20 20 20 20 20 2f 2f 7d 0d 0a 20 20 20 20 20 20       //}..      
5540: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
5550: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
5560: 65 20 69 6e 74 20 43 6f 6c 75 6d 6e 49 6e 64 65  e int ColumnInde
5570: 78 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  x(SQLiteStatemen
5580: 74 20 73 74 6d 74 2c 20 73 74 72 69 6e 67 20 63  t stmt, string c
5590: 6f 6c 75 6d 6e 4e 61 6d 65 29 0d 0a 20 20 20 20  olumnName)..    
55a0: 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 78 20 3d  {..      int x =
55b0: 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d   ColumnCount(stm
55c0: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72  t);....      for
55d0: 20 28 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c   (int n = 0; n <
55e0: 20 78 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20   x; n++)..      
55f0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 53  {..        if (S
5600: 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 63 6f  tring.Compare(co
5610: 6c 75 6d 6e 4e 61 6d 65 2c 20 43 6f 6c 75 6d 6e  lumnName, Column
5620: 4e 61 6d 65 28 73 74 6d 74 2c 20 6e 29 2c 20 53  Name(stmt, n), S
5630: 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
5640: 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
5650: 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20  e) == 0)..      
5660: 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20      return n;.. 
5670: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 72 65       }..      re
5680: 74 75 72 6e 20 2d 31 3b 0d 0a 20 20 20 20 7d 0d  turn -1;..    }.
5690: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
56a0: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
56b0: 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61  ColumnOriginalNa
56c0: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
56d0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
56e0: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
56f0: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
5700: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b  ..      int len;
5710: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
5720: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
5730: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
5740: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
5750: 72 69 67 69 6e 5f 6e 61 6d 65 5f 69 6e 74 65 72  rigin_name_inter
5760: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
5770: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74  stmt, index, out
5780: 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
5790: 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
57a0: 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
57b0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
57c0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
57d0: 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 28 73 74  n_origin_name(st
57e0: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
57f0: 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a 23   index), -1);..#
5800: 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
5810: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
5820: 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c  rride string Col
5830: 75 6d 6e 44 61 74 61 62 61 73 65 4e 61 6d 65 28  umnDatabaseName(
5840: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
5850: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
5860: 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
5870: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
5880: 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20       int len;.. 
5890: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
58a0: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
58b0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
58c0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61  ite3_column_data
58d0: 62 61 73 65 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f  base_name_intero
58e0: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
58f0: 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20  tmt, index, out 
5900: 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c  len), len);..#el
5910: 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se..      return
5920: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
5930: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
5940: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
5950: 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 28 73  _database_name(s
5960: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
5970: 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a  , index), -1);..
5980: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
5990: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
59a0: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f  erride string Co
59b0: 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d 65 28 53 51  lumnTableName(SQ
59c0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
59d0: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
59e0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
59f0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
5a00: 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20     int len;..   
5a10: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
5a20: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
5a30: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
5a40: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f  e3_column_table_
5a50: 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  name_interop(stm
5a60: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
5a70: 69 6e 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c  index, out len),
5a80: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
5a90: 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
5aa0: 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
5ab0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
5ac0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c  ite3_column_tabl
5ad0: 65 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c  e_name(stmt._sql
5ae0: 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
5af0: 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
5b00: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
5b10: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
5b20: 6f 69 64 20 43 6f 6c 75 6d 6e 4d 65 74 61 44 61  oid ColumnMetaDa
5b30: 74 61 28 73 74 72 69 6e 67 20 64 61 74 61 42 61  ta(string dataBa
5b40: 73 65 2c 20 73 74 72 69 6e 67 20 74 61 62 6c 65  se, string table
5b50: 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c  , string column,
5b60: 20 6f 75 74 20 73 74 72 69 6e 67 20 64 61 74 61   out string data
5b70: 54 79 70 65 2c 20 6f 75 74 20 73 74 72 69 6e 67  Type, out string
5b80: 20 63 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63 65   collateSequence
5b90: 2c 20 6f 75 74 20 62 6f 6f 6c 20 6e 6f 74 4e 75  , out bool notNu
5ba0: 6c 6c 2c 20 6f 75 74 20 62 6f 6f 6c 20 70 72 69  ll, out bool pri
5bb0: 6d 61 72 79 4b 65 79 2c 20 6f 75 74 20 62 6f 6f  maryKey, out boo
5bc0: 6c 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74 29  l autoIncrement)
5bd0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49  ..    {..      I
5be0: 6e 74 50 74 72 20 64 61 74 61 54 79 70 65 50 74  ntPtr dataTypePt
5bf0: 72 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  r;..      IntPtr
5c00: 20 63 6f 6c 6c 53 65 71 50 74 72 3b 0d 0a 20 20   collSeqPtr;..  
5c10: 20 20 20 20 69 6e 74 20 6e 6e 6f 74 4e 75 6c 6c      int nnotNull
5c20: 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 70 72  ;..      int npr
5c30: 69 6d 61 72 79 4b 65 79 3b 0d 0a 20 20 20 20 20  imaryKey;..     
5c40: 20 69 6e 74 20 6e 61 75 74 6f 49 6e 63 3b 0d 0a   int nautoInc;..
5c50: 20 20 20 20 20 20 69 6e 74 20 6e 3b 0d 0a 20 20        int n;..  
5c60: 20 20 20 20 69 6e 74 20 64 74 4c 65 6e 3b 0d 0a      int dtLen;..
5c70: 20 20 20 20 20 20 69 6e 74 20 63 73 4c 65 6e 3b        int csLen;
5c80: 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f  ....#if !SQLITE_
5c90: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
5ca0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
5cb0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
5cc0: 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74  table_column_met
5cd0: 61 64 61 74 61 5f 69 6e 74 65 72 6f 70 28 5f 73  adata_interop(_s
5ce0: 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61 42  ql, ToUTF8(dataB
5cf0: 61 73 65 29 2c 20 54 6f 55 54 46 38 28 74 61 62  ase), ToUTF8(tab
5d00: 6c 65 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75  le), ToUTF8(colu
5d10: 6d 6e 29 2c 20 6f 75 74 20 64 61 74 61 54 79 70  mn), out dataTyp
5d20: 65 50 74 72 2c 20 6f 75 74 20 63 6f 6c 6c 53 65  ePtr, out collSe
5d30: 71 50 74 72 2c 20 6f 75 74 20 6e 6e 6f 74 4e 75  qPtr, out nnotNu
5d40: 6c 6c 2c 20 6f 75 74 20 6e 70 72 69 6d 61 72 79  ll, out nprimary
5d50: 4b 65 79 2c 20 6f 75 74 20 6e 61 75 74 6f 49 6e  Key, out nautoIn
5d60: 63 2c 20 6f 75 74 20 64 74 4c 65 6e 2c 20 6f 75  c, out dtLen, ou
5d70: 74 20 63 73 4c 65 6e 29 3b 0d 0a 23 65 6c 73 65  t csLen);..#else
5d80: 0d 0a 20 20 20 20 20 20 64 74 4c 65 6e 20 3d 20  ..      dtLen = 
5d90: 2d 31 3b 0d 0a 20 20 20 20 20 20 63 73 4c 65 6e  -1;..      csLen
5da0: 20 3d 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20   = -1;....      
5db0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
5dc0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
5dd0: 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74  table_column_met
5de0: 61 64 61 74 61 28 5f 73 71 6c 2c 20 54 6f 55 54  adata(_sql, ToUT
5df0: 46 38 28 64 61 74 61 42 61 73 65 29 2c 20 54 6f  F8(dataBase), To
5e00: 55 54 46 38 28 74 61 62 6c 65 29 2c 20 54 6f 55  UTF8(table), ToU
5e10: 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74  TF8(column), out
5e20: 20 64 61 74 61 54 79 70 65 50 74 72 2c 20 6f 75   dataTypePtr, ou
5e30: 74 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20 6f 75  t collSeqPtr, ou
5e40: 74 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 6f 75 74 20  t nnotNull, out 
5e50: 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74  nprimaryKey, out
5e60: 20 6e 61 75 74 6f 49 6e 63 29 3b 0d 0a 23 65 6e   nautoInc);..#en
5e70: 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  dif..      if (n
5e80: 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20   > 0) throw new 
5e90: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
5ea0: 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72  n, SQLiteLastErr
5eb0: 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  or());....      
5ec0: 64 61 74 61 54 79 70 65 20 3d 20 55 54 46 38 54  dataType = UTF8T
5ed0: 6f 53 74 72 69 6e 67 28 64 61 74 61 54 79 70 65  oString(dataType
5ee0: 50 74 72 2c 20 64 74 4c 65 6e 29 3b 0d 0a 20 20  Ptr, dtLen);..  
5ef0: 20 20 20 20 63 6f 6c 6c 61 74 65 53 65 71 75 65      collateSeque
5f00: 6e 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  nce = UTF8ToStri
5f10: 6e 67 28 63 6f 6c 6c 53 65 71 50 74 72 2c 20 63  ng(collSeqPtr, c
5f20: 73 4c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sLen);....      
5f30: 6e 6f 74 4e 75 6c 6c 20 3d 20 28 6e 6e 6f 74 4e  notNull = (nnotN
5f40: 75 6c 6c 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20  ull == 1);..    
5f50: 20 20 70 72 69 6d 61 72 79 4b 65 79 20 3d 20 28    primaryKey = (
5f60: 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d 3d 20 31  nprimaryKey == 1
5f70: 29 3b 0d 0a 20 20 20 20 20 20 61 75 74 6f 49 6e  );..      autoIn
5f80: 63 72 65 6d 65 6e 74 20 3d 20 28 6e 61 75 74 6f  crement = (nauto
5f90: 49 6e 63 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20  Inc == 1);..    
5fa0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
5fb0: 6c 20 6f 76 65 72 72 69 64 65 20 64 6f 75 62 6c  l override doubl
5fc0: 65 20 47 65 74 44 6f 75 62 6c 65 28 53 51 4c 69  e GetDouble(SQLi
5fd0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
5fe0: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
5ff0: 20 20 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c    {..      doubl
6000: 65 20 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50  e value;..#if !P
6010: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
6020: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
6030: 76 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  value = UnsafeNa
6040: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
6050: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  te3_column_doubl
6060: 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  e(stmt._sqlite_s
6070: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 23 65  tmt, index);..#e
6080: 6c 73 65 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  lse..      Unsaf
6090: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
60a0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
60b0: 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d  uble_interop(stm
60c0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
60d0: 69 6e 64 65 78 2c 20 6f 75 74 20 76 61 6c 75 65  index, out value
60e0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
60f0: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
6100: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
6110: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
6120: 69 6e 74 20 47 65 74 49 6e 74 33 32 28 53 51 4c  int GetInt32(SQL
6130: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
6140: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
6150: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
6160: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
6170: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
6180: 6f 6c 75 6d 6e 5f 69 6e 74 28 73 74 6d 74 2e 5f  olumn_int(stmt._
6190: 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
61a0: 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ex);..    }.... 
61b0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
61c0: 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 49 6e 74  ride long GetInt
61d0: 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  64(SQLiteStateme
61e0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
61f0: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
6200: 20 20 6c 6f 6e 67 20 76 61 6c 75 65 3b 0d 0a 23    long value;..#
6210: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
6220: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
6230: 20 20 20 20 20 76 61 6c 75 65 20 3d 20 55 6e 73       value = Uns
6240: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
6250: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
6260: 69 6e 74 36 34 28 73 74 6d 74 2e 5f 73 71 6c 69  int64(stmt._sqli
6270: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te_stmt, index);
6280: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 55  ..#else..      U
6290: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
62a0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
62b0: 6e 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  n_int64_interop(
62c0: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
62d0: 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74 20 76 61  t, index, out va
62e0: 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  lue);..#endif.. 
62f0: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
6300: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
6310: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
6320: 64 65 20 73 74 72 69 6e 67 20 47 65 74 54 65 78  de string GetTex
6330: 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  t(SQLiteStatemen
6340: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
6350: 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  x)..    {..#if !
6360: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
6370: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d  .      int len;.
6380: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
6390: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
63a0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
63b0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
63c0: 78 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e  xt_interop(stmt.
63d0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
63e0: 64 65 78 2c 20 6f 75 74 20 6c 65 6e 29 2c 20 6c  dex, out len), l
63f0: 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
6400: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
6410: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
6420: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
6430: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73  e3_column_text(s
6440: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
6450: 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a  , index), -1);..
6460: 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
6470: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
6480: 65 72 72 69 64 65 20 44 61 74 65 54 69 6d 65 20  erride DateTime 
6490: 47 65 74 44 61 74 65 54 69 6d 65 28 53 51 4c 69  GetDateTime(SQLi
64a0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
64b0: 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
64c0: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
64d0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
64e0: 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20 20 20   int len;..     
64f0: 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54 69   return ToDateTi
6500: 6d 65 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  me(UnsafeNativeM
6510: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
6520: 6f 6c 75 6d 6e 5f 74 65 78 74 5f 69 6e 74 65 72  olumn_text_inter
6530: 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  op(stmt._sqlite_
6540: 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 6f 75 74  stmt, index, out
6550: 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65   len), len);..#e
6560: 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75 72  lse..      retur
6570: 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 55 6e 73  n ToDateTime(Uns
6580: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
6590: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
65a0: 74 65 78 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74  text(stmt._sqlit
65b0: 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  e_stmt, index), 
65c0: 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  -1);..#endif..  
65d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
65e0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e  nal override lon
65f0: 67 20 47 65 74 42 79 74 65 73 28 53 51 4c 69 74  g GetBytes(SQLit
6600: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
6610: 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e 74 20   int index, int 
6620: 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74  nDataOffset, byt
6630: 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e  e[] bDest, int n
6640: 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67  Start, int nLeng
6650: 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  th)..    {..    
6660: 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73    int nlen = Uns
6670: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
6680: 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
6690: 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71 6c 69  bytes(stmt._sqli
66a0: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te_stmt, index);
66b0: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49 66 20  ....      // If 
66c0: 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 62  no destination b
66d0: 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20 74 68  uffer, return th
66e0: 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e 0d 0a  e size needed...
66f0: 20 20 20 20 20 20 69 66 20 28 62 44 65 73 74 20        if (bDest 
6700: 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20  == null) return 
6710: 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  nlen;....      i
6720: 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65  nt nCopied = nLe
6730: 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ngth;....      i
6740: 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74  f (nCopied + nSt
6750: 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67  art > bDest.Leng
6760: 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44  th) nCopied = bD
6770: 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74  est.Length - nSt
6780: 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  art;..      if (
6790: 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f  nCopied + nDataO
67a0: 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43  ffset > nlen) nC
67b0: 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e  opied = nlen - n
67c0: 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20  DataOffset;.... 
67d0: 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
67e0: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b 0d 0a   > 0)..      {..
67f0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
6800: 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  tr = UnsafeNativ
6810: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
6820: 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 73 74 6d  _column_blob(stm
6830: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
6840: 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20  index);....     
6850: 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28     Marshal.Copy(
6860: 28 49 6e 74 50 74 72 29 28 70 74 72 2e 54 6f 49  (IntPtr)(ptr.ToI
6870: 6e 74 36 34 28 29 20 2b 20 6e 44 61 74 61 4f 66  nt64() + nDataOf
6880: 66 73 65 74 29 2c 20 62 44 65 73 74 2c 20 6e 53  fset), bDest, nS
6890: 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d  tart, nCopied);.
68a0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
68b0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  else..      {.. 
68c0: 20 20 20 20 20 20 20 6e 43 6f 70 69 65 64 20 3d         nCopied =
68d0: 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a   0;..      }....
68e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f        return nCo
68f0: 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  pied;..    }....
6900: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
6910: 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 43 68  rride long GetCh
6920: 61 72 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ars(SQLiteStatem
6930: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
6940: 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66  dex, int nDataOf
6950: 66 73 65 74 2c 20 63 68 61 72 5b 5d 20 62 44 65  fset, char[] bDe
6960: 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20  st, int nStart, 
6970: 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20  int nLength)..  
6980: 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e    {..      int n
6990: 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  len;..      int 
69a0: 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74  nCopied = nLengt
69b0: 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 74 72 69  h;....      stri
69c0: 6e 67 20 73 74 72 20 3d 20 47 65 74 54 65 78 74  ng str = GetText
69d0: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
69e0: 20 20 20 20 20 20 6e 6c 65 6e 20 3d 20 73 74 72        nlen = str
69f0: 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20  .Length;....    
6a00: 20 20 69 66 20 28 62 44 65 73 74 20 3d 3d 20 6e    if (bDest == n
6a10: 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e  ull) return nlen
6a20: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  ;....      if (n
6a30: 43 6f 70 69 65 64 20 2b 20 6e 53 74 61 72 74 20  Copied + nStart 
6a40: 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 29 20  > bDest.Length) 
6a50: 6e 43 6f 70 69 65 64 20 3d 20 62 44 65 73 74 2e  nCopied = bDest.
6a60: 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61 72 74 3b  Length - nStart;
6a70: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
6a80: 69 65 64 20 2b 20 6e 44 61 74 61 4f 66 66 73 65  ied + nDataOffse
6a90: 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65  t > nlen) nCopie
6aa0: 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61  d = nlen - nData
6ab0: 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20  Offset;....     
6ac0: 20 69 66 20 28 6e 43 6f 70 69 65 64 20 3e 20 30   if (nCopied > 0
6ad0: 29 0d 0a 20 20 20 20 20 20 20 20 73 74 72 2e 43  )..        str.C
6ae0: 6f 70 79 54 6f 28 6e 44 61 74 61 4f 66 66 73 65  opyTo(nDataOffse
6af0: 74 2c 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74  t, bDest, nStart
6b00: 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20  , nCopied);..   
6b10: 20 20 20 65 6c 73 65 20 6e 43 6f 70 69 65 64 20     else nCopied 
6b20: 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65  = 0;....      re
6b30: 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20  turn nCopied;.. 
6b40: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
6b50: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f  rnal override bo
6b60: 6f 6c 20 49 73 4e 75 6c 6c 28 53 51 4c 69 74 65  ol IsNull(SQLite
6b70: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
6b80: 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20  int index)..    
6b90: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
6ba0: 28 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  (ColumnAffinity(
6bb0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 3d 3d 20  stmt, index) == 
6bc0: 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c  TypeAffinity.Nul
6bd0: 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  l);..    }....  
6be0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
6bf0: 69 64 65 20 69 6e 74 20 41 67 67 72 65 67 61 74  ide int Aggregat
6c00: 65 43 6f 75 6e 74 28 49 6e 74 50 74 72 20 63 6f  eCount(IntPtr co
6c10: 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20  ntext)..    {.. 
6c20: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
6c30: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
6c40: 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74  sqlite3_aggregat
6c50: 65 5f 63 6f 75 6e 74 28 63 6f 6e 74 65 78 74 29  e_count(context)
6c60: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
6c70: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
6c80: 65 20 76 6f 69 64 20 43 72 65 61 74 65 46 75 6e  e void CreateFun
6c90: 63 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74 72  ction(string str
6ca0: 46 75 6e 63 74 69 6f 6e 2c 20 69 6e 74 20 6e 41  Function, int nA
6cb0: 72 67 73 2c 20 62 6f 6f 6c 20 6e 65 65 64 43 6f  rgs, bool needCo
6cc0: 6c 6c 53 65 71 2c 20 53 51 4c 69 74 65 43 61 6c  llSeq, SQLiteCal
6cd0: 6c 62 61 63 6b 20 66 75 6e 63 2c 20 53 51 4c 69  lback func, SQLi
6ce0: 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 73  teCallback funcs
6cf0: 74 65 70 2c 20 53 51 4c 69 74 65 46 69 6e 61 6c  tep, SQLiteFinal
6d00: 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 66 69 6e  Callback funcfin
6d10: 61 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  al)..    {..    
6d20: 20 20 69 6e 74 20 6e 3b 0d 0a 0d 0a 23 69 66 20    int n;....#if 
6d30: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
6d40: 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61  ..      n = Unsa
6d50: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
6d60: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
6d70: 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f 70 28  unction_interop(
6d80: 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72  _sql, ToUTF8(str
6d90: 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73  Function), nArgs
6da0: 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  , 4, IntPtr.Zero
6db0: 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70  , func, funcstep
6dc0: 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28 6e 65  , funcfinal, (ne
6dd0: 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74 72 75  edCollSeq == tru
6de0: 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a 20 20  e) ? 1 : 0);..  
6df0: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 30 29 20      if (n == 0) 
6e00: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
6e10: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
6e20: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
6e30: 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f  interop(_sql, To
6e40: 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e  UTF8(strFunction
6e50: 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e 74  ), nArgs, 1, Int
6e60: 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20  Ptr.Zero, func, 
6e70: 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69  funcstep, funcfi
6e80: 6e 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53 65  nal, (needCollSe
6e90: 71 20 3d 3d 20 74 72 75 65 29 20 3f 20 31 20 3a  q == true) ? 1 :
6ea0: 20 30 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20   0);..#else..   
6eb0: 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74     n = UnsafeNat
6ec0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
6ed0: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
6ee0: 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  on(_sql, ToUTF8(
6ef0: 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41  strFunction), nA
6f00: 72 67 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a  rgs, 4, IntPtr.Z
6f10: 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73  ero, func, funcs
6f20: 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29 3b  tep, funcfinal);
6f30: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d  ..      if (n ==
6f40: 20 30 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61   0) n = UnsafeNa
6f50: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
6f60: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
6f70: 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  ion(_sql, ToUTF8
6f80: 28 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e  (strFunction), n
6f90: 41 72 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e  Args, 1, IntPtr.
6fa0: 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63  Zero, func, func
6fb0: 73 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 29  step, funcfinal)
6fc0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
6fd0: 20 69 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f   if (n > 0) thro
6fe0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
6ff0: 70 74 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c  ption(n, SQLiteL
7000: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
7010: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
7020: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
7030: 64 20 43 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f  d CreateCollatio
7040: 6e 28 73 74 72 69 6e 67 20 73 74 72 43 6f 6c 6c  n(string strColl
7050: 61 74 69 6f 6e 2c 20 53 51 4c 69 74 65 43 6f 6c  ation, SQLiteCol
7060: 6c 61 74 69 6f 6e 20 66 75 6e 63 2c 20 53 51 4c  lation func, SQL
7070: 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e  iteCollation fun
7080: 63 31 36 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  c16)..    {..   
7090: 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61 66     int n = Unsaf
70a0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
70b0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
70c0: 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f  llation(_sql, To
70d0: 55 54 46 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f  UTF8(strCollatio
70e0: 6e 29 2c 20 32 2c 20 49 6e 74 50 74 72 2e 5a 65  n), 2, IntPtr.Ze
70f0: 72 6f 2c 20 66 75 6e 63 31 36 29 3b 0d 0a 20 20  ro, func16);..  
7100: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 30 29 20      if (n == 0) 
7110: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
7120: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
7130: 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
7140: 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74  (_sql, ToUTF8(st
7150: 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 31 2c 20  rCollation), 1, 
7160: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e  IntPtr.Zero, fun
7170: 63 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  c);..      if (n
7180: 20 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20   > 0) throw new 
7190: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
71a0: 6e 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72  n, SQLiteLastErr
71b0: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
71c0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
71d0: 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6e 74 65  erride int Conte
71e0: 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65  xtCollateCompare
71f0: 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69  (CollationEncodi
7200: 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50  ngEnum enc, IntP
7210: 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69  tr context, stri
7220: 6e 67 20 73 31 2c 20 73 74 72 69 6e 67 20 73 32  ng s1, string s2
7230: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
7240: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
7250: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 31 3b        byte[] b1;
7260: 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62  ..      byte[] b
7270: 32 3b 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d  2;..      System
7280: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20 63  .Text.Encoding c
7290: 6f 6e 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c 3b  onverter = null;
72a0: 0d 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68  ....      switch
72b0: 20 28 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b 0d   (enc)..      {.
72c0: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f  .        case Co
72d0: 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
72e0: 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20 20  num.UTF8:..     
72f0: 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d       converter =
7300: 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63   System.Text.Enc
7310: 6f 64 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20  oding.UTF8;..   
7320: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
7330: 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c         case Coll
7340: 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
7350: 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20 20  m.UTF16LE:..    
7360: 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20        converter 
7370: 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e  = System.Text.En
7380: 63 6f 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d  coding.Unicode;.
7390: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
73a0: 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
73b0: 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
73c0: 67 45 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d 0a  gEnum.UTF16BE:..
73d0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72            conver
73e0: 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78  ter = System.Tex
73f0: 74 2e 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45 6e  t.Encoding.BigEn
7400: 64 69 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20  dianUnicode;..  
7410: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a          break;..
7420: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
7430: 20 62 31 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e   b1 = converter.
7440: 47 65 74 42 79 74 65 73 28 73 31 29 3b 0d 0a 20  GetBytes(s1);.. 
7450: 20 20 20 20 20 62 32 20 3d 20 63 6f 6e 76 65 72       b2 = conver
7460: 74 65 72 2e 47 65 74 42 79 74 65 73 28 73 32 29  ter.GetBytes(s2)
7470: 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
7480: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
7490: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
74a0: 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72  ntext_collcompar
74b0: 65 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20 62  e(context, b1, b
74c0: 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62 32  1.Length, b2, b2
74d0: 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65  .Length);..#else
74e0: 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65  ..      throw ne
74f0: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
7500: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
7510: 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
7520: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
7530: 72 69 64 65 20 69 6e 74 20 43 6f 6e 74 65 78 74  ride int Context
7540: 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 43  CollateCompare(C
7550: 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
7560: 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72  Enum enc, IntPtr
7570: 20 63 6f 6e 74 65 78 74 2c 20 63 68 61 72 5b 5d   context, char[]
7580: 20 63 31 2c 20 63 68 61 72 5b 5d 20 63 32 29 0d   c1, char[] c2).
7590: 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
75a0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
75b0: 20 20 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d 0a      byte[] b1;..
75c0: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 32 3b        byte[] b2;
75d0: 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54  ..      System.T
75e0: 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f 6e  ext.Encoding con
75f0: 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a  verter = null;..
7600: 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28  ..      switch (
7610: 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  enc)..      {.. 
7620: 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c         case Coll
7630: 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
7640: 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20 20 20 20  m.UTF8:..       
7650: 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53     converter = S
7660: 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
7670: 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20  ing.UTF8;..     
7680: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
7690: 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
76a0: 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
76b0: 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20 20  UTF16LE:..      
76c0: 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20      converter = 
76d0: 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
76e0: 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20  ding.Unicode;.. 
76f0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
7700: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f  .        case Co
7710: 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
7720: 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20 20  num.UTF16BE:..  
7730: 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65          converte
7740: 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e  r = System.Text.
7750: 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64 69  Encoding.BigEndi
7760: 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20  anUnicode;..    
7770: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
7780: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62      }....      b
7790: 31 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65  1 = converter.Ge
77a0: 74 42 79 74 65 73 28 63 31 29 3b 0d 0a 20 20 20  tBytes(c1);..   
77b0: 20 20 20 62 32 20 3d 20 63 6f 6e 76 65 72 74 65     b2 = converte
77c0: 72 2e 47 65 74 42 79 74 65 73 28 63 32 29 3b 0d  r.GetBytes(c2);.
77d0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
77e0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
77f0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ods.sqlite3_cont
7800: 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65 28  ext_collcompare(
7810: 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20 62 31 2e  context, b1, b1.
7820: 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c  Length, b2, b2.L
7830: 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a  ength);..#else..
7840: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
7850: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
7860: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
7870: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
7880: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
7890: 64 65 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75  de CollationSequ
78a0: 65 6e 63 65 20 47 65 74 43 6f 6c 6c 61 74 69 6f  ence GetCollatio
78b0: 6e 53 65 71 75 65 6e 63 65 28 53 51 4c 69 74 65  nSequence(SQLite
78c0: 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 2c 20 49  Function func, I
78d0: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a  ntPtr context)..
78e0: 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
78f0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
7900: 20 20 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75     CollationSequ
7910: 65 6e 63 65 20 73 65 71 20 3d 20 6e 65 77 20 43  ence seq = new C
7920: 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
7930: 28 29 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c  ();..      int l
7940: 65 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 74  en;..      int t
7950: 79 70 65 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  ype;..      int 
7960: 65 6e 63 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50  enc;..      IntP
7970: 74 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74  tr p = UnsafeNat
7980: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
7990: 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 73  e3_context_colls
79a0: 65 71 28 63 6f 6e 74 65 78 74 2c 20 6f 75 74 20  eq(context, out 
79b0: 74 79 70 65 2c 20 6f 75 74 20 65 6e 63 2c 20 6f  type, out enc, o
79c0: 75 74 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20  ut len);....    
79d0: 20 20 69 66 20 28 70 20 21 3d 20 6e 75 6c 6c 29    if (p != null)
79e0: 20 73 65 71 2e 4e 61 6d 65 20 3d 20 55 54 46 38   seq.Name = UTF8
79f0: 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29  ToString(p, len)
7a00: 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 54 79 70  ;..      seq.Typ
7a10: 65 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e 54 79  e = (CollationTy
7a20: 70 65 45 6e 75 6d 29 74 79 70 65 3b 0d 0a 20 20  peEnum)type;..  
7a30: 20 20 20 20 73 65 71 2e 5f 66 75 6e 63 20 3d 20      seq._func = 
7a40: 66 75 6e 63 3b 0d 0a 20 20 20 20 20 20 73 65 71  func;..      seq
7a50: 2e 45 6e 63 6f 64 69 6e 67 20 3d 20 28 43 6f 6c  .Encoding = (Col
7a60: 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
7a70: 75 6d 29 65 6e 63 3b 0d 0a 0d 0a 20 20 20 20 20  um)enc;....     
7a80: 20 72 65 74 75 72 6e 20 73 65 71 3b 0d 0a 23 65   return seq;..#e
7a90: 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77  lse..      throw
7aa0: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
7ab0: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
7ac0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
7ad0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
7ae0: 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74  verride long Get
7af0: 50 61 72 61 6d 56 61 6c 75 65 42 79 74 65 73 28  ParamValueBytes(
7b00: 49 6e 74 50 74 72 20 70 2c 20 69 6e 74 20 6e 44  IntPtr p, int nD
7b10: 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74 65 5b  ataOffset, byte[
7b20: 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74  ] bDest, int nSt
7b30: 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68  art, int nLength
7b40: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
7b50: 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73 61 66  int nlen = Unsaf
7b60: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7b70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74  qlite3_value_byt
7b80: 65 73 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  es(p);....      
7b90: 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74 69 6e 61  // If no destina
7ba0: 74 69 6f 6e 20 62 75 66 66 65 72 2c 20 72 65 74  tion buffer, ret
7bb0: 75 72 6e 20 74 68 65 20 73 69 7a 65 20 6e 65 65  urn the size nee
7bc0: 64 65 64 2e 0d 0a 20 20 20 20 20 20 69 66 20 28  ded...      if (
7bd0: 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72  bDest == null) r
7be0: 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20  eturn nlen;.... 
7bf0: 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69 65 64       int nCopied
7c00: 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20   = nLength;.... 
7c10: 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
7c20: 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44 65 73   + nStart > bDes
7c30: 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70 69 65  t.Length) nCopie
7c40: 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67 74 68  d = bDest.Length
7c50: 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20   - nStart;..    
7c60: 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20    if (nCopied + 
7c70: 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c  nDataOffset > nl
7c80: 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c  en) nCopied = nl
7c90: 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73 65 74  en - nDataOffset
7ca0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  ;....      if (n
7cb0: 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20 20 20  Copied > 0)..   
7cc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e     {..        In
7cd0: 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61 66  tPtr ptr = Unsaf
7ce0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7cf0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f  qlite3_value_blo
7d00: 62 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  b(p);....       
7d10: 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 28 49   Marshal.Copy((I
7d20: 6e 74 50 74 72 29 28 70 74 72 2e 54 6f 49 6e 74  ntPtr)(ptr.ToInt
7d30: 36 34 28 29 20 2b 20 6e 44 61 74 61 4f 66 66 73  64() + nDataOffs
7d40: 65 74 29 2c 20 62 44 65 73 74 2c 20 6e 53 74 61  et), bDest, nSta
7d50: 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a 20  rt, nCopied);.. 
7d60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c       }..      el
7d70: 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  se..      {..   
7d80: 20 20 20 20 20 6e 43 6f 70 69 65 64 20 3d 20 30       nCopied = 0
7d90: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....  
7da0: 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f 70 69      return nCopi
7db0: 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ed;..    }....  
7dc0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
7dd0: 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74 50 61  ide double GetPa
7de0: 72 61 6d 56 61 6c 75 65 44 6f 75 62 6c 65 28 49  ramValueDouble(I
7df0: 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20  ntPtr ptr)..    
7e00: 7b 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c 65 20  {..      double 
7e10: 76 61 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41  value;..#if !PLA
7e20: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
7e30: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61  MEWORK..      va
7e40: 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  lue = UnsafeNati
7e50: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
7e60: 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28 70  3_value_double(p
7e70: 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  tr);..#else..   
7e80: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
7e90: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
7ea0: 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69 6e 74 65  alue_double_inte
7eb0: 72 6f 70 28 70 74 72 2c 20 6f 75 74 20 76 61 6c  rop(ptr, out val
7ec0: 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ue);..#endif..  
7ed0: 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65      return value
7ee0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
7ef0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
7f00: 65 20 69 6e 74 20 47 65 74 50 61 72 61 6d 56 61  e int GetParamVa
7f10: 6c 75 65 49 6e 74 33 32 28 49 6e 74 50 74 72 20  lueInt32(IntPtr 
7f20: 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ptr)..    {..   
7f30: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
7f40: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
7f50: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28  lite3_value_int(
7f60: 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ptr);..    }....
7f70: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
7f80: 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 50 61  rride long GetPa
7f90: 72 61 6d 56 61 6c 75 65 49 6e 74 36 34 28 49 6e  ramValueInt64(In
7fa0: 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b  tPtr ptr)..    {
7fb0: 0d 0a 20 20 20 20 20 20 49 6e 74 36 34 20 76 61  ..      Int64 va
7fc0: 6c 75 65 3b 0d 0a 23 69 66 20 21 50 4c 41 54 46  lue;..#if !PLATF
7fd0: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
7fe0: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 76 61 6c 75  WORK..      valu
7ff0: 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  e = UnsafeNative
8000: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
8010: 76 61 6c 75 65 5f 69 6e 74 36 34 28 70 74 72 29  value_int64(ptr)
8020: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
8030: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8040: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75  ods.sqlite3_valu
8050: 65 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  e_int64_interop(
8060: 70 74 72 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b  ptr, out value);
8070: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
8080: 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20  return value;.. 
8090: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
80a0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
80b0: 72 69 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c  ring GetParamVal
80c0: 75 65 54 65 78 74 28 49 6e 74 50 74 72 20 70 74  ueText(IntPtr pt
80d0: 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  r)..    {..#if !
80e0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
80f0: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d  .      int len;.
8100: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
8110: 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
8120: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
8130: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
8140: 74 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 6f  t_interop(ptr, o
8150: 75 74 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ut len), len);..
8160: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
8170: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
8180: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
8190: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
81a0: 75 65 5f 74 65 78 74 28 70 74 72 29 2c 20 2d 31  ue_text(ptr), -1
81b0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
81c0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
81d0: 6c 20 6f 76 65 72 72 69 64 65 20 54 79 70 65 41  l override TypeA
81e0: 66 66 69 6e 69 74 79 20 47 65 74 50 61 72 61 6d  ffinity GetParam
81f0: 56 61 6c 75 65 54 79 70 65 28 49 6e 74 50 74 72  ValueType(IntPtr
8200: 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 20 20   ptr)..    {..  
8210: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
8220: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
8230: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
8240: 65 28 70 74 72 29 3b 0d 0a 20 20 20 20 7d 0d 0a  e(ptr);..    }..
8250: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
8260: 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65 74  verride void Ret
8270: 75 72 6e 42 6c 6f 62 28 49 6e 74 50 74 72 20 63  urnBlob(IntPtr c
8280: 6f 6e 74 65 78 74 2c 20 62 79 74 65 5b 5d 20 76  ontext, byte[] v
8290: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
82a0: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
82b0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
82c0: 72 65 73 75 6c 74 5f 62 6c 6f 62 28 63 6f 6e 74  result_blob(cont
82d0: 65 78 74 2c 20 76 61 6c 75 65 2c 20 76 61 6c 75  ext, value, valu
82e0: 65 2e 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50 74  e.Length, (IntPt
82f0: 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d  r)(-1));..    }.
8300: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
8310: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65  override void Re
8320: 74 75 72 6e 44 6f 75 62 6c 65 28 49 6e 74 50 74  turnDouble(IntPt
8330: 72 20 63 6f 6e 74 65 78 74 2c 20 64 6f 75 62 6c  r context, doubl
8340: 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  e value)..    {.
8350: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
8360: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
8370: 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
8380: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8390: 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65  e3_result_double
83a0: 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29  (context, value)
83b0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
83c0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
83d0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
83e0: 6c 74 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f  lt_double_intero
83f0: 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 76  p(context, ref v
8400: 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  alue);..#endif..
8410: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
8420: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
8430: 6f 69 64 20 52 65 74 75 72 6e 45 72 72 6f 72 28  oid ReturnError(
8440: 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
8450: 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20  string value).. 
8460: 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
8470: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
8480: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65  sqlite3_result_e
8490: 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 54 6f  rror(context, To
84a0: 55 54 46 38 28 76 61 6c 75 65 29 2c 20 76 61 6c  UTF8(value), val
84b0: 75 65 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20  ue.Length);..   
84c0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
84d0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
84e0: 20 52 65 74 75 72 6e 49 6e 74 33 32 28 49 6e 74   ReturnInt32(Int
84f0: 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 69 6e 74  Ptr context, int
8500: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
8510: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
8520: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
8530: 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e  3_result_int(con
8540: 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  text, value);.. 
8550: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
8560: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
8570: 69 64 20 52 65 74 75 72 6e 49 6e 74 36 34 28 49  id ReturnInt64(I
8580: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 6c  ntPtr context, l
8590: 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ong value)..    
85a0: 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  {..#if !PLATFORM
85b0: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
85c0: 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  K..      UnsafeN
85d0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
85e0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36  ite3_result_int6
85f0: 34 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65  4(context, value
8600: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
8610: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
8620: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
8630: 75 6c 74 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f  ult_int64_intero
8640: 70 28 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 76  p(context, ref v
8650: 61 6c 75 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  alue);..#endif..
8660: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
8670: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
8680: 6f 69 64 20 52 65 74 75 72 6e 4e 75 6c 6c 28 49  oid ReturnNull(I
8690: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a  ntPtr context)..
86a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
86b0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
86c0: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
86d0: 6e 75 6c 6c 28 63 6f 6e 74 65 78 74 29 3b 0d 0a  null(context);..
86e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
86f0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
8700: 6f 69 64 20 52 65 74 75 72 6e 54 65 78 74 28 49  oid ReturnText(I
8710: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73  ntPtr context, s
8720: 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20  tring value)..  
8730: 20 20 7b 0d 0a 20 20 20 20 20 20 62 79 74 65 5b    {..      byte[
8740: 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 76 61 6c  ] b = ToUTF8(val
8750: 75 65 29 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61  ue);..      Unsa
8760: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
8770: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74  sqlite3_result_t
8780: 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 54 6f 55  ext(context, ToU
8790: 54 46 38 28 76 61 6c 75 65 29 2c 20 62 2e 4c 65  TF8(value), b.Le
87a0: 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50 74  ngth - 1, (IntPt
87b0: 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d 0d  r)(-1));..    }.
87c0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
87d0: 6f 76 65 72 72 69 64 65 20 49 6e 74 50 74 72 20  override IntPtr 
87e0: 41 67 67 72 65 67 61 74 65 43 6f 6e 74 65 78 74  AggregateContext
87f0: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29  (IntPtr context)
8800: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
8810: 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
8820: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
8830: 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74  3_aggregate_cont
8840: 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 31 29 3b  ext(context, 1);
8850: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
8860: 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69  // Enables or di
8870: 73 61 62 6c 65 64 20 65 78 74 65 6e 64 65 64 20  sabled extended 
8880: 72 65 73 75 6c 74 20 63 6f 64 65 73 20 72 65 74  result codes ret
8890: 75 72 6e 65 64 20 62 79 20 53 51 4c 69 74 65 0d  urned by SQLite.
88a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
88b0: 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 45  erride void SetE
88c0: 78 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f 64  xtendedResultCod
88d0: 65 73 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66 29 0d  es(bool bOnOff).
88e0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
88f0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
8900: 73 2e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64  s.sqlite3_extend
8910: 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73 28  ed_result_codes(
8920: 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20  _sql, (bOnOff ? 
8930: 2d 31 20 3a 20 30 29 29 3b 0d 0a 20 20 20 20 7d  -1 : 0));..    }
8940: 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 74  ..    /// Gets t
8950: 68 65 20 6c 61 73 74 20 53 51 4c 69 74 65 20 65  he last SQLite e
8960: 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20 69  rror code..    i
8970: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
8980: 20 69 6e 74 20 52 65 73 75 6c 74 43 6f 64 65 28   int ResultCode(
8990: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
89a0: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
89b0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
89c0: 65 33 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29  e3_errcode(_sql)
89d0: 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f  ;..    }..    //
89e0: 2f 20 47 65 74 73 20 74 68 65 20 6c 61 73 74 20  / Gets the last 
89f0: 53 51 4c 69 74 65 20 65 78 74 65 6e 64 65 64 20  SQLite extended 
8a00: 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20 20 20  error code..    
8a10: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
8a20: 65 20 69 6e 74 20 45 78 74 65 6e 64 65 64 52 65  e int ExtendedRe
8a30: 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20 20 20  sultCode()..    
8a40: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
8a50: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8a60: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65 78 74 65  ods.sqlite3_exte
8a70: 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 5f 73 71  nded_errcode(_sq
8a80: 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  l);..    }....  
8a90: 20 20 2f 2f 2f 20 41 64 64 20 61 20 6c 6f 67 20    /// Add a log 
8aa0: 6d 65 73 73 61 67 65 20 76 69 61 20 74 68 65 20  message via the 
8ab0: 53 51 4c 69 74 65 20 73 71 6c 69 74 65 33 5f 6c  SQLite sqlite3_l
8ac0: 6f 67 20 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20  og interface... 
8ad0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
8ae0: 72 69 64 65 20 76 6f 69 64 20 4c 6f 67 4d 65 73  ride void LogMes
8af0: 73 61 67 65 28 69 6e 74 20 69 45 72 72 43 6f 64  sage(int iErrCod
8b00: 65 2c 20 73 74 72 69 6e 67 20 7a 4d 65 73 73 61  e, string zMessa
8b10: 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ge)..    {..    
8b20: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
8b30: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f  thods.sqlite3_lo
8b40: 67 28 69 45 72 72 43 6f 64 65 2c 20 54 6f 55 54  g(iErrCode, ToUT
8b50: 46 38 28 7a 4d 65 73 73 61 67 65 29 29 3b 0d 0a  F8(zMessage));..
8b60: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
8b70: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
8b80: 6f 69 64 20 53 65 74 50 61 73 73 77 6f 72 64 28  oid SetPassword(
8b90: 62 79 74 65 5b 5d 20 70 61 73 73 77 6f 72 64 42  byte[] passwordB
8ba0: 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ytes)..    {..  
8bb0: 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e 73 61      int n = Unsa
8bc0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
8bd0: 73 71 6c 69 74 65 33 5f 6b 65 79 28 5f 73 71 6c  sqlite3_key(_sql
8be0: 2c 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 2c  , passwordBytes,
8bf0: 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 2e 4c   passwordBytes.L
8c00: 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 69  ength);..      i
8c10: 66 20 28 6e 20 3e 20 30 29 20 74 68 72 6f 77 20  f (n > 0) throw 
8c20: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
8c30: 69 6f 6e 28 6e 2c 20 53 51 4c 69 74 65 4c 61 73  ion(n, SQLiteLas
8c40: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
8c50: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
8c60: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
8c70: 43 68 61 6e 67 65 50 61 73 73 77 6f 72 64 28 62  ChangePassword(b
8c80: 79 74 65 5b 5d 20 6e 65 77 50 61 73 73 77 6f 72  yte[] newPasswor
8c90: 64 42 79 74 65 73 29 0d 0a 20 20 20 20 7b 0d 0a  dBytes)..    {..
8ca0: 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 55 6e        int n = Un
8cb0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
8cc0: 73 2e 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 28  s.sqlite3_rekey(
8cd0: 5f 73 71 6c 2c 20 6e 65 77 50 61 73 73 77 6f 72  _sql, newPasswor
8ce0: 64 42 79 74 65 73 2c 20 28 6e 65 77 50 61 73 73  dBytes, (newPass
8cf0: 77 6f 72 64 42 79 74 65 73 20 3d 3d 20 6e 75 6c  wordBytes == nul
8d00: 6c 29 20 3f 20 30 20 3a 20 6e 65 77 50 61 73 73  l) ? 0 : newPass
8d10: 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67 74 68  wordBytes.Length
8d20: 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
8d30: 3e 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53  > 0) throw new S
8d40: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
8d50: 2c 20 53 51 4c 69 74 65 4c 61 73 74 45 72 72 6f  , SQLiteLastErro
8d60: 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  r());..    }....
8d70: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
8d80: 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 55 70  rride void SetUp
8d90: 64 61 74 65 48 6f 6f 6b 28 53 51 4c 69 74 65 55  dateHook(SQLiteU
8da0: 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 66 75  pdateCallback fu
8db0: 6e 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  nc)..    {..    
8dc0: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
8dd0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 75 70  thods.sqlite3_up
8de0: 64 61 74 65 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20  date_hook(_sql, 
8df0: 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72  func, IntPtr.Zer
8e00: 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  o);..    }....  
8e10: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
8e20: 69 64 65 20 76 6f 69 64 20 53 65 74 43 6f 6d 6d  ide void SetComm
8e30: 69 74 48 6f 6f 6b 28 53 51 4c 69 74 65 43 6f 6d  itHook(SQLiteCom
8e40: 6d 69 74 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  mitCallback func
8e50: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8e60: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8e70: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 6d  ods.sqlite3_comm
8e80: 69 74 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75  it_hook(_sql, fu
8e90: 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  nc, IntPtr.Zero)
8ea0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
8eb0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
8ec0: 65 20 76 6f 69 64 20 53 65 74 54 72 61 63 65 43  e void SetTraceC
8ed0: 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 54 72  allback(SQLiteTr
8ee0: 61 63 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  aceCallback func
8ef0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8f00: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
8f10: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 74 72 61 63  ods.sqlite3_trac
8f20: 65 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e  e(_sql, func, In
8f30: 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20  tPtr.Zero);..   
8f40: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
8f50: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
8f60: 20 53 65 74 52 6f 6c 6c 62 61 63 6b 48 6f 6f 6b   SetRollbackHook
8f70: 28 53 51 4c 69 74 65 52 6f 6c 6c 62 61 63 6b 43  (SQLiteRollbackC
8f80: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20  allback func).. 
8f90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61     {..      Unsa
8fa0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
8fb0: 73 71 6c 69 74 65 33 5f 72 6f 6c 6c 62 61 63 6b  sqlite3_rollback
8fc0: 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63  _hook(_sql, func
8fd0: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
8fe0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
8ff0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
9000: 20 2f 2f 2f 20 41 6c 6c 6f 77 73 20 74 68 65 20   /// Allows the 
9010: 73 65 74 74 69 6e 67 20 6f 66 20 61 20 6c 6f 67  setting of a log
9020: 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69 6e  ging callback in
9030: 76 6f 6b 65 64 20 62 79 20 53 51 4c 69 74 65 20  voked by SQLite 
9040: 77 68 65 6e 20 61 0d 0a 20 20 20 20 2f 2f 2f 20  when a..    /// 
9050: 6c 6f 67 20 65 76 65 6e 74 20 6f 63 63 75 72 73  log event occurs
9060: 2e 20 20 4f 6e 6c 79 20 6f 6e 65 20 63 61 6c 6c  .  Only one call
9070: 62 61 63 6b 20 6d 61 79 20 62 65 20 73 65 74 2e  back may be set.
9080: 20 20 49 66 20 4e 55 4c 4c 20 69 73 20 70 61 73    If NULL is pas
9090: 73 65 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20 74 68  sed,..    /// th
90a0: 65 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61  e logging callba
90b0: 63 6b 20 69 73 20 75 6e 72 65 67 69 73 74 65 72  ck is unregister
90c0: 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ed...    /// </s
90d0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
90e0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75   <param name="fu
90f0: 6e 63 22 3e 54 68 65 20 63 61 6c 6c 62 61 63 6b  nc">The callback
9100: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76   function to inv
9110: 6f 6b 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  oke.</param>..  
9120: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52    /// <returns>R
9130: 65 74 75 72 6e 73 20 61 20 72 65 73 75 6c 74 20  eturns a result 
9140: 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  code</returns>..
9150: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
9160: 72 72 69 64 65 20 69 6e 74 20 53 65 74 4c 6f 67  rride int SetLog
9170: 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65 4c  Callback(SQLiteL
9180: 6f 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  ogCallback func)
9190: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
91a0: 20 69 6e 74 20 72 63 20 3d 20 55 6e 73 61 66 65   int rc = Unsafe
91b0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
91c0: 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 0d 0a 20  lite3_config(.. 
91d0: 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
91e0: 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45  SQLiteConfigOpsE
91f0: 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49  num.SQLITE_CONFI
9200: 47 5f 4c 4f 47 2c 20 66 75 6e 63 2c 20 28 49 6e  G_LOG, func, (In
9210: 74 50 74 72 29 30 29 3b 0d 0a 0d 0a 20 20 20 20  tPtr)0);....    
9220: 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a      return rc;..
9230: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
9240: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
9250: 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69  /// Determines i
9260: 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  f the SQLite cor
9270: 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65  e library has be
9280: 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66  en initialized f
9290: 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20  or the..    /// 
92a0: 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e  current process.
92b0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
92c0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
92d0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
92e0: 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63   A boolean indic
92f0: 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  ating whether or
9300: 20 6e 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20   not the SQLite 
9310: 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73  core library has
9320: 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69   been..    /// i
9330: 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74  nitialized for t
9340: 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
9350: 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ss...    /// </r
9360: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
9370: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
9380: 6f 6f 6c 20 49 73 49 6e 69 74 69 61 6c 69 7a 65  ool IsInitialize
9390: 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  d()..    {..    
93a0: 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69      return Stati
93b0: 63 49 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29  cIsInitialized()
93c0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
93d0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
93e0: 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65     /// Determine
93f0: 73 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  s if the SQLite 
9400: 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61 73  core library has
9410: 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65   been initialize
9420: 64 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f  d for the..    /
9430: 2f 2f 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  // current proce
9440: 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ss...    /// </s
9450: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
9460: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
9470: 2f 2f 2f 20 41 20 62 6f 6f 6c 65 61 6e 20 69 6e  /// A boolean in
9480: 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72  dicating whether
9490: 20 6f 72 20 6e 6f 74 20 74 68 65 20 53 51 4c 69   or not the SQLi
94a0: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
94b0: 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 2f 2f  has been..    //
94c0: 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f  / initialized fo
94d0: 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  r the current pr
94e0: 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ocess...    /// 
94f0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
9500: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
9510: 62 6f 6f 6c 20 53 74 61 74 69 63 49 73 49 6e 69  bool StaticIsIni
9520: 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20 20 20 20  tialized()..    
9530: 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  {..        //.. 
9540: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
9550: 53 61 76 65 20 74 68 65 20 73 74 61 74 65 20 6f  Save the state o
9560: 66 20 74 68 65 20 6c 6f 67 67 69 6e 67 20 63 6c  f the logging cl
9570: 61 73 73 20 61 6e 64 20 74 68 65 6e 20 72 65 73  ass and then res
9580: 74 6f 72 65 20 69 74 0d 0a 20 20 20 20 20 20 20  tore it..       
9590: 20 2f 2f 20 20 20 20 20 20 20 61 66 74 65 72 20   //       after 
95a0: 77 65 20 61 72 65 20 64 6f 6e 65 20 74 6f 20 61  we are done to a
95b0: 76 6f 69 64 20 6c 6f 67 67 69 6e 67 20 74 6f 6f  void logging too
95c0: 20 6d 61 6e 79 20 66 61 6c 73 65 20 65 72 72 6f   many false erro
95d0: 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  rs...        //.
95e0: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61  .        bool sa
95f0: 76 65 64 45 6e 61 62 6c 65 64 20 3d 20 53 51 4c  vedEnabled = SQL
9600: 69 74 65 4c 6f 67 2e 45 6e 61 62 6c 65 64 3b 0d  iteLog.Enabled;.
9610: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c  .        SQLiteL
9620: 6f 67 2e 45 6e 61 62 6c 65 64 20 3d 20 66 61 6c  og.Enabled = fal
9630: 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  se;....        t
9640: 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
9650: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
9660: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
9670: 54 45 3a 20 54 68 69 73 20 6d 65 74 68 6f 64 20  TE: This method 
9680: 5b 61 62 5d 75 73 65 73 20 74 68 65 20 66 61 63  [ab]uses the fac
9690: 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 77 69  t that SQLite wi
96a0: 6c 6c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20  ll always..     
96b0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
96c0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
96d0: 52 4f 52 20 66 6f 72 20 61 6e 79 20 75 6e 6b 6e  ROR for any unkn
96e0: 6f 77 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  own configuratio
96f0: 6e 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20  n option..      
9700: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 2a        //       *
9710: 75 6e 6c 65 73 73 2a 20 74 68 65 20 53 51 4c 69  unless* the SQLi
9720: 74 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 61  te library has a
9730: 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e 69 74  lready been init
9740: 69 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20  ialized...      
9750: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49        //       I
9760: 6e 20 74 68 61 74 20 63 61 73 65 20 69 74 20 77  n that case it w
9770: 69 6c 6c 20 61 6c 77 61 79 73 20 72 65 74 75 72  ill always retur
9780: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 2e  n SQLITE_MISUSE.
9790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
97a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
97b0: 74 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74  t rc = UnsafeNat
97c0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
97d0: 65 33 5f 63 6f 6e 66 69 67 28 0d 0a 20 20 20 20  e3_config(..    
97e0: 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74              (int
97f0: 29 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73  )SQLiteConfigOps
9800: 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46  Enum.SQLITE_CONF
9810: 49 47 5f 4e 4f 4e 45 2c 20 6e 75 6c 6c 2c 20 28  IG_NONE, null, (
9820: 49 6e 74 50 74 72 29 30 29 3b 0d 0a 0d 0a 20 20  IntPtr)0);....  
9830: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9840: 20 28 72 63 20 3d 3d 20 2f 2a 20 53 51 4c 49 54   (rc == /* SQLIT
9850: 45 5f 4d 49 53 55 53 45 20 2a 2f 20 32 31 29 3b  E_MISUSE */ 21);
9860: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
9870: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
9880: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9890: 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 45       SQLiteLog.E
98a0: 6e 61 62 6c 65 64 20 3d 20 73 61 76 65 64 45 6e  nabled = savedEn
98b0: 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  abled;..        
98c0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
98d0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
98e0: 20 20 20 2f 2f 2f 20 48 65 6c 70 65 72 20 66 75     /// Helper fu
98f0: 6e 63 74 69 6f 6e 20 74 6f 20 72 65 74 72 69 65  nction to retrie
9900: 76 65 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 64  ve a column of d
9910: 61 74 61 20 66 72 6f 6d 20 61 6e 20 61 63 74 69  ata from an acti
9920: 76 65 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20  ve statement... 
9930: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
9940: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
9950: 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54 68  m name="stmt">Th
9960: 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e  e statement bein
9970: 67 20 73 74 65 70 28 29 27 64 20 74 68 72 6f 75  g step()'d throu
9980: 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  gh</param>..    
9990: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
99a0: 22 69 6e 64 65 78 22 3e 54 68 65 20 63 6f 6c 75  "index">The colu
99b0: 6d 6e 20 69 6e 64 65 78 20 74 6f 20 72 65 74 72  mn index to retr
99c0: 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ieve</param>..  
99d0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
99e0: 65 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70 65  e="typ">The type
99f0: 20 6f 66 20 64 61 74 61 20 63 6f 6e 74 61 69 6e   of data contain
9a00: 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  ed in the column
9a10: 2e 20 20 49 66 20 55 6e 69 6e 69 74 69 61 6c 69  .  If Uninitiali
9a20: 7a 65 64 2c 20 74 68 69 73 20 66 75 6e 63 74 69  zed, this functi
9a30: 6f 6e 20 77 69 6c 6c 20 72 65 74 72 69 65 76 65  on will retrieve
9a40: 20 74 68 65 20 64 61 74 61 74 79 70 65 20 69 6e   the datatype in
9a50: 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 61 72 61  formation.</para
9a60: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
9a70: 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 74 68 65  urns>Returns the
9a80: 20 64 61 74 61 20 69 6e 20 74 68 65 20 63 6f 6c   data in the col
9a90: 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  umn</returns>.. 
9aa0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
9ab0: 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65 74 56  ride object GetV
9ac0: 61 6c 75 65 28 53 51 4c 69 74 65 53 74 61 74 65  alue(SQLiteState
9ad0: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
9ae0: 6e 64 65 78 2c 20 53 51 4c 69 74 65 54 79 70 65  ndex, SQLiteType
9af0: 20 74 79 70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20   typ)..    {..  
9b00: 20 20 20 20 69 66 20 28 49 73 4e 75 6c 6c 28 73      if (IsNull(s
9b10: 74 6d 74 2c 20 69 6e 64 65 78 29 29 20 72 65 74  tmt, index)) ret
9b20: 75 72 6e 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65  urn DBNull.Value
9b30: 3b 0d 0a 20 20 20 20 20 20 54 79 70 65 41 66 66  ;..      TypeAff
9b40: 69 6e 69 74 79 20 61 66 66 20 3d 20 74 79 70 2e  inity aff = typ.
9b50: 41 66 66 69 6e 69 74 79 3b 0d 0a 20 20 20 20 20  Affinity;..     
9b60: 20 54 79 70 65 20 74 20 3d 20 6e 75 6c 6c 3b 0d   Type t = null;.
9b70: 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 74 79 70  ...      if (typ
9b80: 2e 54 79 70 65 20 21 3d 20 44 62 54 79 70 65 2e  .Type != DbType.
9b90: 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20 20 20 7b  Object)..      {
9ba0: 0d 0a 20 20 20 20 20 20 20 20 74 20 3d 20 53 51  ..        t = SQ
9bb0: 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c 69  LiteConvert.SQLi
9bc0: 74 65 54 79 70 65 54 6f 54 79 70 65 28 74 79 70  teTypeToType(typ
9bd0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 61 66 66 20  );..        aff 
9be0: 3d 20 54 79 70 65 54 6f 41 66 66 69 6e 69 74 79  = TypeToAffinity
9bf0: 28 74 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  (t);..      }...
9c00: 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28 61  .      switch (a
9c10: 66 66 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ff)..      {..  
9c20: 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
9c30: 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20  ffinity.Blob:.. 
9c40: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
9c50: 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e  .Type == DbType.
9c60: 47 75 69 64 20 26 26 20 74 79 70 2e 41 66 66 69  Guid && typ.Affi
9c70: 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69  nity == TypeAffi
9c80: 6e 69 74 79 2e 54 65 78 74 29 0d 0a 20 20 20 20  nity.Text)..    
9c90: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
9ca0: 65 77 20 47 75 69 64 28 47 65 74 54 65 78 74 28  ew Guid(GetText(
9cb0: 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  stmt, index));..
9cc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ..          int 
9cd0: 6e 20 3d 20 28 69 6e 74 29 47 65 74 42 79 74 65  n = (int)GetByte
9ce0: 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30  s(stmt, index, 0
9cf0: 2c 20 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b 0d 0a  , null, 0, 0);..
9d00: 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d            byte[]
9d10: 20 62 20 3d 20 6e 65 77 20 62 79 74 65 5b 6e 5d   b = new byte[n]
9d20: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 47 65 74  ;..          Get
9d30: 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65  Bytes(stmt, inde
9d40: 78 2c 20 30 2c 20 62 2c 20 30 2c 20 6e 29 3b 0d  x, 0, b, 0, n);.
9d50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
9d60: 28 74 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54  (typ.Type == DbT
9d70: 79 70 65 2e 47 75 69 64 20 26 26 20 6e 20 3d 3d  ype.Guid && n ==
9d80: 20 31 36 29 0d 0a 20 20 20 20 20 20 20 20 20 20   16)..          
9d90: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69    return new Gui
9da0: 64 28 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  d(b);....       
9db0: 20 20 20 72 65 74 75 72 6e 20 62 3b 0d 0a 20 20     return b;..  
9dc0: 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41        case TypeA
9dd0: 66 66 69 6e 69 74 79 2e 44 61 74 65 54 69 6d 65  ffinity.DateTime
9de0: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  :..          ret
9df0: 75 72 6e 20 47 65 74 44 61 74 65 54 69 6d 65 28  urn GetDateTime(
9e00: 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
9e10: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
9e20: 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c 65 3a  Affinity.Double:
9e30: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
9e40: 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72  t == null) retur
9e50: 6e 20 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74  n GetDouble(stmt
9e60: 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
9e70: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
9e80: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f         return Co
9e90: 6e 76 65 72 74 2e 43 68 61 6e 67 65 54 79 70 65  nvert.ChangeType
9ea0: 28 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c  (GetDouble(stmt,
9eb0: 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75 6c 6c   index), t, null
9ec0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  );..        case
9ed0: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e   TypeAffinity.In
9ee0: 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  t64:..          
9ef0: 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72  if (t == null) r
9f00: 65 74 75 72 6e 20 47 65 74 49 6e 74 36 34 28 73  eturn GetInt64(s
9f10: 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
9f20: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
9f30: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9f40: 20 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65 54   Convert.ChangeT
9f50: 79 70 65 28 47 65 74 49 6e 74 36 34 28 73 74 6d  ype(GetInt64(stm
9f60: 74 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75  t, index), t, nu
9f70: 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 64 65  ll);..        de
9f80: 66 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20  fault:..        
9f90: 20 20 72 65 74 75 72 6e 20 47 65 74 54 65 78 74    return GetText
9fa0: 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
9fb0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
9fc0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
9fd0: 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 43  verride int GetC
9fe0: 75 72 73 6f 72 46 6f 72 54 61 62 6c 65 28 53 51  ursorForTable(SQ
9ff0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
a000: 6d 74 2c 20 69 6e 74 20 64 62 2c 20 69 6e 74 20  mt, int db, int 
a010: 72 6f 6f 74 50 61 67 65 29 0d 0a 20 20 20 20 7b  rootPage)..    {
a020: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
a030: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 72 65  ANDARD..      re
a040: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
a050: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
a060: 5f 74 61 62 6c 65 5f 63 75 72 73 6f 72 28 73 74  _table_cursor(st
a070: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
a080: 20 64 62 2c 20 72 6f 6f 74 50 61 67 65 29 3b 0d   db, rootPage);.
a090: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
a0a0: 74 75 72 6e 20 2d 31 3b 0d 0a 23 65 6e 64 69 66  turn -1;..#endif
a0b0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
a0c0: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
a0d0: 20 6c 6f 6e 67 20 47 65 74 52 6f 77 49 64 46 6f   long GetRowIdFo
a0e0: 72 43 75 72 73 6f 72 28 53 51 4c 69 74 65 53 74  rCursor(SQLiteSt
a0f0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
a100: 74 20 63 75 72 73 6f 72 29 0d 0a 20 20 20 20 7b  t cursor)..    {
a110: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
a120: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6c 6f  ANDARD..      lo
a130: 6e 67 20 72 6f 77 69 64 3b 0d 0a 20 20 20 20 20  ng rowid;..     
a140: 20 69 6e 74 20 72 63 20 3d 20 55 6e 73 61 66 65   int rc = Unsafe
a150: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
a160: 6c 69 74 65 33 5f 63 75 72 73 6f 72 5f 72 6f 77  lite3_cursor_row
a170: 69 64 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f  id(stmt._sqlite_
a180: 73 74 6d 74 2c 20 63 75 72 73 6f 72 2c 20 6f 75  stmt, cursor, ou
a190: 74 20 72 6f 77 69 64 29 3b 0d 0a 20 20 20 20 20  t rowid);..     
a1a0: 20 69 66 20 28 72 63 20 3d 3d 20 30 29 20 72 65   if (rc == 0) re
a1b0: 74 75 72 6e 20 72 6f 77 69 64 3b 0d 0a 0d 0a 20  turn rowid;.... 
a1c0: 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a       return 0;..
a1d0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
a1e0: 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a  urn 0;..#endif..
a1f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
a200: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
a210: 6f 69 64 20 47 65 74 49 6e 64 65 78 43 6f 6c 75  oid GetIndexColu
a220: 6d 6e 45 78 74 65 6e 64 65 64 49 6e 66 6f 28 73  mnExtendedInfo(s
a230: 74 72 69 6e 67 20 64 61 74 61 62 61 73 65 2c 20  tring database, 
a240: 73 74 72 69 6e 67 20 69 6e 64 65 78 2c 20 73 74  string index, st
a250: 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74  ring column, out
a260: 20 69 6e 74 20 73 6f 72 74 4d 6f 64 65 2c 20 6f   int sortMode, o
a270: 75 74 20 69 6e 74 20 6f 6e 45 72 72 6f 72 2c 20  ut int onError, 
a280: 6f 75 74 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61  out string colla
a290: 74 69 6f 6e 53 65 71 75 65 6e 63 65 29 0d 0a 20  tionSequence).. 
a2a0: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
a2b0: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
a2c0: 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 3b 0d 0a    IntPtr coll;..
a2d0: 20 20 20 20 20 20 69 6e 74 20 63 6f 6c 6c 6c 65        int collle
a2e0: 6e 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 72 63  n;..      int rc
a2f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 63 20 3d 20  ;....      rc = 
a300: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
a310: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65  ods.sqlite3_inde
a320: 78 5f 63 6f 6c 75 6d 6e 5f 69 6e 66 6f 5f 69 6e  x_column_info_in
a330: 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54  terop(_sql, ToUT
a340: 46 38 28 64 61 74 61 62 61 73 65 29 2c 20 54 6f  F8(database), To
a350: 55 54 46 38 28 69 6e 64 65 78 29 2c 20 54 6f 55  UTF8(index), ToU
a360: 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 6f 75 74  TF8(column), out
a370: 20 73 6f 72 74 4d 6f 64 65 2c 20 6f 75 74 20 6f   sortMode, out o
a380: 6e 45 72 72 6f 72 2c 20 6f 75 74 20 63 6f 6c 6c  nError, out coll
a390: 2c 20 6f 75 74 20 63 6f 6c 6c 6c 65 6e 29 3b 0d  , out colllen);.
a3a0: 0a 20 20 20 20 20 20 69 66 20 28 72 63 20 21 3d  .      if (rc !=
a3b0: 20 30 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51   0) throw new SQ
a3c0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 63  LiteException(rc
a3d0: 2c 20 22 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  , "");....      
a3e0: 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  collationSequenc
a3f0: 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e 67  e = UTF8ToString
a400: 28 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e 29 3b  (coll, colllen);
a410: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 73  ..#else..      s
a420: 6f 72 74 4d 6f 64 65 20 3d 20 30 3b 0d 0a 20 20  ortMode = 0;..  
a430: 20 20 20 20 6f 6e 45 72 72 6f 72 20 3d 20 32 3b      onError = 2;
a440: 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69 6f  ..      collatio
a450: 6e 53 65 71 75 65 6e 63 65 20 3d 20 22 42 49 4e  nSequence = "BIN
a460: 41 52 59 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ARY";..#endif.. 
a470: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
a480: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
a490: 74 20 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 73 74  t FileControl(st
a4a0: 72 69 6e 67 20 7a 44 62 4e 61 6d 65 2c 20 69 6e  ring zDbName, in
a4b0: 74 20 6f 70 2c 20 49 6e 74 50 74 72 20 70 41 72  t op, IntPtr pAr
a4c0: 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  g)..    {..     
a4d0: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
a4e0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
a4f0: 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c  te3_file_control
a500: 28 5f 73 71 6c 2c 20 28 7a 44 62 4e 61 6d 65 20  (_sql, (zDbName 
a510: 21 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 55 54 46  != null) ? ToUTF
a520: 38 28 7a 44 62 4e 61 6d 65 29 20 3a 20 6e 75 6c  8(zDbName) : nul
a530: 6c 2c 20 6f 70 2c 20 70 41 72 67 29 3b 0d 0a 20  l, op, pArg);.. 
a540: 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a           }..  }..}..