System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 84b16e17ea48a6c5a847497a1b654116726e5b0f:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 41 44 4f  *********. * ADO
0040: 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50 72  .NET 2.0 Data Pr
0050: 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69 74  ovider for SQLit
0060: 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0a 20 2a  e Version 3.X. *
0070: 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f 62 65   Written by Robe
0080: 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f 62 65  rt Simpson (robe
0090: 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65 73 6f  rt@blackcastleso
00a0: 66 74 2e 63 6f 6d 29 0a 20 2a 20 0a 20 2a 20 52  ft.com). * . * R
00b0: 65 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70  eleased to the p
00c0: 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73  ublic domain, us
00d0: 65 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69  e at your own ri
00e0: 73 6b 21 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  sk!. ***********
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 2f 0a 0a  *************/..
0120: 6e 61 6d 65 73 70 61 63 65 20 53 79 73 74 65 6d  namespace System
0130: 2e 44 61 74 61 2e 53 51 4c 69 74 65 0a 7b 0a 20  .Data.SQLite.{. 
0140: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0a 20   using System;. 
0150: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f   using System.Co
0160: 6c 6c 65 63 74 69 6f 6e 73 2e 47 65 6e 65 72 69  llections.Generi
0170: 63 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  c;.  using Syste
0180: 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e 53 70  m.Collections.Sp
0190: 65 63 69 61 6c 69 7a 65 64 3b 0a 20 20 75 73 69  ecialized;.  usi
01a0: 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 3b 0a  ng System.Data;.
01b0: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44    using System.D
01c0: 61 74 61 2e 43 6f 6d 6d 6f 6e 3b 0a 20 20 75 73  ata.Common;.  us
01d0: 69 6e 67 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61  ing System.Globa
01e0: 6c 69 7a 61 74 69 6f 6e 3b 0a 0a 20 20 2f 2f 2f  lization;..  ///
01f0: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 2f 2f 2f   <summary>.  ///
0200: 20 53 51 4c 69 74 65 20 69 6d 70 6c 65 6d 65 6e   SQLite implemen
0210: 74 61 74 69 6f 6e 20 6f 66 20 44 62 44 61 74 61  tation of DbData
0220: 52 65 61 64 65 72 2e 0a 20 20 2f 2f 2f 20 3c 2f  Reader..  /// </
0230: 73 75 6d 6d 61 72 79 3e 0a 20 20 70 75 62 6c 69  summary>.  publi
0240: 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53  c sealed class S
0250: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 20  QLiteDataReader 
0260: 3a 20 44 62 44 61 74 61 52 65 61 64 65 72 0a 20  : DbDataReader. 
0270: 20 7b 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d   {.    /// <summ
0280: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 55 6e 64  ary>.    /// Und
0290: 65 72 6c 79 69 6e 67 20 63 6f 6d 6d 61 6e 64 20  erlying command 
02a0: 74 68 69 73 20 72 65 61 64 65 72 20 69 73 20 61  this reader is a
02b0: 74 74 61 63 68 65 64 20 74 6f 0a 20 20 20 20 2f  ttached to.    /
02c0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
02d0: 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65    private SQLite
02e0: 43 6f 6d 6d 61 6e 64 20 5f 63 6f 6d 6d 61 6e 64  Command _command
02f0: 3b 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ;.    /// <summa
0300: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 49 6e 64 65  ry>.    /// Inde
0310: 78 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  x of the current
0320: 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 74 68   statement in th
0330: 65 20 63 6f 6d 6d 61 6e 64 20 62 65 69 6e 67 20  e command being 
0340: 70 72 6f 63 65 73 73 65 64 0a 20 20 20 20 2f 2f  processed.    //
0350: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
0360: 20 70 72 69 76 61 74 65 20 69 6e 74 20 5f 61 63   private int _ac
0370: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 49 6e 64  tiveStatementInd
0380: 65 78 3b 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ex;.    /// <sum
0390: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 43 75  mary>.    /// Cu
03a0: 72 72 65 6e 74 20 73 74 61 74 65 6d 65 6e 74 20  rrent statement 
03b0: 62 65 69 6e 67 20 52 65 61 64 28 29 0a 20 20 20  being Read().   
03c0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
03d0: 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69      private SQLi
03e0: 74 65 53 74 61 74 65 6d 65 6e 74 20 5f 61 63 74  teStatement _act
03f0: 69 76 65 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20  iveStatement;.  
0400: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
0410: 20 20 20 20 2f 2f 2f 20 53 74 61 74 65 20 6f 66      /// State of
0420: 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74 61   the current sta
0430: 74 65 6d 65 6e 74 20 62 65 69 6e 67 20 70 72 6f  tement being pro
0440: 63 65 73 73 65 64 2e 0a 20 20 20 20 2f 2f 2f 20  cessed..    /// 
0450: 2d 31 20 3d 20 46 69 72 73 74 20 53 74 65 70 28  -1 = First Step(
0460: 29 20 65 78 65 63 75 74 65 64 2c 20 73 6f 20 74  ) executed, so t
0470: 68 65 20 66 69 72 73 74 20 52 65 61 64 28 29 20  he first Read() 
0480: 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65 64 0a  will be ignored.
0490: 20 20 20 20 2f 2f 2f 20 20 30 20 3d 20 41 63 74      ///  0 = Act
04a0: 69 76 65 6c 79 20 72 65 61 64 69 6e 67 0a 20 20  ively reading.  
04b0: 20 20 2f 2f 2f 20 20 31 20 3d 20 46 69 6e 69 73    ///  1 = Finis
04c0: 68 65 64 20 72 65 61 64 69 6e 67 0a 20 20 20 20  hed reading.    
04d0: 2f 2f 2f 20 20 32 20 3d 20 4e 6f 6e 2d 72 6f 77  ///  2 = Non-row
04e0: 2d 72 65 74 75 72 6e 69 6e 67 20 73 74 61 74 65  -returning state
04f0: 6d 65 6e 74 2c 20 6e 6f 20 72 65 63 6f 72 64 73  ment, no records
0500: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0510: 72 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20  ry>.    private 
0520: 69 6e 74 20 5f 72 65 61 64 69 6e 67 53 74 61 74  int _readingStat
0530: 65 3b 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  e;.    /// <summ
0540: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 4e 75 6d  ary>.    /// Num
0550: 62 65 72 20 6f 66 20 72 65 63 6f 72 64 73 20 61  ber of records a
0560: 66 66 65 63 74 65 64 20 62 79 20 74 68 65 20 69  ffected by the i
0570: 6e 73 65 72 74 2f 75 70 64 61 74 65 20 73 74 61  nsert/update sta
0580: 74 65 6d 65 6e 74 73 20 65 78 65 63 75 74 65 64  tements executed
0590: 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 0a   on the command.
05a0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
05b0: 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20 69  y>.    private i
05c0: 6e 74 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64  nt _rowsAffected
05d0: 3b 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ;.    /// <summa
05e0: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 43 6f 75 6e  ry>.    /// Coun
05f0: 74 20 6f 66 20 66 69 65 6c 64 73 20 28 63 6f 6c  t of fields (col
0600: 75 6d 6e 73 29 20 69 6e 20 74 68 65 20 72 6f 77  umns) in the row
0610: 2d 72 65 74 75 72 6e 69 6e 67 20 73 74 61 74 65  -returning state
0620: 6d 65 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62  ment currently b
0630: 65 69 6e 67 20 70 72 6f 63 65 73 73 65 64 0a 20  eing processed. 
0640: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0650: 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20 69 6e  >.    private in
0660: 74 20 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 0a 20  t _fieldCount;. 
0670: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0680: 0a 20 20 20 20 2f 2f 2f 20 4d 61 70 73 20 74 68  .    /// Maps th
0690: 65 20 66 69 65 6c 64 20 28 63 6f 6c 75 6d 6e 29  e field (column)
06a0: 20 6e 61 6d 65 73 20 74 6f 20 74 68 65 69 72 20   names to their 
06b0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 69 6e  corresponding in
06c0: 64 65 78 65 73 20 77 69 74 68 69 6e 20 74 68 65  dexes within the
06d0: 20 72 65 73 75 6c 74 73 2e 0a 20 20 20 20 2f 2f   results..    //
06e0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
06f0: 20 70 72 69 76 61 74 65 20 44 69 63 74 69 6f 6e   private Diction
0700: 61 72 79 3c 73 74 72 69 6e 67 2c 20 69 6e 74 3e  ary<string, int>
0710: 20 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 3b 0a   _fieldIndexes;.
0720: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0730: 3e 0a 20 20 20 20 2f 2f 2f 20 44 61 74 61 74 79  >.    /// Dataty
0740: 70 65 73 20 6f 66 20 61 63 74 69 76 65 20 66 69  pes of active fi
0750: 65 6c 64 73 20 28 63 6f 6c 75 6d 6e 73 29 20 69  elds (columns) i
0760: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74  n the current st
0770: 61 74 65 6d 65 6e 74 2c 20 75 73 65 64 20 66 6f  atement, used fo
0780: 72 20 74 79 70 65 2d 72 65 73 74 72 69 63 74 69  r type-restricti
0790: 6e 67 20 64 61 74 61 0a 20 20 20 20 2f 2f 2f 20  ng data.    /// 
07a0: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 70  </summary>.    p
07b0: 72 69 76 61 74 65 20 53 51 4c 69 74 65 54 79 70  rivate SQLiteTyp
07c0: 65 5b 5d 20 5f 66 69 65 6c 64 54 79 70 65 41 72  e[] _fieldTypeAr
07d0: 72 61 79 3b 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73  ray;..    /// <s
07e0: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
07f0: 54 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20  The behavior of 
0800: 74 68 65 20 64 61 74 61 72 65 61 64 65 72 0a 20  the datareader. 
0810: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0820: 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20 43 6f  >.    private Co
0830: 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 5f 63  mmandBehavior _c
0840: 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 3b 0a  ommandBehavior;.
0850: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0860: 79 3e 0a 20 20 20 20 2f 2f 2f 20 49 66 20 73 65  y>.    /// If se
0870: 74 2c 20 74 68 65 6e 20 64 69 73 70 6f 73 65 20  t, then dispose 
0880: 6f 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6f  of the command o
0890: 62 6a 65 63 74 20 77 68 65 6e 20 74 68 65 20 72  bject when the r
08a0: 65 61 64 65 72 20 69 73 20 66 69 6e 69 73 68 65  eader is finishe
08b0: 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  d.    /// </summ
08c0: 61 72 79 3e 0a 20 20 20 20 69 6e 74 65 72 6e 61  ary>.    interna
08d0: 6c 20 62 6f 6f 6c 20 5f 64 69 73 70 6f 73 65 43  l bool _disposeC
08e0: 6f 6d 6d 61 6e 64 3b 0a 0a 20 20 20 20 2f 2f 2f  ommand;..    ///
08f0: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
0900: 2f 2f 20 49 66 20 73 65 74 2c 20 74 68 65 6e 20  // If set, then 
0910: 72 61 69 73 65 20 61 6e 20 65 78 63 65 70 74 69  raise an excepti
0920: 6f 6e 20 77 68 65 6e 20 74 68 65 20 6f 62 6a 65  on when the obje
0930: 63 74 20 69 73 20 61 63 63 65 73 73 65 64 20 61  ct is accessed a
0940: 66 74 65 72 20 62 65 69 6e 67 20 64 69 73 70 6f  fter being dispo
0950: 73 65 64 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  sed..    /// </s
0960: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 69 6e 74 65  ummary>.    inte
0970: 72 6e 61 6c 20 62 6f 6f 6c 20 5f 74 68 72 6f 77  rnal bool _throw
0980: 4f 6e 44 69 73 70 6f 73 65 64 3b 0a 0a 20 20 20  OnDisposed;..   
0990: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
09a0: 20 20 20 2f 2f 2f 20 41 6e 20 61 72 72 61 79 20     /// An array 
09b0: 6f 66 20 72 6f 77 69 64 27 73 20 66 6f 72 20 74  of rowid's for t
09c0: 68 65 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  he active statem
09d0: 65 6e 74 20 69 66 20 43 6f 6d 6d 61 6e 64 42 65  ent if CommandBe
09e0: 68 61 76 69 6f 72 2e 4b 65 79 49 6e 66 6f 20 69  havior.KeyInfo i
09f0: 73 20 73 70 65 63 69 66 69 65 64 0a 20 20 20 20  s specified.    
0a00: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
0a10: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
0a20: 65 4b 65 79 52 65 61 64 65 72 20 5f 6b 65 79 49  eKeyReader _keyI
0a30: 6e 66 6f 3b 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73  nfo;..    /// <s
0a40: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
0a50: 4d 61 74 63 68 65 73 20 74 68 65 20 76 65 72 73  Matches the vers
0a60: 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65  ion of the conne
0a70: 63 74 69 6f 6e 2e 0a 20 20 20 20 2f 2f 2f 20 3c  ction..    /// <
0a80: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 69 6e  /summary>.    in
0a90: 74 65 72 6e 61 6c 20 6c 6f 6e 67 20 5f 76 65 72  ternal long _ver
0aa0: 73 69 6f 6e 3b 0a 0a 20 20 20 20 2f 2f 2f 20 3c  sion;..    /// <
0ab0: 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f  summary>.    ///
0ac0: 20 54 68 65 20 22 73 74 75 62 22 20 28 69 2e 65   The "stub" (i.e
0ad0: 2e 20 70 6c 61 63 65 68 6f 6c 64 65 72 29 20 62  . placeholder) b
0ae0: 61 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 20  ase schema name 
0af0: 74 6f 20 75 73 65 20 77 68 65 6e 20 72 65 74 75  to use when retu
0b00: 72 6e 69 6e 67 0a 20 20 20 20 2f 2f 2f 20 63 6f  rning.    /// co
0b10: 6c 75 6d 6e 20 73 63 68 65 6d 61 20 69 6e 66 6f  lumn schema info
0b20: 72 6d 61 74 69 6f 6e 2e 20 20 4d 61 74 63 68 65  rmation.  Matche
0b30: 73 20 74 68 65 20 62 61 73 65 20 73 63 68 65 6d  s the base schem
0b40: 61 20 6e 61 6d 65 20 75 73 65 64 20 62 79 20 74  a name used by t
0b50: 68 65 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63  he.    /// assoc
0b60: 69 61 74 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  iated connection
0b70: 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
0b80: 61 72 79 3e 0a 20 20 20 20 70 72 69 76 61 74 65  ary>.    private
0b90: 20 73 74 72 69 6e 67 20 5f 62 61 73 65 53 63 68   string _baseSch
0ba0: 65 6d 61 4e 61 6d 65 3b 0a 0a 20 20 20 20 2f 2f  emaName;..    //
0bb0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
0bc0: 2f 2f 2f 20 49 6e 74 65 72 6e 61 6c 20 63 6f 6e  /// Internal con
0bd0: 73 74 72 75 63 74 6f 72 2c 20 69 6e 69 74 69 61  structor, initia
0be0: 6c 69 7a 65 73 20 74 68 65 20 64 61 74 61 72 65  lizes the datare
0bf0: 61 64 65 72 20 61 6e 64 20 73 65 74 73 20 75 70  ader and sets up
0c00: 20 74 6f 20 62 65 67 69 6e 20 65 78 65 63 75 74   to begin execut
0c10: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 0a 20  ing statements. 
0c20: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0c30: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
0c40: 20 6e 61 6d 65 3d 22 63 6d 64 22 3e 54 68 65 20   name="cmd">The 
0c50: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 74 68  SQLiteCommand th
0c60: 69 73 20 64 61 74 61 20 72 65 61 64 65 72 20 69  is data reader i
0c70: 73 20 66 6f 72 3c 2f 70 61 72 61 6d 3e 0a 20 20  s for</param>.  
0c80: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
0c90: 65 3d 22 62 65 68 61 76 65 22 3e 54 68 65 20 65  e="behave">The e
0ca0: 78 70 65 63 74 65 64 20 62 65 68 61 76 69 6f 72  xpected behavior
0cb0: 20 6f 66 20 74 68 65 20 64 61 74 61 20 72 65 61   of the data rea
0cc0: 64 65 72 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  der</param>.    
0cd0: 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 44  internal SQLiteD
0ce0: 61 74 61 52 65 61 64 65 72 28 53 51 4c 69 74 65  ataReader(SQLite
0cf0: 43 6f 6d 6d 61 6e 64 20 63 6d 64 2c 20 43 6f 6d  Command cmd, Com
0d00: 6d 61 6e 64 42 65 68 61 76 69 6f 72 20 62 65 68  mandBehavior beh
0d10: 61 76 65 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  ave).    {.     
0d20: 20 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65   _throwOnDispose
0d30: 64 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20  d = true;.      
0d40: 5f 63 6f 6d 6d 61 6e 64 20 3d 20 63 6d 64 3b 0a  _command = cmd;.
0d50: 20 20 20 20 20 20 5f 76 65 72 73 69 6f 6e 20 3d        _version =
0d60: 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63   _command.Connec
0d70: 74 69 6f 6e 2e 5f 76 65 72 73 69 6f 6e 3b 0a 20  tion._version;. 
0d80: 20 20 20 20 20 5f 62 61 73 65 53 63 68 65 6d 61       _baseSchema
0d90: 4e 61 6d 65 20 3d 20 5f 63 6f 6d 6d 61 6e 64 2e  Name = _command.
0da0: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 62 61 73 65  Connection._base
0db0: 53 63 68 65 6d 61 4e 61 6d 65 3b 0a 0a 20 20 20  SchemaName;..   
0dc0: 20 20 20 5f 63 6f 6d 6d 61 6e 64 42 65 68 61 76     _commandBehav
0dd0: 69 6f 72 20 3d 20 62 65 68 61 76 65 3b 0a 20 20  ior = behave;.  
0de0: 20 20 20 20 5f 61 63 74 69 76 65 53 74 61 74 65      _activeState
0df0: 6d 65 6e 74 49 6e 64 65 78 20 3d 20 2d 31 3b 0a  mentIndex = -1;.
0e00: 20 20 20 20 20 20 5f 72 6f 77 73 41 66 66 65 63        _rowsAffec
0e10: 74 65 64 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 20  ted = -1;..     
0e20: 20 69 66 20 28 5f 63 6f 6d 6d 61 6e 64 20 21 3d   if (_command !=
0e30: 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 4e   null).        N
0e40: 65 78 74 52 65 73 75 6c 74 28 29 3b 0a 20 20 20  extResult();.   
0e50: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f   }..    ////////
0e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0eb0: 2f 2f 2f 2f 2f 2f 2f 0a 0a 20 20 20 20 23 72 65  ///////..    #re
0ec0: 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65  gion IDisposable
0ed0: 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65   "Pattern" Membe
0ee0: 72 73 0a 20 20 20 20 70 72 69 76 61 74 65 20 62  rs.    private b
0ef0: 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0a 20 20  ool disposed;.  
0f00: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
0f10: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f  heckDisposed() /
0f20: 2a 20 74 68 72 6f 77 20 2a 2f 0a 20 20 20 20 7b  * throw */.    {
0f30: 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49  .#if THROW_ON_DI
0f40: 53 50 4f 53 45 44 0a 20 20 20 20 20 20 20 20 69  SPOSED.        i
0f50: 66 20 28 64 69 73 70 6f 73 65 64 20 26 26 20 5f  f (disposed && _
0f60: 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64 29  throwOnDisposed)
0f70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
0f80: 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73  ow new ObjectDis
0f90: 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 74  posedException(t
0fa0: 79 70 65 6f 66 28 53 51 4c 69 74 65 44 61 74 61  ypeof(SQLiteData
0fb0: 52 65 61 64 65 72 29 2e 4e 61 6d 65 29 3b 0a 23  Reader).Name);.#
0fc0: 65 6e 64 69 66 0a 20 20 20 20 7d 0a 0a 20 20 20  endif.    }..   
0fd0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
0fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
1040: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 44 69 73 70  ry>.    /// Disp
1050: 6f 73 65 20 6f 66 20 61 6c 6c 20 72 65 73 6f 75  ose of all resou
1060: 72 63 65 73 20 75 73 65 64 20 62 79 20 74 68 69  rces used by thi
1070: 73 20 64 61 74 61 72 65 61 64 65 72 2e 0a 20 20  s datareader..  
1080: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1090: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
10a0: 6e 61 6d 65 3d 22 64 69 73 70 6f 73 69 6e 67 22  name="disposing"
10b0: 3e 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 70 72  ></param>.    pr
10c0: 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64 65  otected override
10d0: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62 6f   void Dispose(bo
10e0: 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0a 20 20  ol disposing).  
10f0: 20 20 7b 0a 20 20 20 20 20 20 20 20 74 72 79 0a    {.        try.
1100: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
1110: 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70 6f        if (!dispo
1120: 73 65 64 29 0a 20 20 20 20 20 20 20 20 20 20 20  sed).           
1130: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
1140: 20 20 20 2f 2f 69 66 20 28 64 69 73 70 6f 73 69     //if (disposi
1150: 6e 67 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  ng).            
1160: 20 20 20 20 2f 2f 7b 0a 20 20 20 20 20 20 20 20      //{.        
1170: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f          //    //
1180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11a0: 2f 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  //.             
11b0: 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70     //    // disp
11c0: 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f  ose managed reso
11d0: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0a 20 20  urces here....  
11e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11f0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1210: 2f 2f 2f 2f 2f 2f 2f 2f 0a 20 20 20 20 20 20 20  ////////.       
1220: 20 20 20 20 20 20 20 20 20 2f 2f 7d 0a 0a 20 20           //}..  
1230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1260: 2f 2f 2f 2f 0a 20 20 20 20 20 20 20 20 20 20 20  ////.           
1270: 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20       // release 
1280: 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  unmanaged resour
1290: 63 65 73 20 68 65 72 65 2e 2e 2e 0a 20 20 20 20  ces here....    
12a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
12b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d0: 2f 2f 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
12e0: 20 20 20 20 2f 2f 0a 20 20 20 20 20 20 20 20 20      //.         
12f0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1300: 46 69 78 20 66 6f 72 20 74 69 63 6b 65 74 20 5b  Fix for ticket [
1310: 65 31 62 32 65 30 66 37 36 39 5d 2c 20 64 6f 20  e1b2e0f769], do 
1320: 4e 4f 54 20 74 68 72 6f 77 20 65 78 63 65 70 74  NOT throw except
1330: 69 6f 6e 73 0a 20 20 20 20 20 20 20 20 20 20 20  ions.           
1340: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 77 68       //       wh
1350: 69 6c 65 20 77 65 20 61 72 65 20 62 65 69 6e 67  ile we are being
1360: 20 64 69 73 70 6f 73 65 64 2e 0a 20 20 20 20 20   disposed..     
1370: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0a 20 20             //.  
1380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 74                _t
1390: 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64 20 3d  hrowOnDisposed =
13a0: 20 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20   false;.        
13b0: 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 65 64          disposed
13c0: 20 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20   = true;.       
13d0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
13e0: 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
13f0: 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
1400: 20 20 20 20 20 20 20 62 61 73 65 2e 44 69 73 70         base.Disp
1410: 6f 73 65 28 64 69 73 70 6f 73 69 6e 67 29 3b 0a  ose(disposing);.
1420: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a          }.    }.
1430: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0a 0a      #endregion..
1440: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14a0: 2f 2f 2f 0a 0a 20 20 20 20 69 6e 74 65 72 6e 61  ///..    interna
14b0: 6c 20 76 6f 69 64 20 43 61 6e 63 65 6c 28 29 0a  l void Cancel().
14c0: 20 20 20 20 7b 0a 20 20 20 20 20 20 5f 76 65 72      {.      _ver
14d0: 73 69 6f 6e 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  sion = 0;.    }.
14e0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
14f0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 43 6c 6f 73 65  y>.    /// Close
1500: 73 20 74 68 65 20 64 61 74 61 72 65 61 64 65 72  s the datareader
1510: 2c 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20 63 6c  , potentially cl
1520: 6f 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63  osing the connec
1530: 74 69 6f 6e 20 61 73 20 77 65 6c 6c 20 69 66 20  tion as well if 
1540: 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e  CommandBehavior.
1550: 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  CloseConnection 
1560: 77 61 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20  was specified.. 
1570: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1580: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
1590: 72 72 69 64 65 20 76 6f 69 64 20 43 6c 6f 73 65  rride void Close
15a0: 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 43  ().    {.      C
15b0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a  heckDisposed();.
15c0: 0a 20 20 20 20 20 20 74 72 79 0a 20 20 20 20 20  .      try.     
15d0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f   {.        if (_
15e0: 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29  command != null)
15f0: 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
1600: 20 20 20 20 20 74 72 79 0a 20 20 20 20 20 20 20       try.       
1610: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
1620: 20 74 72 79 0a 20 20 20 20 20 20 20 20 20 20 20   try.           
1630: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
1640: 20 2f 2f 20 4d 61 6b 65 20 73 75 72 65 20 77 65   // Make sure we
1650: 27 76 65 20 6e 6f 74 20 62 65 65 6e 20 63 61 6e  've not been can
1660: 63 65 6c 65 64 0a 20 20 20 20 20 20 20 20 20 20  celed.          
1670: 20 20 20 20 69 66 20 28 5f 76 65 72 73 69 6f 6e      if (_version
1680: 20 21 3d 20 30 29 0a 20 20 20 20 20 20 20 20 20   != 0).         
1690: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
16a0: 20 20 20 20 20 20 20 74 72 79 0a 20 20 20 20 20         try.     
16b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20             {.   
16c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
16d0: 68 69 6c 65 20 28 4e 65 78 74 52 65 73 75 6c 74  hile (NextResult
16e0: 28 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()).            
16f0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
1700: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1710: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
1720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
1730: 74 63 68 28 53 51 4c 69 74 65 45 78 63 65 70 74  tch(SQLiteExcept
1740: 69 6f 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20  ion).           
1750: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
1760: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1770: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1780: 20 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e         _command.
1790: 43 6c 65 61 72 44 61 74 61 52 65 61 64 65 72 28  ClearDataReader(
17a0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  );.            }
17b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e  .            fin
17c0: 61 6c 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20  ally.           
17d0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
17e0: 20 2f 2f 20 49 66 20 74 68 65 20 64 61 74 61 72   // If the datar
17f0: 65 61 64 65 72 27 73 20 62 65 68 61 76 69 6f 72  eader's behavior
1800: 20 69 6e 63 6c 75 64 65 73 20 63 6c 6f 73 69 6e   includes closin
1810: 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  g the connection
1820: 2c 20 74 68 65 6e 20 64 6f 20 73 6f 20 68 65 72  , then do so her
1830: 65 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1840: 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65   if ((_commandBe
1850: 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64  havior & Command
1860: 42 65 68 61 76 69 6f 72 2e 43 6c 6f 73 65 43 6f  Behavior.CloseCo
1870: 6e 6e 65 63 74 69 6f 6e 29 20 21 3d 20 30 20 26  nnection) != 0 &
1880: 26 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65  & _command.Conne
1890: 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0a 20  ction != null). 
18a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
18b0: 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69  command.Connecti
18c0: 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0a 20 20 20 20  on.Close();.    
18d0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
18e0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
18f0: 66 69 6e 61 6c 6c 79 0a 20 20 20 20 20 20 20 20  finally.        
1900: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
1910: 69 66 20 28 5f 64 69 73 70 6f 73 65 43 6f 6d 6d  if (_disposeComm
1920: 61 6e 64 29 0a 20 20 20 20 20 20 20 20 20 20 20  and).           
1930: 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 44 69 73 70     _command.Disp
1940: 6f 73 65 28 29 3b 0a 20 20 20 20 20 20 20 20 20  ose();.         
1950: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20   }.        }..  
1960: 20 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 20 3d        _command =
1970: 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 5f   null;.        _
1980: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 20  activeStatement 
1990: 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  = null;.        
19a0: 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 20 3d 20  _fieldIndexes = 
19b0: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 5f 66  null;.        _f
19c0: 69 65 6c 64 54 79 70 65 41 72 72 61 79 20 3d 20  ieldTypeArray = 
19d0: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20  null;.      }.  
19e0: 20 20 20 20 66 69 6e 61 6c 6c 79 0a 20 20 20 20      finally.    
19f0: 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 28    {.        if (
1a00: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
1a10: 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  ).        {.    
1a20: 20 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 2e 44        _keyInfo.D
1a30: 69 73 70 6f 73 65 28 29 3b 0a 20 20 20 20 20 20  ispose();.      
1a40: 20 20 20 20 5f 6b 65 79 49 6e 66 6f 20 3d 20 6e      _keyInfo = n
1a50: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ull;.        }. 
1a60: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20       }.    }..  
1a70: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
1a80: 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77 20 61 6e      /// Throw an
1a90: 20 65 72 72 6f 72 20 69 66 20 74 68 65 20 64 61   error if the da
1aa0: 74 61 72 65 61 64 65 72 20 69 73 20 63 6c 6f 73  tareader is clos
1ab0: 65 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ed.    /// </sum
1ac0: 6d 61 72 79 3e 0a 20 20 20 20 70 72 69 76 61 74  mary>.    privat
1ad0: 65 20 76 6f 69 64 20 43 68 65 63 6b 43 6c 6f 73  e void CheckClos
1ae0: 65 64 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  ed().    {.     
1af0: 20 69 66 20 28 21 5f 74 68 72 6f 77 4f 6e 44 69   if (!_throwOnDi
1b00: 73 70 6f 73 65 64 29 0a 20 20 20 20 20 20 20 20  sposed).        
1b10: 72 65 74 75 72 6e 3b 0a 0a 20 20 20 20 20 20 69  return;..      i
1b20: 66 20 28 5f 63 6f 6d 6d 61 6e 64 20 3d 3d 20 6e  f (_command == n
1b30: 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 74 68 72  ull).        thr
1b40: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
1b50: 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
1b60: 28 22 44 61 74 61 52 65 61 64 65 72 20 68 61 73  ("DataReader has
1b70: 20 62 65 65 6e 20 63 6c 6f 73 65 64 22 29 3b 0a   been closed");.
1b80: 0a 20 20 20 20 20 20 69 66 20 28 5f 76 65 72 73  .      if (_vers
1b90: 69 6f 6e 20 3d 3d 20 30 29 0a 20 20 20 20 20 20  ion == 0).      
1ba0: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
1bb0: 74 65 45 78 63 65 70 74 69 6f 6e 28 22 45 78 65  teException("Exe
1bc0: 63 75 74 69 6f 6e 20 77 61 73 20 61 62 6f 72 74  cution was abort
1bd0: 65 64 20 62 79 20 74 68 65 20 75 73 65 72 22 29  ed by the user")
1be0: 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 5f 63 6f  ;..      if (_co
1bf0: 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e  mmand.Connection
1c00: 2e 53 74 61 74 65 20 21 3d 20 43 6f 6e 6e 65 63  .State != Connec
1c10: 74 69 6f 6e 53 74 61 74 65 2e 4f 70 65 6e 20 7c  tionState.Open |
1c20: 7c 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65  | _command.Conne
1c30: 63 74 69 6f 6e 2e 5f 76 65 72 73 69 6f 6e 20 21  ction._version !
1c40: 3d 20 5f 76 65 72 73 69 6f 6e 29 0a 20 20 20 20  = _version).    
1c50: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
1c60: 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
1c70: 63 65 70 74 69 6f 6e 28 22 43 6f 6e 6e 65 63 74  ception("Connect
1c80: 69 6f 6e 20 77 61 73 20 63 6c 6f 73 65 64 2c 20  ion was closed, 
1c90: 73 74 61 74 65 6d 65 6e 74 20 77 61 73 20 74 65  statement was te
1ca0: 72 6d 69 6e 61 74 65 64 22 29 3b 0a 20 20 20 20  rminated");.    
1cb0: 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
1cc0: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 54 68 72  ary>.    /// Thr
1cd0: 6f 77 20 61 6e 20 65 72 72 6f 72 20 69 66 20 61  ow an error if a
1ce0: 20 72 6f 77 20 69 73 20 6e 6f 74 20 6c 6f 61 64   row is not load
1cf0: 65 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ed.    /// </sum
1d00: 6d 61 72 79 3e 0a 20 20 20 20 70 72 69 76 61 74  mary>.    privat
1d10: 65 20 76 6f 69 64 20 43 68 65 63 6b 56 61 6c 69  e void CheckVali
1d20: 64 52 6f 77 28 29 0a 20 20 20 20 7b 0a 20 20 20  dRow().    {.   
1d30: 20 20 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53     if (_readingS
1d40: 74 61 74 65 20 21 3d 20 30 29 0a 20 20 20 20 20  tate != 0).     
1d50: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
1d60: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
1d70: 65 70 74 69 6f 6e 28 22 4e 6f 20 63 75 72 72 65  eption("No curre
1d80: 6e 74 20 72 6f 77 22 29 3b 0a 20 20 20 20 7d 0a  nt row");.    }.
1d90: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
1da0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 45 6e 75 6d 65  y>.    /// Enume
1db0: 72 61 74 6f 72 20 73 75 70 70 6f 72 74 0a 20 20  rator support.  
1dc0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1dd0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
1de0: 73 3e 52 65 74 75 72 6e 73 20 61 20 44 62 45 6e  s>Returns a DbEn
1df0: 75 6d 65 72 61 74 6f 72 20 6f 62 6a 65 63 74 2e  umerator object.
1e00: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
1e10: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 43  ublic override C
1e20: 6f 6c 6c 65 63 74 69 6f 6e 73 2e 49 45 6e 75 6d  ollections.IEnum
1e30: 65 72 61 74 6f 72 20 47 65 74 45 6e 75 6d 65 72  erator GetEnumer
1e40: 61 74 6f 72 28 29 0a 20 20 20 20 7b 0a 20 20 20  ator().    {.   
1e50: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
1e60: 28 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ();.      return
1e70: 20 6e 65 77 20 44 62 45 6e 75 6d 65 72 61 74 6f   new DbEnumerato
1e80: 72 28 74 68 69 73 2c 20 28 28 5f 63 6f 6d 6d 61  r(this, ((_comma
1e90: 6e 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f 6d  ndBehavior & Com
1ea0: 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 43 6c 6f  mandBehavior.Clo
1eb0: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 29 20 3d 3d  seConnection) ==
1ec0: 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72   CommandBehavior
1ed0: 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69 6f 6e  .CloseConnection
1ee0: 29 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ));.    }..    /
1ef0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
1f00: 20 2f 2f 2f 20 4e 6f 74 20 69 6d 70 6c 65 6d 65   /// Not impleme
1f10: 6e 74 65 64 2e 20 20 52 65 74 75 72 6e 73 20 30  nted.  Returns 0
1f20: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
1f30: 72 79 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ry>.    public o
1f40: 76 65 72 72 69 64 65 20 69 6e 74 20 44 65 70 74  verride int Dept
1f50: 68 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65  h.    {.      ge
1f60: 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  t.      {.      
1f70: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
1f80: 29 3b 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  );.        Check
1f90: 43 6c 6f 73 65 64 28 29 3b 0a 20 20 20 20 20 20  Closed();.      
1fa0: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20    return 0;.    
1fb0: 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f    }.    }..    /
1fc0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
1fd0: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
1fe0: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1ff0: 6e 73 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e  ns in the curren
2000: 74 20 72 65 73 75 6c 74 73 65 74 0a 20 20 20 20  t resultset.    
2010: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
2020: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
2030: 64 65 20 69 6e 74 20 46 69 65 6c 64 43 6f 75 6e  de int FieldCoun
2040: 74 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65  t.    {.      ge
2050: 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  t.      {.      
2060: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
2070: 29 3b 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  );.        Check
2080: 43 6c 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20  Closed();..     
2090: 20 20 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20     if (_keyInfo 
20a0: 3d 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20  == null).       
20b0: 20 20 20 72 65 74 75 72 6e 20 5f 66 69 65 6c 64     return _field
20c0: 43 6f 75 6e 74 3b 0a 0a 20 20 20 20 20 20 20 20  Count;..        
20d0: 72 65 74 75 72 6e 20 5f 66 69 65 6c 64 43 6f 75  return _fieldCou
20e0: 6e 74 20 2b 20 5f 6b 65 79 49 6e 66 6f 2e 43 6f  nt + _keyInfo.Co
20f0: 75 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  unt;.      }.   
2100: 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d   }..    /// <sum
2110: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65  mary>.    /// Re
2120: 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
2130: 20 6f 66 20 76 69 73 69 62 6c 65 20 66 69 65 6c   of visible fiel
2140: 64 73 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e  ds in the curren
2150: 74 20 72 65 73 75 6c 74 73 65 74 0a 20 20 20 20  t resultset.    
2160: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
2170: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
2180: 64 65 20 69 6e 74 20 56 69 73 69 62 6c 65 46 69  de int VisibleFi
2190: 65 6c 64 43 6f 75 6e 74 0a 20 20 20 20 7b 0a 20  eldCount.    {. 
21a0: 20 20 20 20 20 67 65 74 0a 20 20 20 20 20 20 7b       get.      {
21b0: 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69  .        CheckDi
21c0: 73 70 6f 73 65 64 28 29 3b 0a 20 20 20 20 20 20  sposed();.      
21d0: 20 20 43 68 65 63 6b 43 6c 6f 73 65 64 28 29 3b    CheckClosed();
21e0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
21f0: 5f 66 69 65 6c 64 43 6f 75 6e 74 3b 0a 20 20 20  _fieldCount;.   
2200: 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20     }.    }..    
2210: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
2220: 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 69 73 20    /// SQLite is 
2230: 69 6e 68 65 72 65 6e 74 6c 79 20 75 6e 2d 74 79  inherently un-ty
2240: 70 65 64 2e 20 20 41 6c 6c 20 64 61 74 61 74 79  ped.  All dataty
2250: 70 65 73 20 69 6e 20 53 51 4c 69 74 65 20 61 72  pes in SQLite ar
2260: 65 20 6e 61 74 69 76 65 6c 79 20 73 74 72 69 6e  e natively strin
2270: 67 73 2e 20 20 54 68 65 20 64 65 66 69 6e 69 74  gs.  The definit
2280: 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ion of the colum
2290: 6e 73 20 6f 66 20 61 20 74 61 62 6c 65 0a 20 20  ns of a table.  
22a0: 20 20 2f 2f 2f 20 61 6e 64 20 74 68 65 20 61 66    /// and the af
22b0: 66 69 6e 69 74 79 20 6f 66 20 72 65 74 75 72 6e  finity of return
22c0: 65 64 20 74 79 70 65 73 20 61 72 65 20 61 6c 6c  ed types are all
22d0: 20 77 65 20 68 61 76 65 20 74 6f 20 67 6f 20 6f   we have to go o
22e0: 6e 20 74 6f 20 74 79 70 65 2d 72 65 73 74 72 69  n to type-restri
22f0: 63 74 20 64 61 74 61 20 69 6e 20 74 68 65 20 72  ct data in the r
2300: 65 61 64 65 72 2e 0a 20 20 20 20 2f 2f 2f 20 0a  eader..    /// .
2310: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e      /// This fun
2320: 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 20 74  ction attempts t
2330: 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68  o verify that th
2340: 65 20 74 79 70 65 20 6f 66 20 64 61 74 61 20 62  e type of data b
2350: 65 69 6e 67 20 72 65 71 75 65 73 74 65 64 20 6f  eing requested o
2360: 66 20 61 20 63 6f 6c 75 6d 6e 20 6d 61 74 63 68  f a column match
2370: 65 73 20 74 68 65 20 64 61 74 61 74 79 70 65 20  es the datatype 
2380: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 20 20  of the column.  
2390: 49 6e 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 63  In.    /// the c
23a0: 61 73 65 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74  ase of columns t
23b0: 68 61 74 20 61 72 65 20 6e 6f 74 20 62 61 63 6b  hat are not back
23c0: 65 64 20 69 6e 74 6f 20 61 20 74 61 62 6c 65 20  ed into a table 
23d0: 64 65 66 69 6e 69 74 69 6f 6e 2c 20 77 65 20 61  definition, we a
23e0: 74 74 65 6d 70 74 20 74 6f 20 6d 61 74 63 68 20  ttempt to match 
23f0: 75 70 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  up the affinity 
2400: 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 28 69 6e 74  of a column (int
2410: 2c 20 64 6f 75 62 6c 65 2c 20 73 74 72 69 6e 67  , double, string
2420: 20 6f 72 20 62 6c 6f 62 29 0a 20 20 20 20 2f 2f   or blob).    //
2430: 2f 20 74 6f 20 61 20 73 65 74 20 6f 66 20 6b 6e  / to a set of kn
2440: 6f 77 6e 20 74 79 70 65 73 20 74 68 61 74 20 63  own types that c
2450: 6c 6f 73 65 6c 79 20 6d 61 74 63 68 20 74 68 61  losely match tha
2460: 74 20 61 66 66 69 6e 69 74 79 2e 20 20 49 74 27  t affinity.  It'
2470: 73 20 6e 6f 74 20 61 6e 20 65 78 61 63 74 20 73  s not an exact s
2480: 63 69 65 6e 63 65 2c 20 62 75 74 20 69 74 73 20  cience, but its 
2490: 74 68 65 20 62 65 73 74 20 77 65 20 63 61 6e 20  the best we can 
24a0: 64 6f 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  do..    /// </su
24b0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c  mmary>.    /// <
24c0: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 2f 2f 2f  returns>.    ///
24d0: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 74   This function t
24e0: 68 72 6f 77 73 20 61 6e 20 49 6e 76 61 6c 69 64  hrows an Invalid
24f0: 54 79 70 65 43 61 73 74 28 29 20 65 78 63 65 70  TypeCast() excep
2500: 74 69 6f 6e 20 69 66 20 74 68 65 20 72 65 71 75  tion if the requ
2510: 65 73 74 65 64 20 74 79 70 65 20 64 6f 65 73 6e  ested type doesn
2520: 27 74 20 6d 61 74 63 68 20 74 68 65 20 63 6f 6c  't match the col
2530: 75 6d 6e 27 73 20 64 65 66 69 6e 69 74 69 6f 6e  umn's definition
2540: 20 6f 72 20 61 66 66 69 6e 69 74 79 2e 0a 20 20   or affinity..  
2550: 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
2560: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
2570: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
2580: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
2590: 20 74 6f 20 74 79 70 65 2d 63 68 65 63 6b 3c 2f   to type-check</
25a0: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
25b0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70 22  param name="typ"
25c0: 3e 54 68 65 20 74 79 70 65 20 77 65 20 77 61 6e  >The type we wan
25d0: 74 20 74 6f 20 67 65 74 20 6f 75 74 20 6f 66 20  t to get out of 
25e0: 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 70 61 72 61  the column</para
25f0: 6d 3e 0a 20 20 20 20 70 72 69 76 61 74 65 20 54  m>.    private T
2600: 79 70 65 41 66 66 69 6e 69 74 79 20 56 65 72 69  ypeAffinity Veri
2610: 66 79 54 79 70 65 28 69 6e 74 20 69 2c 20 44 62  fyType(int i, Db
2620: 54 79 70 65 20 74 79 70 29 0a 20 20 20 20 7b 0a  Type typ).    {.
2630: 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65        CheckClose
2640: 64 28 29 3b 0a 20 20 20 20 20 20 43 68 65 63 6b  d();.      Check
2650: 56 61 6c 69 64 52 6f 77 28 29 3b 0a 0a 20 20 20  ValidRow();..   
2660: 20 20 20 54 79 70 65 41 66 66 69 6e 69 74 79 20     TypeAffinity 
2670: 61 66 66 69 6e 69 74 79 20 3d 20 47 65 74 53 51  affinity = GetSQ
2680: 4c 69 74 65 54 79 70 65 28 69 29 2e 41 66 66 69  LiteType(i).Affi
2690: 6e 69 74 79 3b 0a 0a 20 20 20 20 20 20 73 77 69  nity;..      swi
26a0: 74 63 68 20 28 61 66 66 69 6e 69 74 79 29 0a 20  tch (affinity). 
26b0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 63       {.        c
26c0: 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ase TypeAffinity
26d0: 2e 49 6e 74 36 34 3a 0a 20 20 20 20 20 20 20 20  .Int64:.        
26e0: 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54    if (typ == DbT
26f0: 79 70 65 2e 49 6e 74 31 36 29 20 72 65 74 75 72  ype.Int16) retur
2700: 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20  n affinity;.    
2710: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
2720: 20 44 62 54 79 70 65 2e 49 6e 74 33 32 29 20 72   DbType.Int32) r
2730: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a  eturn affinity;.
2740: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
2750: 70 20 3d 3d 20 44 62 54 79 70 65 2e 49 6e 74 36  p == DbType.Int6
2760: 34 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69  4) return affini
2770: 74 79 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  ty;.          if
2780: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
2790: 42 6f 6f 6c 65 61 6e 29 20 72 65 74 75 72 6e 20  Boolean) return 
27a0: 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20 20 20  affinity;.      
27b0: 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44      if (typ == D
27c0: 62 54 79 70 65 2e 42 79 74 65 29 20 72 65 74 75  bType.Byte) retu
27d0: 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20  rn affinity;.   
27e0: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
27f0: 3d 20 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d  = DbType.DateTim
2800: 65 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69  e) return affini
2810: 74 79 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  ty;.          if
2820: 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e   (typ == DbType.
2830: 53 69 6e 67 6c 65 29 20 72 65 74 75 72 6e 20 61  Single) return a
2840: 66 66 69 6e 69 74 79 3b 0a 20 20 20 20 20 20 20  ffinity;.       
2850: 20 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62     if (typ == Db
2860: 54 79 70 65 2e 44 6f 75 62 6c 65 29 20 72 65 74  Type.Double) ret
2870: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20  urn affinity;.  
2880: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20          if (typ 
2890: 3d 3d 20 44 62 54 79 70 65 2e 44 65 63 69 6d 61  == DbType.Decima
28a0: 6c 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69  l) return affini
28b0: 74 79 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72  ty;.          br
28c0: 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73  eak;.        cas
28d0: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44  e TypeAffinity.D
28e0: 6f 75 62 6c 65 3a 0a 20 20 20 20 20 20 20 20 20  ouble:.         
28f0: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
2900: 70 65 2e 53 69 6e 67 6c 65 29 20 72 65 74 75 72  pe.Single) retur
2910: 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20  n affinity;.    
2920: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
2930: 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 29 20   DbType.Double) 
2940: 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b  return affinity;
2950: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
2960: 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 44 65 63  yp == DbType.Dec
2970: 69 6d 61 6c 29 20 72 65 74 75 72 6e 20 61 66 66  imal) return aff
2980: 69 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20 20  inity;.         
2990: 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79   if (typ == DbTy
29a0: 70 65 2e 44 61 74 65 54 69 6d 65 29 20 72 65 74  pe.DateTime) ret
29b0: 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20  urn affinity;.  
29c0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
29d0: 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
29e0: 41 66 66 69 6e 69 74 79 2e 54 65 78 74 3a 0a 20  Affinity.Text:. 
29f0: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
2a00: 20 3d 3d 20 44 62 54 79 70 65 2e 53 42 79 74 65   == DbType.SByte
2a10: 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e 69 74  ) return affinit
2a20: 79 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  y;.          if 
2a30: 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65 2e 53  (typ == DbType.S
2a40: 74 72 69 6e 67 29 20 72 65 74 75 72 6e 20 61 66  tring) return af
2a50: 66 69 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20  finity;.        
2a60: 20 20 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54    if (typ == DbT
2a70: 79 70 65 2e 53 42 79 74 65 29 20 72 65 74 75 72  ype.SByte) retur
2a80: 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20  n affinity;.    
2a90: 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d 3d        if (typ ==
2aa0: 20 44 62 54 79 70 65 2e 47 75 69 64 29 20 72 65   DbType.Guid) re
2ab0: 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20  turn affinity;. 
2ac0: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
2ad0: 20 3d 3d 20 44 62 54 79 70 65 2e 44 61 74 65 54   == DbType.DateT
2ae0: 69 6d 65 29 20 72 65 74 75 72 6e 20 61 66 66 69  ime) return affi
2af0: 6e 69 74 79 3b 0a 20 20 20 20 20 20 20 20 20 20  nity;.          
2b00: 69 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70  if (typ == DbTyp
2b10: 65 2e 44 65 63 69 6d 61 6c 29 20 72 65 74 75 72  e.Decimal) retur
2b20: 6e 20 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20  n affinity;.    
2b30: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2b40: 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
2b50: 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0a 20 20 20  finity.Blob:.   
2b60: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 20 3d         if (typ =
2b70: 3d 20 44 62 54 79 70 65 2e 47 75 69 64 29 20 72  = DbType.Guid) r
2b80: 65 74 75 72 6e 20 61 66 66 69 6e 69 74 79 3b 0a  eturn affinity;.
2b90: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
2ba0: 70 20 3d 3d 20 44 62 54 79 70 65 2e 53 74 72 69  p == DbType.Stri
2bb0: 6e 67 29 20 72 65 74 75 72 6e 20 61 66 66 69 6e  ng) return affin
2bc0: 69 74 79 3b 0a 20 20 20 20 20 20 20 20 20 20 69  ity;.          i
2bd0: 66 20 28 74 79 70 20 3d 3d 20 44 62 54 79 70 65  f (typ == DbType
2be0: 2e 42 69 6e 61 72 79 29 20 72 65 74 75 72 6e 20  .Binary) return 
2bf0: 61 66 66 69 6e 69 74 79 3b 0a 20 20 20 20 20 20  affinity;.      
2c00: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
2c10: 20 7d 0a 0a 20 20 20 20 20 20 74 68 72 6f 77 20   }..      throw 
2c20: 6e 65 77 20 49 6e 76 61 6c 69 64 43 61 73 74 45  new InvalidCastE
2c30: 78 63 65 70 74 69 6f 6e 28 29 3b 0a 20 20 20 20  xception();.    
2c40: 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
2c50: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ary>.    /// Ret
2c60: 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c 75 6d  rieves the colum
2c70: 6e 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76  n as a boolean v
2c80: 61 6c 75 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  alue.    /// </s
2c90: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
2ca0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
2cb0: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
2cc0: 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69   column to retri
2cd0: 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  eve</param>.    
2ce0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 62 6f 6f  /// <returns>boo
2cf0: 6c 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20  l</returns>.    
2d00: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
2d10: 62 6f 6f 6c 20 47 65 74 42 6f 6f 6c 65 61 6e 28  bool GetBoolean(
2d20: 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20 20 20  int i).    {.   
2d30: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
2d40: 28 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 69  ();..      if (i
2d50: 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65 6c 64   >= VisibleField
2d60: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
2d70: 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20  o != null).     
2d80: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
2d90: 66 6f 2e 47 65 74 42 6f 6f 6c 65 61 6e 28 69 20  fo.GetBoolean(i 
2da0: 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  - VisibleFieldCo
2db0: 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20 56 65 72  unt);..      Ver
2dc0: 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79 70  ifyType(i, DbTyp
2dd0: 65 2e 42 6f 6f 6c 65 61 6e 29 3b 0a 20 20 20 20  e.Boolean);.    
2de0: 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74    return Convert
2df0: 2e 54 6f 42 6f 6f 6c 65 61 6e 28 47 65 74 56 61  .ToBoolean(GetVa
2e00: 6c 75 65 28 69 29 2c 20 43 75 6c 74 75 72 65 49  lue(i), CultureI
2e10: 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
2e20: 72 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  re);.    }..    
2e30: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
2e40: 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20    /// Retrieves 
2e50: 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20  the column as a 
2e60: 73 69 6e 67 6c 65 20 62 79 74 65 20 76 61 6c 75  single byte valu
2e70: 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  e.    /// </summ
2e80: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
2e90: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
2ea0: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
2eb0: 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65  lumn to retrieve
2ec0: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
2ed0: 20 3c 72 65 74 75 72 6e 73 3e 62 79 74 65 3c 2f   <returns>byte</
2ee0: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62  returns>.    pub
2ef0: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 79 74  lic override byt
2f00: 65 20 47 65 74 42 79 74 65 28 69 6e 74 20 69 29  e GetByte(int i)
2f10: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 43 68 65  .    {.      Che
2f20: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a 0a 20  ckDisposed();.. 
2f30: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 56 69       if (i >= Vi
2f40: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20  sibleFieldCount 
2f50: 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  && _keyInfo != n
2f60: 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 72 65 74  ull).        ret
2f70: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
2f80: 42 79 74 65 28 69 20 2d 20 56 69 73 69 62 6c 65  Byte(i - Visible
2f90: 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20 20  FieldCount);..  
2fa0: 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69      VerifyType(i
2fb0: 2c 20 44 62 54 79 70 65 2e 42 79 74 65 29 3b 0a  , DbType.Byte);.
2fc0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e        return Con
2fd0: 76 65 72 74 2e 54 6f 42 79 74 65 28 5f 61 63 74  vert.ToByte(_act
2fe0: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
2ff0: 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61 63 74 69  l.GetInt32(_acti
3000: 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29 29  veStatement, i))
3010: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
3020: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
3030: 2f 2f 20 52 65 74 72 69 65 76 65 73 20 61 20 63  // Retrieves a c
3040: 6f 6c 75 6d 6e 20 61 73 20 61 6e 20 61 72 72 61  olumn as an arra
3050: 79 20 6f 66 20 62 79 74 65 73 20 28 62 6c 6f 62  y of bytes (blob
3060: 29 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ).    /// </summ
3070: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
3080: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
3090: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
30a0: 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65  lumn to retrieve
30b0: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
30c0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69   <param name="fi
30d0: 65 6c 64 4f 66 66 73 65 74 22 3e 54 68 65 20 7a  eldOffset">The z
30e0: 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78 20  ero-based index 
30f0: 6f 66 20 77 68 65 72 65 20 74 6f 20 62 65 67 69  of where to begi
3100: 6e 20 72 65 61 64 69 6e 67 20 74 68 65 20 64 61  n reading the da
3110: 74 61 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f  ta</param>.    /
3120: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
3130: 62 75 66 66 65 72 22 3e 54 68 65 20 62 75 66 66  buffer">The buff
3140: 65 72 20 74 6f 20 77 72 69 74 65 20 74 68 65 20  er to write the 
3150: 62 79 74 65 73 20 69 6e 74 6f 3c 2f 70 61 72 61  bytes into</para
3160: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  m>.    /// <para
3170: 6d 20 6e 61 6d 65 3d 22 62 75 66 66 65 72 6f 66  m name="bufferof
3180: 66 73 65 74 22 3e 54 68 65 20 7a 65 72 6f 2d 62  fset">The zero-b
3190: 61 73 65 64 20 69 6e 64 65 78 20 6f 66 20 77 68  ased index of wh
31a0: 65 72 65 20 74 6f 20 62 65 67 69 6e 20 77 72 69  ere to begin wri
31b0: 74 69 6e 67 20 69 6e 74 6f 20 74 68 65 20 61 72  ting into the ar
31c0: 72 61 79 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  ray</param>.    
31d0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
31e0: 22 6c 65 6e 67 74 68 22 3e 54 68 65 20 6e 75 6d  "length">The num
31f0: 62 65 72 20 6f 66 20 62 79 74 65 73 20 74 6f 20  ber of bytes to 
3200: 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e  retrieve</param>
3210: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
3220: 73 3e 54 68 65 20 61 63 74 75 61 6c 20 6e 75 6d  s>The actual num
3230: 62 65 72 20 6f 66 20 62 79 74 65 73 20 77 72 69  ber of bytes wri
3240: 74 74 65 6e 20 69 6e 74 6f 20 74 68 65 20 61 72  tten into the ar
3250: 72 61 79 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20  ray</returns>.  
3260: 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0a    /// <remarks>.
3270: 20 20 20 20 2f 2f 2f 20 54 6f 20 64 65 74 65 72      /// To deter
3280: 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20  mine the number 
3290: 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
32a0: 63 6f 6c 75 6d 6e 2c 20 70 61 73 73 20 61 20 6e  column, pass a n
32b0: 75 6c 6c 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ull value for th
32c0: 65 20 62 75 66 66 65 72 2e 20 20 54 68 65 20 74  e buffer.  The t
32d0: 6f 74 61 6c 20 6c 65 6e 67 74 68 20 77 69 6c 6c  otal length will
32e0: 20 62 65 20 72 65 74 75 72 6e 65 64 2e 0a 20 20   be returned..  
32f0: 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e    /// </remarks>
3300: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
3310: 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 42 79 74  ride long GetByt
3320: 65 73 28 69 6e 74 20 69 2c 20 6c 6f 6e 67 20 66  es(int i, long f
3330: 69 65 6c 64 4f 66 66 73 65 74 2c 20 62 79 74 65  ieldOffset, byte
3340: 5b 5d 20 62 75 66 66 65 72 2c 20 69 6e 74 20 62  [] buffer, int b
3350: 75 66 66 65 72 6f 66 66 73 65 74 2c 20 69 6e 74  ufferoffset, int
3360: 20 6c 65 6e 67 74 68 29 0a 20 20 20 20 7b 0a 20   length).    {. 
3370: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
3380: 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 69 66 20  ed();..      if 
3390: 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65  (i >= VisibleFie
33a0: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
33b0: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20  nfo != null).   
33c0: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
33d0: 49 6e 66 6f 2e 47 65 74 42 79 74 65 73 28 69 20  Info.GetBytes(i 
33e0: 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  - VisibleFieldCo
33f0: 75 6e 74 2c 20 66 69 65 6c 64 4f 66 66 73 65 74  unt, fieldOffset
3400: 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66 65 72  , buffer, buffer
3410: 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b  offset, length);
3420: 0a 0a 20 20 20 20 20 20 56 65 72 69 66 79 54 79  ..      VerifyTy
3430: 70 65 28 69 2c 20 44 62 54 79 70 65 2e 42 69 6e  pe(i, DbType.Bin
3440: 61 72 79 29 3b 0a 20 20 20 20 20 20 72 65 74 75  ary);.      retu
3450: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
3460: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 42 79 74 65  ent._sql.GetByte
3470: 73 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  s(_activeStateme
3480: 6e 74 2c 20 69 2c 20 28 69 6e 74 29 66 69 65 6c  nt, i, (int)fiel
3490: 64 4f 66 66 73 65 74 2c 20 62 75 66 66 65 72 2c  dOffset, buffer,
34a0: 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c   bufferoffset, l
34b0: 65 6e 67 74 68 29 3b 0a 20 20 20 20 7d 0a 0a 20  ength);.    }.. 
34c0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
34d0: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
34e0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61   the column as a
34f0: 20 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65   single characte
3500: 72 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  r.    /// </summ
3510: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
3520: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
3530: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
3540: 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65  lumn to retrieve
3550: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
3560: 20 3c 72 65 74 75 72 6e 73 3e 63 68 61 72 3c 2f   <returns>char</
3570: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62  returns>.    pub
3580: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 63 68 61  lic override cha
3590: 72 20 47 65 74 43 68 61 72 28 69 6e 74 20 69 29  r GetChar(int i)
35a0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 43 68 65  .    {.      Che
35b0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a 0a 20  ckDisposed();.. 
35c0: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 56 69       if (i >= Vi
35d0: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20  sibleFieldCount 
35e0: 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  && _keyInfo != n
35f0: 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 72 65 74  ull).        ret
3600: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
3610: 43 68 61 72 28 69 20 2d 20 56 69 73 69 62 6c 65  Char(i - Visible
3620: 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20 20  FieldCount);..  
3630: 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69      VerifyType(i
3640: 2c 20 44 62 54 79 70 65 2e 53 42 79 74 65 29 3b  , DbType.SByte);
3650: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f  .      return Co
3660: 6e 76 65 72 74 2e 54 6f 43 68 61 72 28 5f 61 63  nvert.ToChar(_ac
3670: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73  tiveStatement._s
3680: 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61 63 74  ql.GetInt32(_act
3690: 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69 29  iveStatement, i)
36a0: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f  );.    }..    //
36b0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
36c0: 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 61 20  /// Retrieves a 
36d0: 63 6f 6c 75 6d 6e 20 61 73 20 61 6e 20 61 72 72  column as an arr
36e0: 61 79 20 6f 66 20 63 68 61 72 73 20 28 62 6c 6f  ay of chars (blo
36f0: 62 29 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  b).    /// </sum
3700: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  mary>.    /// <p
3710: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
3720: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
3730: 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76  olumn to retriev
3740: 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  e</param>.    //
3750: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
3760: 69 65 6c 64 6f 66 66 73 65 74 22 3e 54 68 65 20  ieldoffset">The 
3770: 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78  zero-based index
3780: 20 6f 66 20 77 68 65 72 65 20 74 6f 20 62 65 67   of where to beg
3790: 69 6e 20 72 65 61 64 69 6e 67 20 74 68 65 20 64  in reading the d
37a0: 61 74 61 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  ata</param>.    
37b0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
37c0: 22 62 75 66 66 65 72 22 3e 54 68 65 20 62 75 66  "buffer">The buf
37d0: 66 65 72 20 74 6f 20 77 72 69 74 65 20 74 68 65  fer to write the
37e0: 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 74 6f   characters into
37f0: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
3800: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 75   <param name="bu
3810: 66 66 65 72 6f 66 66 73 65 74 22 3e 54 68 65 20  fferoffset">The 
3820: 7a 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78  zero-based index
3830: 20 6f 66 20 77 68 65 72 65 20 74 6f 20 62 65 67   of where to beg
3840: 69 6e 20 77 72 69 74 69 6e 67 20 69 6e 74 6f 20  in writing into 
3850: 74 68 65 20 61 72 72 61 79 3c 2f 70 61 72 61 6d  the array</param
3860: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  >.    /// <param
3870: 20 6e 61 6d 65 3d 22 6c 65 6e 67 74 68 22 3e 54   name="length">T
3880: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
3890: 65 73 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f  es to retrieve</
38a0: 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c  param>.    /// <
38b0: 72 65 74 75 72 6e 73 3e 54 68 65 20 61 63 74 75  returns>The actu
38c0: 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61  al number of cha
38d0: 72 61 63 74 65 72 73 20 77 72 69 74 74 65 6e 20  racters written 
38e0: 69 6e 74 6f 20 74 68 65 20 61 72 72 61 79 3c 2f  into the array</
38f0: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 2f 2f 2f  returns>.    ///
3900: 20 3c 72 65 6d 61 72 6b 73 3e 0a 20 20 20 20 2f   <remarks>.    /
3910: 2f 2f 20 54 6f 20 64 65 74 65 72 6d 69 6e 65 20  // To determine 
3920: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68  the number of ch
3930: 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 65 20  aracters in the 
3940: 63 6f 6c 75 6d 6e 2c 20 70 61 73 73 20 61 20 6e  column, pass a n
3950: 75 6c 6c 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ull value for th
3960: 65 20 62 75 66 66 65 72 2e 20 20 54 68 65 20 74  e buffer.  The t
3970: 6f 74 61 6c 20 6c 65 6e 67 74 68 20 77 69 6c 6c  otal length will
3980: 20 62 65 20 72 65 74 75 72 6e 65 64 2e 0a 20 20   be returned..  
3990: 20 20 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e    /// </remarks>
39a0: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
39b0: 72 69 64 65 20 6c 6f 6e 67 20 47 65 74 43 68 61  ride long GetCha
39c0: 72 73 28 69 6e 74 20 69 2c 20 6c 6f 6e 67 20 66  rs(int i, long f
39d0: 69 65 6c 64 6f 66 66 73 65 74 2c 20 63 68 61 72  ieldoffset, char
39e0: 5b 5d 20 62 75 66 66 65 72 2c 20 69 6e 74 20 62  [] buffer, int b
39f0: 75 66 66 65 72 6f 66 66 73 65 74 2c 20 69 6e 74  ufferoffset, int
3a00: 20 6c 65 6e 67 74 68 29 0a 20 20 20 20 7b 0a 20   length).    {. 
3a10: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
3a20: 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 69 66 20  ed();..      if 
3a30: 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65  (i >= VisibleFie
3a40: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
3a50: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20  nfo != null).   
3a60: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
3a70: 49 6e 66 6f 2e 47 65 74 43 68 61 72 73 28 69 20  Info.GetChars(i 
3a80: 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  - VisibleFieldCo
3a90: 75 6e 74 2c 20 66 69 65 6c 64 6f 66 66 73 65 74  unt, fieldoffset
3aa0: 2c 20 62 75 66 66 65 72 2c 20 62 75 66 66 65 72  , buffer, buffer
3ab0: 6f 66 66 73 65 74 2c 20 6c 65 6e 67 74 68 29 3b  offset, length);
3ac0: 0a 0a 20 20 20 20 20 20 56 65 72 69 66 79 54 79  ..      VerifyTy
3ad0: 70 65 28 69 2c 20 44 62 54 79 70 65 2e 53 74 72  pe(i, DbType.Str
3ae0: 69 6e 67 29 3b 0a 20 20 20 20 20 20 72 65 74 75  ing);.      retu
3af0: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
3b00: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 43 68 61 72  ent._sql.GetChar
3b10: 73 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  s(_activeStateme
3b20: 6e 74 2c 20 69 2c 20 28 69 6e 74 29 66 69 65 6c  nt, i, (int)fiel
3b30: 64 6f 66 66 73 65 74 2c 20 62 75 66 66 65 72 2c  doffset, buffer,
3b40: 20 62 75 66 66 65 72 6f 66 66 73 65 74 2c 20 6c   bufferoffset, l
3b50: 65 6e 67 74 68 29 3b 0a 20 20 20 20 7d 0a 0a 20  ength);.    }.. 
3b60: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
3b70: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76  .    /// Retriev
3b80: 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  es the name of t
3b90: 68 65 20 62 61 63 6b 2d 65 6e 64 20 64 61 74 61  he back-end data
3ba0: 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  type of the colu
3bb0: 6d 6e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  mn.    /// </sum
3bc0: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  mary>.    /// <p
3bd0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
3be0: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
3bf0: 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76  olumn to retriev
3c00: 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  e</param>.    //
3c10: 2f 20 3c 72 65 74 75 72 6e 73 3e 73 74 72 69 6e  / <returns>strin
3c20: 67 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20  g</returns>.    
3c30: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
3c40: 73 74 72 69 6e 67 20 47 65 74 44 61 74 61 54 79  string GetDataTy
3c50: 70 65 4e 61 6d 65 28 69 6e 74 20 69 29 0a 20 20  peName(int i).  
3c60: 20 20 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 44    {.      CheckD
3c70: 69 73 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20  isposed();..    
3c80: 20 20 69 66 20 28 69 20 3e 3d 20 56 69 73 69 62    if (i >= Visib
3c90: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
3ca0: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
3cb0: 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ).        return
3cc0: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44 61 74   _keyInfo.GetDat
3cd0: 61 54 79 70 65 4e 61 6d 65 28 69 20 2d 20 56 69  aTypeName(i - Vi
3ce0: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
3cf0: 3b 0a 0a 20 20 20 20 20 20 53 51 4c 69 74 65 54  ;..      SQLiteT
3d00: 79 70 65 20 74 79 70 20 3d 20 47 65 74 53 51 4c  ype typ = GetSQL
3d10: 69 74 65 54 79 70 65 28 69 29 3b 0a 20 20 20 20  iteType(i);.    
3d20: 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20 3d    if (typ.Type =
3d30: 3d 20 44 62 54 79 70 65 2e 4f 62 6a 65 63 74 29  = DbType.Object)
3d40: 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 43 6f   return SQLiteCo
3d50: 6e 76 65 72 74 2e 53 51 4c 69 74 65 54 79 70 65  nvert.SQLiteType
3d60: 54 6f 54 79 70 65 28 74 79 70 29 2e 4e 61 6d 65  ToType(typ).Name
3d70: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f  ;.      return _
3d80: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
3d90: 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65 28  _sql.ColumnType(
3da0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
3db0: 2c 20 69 2c 20 6f 75 74 20 74 79 70 2e 41 66 66  , i, out typ.Aff
3dc0: 69 6e 69 74 79 29 3b 0a 20 20 20 20 7d 0a 0a 20  inity);.    }.. 
3dd0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
3de0: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76  .    /// Retriev
3df0: 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  e the column as 
3e00: 61 20 64 61 74 65 2f 74 69 6d 65 20 76 61 6c 75  a date/time valu
3e10: 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  e.    /// </summ
3e20: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ary>.    /// <pa
3e30: 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65  ram name="i">The
3e40: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
3e50: 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65  lumn to retrieve
3e60: 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f  </param>.    ///
3e70: 20 3c 72 65 74 75 72 6e 73 3e 44 61 74 65 54 69   <returns>DateTi
3e80: 6d 65 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20  me</returns>.   
3e90: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
3ea0: 20 44 61 74 65 54 69 6d 65 20 47 65 74 44 61 74   DateTime GetDat
3eb0: 65 54 69 6d 65 28 69 6e 74 20 69 29 0a 20 20 20  eTime(int i).   
3ec0: 20 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69   {.      CheckDi
3ed0: 73 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20  sposed();..     
3ee0: 20 69 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c   if (i >= Visibl
3ef0: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
3f00: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
3f10: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
3f20: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44 61 74 65  _keyInfo.GetDate
3f30: 54 69 6d 65 28 69 20 2d 20 56 69 73 69 62 6c 65  Time(i - Visible
3f40: 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20 20  FieldCount);..  
3f50: 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69      VerifyType(i
3f60: 2c 20 44 62 54 79 70 65 2e 44 61 74 65 54 69 6d  , DbType.DateTim
3f70: 65 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  e);.      return
3f80: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
3f90: 74 2e 5f 73 71 6c 2e 47 65 74 44 61 74 65 54 69  t._sql.GetDateTi
3fa0: 6d 65 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  me(_activeStatem
3fb0: 65 6e 74 2c 20 69 29 3b 0a 20 20 20 20 7d 0a 0a  ent, i);.    }..
3fc0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
3fd0: 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65  >.    /// Retrie
3fe0: 76 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73  ve the column as
3ff0: 20 61 20 64 65 63 69 6d 61 6c 20 76 61 6c 75 65   a decimal value
4000: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
4010: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  ry>.    /// <par
4020: 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20  am name="i">The 
4030: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f 6c  index of the col
4040: 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76 65 3c  umn to retrieve<
4050: 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20  /param>.    /// 
4060: 3c 72 65 74 75 72 6e 73 3e 64 65 63 69 6d 61 6c  <returns>decimal
4070: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
4080: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 64  ublic override d
4090: 65 63 69 6d 61 6c 20 47 65 74 44 65 63 69 6d 61  ecimal GetDecima
40a0: 6c 28 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20  l(int i).    {. 
40b0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
40c0: 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 69 66 20  ed();..      if 
40d0: 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65  (i >= VisibleFie
40e0: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
40f0: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20  nfo != null).   
4100: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
4110: 49 6e 66 6f 2e 47 65 74 44 65 63 69 6d 61 6c 28  Info.GetDecimal(
4120: 69 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64  i - VisibleField
4130: 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20 56  Count);..      V
4140: 65 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54  erifyType(i, DbT
4150: 79 70 65 2e 44 65 63 69 6d 61 6c 29 3b 0a 20 20  ype.Decimal);.  
4160: 20 20 20 20 72 65 74 75 72 6e 20 44 65 63 69 6d      return Decim
4170: 61 6c 2e 50 61 72 73 65 28 5f 61 63 74 69 76 65  al.Parse(_active
4180: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47  Statement._sql.G
4190: 65 74 54 65 78 74 28 5f 61 63 74 69 76 65 53 74  etText(_activeSt
41a0: 61 74 65 6d 65 6e 74 2c 20 69 29 2c 20 4e 75 6d  atement, i), Num
41b0: 62 65 72 53 74 79 6c 65 73 2e 41 6c 6c 6f 77 44  berStyles.AllowD
41c0: 65 63 69 6d 61 6c 50 6f 69 6e 74 20 7c 20 4e 75  ecimalPoint | Nu
41d0: 6d 62 65 72 53 74 79 6c 65 73 2e 41 6c 6c 6f 77  mberStyles.Allow
41e0: 45 78 70 6f 6e 65 6e 74 20 7c 20 4e 75 6d 62 65  Exponent | Numbe
41f0: 72 53 74 79 6c 65 73 2e 41 6c 6c 6f 77 4c 65 61  rStyles.AllowLea
4200: 64 69 6e 67 53 69 67 6e 2c 20 43 75 6c 74 75 72  dingSign, Cultur
4210: 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43  eInfo.InvariantC
4220: 75 6c 74 75 72 65 29 3b 0a 20 20 20 20 7d 0a 0a  ulture);.    }..
4230: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
4240: 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  >.    /// Return
4250: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  s the column as 
4260: 61 20 64 6f 75 62 6c 65 0a 20 20 20 20 2f 2f 2f  a double.    ///
4270: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
4280: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
4290: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
42a0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72   the column to r
42b0: 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a  etrieve</param>.
42c0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
42d0: 3e 64 6f 75 62 6c 65 3c 2f 72 65 74 75 72 6e 73  >double</returns
42e0: 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65  >.    public ove
42f0: 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74  rride double Get
4300: 44 6f 75 62 6c 65 28 69 6e 74 20 69 29 0a 20 20  Double(int i).  
4310: 20 20 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 44    {.      CheckD
4320: 69 73 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20  isposed();..    
4330: 20 20 69 66 20 28 69 20 3e 3d 20 56 69 73 69 62    if (i >= Visib
4340: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
4350: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
4360: 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ).        return
4370: 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 44 6f 75   _keyInfo.GetDou
4380: 62 6c 65 28 69 20 2d 20 56 69 73 69 62 6c 65 46  ble(i - VisibleF
4390: 69 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20  ieldCount);..   
43a0: 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69 2c     VerifyType(i,
43b0: 20 44 62 54 79 70 65 2e 44 6f 75 62 6c 65 29 3b   DbType.Double);
43c0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61  .      return _a
43d0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
43e0: 73 71 6c 2e 47 65 74 44 6f 75 62 6c 65 28 5f 61  sql.GetDouble(_a
43f0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
4400: 69 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  i);.    }..    /
4410: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
4420: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
4430: 20 2e 4e 45 54 20 74 79 70 65 20 6f 66 20 61 20   .NET type of a 
4440: 67 69 76 65 6e 20 63 6f 6c 75 6d 6e 0a 20 20 20  given column.   
4450: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
4460: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
4470: 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65  ame="i">The inde
4480: 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  x of the column 
4490: 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72  to retrieve</par
44a0: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  am>.    /// <ret
44b0: 75 72 6e 73 3e 54 79 70 65 3c 2f 72 65 74 75 72  urns>Type</retur
44c0: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
44d0: 76 65 72 72 69 64 65 20 54 79 70 65 20 47 65 74  verride Type Get
44e0: 46 69 65 6c 64 54 79 70 65 28 69 6e 74 20 69 29  FieldType(int i)
44f0: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 43 68 65  .    {.      Che
4500: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a 0a 20  ckDisposed();.. 
4510: 20 20 20 20 20 69 66 20 28 69 20 3e 3d 20 56 69       if (i >= Vi
4520: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20  sibleFieldCount 
4530: 26 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e  && _keyInfo != n
4540: 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 72 65 74  ull).        ret
4550: 75 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74  urn _keyInfo.Get
4560: 46 69 65 6c 64 54 79 70 65 28 69 20 2d 20 56 69  FieldType(i - Vi
4570: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
4580: 3b 0a 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
4590: 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53 51  SQLiteConvert.SQ
45a0: 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65 28 47  LiteTypeToType(G
45b0: 65 74 53 51 4c 69 74 65 54 79 70 65 28 69 29 29  etSQLiteType(i))
45c0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
45d0: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
45e0: 2f 2f 20 52 65 74 75 72 6e 73 20 61 20 63 6f 6c  // Returns a col
45f0: 75 6d 6e 20 61 73 20 61 20 66 6c 6f 61 74 20 76  umn as a float v
4600: 61 6c 75 65 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  alue.    /// </s
4610: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
4620: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
4630: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
4640: 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69   column to retri
4650: 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  eve</param>.    
4660: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 66 6c 6f  /// <returns>flo
4670: 61 74 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20  at</returns>.   
4680: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
4690: 20 66 6c 6f 61 74 20 47 65 74 46 6c 6f 61 74 28   float GetFloat(
46a0: 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20 20 20  int i).    {.   
46b0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
46c0: 28 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 69  ();..      if (i
46d0: 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65 6c 64   >= VisibleField
46e0: 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66  Count && _keyInf
46f0: 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20  o != null).     
4700: 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e     return _keyIn
4710: 66 6f 2e 47 65 74 46 6c 6f 61 74 28 69 20 2d 20  fo.GetFloat(i - 
4720: 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e  VisibleFieldCoun
4730: 74 29 3b 0a 0a 20 20 20 20 20 20 56 65 72 69 66  t);..      Verif
4740: 79 54 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e  yType(i, DbType.
4750: 53 69 6e 67 6c 65 29 3b 0a 20 20 20 20 20 20 72  Single);.      r
4760: 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f  eturn Convert.To
4770: 53 69 6e 67 6c 65 28 5f 61 63 74 69 76 65 53 74  Single(_activeSt
4780: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74  atement._sql.Get
4790: 44 6f 75 62 6c 65 28 5f 61 63 74 69 76 65 53 74  Double(_activeSt
47a0: 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0a 20 20  atement, i));.  
47b0: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
47c0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52  mmary>.    /// R
47d0: 65 74 75 72 6e 73 20 74 68 65 20 63 6f 6c 75 6d  eturns the colum
47e0: 6e 20 61 73 20 61 20 47 75 69 64 0a 20 20 20 20  n as a Guid.    
47f0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
4800: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
4810: 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78  me="i">The index
4820: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74   of the column t
4830: 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61  o retrieve</para
4840: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
4850: 72 6e 73 3e 47 75 69 64 3c 2f 72 65 74 75 72 6e  rns>Guid</return
4860: 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  s>.    public ov
4870: 65 72 72 69 64 65 20 47 75 69 64 20 47 65 74 47  erride Guid GetG
4880: 75 69 64 28 69 6e 74 20 69 29 0a 20 20 20 20 7b  uid(int i).    {
4890: 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70  .      CheckDisp
48a0: 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 69  osed();..      i
48b0: 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46  f (i >= VisibleF
48c0: 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65  ieldCount && _ke
48d0: 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20  yInfo != null). 
48e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b         return _k
48f0: 65 79 49 6e 66 6f 2e 47 65 74 47 75 69 64 28 69  eyInfo.GetGuid(i
4900: 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43   - VisibleFieldC
4910: 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20 54 79  ount);..      Ty
4920: 70 65 41 66 66 69 6e 69 74 79 20 61 66 66 69 6e  peAffinity affin
4930: 69 74 79 20 3d 20 56 65 72 69 66 79 54 79 70 65  ity = VerifyType
4940: 28 69 2c 20 44 62 54 79 70 65 2e 47 75 69 64 29  (i, DbType.Guid)
4950: 3b 0a 20 20 20 20 20 20 69 66 20 28 61 66 66 69  ;.      if (affi
4960: 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69  nity == TypeAffi
4970: 6e 69 74 79 2e 42 6c 6f 62 29 0a 20 20 20 20 20  nity.Blob).     
4980: 20 7b 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b   {.        byte[
4990: 5d 20 62 75 66 66 65 72 20 3d 20 6e 65 77 20 62  ] buffer = new b
49a0: 79 74 65 5b 31 36 5d 3b 0a 20 20 20 20 20 20 20  yte[16];.       
49b0: 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e   _activeStatemen
49c0: 74 2e 5f 73 71 6c 2e 47 65 74 42 79 74 65 73 28  t._sql.GetBytes(
49d0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
49e0: 2c 20 69 2c 20 30 2c 20 62 75 66 66 65 72 2c 20  , i, 0, buffer, 
49f0: 30 2c 20 31 36 29 3b 0a 20 20 20 20 20 20 20 20  0, 16);.        
4a00: 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69 64 28  return new Guid(
4a10: 62 75 66 66 65 72 29 3b 0a 20 20 20 20 20 20 7d  buffer);.      }
4a20: 0a 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20  .      else.    
4a30: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47      return new G
4a40: 75 69 64 28 5f 61 63 74 69 76 65 53 74 61 74 65  uid(_activeState
4a50: 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54 65 78  ment._sql.GetTex
4a60: 74 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  t(_activeStateme
4a70: 6e 74 2c 20 69 29 29 3b 0a 20 20 20 20 7d 0a 0a  nt, i));.    }..
4a80: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
4a90: 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  >.    /// Return
4aa0: 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20  s the column as 
4ab0: 61 20 73 68 6f 72 74 0a 20 20 20 20 2f 2f 2f 20  a short.    /// 
4ac0: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f  </summary>.    /
4ad0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
4ae0: 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66 20  i">The index of 
4af0: 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65  the column to re
4b00: 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20  trieve</param>. 
4b10: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
4b20: 49 6e 74 31 36 3c 2f 72 65 74 75 72 6e 73 3e 0a  Int16</returns>.
4b30: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
4b40: 69 64 65 20 49 6e 74 31 36 20 47 65 74 49 6e 74  ide Int16 GetInt
4b50: 31 36 28 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a  16(int i).    {.
4b60: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
4b70: 73 65 64 28 29 3b 0a 0a 20 20 20 20 20 20 69 66  sed();..      if
4b80: 20 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69   (i >= VisibleFi
4b90: 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79  eldCount && _key
4ba0: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20  Info != null).  
4bb0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65        return _ke
4bc0: 79 49 6e 66 6f 2e 47 65 74 49 6e 74 31 36 28 69  yInfo.GetInt16(i
4bd0: 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43   - VisibleFieldC
4be0: 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20 56 65  ount);..      Ve
4bf0: 72 69 66 79 54 79 70 65 28 69 2c 20 44 62 54 79  rifyType(i, DbTy
4c00: 70 65 2e 49 6e 74 31 36 29 3b 0a 20 20 20 20 20  pe.Int16);.     
4c10: 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e   return Convert.
4c20: 54 6f 49 6e 74 31 36 28 5f 61 63 74 69 76 65 53  ToInt16(_activeS
4c30: 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65  tatement._sql.Ge
4c40: 74 49 6e 74 33 32 28 5f 61 63 74 69 76 65 53 74  tInt32(_activeSt
4c50: 61 74 65 6d 65 6e 74 2c 20 69 29 29 3b 0a 20 20  atement, i));.  
4c60: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
4c70: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52  mmary>.    /// R
4c80: 65 74 72 69 65 76 65 73 20 74 68 65 20 63 6f 6c  etrieves the col
4c90: 75 6d 6e 20 61 73 20 61 6e 20 69 6e 74 0a 20 20  umn as an int.  
4ca0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
4cb0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
4cc0: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
4cd0: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
4ce0: 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61   to retrieve</pa
4cf0: 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ram>.    /// <re
4d00: 74 75 72 6e 73 3e 49 6e 74 33 32 3c 2f 72 65 74  turns>Int32</ret
4d10: 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63  urns>.    public
4d20: 20 6f 76 65 72 72 69 64 65 20 49 6e 74 33 32 20   override Int32 
4d30: 47 65 74 49 6e 74 33 32 28 69 6e 74 20 69 29 0a  GetInt32(int i).
4d40: 20 20 20 20 7b 0a 20 20 20 20 20 20 43 68 65 63      {.      Chec
4d50: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a 0a 20 20  kDisposed();..  
4d60: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 56 69 73      if (i >= Vis
4d70: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26  ibleFieldCount &
4d80: 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75  & _keyInfo != nu
4d90: 6c 6c 29 0a 20 20 20 20 20 20 20 20 72 65 74 75  ll).        retu
4da0: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 49  rn _keyInfo.GetI
4db0: 6e 74 33 32 28 69 20 2d 20 56 69 73 69 62 6c 65  nt32(i - Visible
4dc0: 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20 20  FieldCount);..  
4dd0: 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28 69      VerifyType(i
4de0: 2c 20 44 62 54 79 70 65 2e 49 6e 74 33 32 29 3b  , DbType.Int32);
4df0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61  .      return _a
4e00: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
4e10: 73 71 6c 2e 47 65 74 49 6e 74 33 32 28 5f 61 63  sql.GetInt32(_ac
4e20: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 69  tiveStatement, i
4e30: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f  );.    }..    //
4e40: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
4e50: 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74 68  /// Retrieves th
4e60: 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 20 6c 6f  e column as a lo
4e70: 6e 67 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ng.    /// </sum
4e80: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  mary>.    /// <p
4e90: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
4ea0: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
4eb0: 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76  olumn to retriev
4ec0: 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  e</param>.    //
4ed0: 2f 20 3c 72 65 74 75 72 6e 73 3e 49 6e 74 36 34  / <returns>Int64
4ee0: 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70  </returns>.    p
4ef0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 49  ublic override I
4f00: 6e 74 36 34 20 47 65 74 49 6e 74 36 34 28 69 6e  nt64 GetInt64(in
4f10: 74 20 69 29 0a 20 20 20 20 7b 0a 20 20 20 20 20  t i).    {.     
4f20: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
4f30: 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 69 20 3e  ;..      if (i >
4f40: 3d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  = VisibleFieldCo
4f50: 75 6e 74 20 26 26 20 5f 6b 65 79 49 6e 66 6f 20  unt && _keyInfo 
4f60: 21 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20  != null).       
4f70: 20 72 65 74 75 72 6e 20 5f 6b 65 79 49 6e 66 6f   return _keyInfo
4f80: 2e 47 65 74 49 6e 74 36 34 28 69 20 2d 20 56 69  .GetInt64(i - Vi
4f90: 73 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 29  sibleFieldCount)
4fa0: 3b 0a 0a 20 20 20 20 20 20 56 65 72 69 66 79 54  ;..      VerifyT
4fb0: 79 70 65 28 69 2c 20 44 62 54 79 70 65 2e 49 6e  ype(i, DbType.In
4fc0: 74 36 34 29 3b 0a 20 20 20 20 20 20 72 65 74 75  t64);.      retu
4fd0: 72 6e 20 5f 61 63 74 69 76 65 53 74 61 74 65 6d  rn _activeStatem
4fe0: 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 49 6e 74 36  ent._sql.GetInt6
4ff0: 34 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65  4(_activeStateme
5000: 6e 74 2c 20 69 29 3b 0a 20 20 20 20 7d 0a 0a 20  nt, i);.    }.. 
5010: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
5020: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65 76  .    /// Retriev
5030: 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  es the name of t
5040: 68 65 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 2f 2f  he column.    //
5050: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
5060: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
5070: 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f  ="i">The index o
5080: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20  f the column to 
5090: 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e  retrieve</param>
50a0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
50b0: 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75 72 6e  s>string</return
50c0: 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76  s>.    public ov
50d0: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47 65  erride string Ge
50e0: 74 4e 61 6d 65 28 69 6e 74 20 69 29 0a 20 20 20  tName(int i).   
50f0: 20 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69   {.      CheckDi
5100: 73 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20 20  sposed();..     
5110: 20 69 66 20 28 69 20 3e 3d 20 56 69 73 69 62 6c   if (i >= Visibl
5120: 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20 5f  eFieldCount && _
5130: 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29  keyInfo != null)
5140: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
5150: 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 4e 61 6d 65  _keyInfo.GetName
5160: 28 69 20 2d 20 56 69 73 69 62 6c 65 46 69 65 6c  (i - VisibleFiel
5170: 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20  dCount);..      
5180: 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65 53 74  return _activeSt
5190: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c  atement._sql.Col
51a0: 75 6d 6e 4e 61 6d 65 28 5f 61 63 74 69 76 65 53  umnName(_activeS
51b0: 74 61 74 65 6d 65 6e 74 2c 20 69 29 3b 0a 20 20  tatement, i);.  
51c0: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
51d0: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52  mmary>.    /// R
51e0: 65 74 72 69 65 76 65 73 20 74 68 65 20 69 20 6f  etrieves the i o
51f0: 66 20 61 20 63 6f 6c 75 6d 6e 2c 20 67 69 76 65  f a column, give
5200: 6e 20 69 74 73 20 6e 61 6d 65 0a 20 20 20 20 2f  n its name.    /
5210: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
5220: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
5230: 65 3d 22 6e 61 6d 65 22 3e 54 68 65 20 6e 61 6d  e="name">The nam
5240: 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  e of the column 
5250: 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72  to retrieve</par
5260: 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  am>.    /// <ret
5270: 75 72 6e 73 3e 54 68 65 20 69 6e 74 20 69 20 6f  urns>The int i o
5280: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 3c 2f 72 65  f the column</re
5290: 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69  turns>.    publi
52a0: 63 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 47  c override int G
52b0: 65 74 4f 72 64 69 6e 61 6c 28 73 74 72 69 6e 67  etOrdinal(string
52c0: 20 6e 61 6d 65 29 0a 20 20 20 20 7b 0a 20 20 20   name).    {.   
52d0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
52e0: 28 29 3b 0a 20 20 20 20 20 20 43 68 65 63 6b 43  ();.      CheckC
52f0: 6c 6f 73 65 64 28 29 3b 0a 20 20 20 20 20 20 69  losed();.      i
5300: 66 20 28 5f 74 68 72 6f 77 4f 6e 44 69 73 70 6f  f (_throwOnDispo
5310: 73 65 64 29 20 53 51 4c 69 74 65 43 6f 6d 6d 61  sed) SQLiteComma
5320: 6e 64 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e  nd.Check(_comman
5330: 64 29 3b 0a 0a 20 20 20 20 20 20 2f 2f 0a 20 20  d);..      //.  
5340: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 69 72      // NOTE: Fir
5350: 73 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 65  st, check if the
5360: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63 61 63   column name cac
5370: 68 65 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74  he has been init
5380: 69 61 6c 69 7a 65 64 20 79 65 74 2e 0a 20 20 20  ialized yet..   
5390: 20 20 20 2f 2f 20 20 20 20 20 20 20 49 66 20 6e     //       If n
53a0: 6f 74 2c 20 64 6f 20 69 74 20 6e 6f 77 2e 0a 20  ot, do it now.. 
53b0: 20 20 20 20 20 2f 2f 0a 20 20 20 20 20 20 69 66       //.      if
53c0: 20 28 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 20   (_fieldIndexes 
53d0: 3d 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20  == null).       
53e0: 20 20 20 5f 66 69 65 6c 64 49 6e 64 65 78 65 73     _fieldIndexes
53f0: 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72   = new Dictionar
5400: 79 3c 73 74 72 69 6e 67 2c 20 69 6e 74 3e 28 6e  y<string, int>(n
5410: 65 77 20 43 6f 6c 75 6d 6e 4e 61 6d 65 43 6f 6d  ew ColumnNameCom
5420: 70 61 72 65 72 28 29 29 3b 0a 0a 20 20 20 20 20  parer());..     
5430: 20 2f 2f 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54   //.      // NOT
5440: 45 3a 20 4e 65 78 74 2c 20 73 65 65 20 69 66 20  E: Next, see if 
5450: 74 68 65 20 69 6e 64 65 78 20 66 6f 72 20 74 68  the index for th
5460: 65 20 72 65 71 75 65 73 74 65 64 20 63 6f 6c 75  e requested colu
5470: 6d 6e 20 6e 61 6d 65 20 68 61 73 20 62 65 65 6e  mn name has been
5480: 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
5490: 63 61 63 68 65 64 20 61 6c 72 65 61 64 79 2e 20  cached already. 
54a0: 20 49 66 20 73 6f 2c 20 72 65 74 75 72 6e 20 74   If so, return t
54b0: 68 65 20 63 61 63 68 65 64 20 76 61 6c 75 65 2e  he cached value.
54c0: 20 20 4f 74 68 65 72 77 69 73 65 2c 0a 20 20 20    Otherwise,.   
54d0: 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 6f 6f 6b     //       look
54e0: 75 70 20 74 68 65 20 76 61 6c 75 65 20 61 6e 64  up the value and
54f0: 20 74 68 65 6e 20 63 61 63 68 65 20 74 68 65 20   then cache the 
5500: 72 65 73 75 6c 74 20 66 6f 72 20 66 75 74 75 72  result for futur
5510: 65 20 75 73 65 2e 0a 20 20 20 20 20 20 2f 2f 0a  e use..      //.
5520: 20 20 20 20 20 20 69 6e 74 20 72 3b 0a 0a 20 20        int r;..  
5530: 20 20 20 20 69 66 20 28 21 5f 66 69 65 6c 64 49      if (!_fieldI
5540: 6e 64 65 78 65 73 2e 54 72 79 47 65 74 56 61 6c  ndexes.TryGetVal
5550: 75 65 28 6e 61 6d 65 2c 20 6f 75 74 20 72 29 29  ue(name, out r))
5560: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
5570: 20 20 20 72 20 3d 20 5f 61 63 74 69 76 65 53 74     r = _activeSt
5580: 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c  atement._sql.Col
5590: 75 6d 6e 49 6e 64 65 78 28 5f 61 63 74 69 76 65  umnIndex(_active
55a0: 53 74 61 74 65 6d 65 6e 74 2c 20 6e 61 6d 65 29  Statement, name)
55b0: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
55c0: 28 72 20 3d 3d 20 2d 31 20 26 26 20 5f 6b 65 79  (r == -1 && _key
55d0: 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20  Info != null).  
55e0: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
55f0: 20 20 20 20 20 20 20 20 72 20 3d 20 5f 6b 65 79          r = _key
5600: 49 6e 66 6f 2e 47 65 74 4f 72 64 69 6e 61 6c 28  Info.GetOrdinal(
5610: 6e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20  name);.         
5620: 20 20 20 20 20 69 66 20 28 72 20 3e 20 2d 31 29       if (r > -1)
5630: 20 72 20 2b 3d 20 56 69 73 69 62 6c 65 46 69 65   r += VisibleFie
5640: 6c 64 43 6f 75 6e 74 3b 0a 20 20 20 20 20 20 20  ldCount;.       
5650: 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20     }..          
5660: 5f 66 69 65 6c 64 49 6e 64 65 78 65 73 2e 41 64  _fieldIndexes.Ad
5670: 64 28 6e 61 6d 65 2c 20 72 29 3b 0a 20 20 20 20  d(name, r);.    
5680: 20 20 7d 0a 0a 20 20 20 20 20 20 72 65 74 75 72    }..      retur
5690: 6e 20 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  n r;.    }..    
56a0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
56b0: 20 20 2f 2f 2f 20 53 63 68 65 6d 61 20 69 6e 66    /// Schema inf
56c0: 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 53 51 4c 69  ormation in SQLi
56d0: 74 65 20 69 73 20 64 69 66 66 69 63 75 6c 74 20  te is difficult 
56e0: 74 6f 20 6d 61 70 20 69 6e 74 6f 20 2e 4e 45 54  to map into .NET
56f0: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 73 6f   conventions, so
5700: 20 61 20 6c 6f 74 20 6f 66 20 77 6f 72 6b 20 6d   a lot of work m
5710: 75 73 74 20 62 65 20 64 6f 6e 65 0a 20 20 20 20  ust be done.    
5720: 2f 2f 2f 20 74 6f 20 67 61 74 68 65 72 20 74 68  /// to gather th
5730: 65 20 6e 65 63 65 73 73 61 72 79 20 69 6e 66 6f  e necessary info
5740: 72 6d 61 74 69 6f 6e 20 73 6f 20 69 74 20 63 61  rmation so it ca
5750: 6e 20 62 65 20 72 65 70 72 65 73 65 6e 74 65 64  n be represented
5760: 20 69 6e 20 61 6e 20 41 44 4f 2e 4e 45 54 20 6d   in an ADO.NET m
5770: 61 6e 6e 65 72 2e 0a 20 20 20 20 2f 2f 2f 20 3c  anner..    /// <
5780: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  /summary>.    //
5790: 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72  / <returns>Retur
57a0: 6e 73 20 61 20 44 61 74 61 54 61 62 6c 65 20 63  ns a DataTable c
57b0: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 73 63  ontaining the sc
57c0: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
57d0: 20 66 6f 72 20 74 68 65 20 61 63 74 69 76 65 20   for the active 
57e0: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
57f0: 20 62 65 69 6e 67 20 70 72 6f 63 65 73 73 65 64   being processed
5800: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20  .</returns>.    
5810: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
5820: 44 61 74 61 54 61 62 6c 65 20 47 65 74 53 63 68  DataTable GetSch
5830: 65 6d 61 54 61 62 6c 65 28 29 0a 20 20 20 20 7b  emaTable().    {
5840: 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70  .      CheckDisp
5850: 6f 73 65 64 28 29 3b 0a 20 20 20 20 20 20 72 65  osed();.      re
5860: 74 75 72 6e 20 47 65 74 53 63 68 65 6d 61 54 61  turn GetSchemaTa
5870: 62 6c 65 28 74 72 75 65 2c 20 66 61 6c 73 65 29  ble(true, false)
5880: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
5890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58d0: 2f 2f 2f 2f 2f 2f 2f 2f 0a 0a 20 20 20 20 23 72  ////////..    #r
58e0: 65 67 69 6f 6e 20 43 6f 6c 75 6d 6e 4e 61 6d 65  egion ColumnName
58f0: 43 6f 6d 70 61 72 65 72 20 43 6c 61 73 73 0a 20  Comparer Class. 
5900: 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
5910: 64 20 63 6c 61 73 73 20 43 6f 6c 75 6d 6e 4e 61  d class ColumnNa
5920: 6d 65 43 6f 6d 70 61 72 65 72 20 3a 20 49 45 71  meComparer : IEq
5930: 75 61 6c 69 74 79 43 6f 6d 70 61 72 65 72 3c 73  ualityComparer<s
5940: 74 72 69 6e 67 3e 0a 20 20 20 20 7b 0a 20 20 20  tring>.    {.   
5950: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 45 71       #region IEq
5960: 75 61 6c 69 74 79 43 6f 6d 70 61 72 65 72 3c 73  ualityComparer<s
5970: 74 72 69 6e 67 3e 20 4d 65 6d 62 65 72 73 0a 20  tring> Members. 
5980: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
5990: 6f 6c 20 45 71 75 61 6c 73 28 73 74 72 69 6e 67  ol Equals(string
59a0: 20 78 2c 20 73 74 72 69 6e 67 20 79 29 0a 20 20   x, string y).  
59b0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
59c0: 20 20 20 20 69 66 20 28 28 78 20 3d 3d 20 6e 75      if ((x == nu
59d0: 6c 6c 29 20 26 26 20 28 79 20 3d 3d 20 6e 75 6c  ll) && (y == nul
59e0: 6c 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)).            
59f0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
5a00: 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20    return true;. 
5a10: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
5a20: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
5a30: 20 28 28 78 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c   ((x == null) ||
5a40: 20 28 79 20 3d 3d 20 6e 75 6c 6c 29 29 0a 20 20   (y == null)).  
5a50: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
5a60: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
5a70: 72 6e 20 66 61 6c 73 65 3b 0a 20 20 20 20 20 20  rn false;.      
5a80: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5a90: 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20      else.       
5aa0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
5ab0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
5ac0: 72 69 6e 67 2e 45 71 75 61 6c 73 28 78 2c 20 79  ring.Equals(x, y
5ad0: 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
5ae0: 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  on.OrdinalIgnore
5af0: 43 61 73 65 29 3b 0a 20 20 20 20 20 20 20 20 20  Case);.         
5b00: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 0a     }.        }..
5b10: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
5b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a  ///////////////.
5b60: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
5b70: 69 6e 74 20 47 65 74 48 61 73 68 43 6f 64 65 28  int GetHashCode(
5b80: 73 74 72 69 6e 67 20 6f 62 6a 29 0a 20 20 20 20  string obj).    
5b90: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
5ba0: 20 20 69 66 20 28 6f 62 6a 20 3d 3d 20 6e 75 6c    if (obj == nul
5bb0: 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  l).             
5bc0: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 0a 20 20     return 0;..  
5bd0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5be0: 20 6f 62 6a 2e 47 65 74 48 61 73 68 43 6f 64 65   obj.GetHashCode
5bf0: 28 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ();.        }.  
5c00: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
5c10: 0a 20 20 20 20 7d 0a 20 20 20 20 23 65 6e 64 72  .    }.    #endr
5c20: 65 67 69 6f 6e 0a 0a 20 20 20 20 2f 2f 2f 2f 2f  egion..    /////
5c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c70: 2f 2f 2f 2f 2f 2f 0a 0a 20 20 20 20 23 72 65 67  //////..    #reg
5c80: 69 6f 6e 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  ion ColumnParent
5c90: 20 43 6c 61 73 73 0a 20 20 20 20 70 72 69 76 61   Class.    priva
5ca0: 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
5cb0: 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 20 3a 20 49  ColumnParent : I
5cc0: 45 71 75 61 6c 69 74 79 43 6f 6d 70 61 72 65 72  EqualityComparer
5cd0: 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 3e 0a 20  <ColumnParent>. 
5ce0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 23 72 65     {.        #re
5cf0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 46 69 65 6c  gion Public Fiel
5d00: 64 73 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ds.        publi
5d10: 63 20 73 74 72 69 6e 67 20 44 61 74 61 62 61 73  c string Databas
5d20: 65 4e 61 6d 65 3b 0a 20 20 20 20 20 20 20 20 70  eName;.        p
5d30: 75 62 6c 69 63 20 73 74 72 69 6e 67 20 54 61 62  ublic string Tab
5d40: 6c 65 4e 61 6d 65 3b 0a 20 20 20 20 20 20 20 20  leName;.        
5d50: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 43 6f  public string Co
5d60: 6c 75 6d 6e 4e 61 6d 65 3b 0a 20 20 20 20 20 20  lumnName;.      
5d70: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0a 0a 20 20    #endregion..  
5d80: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
5d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 0a 20  /////////////.. 
5dd0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
5de0: 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f  ublic Constructo
5df0: 72 73 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  rs.        publi
5e00: 63 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 29  c ColumnParent()
5e10: 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20  .        {.     
5e20: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
5e30: 68 69 6e 67 2e 0a 20 20 20 20 20 20 20 20 7d 0a  hing..        }.
5e40: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
5e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e90: 0a 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
5ea0: 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 28 0a 20   ColumnParent(. 
5eb0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
5ec0: 67 20 64 61 74 61 62 61 73 65 4e 61 6d 65 2c 0a  g databaseName,.
5ed0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
5ee0: 6e 67 20 74 61 62 6c 65 4e 61 6d 65 2c 0a 20 20  ng tableName,.  
5ef0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
5f00: 20 63 6f 6c 75 6d 6e 4e 61 6d 65 0a 20 20 20 20   columnName.    
5f10: 20 20 20 20 20 20 20 20 29 0a 20 20 20 20 20 20          ).      
5f20: 20 20 20 20 20 20 3a 20 74 68 69 73 28 29 0a 20        : this(). 
5f30: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
5f40: 20 20 20 20 20 74 68 69 73 2e 44 61 74 61 62 61       this.Databa
5f50: 73 65 4e 61 6d 65 20 3d 20 64 61 74 61 62 61 73  seName = databas
5f60: 65 4e 61 6d 65 3b 0a 20 20 20 20 20 20 20 20 20  eName;.         
5f70: 20 20 20 74 68 69 73 2e 54 61 62 6c 65 4e 61 6d     this.TableNam
5f80: 65 20 3d 20 74 61 62 6c 65 4e 61 6d 65 3b 0a 20  e = tableName;. 
5f90: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
5fa0: 43 6f 6c 75 6d 6e 4e 61 6d 65 20 3d 20 63 6f 6c  ColumnName = col
5fb0: 75 6d 6e 4e 61 6d 65 3b 0a 20 20 20 20 20 20 20  umnName;.       
5fc0: 20 7d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72   }.        #endr
5fd0: 65 67 69 6f 6e 0a 0a 20 20 20 20 20 20 20 20 2f  egion..        /
5fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6020: 2f 2f 2f 2f 2f 2f 0a 0a 20 20 20 20 20 20 20 20  //////..        
6030: 23 72 65 67 69 6f 6e 20 49 45 71 75 61 6c 69 74  #region IEqualit
6040: 79 43 6f 6d 70 61 72 65 72 3c 43 6f 6c 75 6d 6e  yComparer<Column
6050: 50 61 72 65 6e 74 3e 20 4d 65 6d 62 65 72 73 0a  Parent> Members.
6060: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
6070: 6f 6f 6c 20 45 71 75 61 6c 73 28 43 6f 6c 75 6d  ool Equals(Colum
6080: 6e 50 61 72 65 6e 74 20 78 2c 20 43 6f 6c 75 6d  nParent x, Colum
6090: 6e 50 61 72 65 6e 74 20 79 29 0a 20 20 20 20 20  nParent y).     
60a0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
60b0: 20 69 66 20 28 28 78 20 3d 3d 20 6e 75 6c 6c 29   if ((x == null)
60c0: 20 26 26 20 28 79 20 3d 3d 20 6e 75 6c 6c 29 29   && (y == null))
60d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20  .            {. 
60e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
60f0: 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20  eturn true;.    
6100: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
6110: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 28        else if ((
6120: 78 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 79  x == null) || (y
6130: 20 3d 3d 20 6e 75 6c 6c 29 29 0a 20 20 20 20 20   == null)).     
6140: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
6150: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
6160: 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20 20  false;.         
6170: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
6180: 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 20 20   else.          
6190: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
61a0: 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
61b0: 45 71 75 61 6c 73 28 78 2e 44 61 74 61 62 61 73  Equals(x.Databas
61c0: 65 4e 61 6d 65 2c 20 79 2e 44 61 74 61 62 61 73  eName, y.Databas
61d0: 65 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20  eName,.         
61e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
61f0: 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
6200: 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
6210: 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)).            
6220: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
6230: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6240: 20 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 20 20   false;.        
6250: 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
6260: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
6270: 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 78 2e  String.Equals(x.
6280: 54 61 62 6c 65 4e 61 6d 65 2c 20 79 2e 54 61 62  TableName, y.Tab
6290: 6c 65 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20  leName,.        
62a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
62b0: 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
62c0: 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
62d0: 73 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  se)).           
62e0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
62f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
6300: 6e 20 66 61 6c 73 65 3b 0a 20 20 20 20 20 20 20  n false;.       
6310: 20 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20           }..    
6320: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6330: 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 78  !String.Equals(x
6340: 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 79 2e 43  .ColumnName, y.C
6350: 6f 6c 75 6d 6e 4e 61 6d 65 2c 0a 20 20 20 20 20  olumnName,.     
6360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6370: 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69     StringCompari
6380: 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  son.OrdinalIgnor
6390: 65 43 61 73 65 29 29 0a 20 20 20 20 20 20 20 20  eCase)).        
63a0: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
63b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
63c0: 74 75 72 6e 20 66 61 6c 73 65 3b 0a 20 20 20 20  turn false;.    
63d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 0a 20              }.. 
63e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
63f0: 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20  eturn true;.    
6400: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
6410: 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2f 2f    }..        ///
6420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6460: 2f 2f 2f 2f 0a 0a 20 20 20 20 20 20 20 20 70 75  ////..        pu
6470: 62 6c 69 63 20 69 6e 74 20 47 65 74 48 61 73 68  blic int GetHash
6480: 43 6f 64 65 28 43 6f 6c 75 6d 6e 50 61 72 65 6e  Code(ColumnParen
6490: 74 20 6f 62 6a 29 0a 20 20 20 20 20 20 20 20 7b  t obj).        {
64a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
64b0: 20 72 65 73 75 6c 74 20 3d 20 30 3b 0a 0a 20 20   result = 0;..  
64c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6f            if ((o
64d0: 62 6a 20 21 3d 20 6e 75 6c 6c 29 20 26 26 20 28  bj != null) && (
64e0: 6f 62 6a 2e 44 61 74 61 62 61 73 65 4e 61 6d 65  obj.DatabaseName
64f0: 20 21 3d 20 6e 75 6c 6c 29 29 0a 20 20 20 20 20   != null)).     
6500: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
6510: 74 20 5e 3d 20 6f 62 6a 2e 44 61 74 61 62 61 73  t ^= obj.Databas
6520: 65 4e 61 6d 65 2e 47 65 74 48 61 73 68 43 6f 64  eName.GetHashCod
6530: 65 28 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20  e();..          
6540: 20 20 69 66 20 28 28 6f 62 6a 20 21 3d 20 6e 75    if ((obj != nu
6550: 6c 6c 29 20 26 26 20 28 6f 62 6a 2e 54 61 62 6c  ll) && (obj.Tabl
6560: 65 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 29 0a  eName != null)).
6570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6580: 72 65 73 75 6c 74 20 5e 3d 20 6f 62 6a 2e 54 61  result ^= obj.Ta
6590: 62 6c 65 4e 61 6d 65 2e 47 65 74 48 61 73 68 43  bleName.GetHashC
65a0: 6f 64 65 28 29 3b 0a 0a 20 20 20 20 20 20 20 20  ode();..        
65b0: 20 20 20 20 69 66 20 28 28 6f 62 6a 20 21 3d 20      if ((obj != 
65c0: 6e 75 6c 6c 29 20 26 26 20 28 6f 62 6a 2e 43 6f  null) && (obj.Co
65d0: 6c 75 6d 6e 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c  lumnName != null
65e0: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )).             
65f0: 20 20 20 72 65 73 75 6c 74 20 5e 3d 20 6f 62 6a     result ^= obj
6600: 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2e 47 65 74 48  .ColumnName.GetH
6610: 61 73 68 43 6f 64 65 28 29 3b 0a 0a 20 20 20 20  ashCode();..    
6620: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
6630: 65 73 75 6c 74 3b 0a 20 20 20 20 20 20 20 20 7d  esult;.        }
6640: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
6650: 69 6f 6e 0a 20 20 20 20 7d 0a 20 20 20 20 23 65  ion.    }.    #e
6660: 6e 64 72 65 67 69 6f 6e 0a 0a 20 20 20 20 2f 2f  ndregion..    //
6670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
66a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
66b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 0a 20 20 20 20 70  /////////..    p
66c0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f  rivate static vo
66d0: 69 64 20 47 65 74 53 74 61 74 65 6d 65 6e 74 43  id GetStatementC
66e0: 6f 6c 75 6d 6e 50 61 72 65 6e 74 73 28 0a 20 20  olumnParents(.  
66f0: 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 73 65        SQLiteBase
6700: 20 73 71 6c 2c 0a 20 20 20 20 20 20 20 20 53 51   sql,.        SQ
6710: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
6720: 6d 74 2c 0a 20 20 20 20 20 20 20 20 69 6e 74 20  mt,.        int 
6730: 66 69 65 6c 64 43 6f 75 6e 74 2c 0a 20 20 20 20  fieldCount,.    
6740: 20 20 20 20 72 65 66 20 44 69 63 74 69 6f 6e 61      ref Dictiona
6750: 72 79 3c 43 6f 6c 75 6d 6e 50 61 72 65 6e 74 2c  ry<ColumnParent,
6760: 20 4c 69 73 74 3c 69 6e 74 3e 3e 20 70 61 72 65   List<int>> pare
6770: 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2c 0a 20 20 20  ntToColumns,.   
6780: 20 20 20 20 20 72 65 66 20 44 69 63 74 69 6f 6e       ref Diction
6790: 61 72 79 3c 69 6e 74 2c 20 43 6f 6c 75 6d 6e 50  ary<int, ColumnP
67a0: 61 72 65 6e 74 3e 20 63 6f 6c 75 6d 6e 54 6f 50  arent> columnToP
67b0: 61 72 65 6e 74 0a 20 20 20 20 20 20 20 20 29 0a  arent.        ).
67c0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 69 66      {.        if
67d0: 20 28 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e   (parentToColumn
67e0: 73 20 3d 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20  s == null).     
67f0: 20 20 20 20 20 20 20 70 61 72 65 6e 74 54 6f 43         parentToC
6800: 6f 6c 75 6d 6e 73 20 3d 20 6e 65 77 20 44 69 63  olumns = new Dic
6810: 74 69 6f 6e 61 72 79 3c 43 6f 6c 75 6d 6e 50 61  tionary<ColumnPa
6820: 72 65 6e 74 2c 20 4c 69 73 74 3c 69 6e 74 3e 3e  rent, List<int>>
6830: 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  (.              
6840: 20 20 6e 65 77 20 43 6f 6c 75 6d 6e 50 61 72 65    new ColumnPare
6850: 6e 74 28 29 29 3b 0a 0a 20 20 20 20 20 20 20 20  nt());..        
6860: 69 66 20 28 63 6f 6c 75 6d 6e 54 6f 50 61 72 65  if (columnToPare
6870: 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0a 20 20 20 20  nt == null).    
6880: 20 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 54 6f          columnTo
6890: 50 61 72 65 6e 74 20 3d 20 6e 65 77 20 44 69 63  Parent = new Dic
68a0: 74 69 6f 6e 61 72 79 3c 69 6e 74 2c 20 43 6f 6c  tionary<int, Col
68b0: 75 6d 6e 50 61 72 65 6e 74 3e 28 29 3b 0a 0a 20  umnParent>();.. 
68c0: 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
68d0: 6e 20 3d 20 30 3b 20 6e 20 3c 20 66 69 65 6c 64  n = 0; n < field
68e0: 43 6f 75 6e 74 3b 20 6e 2b 2b 29 0a 20 20 20 20  Count; n++).    
68f0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
6900: 20 20 73 74 72 69 6e 67 20 64 61 74 61 62 61 73    string databas
6910: 65 4e 61 6d 65 20 3d 20 73 71 6c 2e 43 6f 6c 75  eName = sql.Colu
6920: 6d 6e 44 61 74 61 62 61 73 65 4e 61 6d 65 28 73  mnDatabaseName(s
6930: 74 6d 74 2c 20 6e 29 3b 0a 20 20 20 20 20 20 20  tmt, n);.       
6940: 20 20 20 20 20 73 74 72 69 6e 67 20 74 61 62 6c       string tabl
6950: 65 4e 61 6d 65 20 3d 20 73 71 6c 2e 43 6f 6c 75  eName = sql.Colu
6960: 6d 6e 54 61 62 6c 65 4e 61 6d 65 28 73 74 6d 74  mnTableName(stmt
6970: 2c 20 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , n);.          
6980: 20 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e    string columnN
6990: 61 6d 65 20 3d 20 73 71 6c 2e 43 6f 6c 75 6d 6e  ame = sql.Column
69a0: 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 73 74 6d  OriginalName(stm
69b0: 74 2c 20 6e 29 3b 0a 0a 20 20 20 20 20 20 20 20  t, n);..        
69c0: 20 20 20 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74      ColumnParent
69d0: 20 6b 65 79 20 3d 20 6e 65 77 20 43 6f 6c 75 6d   key = new Colum
69e0: 6e 50 61 72 65 6e 74 28 64 61 74 61 62 61 73 65  nParent(database
69f0: 4e 61 6d 65 2c 20 74 61 62 6c 65 4e 61 6d 65 2c  Name, tableName,
6a00: 20 6e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20   null);.        
6a10: 20 20 20 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74      ColumnParent
6a20: 20 76 61 6c 75 65 20 3d 20 6e 65 77 20 43 6f 6c   value = new Col
6a30: 75 6d 6e 50 61 72 65 6e 74 28 64 61 74 61 62 61  umnParent(databa
6a40: 73 65 4e 61 6d 65 2c 20 74 61 62 6c 65 4e 61 6d  seName, tableNam
6a50: 65 2c 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 3b 0a  e, columnName);.
6a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
6a70: 28 21 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e  (!parentToColumn
6a80: 73 2e 43 6f 6e 74 61 69 6e 73 4b 65 79 28 6b 65  s.ContainsKey(ke
6a90: 79 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)).            
6aa0: 20 20 20 20 70 61 72 65 6e 74 54 6f 43 6f 6c 75      parentToColu
6ab0: 6d 6e 73 2e 41 64 64 28 6b 65 79 2c 20 6e 65 77  mns.Add(key, new
6ac0: 20 4c 69 73 74 3c 69 6e 74 3e 28 6e 65 77 20 69   List<int>(new i
6ad0: 6e 74 5b 5d 20 7b 20 6e 20 7d 29 29 3b 0a 20 20  nt[] { n }));.  
6ae0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0a 20            else. 
6af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
6b00: 61 72 65 6e 74 54 6f 43 6f 6c 75 6d 6e 73 5b 6b  arentToColumns[k
6b10: 65 79 5d 2e 41 64 64 28 6e 29 3b 0a 0a 20 20 20  ey].Add(n);..   
6b20: 20 20 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 54           columnT
6b30: 6f 50 61 72 65 6e 74 2e 41 64 64 28 6e 2c 20 76  oParent.Add(n, v
6b40: 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 20 20 7d  alue);.        }
6b50: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e 74 65  .    }..    inte
6b60: 72 6e 61 6c 20 44 61 74 61 54 61 62 6c 65 20 47  rnal DataTable G
6b70: 65 74 53 63 68 65 6d 61 54 61 62 6c 65 28 62 6f  etSchemaTable(bo
6b80: 6f 6c 20 77 61 6e 74 55 6e 69 71 75 65 49 6e 66  ol wantUniqueInf
6b90: 6f 2c 20 62 6f 6f 6c 20 77 61 6e 74 44 65 66 61  o, bool wantDefa
6ba0: 75 6c 74 56 61 6c 75 65 29 0a 20 20 20 20 7b 0a  ultValue).    {.
6bb0: 20 20 20 20 20 20 43 68 65 63 6b 43 6c 6f 73 65        CheckClose
6bc0: 64 28 29 3b 0a 20 20 20 20 20 20 69 66 20 28 5f  d();.      if (_
6bd0: 74 68 72 6f 77 4f 6e 44 69 73 70 6f 73 65 64 29  throwOnDisposed)
6be0: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e 43   SQLiteCommand.C
6bf0: 68 65 63 6b 28 5f 63 6f 6d 6d 61 6e 64 29 3b 0a  heck(_command);.
6c00: 0a 20 20 20 20 20 2f 2f 0a 20 20 20 20 20 2f 2f  .     //.     //
6c10: 20 42 55 47 46 49 58 3a 20 57 65 20 6e 65 65 64   BUGFIX: We need
6c20: 20 74 6f 20 71 75 69 63 6b 6c 79 20 73 63 61 6e   to quickly scan
6c30: 20 61 6c 6c 20 74 68 65 20 66 69 65 6c 64 73 20   all the fields 
6c40: 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 0a 20  in the current. 
6c50: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 22      //         "
6c60: 72 65 73 75 6c 74 20 73 65 74 22 20 74 6f 20 73  result set" to s
6c70: 65 65 20 68 6f 77 20 6d 61 6e 79 20 64 69 73 74  ee how many dist
6c80: 69 6e 63 74 20 74 61 62 6c 65 73 20 61 72 65 20  inct tables are 
6c90: 61 63 74 75 61 6c 6c 79 0a 20 20 20 20 20 2f 2f  actually.     //
6ca0: 20 20 20 20 20 20 20 20 20 69 6e 76 6f 6c 76 65           involve
6cb0: 64 2e 20 20 54 68 69 73 20 69 6e 66 6f 72 6d 61  d.  This informa
6cc0: 74 69 6f 6e 20 69 73 20 6e 65 63 65 73 73 61 72  tion is necessar
6cd0: 79 20 73 6f 20 74 68 61 74 20 73 6f 6d 65 0a 20  y so that some. 
6ce0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 69      //         i
6cf0: 6e 74 65 6c 6c 69 67 65 6e 74 20 64 65 63 69 73  ntelligent decis
6d00: 69 6f 6e 73 20 63 61 6e 20 62 65 20 6d 61 64 65  ions can be made
6d10: 20 77 68 65 6e 20 63 6f 6e 73 74 72 75 63 74 69   when constructi
6d20: 6e 67 20 74 68 65 0a 20 20 20 20 20 2f 2f 20 20  ng the.     //  
6d30: 20 20 20 20 20 20 20 6d 65 74 61 64 61 74 61 20         metadata 
6d40: 62 65 6c 6f 77 2e 20 20 46 6f 72 20 65 78 61 6d  below.  For exam
6d50: 70 6c 65 2c 20 77 65 20 6e 65 65 64 20 74 6f 20  ple, we need to 
6d60: 62 65 20 76 65 72 79 20 63 61 72 65 66 75 6c 0a  be very careful.
6d70: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
6d80: 61 62 6f 75 74 20 66 6c 61 67 67 69 6e 67 20 61  about flagging a
6d90: 20 70 61 72 74 69 63 75 6c 61 72 20 63 6f 6c 75   particular colu
6da0: 6d 6e 20 61 73 20 22 75 6e 69 71 75 65 22 20 6a  mn as "unique" j
6db0: 75 73 74 0a 20 20 20 20 20 2f 2f 20 20 20 20 20  ust.     //     
6dc0: 20 20 20 20 62 65 63 61 75 73 65 20 69 74 20 77      because it w
6dd0: 61 73 20 69 6e 20 69 74 73 20 6f 72 69 67 69 6e  as in its origin
6de0: 61 6c 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61  al underlying da
6df0: 74 61 62 61 73 65 20 74 61 62 6c 65 0a 20 20 20  tabase table.   
6e00: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 69 66 20    //         if 
6e10: 74 68 65 72 65 20 61 72 65 20 6e 6f 77 20 6d 75  there are now mu
6e20: 6c 74 69 70 6c 65 20 74 61 62 6c 65 73 20 69 6e  ltiple tables in
6e30: 76 6f 6c 76 65 64 20 69 6e 20 74 68 65 0a 20 20  volved in the.  
6e40: 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 22 72     //         "r
6e50: 65 73 75 6c 74 20 73 65 74 22 2e 20 20 53 65 65  esult set".  See
6e60: 20 74 69 63 6b 65 74 20 5b 37 65 33 66 61 39 33   ticket [7e3fa93
6e70: 37 34 34 5d 20 66 6f 72 20 6d 6f 72 65 20 64 65  744] for more de
6e80: 74 61 69 6c 65 64 0a 20 20 20 20 20 2f 2f 20 20  tailed.     //  
6e90: 20 20 20 20 20 20 20 69 6e 66 6f 72 6d 61 74 69         informati
6ea0: 6f 6e 2e 0a 20 20 20 20 20 2f 2f 0a 20 20 20 20  on..     //.    
6eb0: 20 20 44 69 63 74 69 6f 6e 61 72 79 3c 43 6f 6c    Dictionary<Col
6ec0: 75 6d 6e 50 61 72 65 6e 74 2c 20 4c 69 73 74 3c  umnParent, List<
6ed0: 69 6e 74 3e 3e 20 70 61 72 65 6e 74 54 6f 43 6f  int>> parentToCo
6ee0: 6c 75 6d 6e 73 20 3d 20 6e 75 6c 6c 3b 0a 20 20  lumns = null;.  
6ef0: 20 20 20 20 44 69 63 74 69 6f 6e 61 72 79 3c 69      Dictionary<i
6f00: 6e 74 2c 20 43 6f 6c 75 6d 6e 50 61 72 65 6e 74  nt, ColumnParent
6f10: 3e 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74  > columnToParent
6f20: 20 3d 20 6e 75 6c 6c 3b 0a 0a 20 20 20 20 20 20   = null;..      
6f30: 47 65 74 53 74 61 74 65 6d 65 6e 74 43 6f 6c 75  GetStatementColu
6f40: 6d 6e 50 61 72 65 6e 74 73 28 0a 20 20 20 20 20  mnParents(.     
6f50: 20 20 20 20 20 5f 63 6f 6d 6d 61 6e 64 2e 43 6f       _command.Co
6f60: 6e 6e 65 63 74 69 6f 6e 2e 5f 73 71 6c 2c 20 5f  nnection._sql, _
6f70: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c  activeStatement,
6f80: 20 5f 66 69 65 6c 64 43 6f 75 6e 74 2c 0a 20 20   _fieldCount,.  
6f90: 20 20 20 20 20 20 20 20 72 65 66 20 70 61 72 65          ref pare
6fa0: 6e 74 54 6f 43 6f 6c 75 6d 6e 73 2c 20 72 65 66  ntToColumns, ref
6fb0: 20 63 6f 6c 75 6d 6e 54 6f 50 61 72 65 6e 74 29   columnToParent)
6fc0: 3b 0a 0a 20 20 20 20 20 20 44 61 74 61 54 61 62  ;..      DataTab
6fd0: 6c 65 20 74 62 6c 20 3d 20 6e 65 77 20 44 61 74  le tbl = new Dat
6fe0: 61 54 61 62 6c 65 28 22 53 63 68 65 6d 61 54 61  aTable("SchemaTa
6ff0: 62 6c 65 22 29 3b 0a 20 20 20 20 20 20 44 61 74  ble");.      Dat
7000: 61 54 61 62 6c 65 20 74 62 6c 49 6e 64 65 78 65  aTable tblIndexe
7010: 73 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  s = null;.      
7020: 44 61 74 61 54 61 62 6c 65 20 74 62 6c 49 6e 64  DataTable tblInd
7030: 65 78 43 6f 6c 75 6d 6e 73 3b 0a 20 20 20 20 20  exColumns;.     
7040: 20 44 61 74 61 52 6f 77 20 72 6f 77 3b 0a 20 20   DataRow row;.  
7050: 20 20 20 20 73 74 72 69 6e 67 20 74 65 6d 70 3b      string temp;
7060: 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 74  .      string st
7070: 72 43 61 74 61 6c 6f 67 20 3d 20 22 22 3b 0a 20  rCatalog = "";. 
7080: 20 20 20 20 20 73 74 72 69 6e 67 20 73 74 72 54       string strT
7090: 61 62 6c 65 20 3d 20 22 22 3b 0a 20 20 20 20 20  able = "";.     
70a0: 20 73 74 72 69 6e 67 20 73 74 72 43 6f 6c 75 6d   string strColum
70b0: 6e 20 3d 20 22 22 3b 0a 0a 20 20 20 20 20 20 74  n = "";..      t
70c0: 62 6c 2e 4c 6f 63 61 6c 65 20 3d 20 43 75 6c 74  bl.Locale = Cult
70d0: 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
70e0: 74 43 75 6c 74 75 72 65 3b 0a 20 20 20 20 20 20  tCulture;.      
70f0: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
7100: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
7110: 6e 2e 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 74 79  n.ColumnName, ty
7120: 70 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0a 20  peof(String));. 
7130: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
7140: 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65  .Add(SchemaTable
7150: 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 4f 72 64  Column.ColumnOrd
7160: 69 6e 61 6c 2c 20 74 79 70 65 6f 66 28 69 6e 74  inal, typeof(int
7170: 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  ));.      tbl.Co
7180: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
7190: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75  TableColumn.Colu
71a0: 6d 6e 53 69 7a 65 2c 20 74 79 70 65 6f 66 28 69  mnSize, typeof(i
71b0: 6e 74 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e  nt));.      tbl.
71c0: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
71d0: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75  maTableColumn.Nu
71e0: 6d 65 72 69 63 50 72 65 63 69 73 69 6f 6e 2c 20  mericPrecision, 
71f0: 74 79 70 65 6f 66 28 73 68 6f 72 74 29 29 3b 0a  typeof(short));.
7200: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
7210: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
7220: 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 53  eColumn.NumericS
7230: 63 61 6c 65 2c 20 74 79 70 65 6f 66 28 73 68 6f  cale, typeof(sho
7240: 72 74 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e  rt));.      tbl.
7250: 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65  Columns.Add(Sche
7260: 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73  maTableColumn.Is
7270: 55 6e 69 71 75 65 2c 20 74 79 70 65 6f 66 28 42  Unique, typeof(B
7280: 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20 20 20 20 20  oolean));.      
7290: 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
72a0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
72b0: 6e 2e 49 73 4b 65 79 2c 20 74 79 70 65 6f 66 28  n.IsKey, typeof(
72c0: 42 6f 6f 6c 65 61 6e 29 29 3b 0a 20 20 20 20 20  Boolean));.     
72d0: 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
72e0: 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69  (SchemaTableOpti
72f0: 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 53  onalColumn.BaseS
7300: 65 72 76 65 72 4e 61 6d 65 2c 20 74 79 70 65 6f  erverName, typeo
7310: 66 28 73 74 72 69 6e 67 29 29 3b 0a 20 20 20 20  f(string));.    
7320: 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
7330: 64 28 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  d(SchemaTableOpt
7340: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65  ionalColumn.Base
7350: 43 61 74 61 6c 6f 67 4e 61 6d 65 2c 20 74 79 70  CatalogName, typ
7360: 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0a 20 20  eof(String));.  
7370: 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
7380: 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c 65 43  Add(SchemaTableC
7390: 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d 6e  olumn.BaseColumn
73a0: 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74 72  Name, typeof(Str
73b0: 69 6e 67 29 29 3b 0a 20 20 20 20 20 20 74 62 6c  ing));.      tbl
73c0: 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68  .Columns.Add(Sch
73d0: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42  emaTableColumn.B
73e0: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 2c 20 74  aseSchemaName, t
73f0: 79 70 65 6f 66 28 53 74 72 69 6e 67 29 29 3b 0a  ypeof(String));.
7400: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
7410: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
7420: 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c  eColumn.BaseTabl
7430: 65 4e 61 6d 65 2c 20 74 79 70 65 6f 66 28 53 74  eName, typeof(St
7440: 72 69 6e 67 29 29 3b 0a 20 20 20 20 20 20 74 62  ring));.      tb
7450: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53 63  l.Columns.Add(Sc
7460: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
7470: 44 61 74 61 54 79 70 65 2c 20 74 79 70 65 6f 66  DataType, typeof
7480: 28 54 79 70 65 29 29 3b 0a 20 20 20 20 20 20 74  (Type));.      t
7490: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
74a0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
74b0: 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 2c 20 74 79  .AllowDBNull, ty
74c0: 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a  peof(Boolean));.
74d0: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
74e0: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
74f0: 65 43 6f 6c 75 6d 6e 2e 50 72 6f 76 69 64 65 72  eColumn.Provider
7500: 54 79 70 65 2c 20 74 79 70 65 6f 66 28 69 6e 74  Type, typeof(int
7510: 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  ));.      tbl.Co
7520: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
7530: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 41 6c  TableColumn.IsAl
7540: 69 61 73 65 64 2c 20 74 79 70 65 6f 66 28 42 6f  iased, typeof(Bo
7550: 6f 6c 65 61 6e 29 29 3b 0a 20 20 20 20 20 20 74  olean));.      t
7560: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
7570: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
7580: 2e 49 73 45 78 70 72 65 73 73 69 6f 6e 2c 20 74  .IsExpression, t
7590: 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b  ypeof(Boolean));
75a0: 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
75b0: 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62  ns.Add(SchemaTab
75c0: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
75d0: 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74  .IsAutoIncrement
75e0: 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e  , typeof(Boolean
75f0: 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  ));.      tbl.Co
7600: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
7610: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
7620: 75 6d 6e 2e 49 73 52 6f 77 56 65 72 73 69 6f 6e  umn.IsRowVersion
7630: 2c 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e  , typeof(Boolean
7640: 29 29 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  ));.      tbl.Co
7650: 6c 75 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61  lumns.Add(Schema
7660: 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c  TableOptionalCol
7670: 75 6d 6e 2e 49 73 48 69 64 64 65 6e 2c 20 74 79  umn.IsHidden, ty
7680: 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a  peof(Boolean));.
7690: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
76a0: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
76b0: 65 43 6f 6c 75 6d 6e 2e 49 73 4c 6f 6e 67 2c 20  eColumn.IsLong, 
76c0: 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29  typeof(Boolean))
76d0: 3b 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ;.      tbl.Colu
76e0: 6d 6e 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61  mns.Add(SchemaTa
76f0: 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
7700: 6e 2e 49 73 52 65 61 64 4f 6e 6c 79 2c 20 74 79  n.IsReadOnly, ty
7710: 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29 29 3b 0a  peof(Boolean));.
7720: 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
7730: 73 2e 41 64 64 28 53 63 68 65 6d 61 54 61 62 6c  s.Add(SchemaTabl
7740: 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e  eOptionalColumn.
7750: 50 72 6f 76 69 64 65 72 53 70 65 63 69 66 69 63  ProviderSpecific
7760: 44 61 74 61 54 79 70 65 2c 20 74 79 70 65 6f 66  DataType, typeof
7770: 28 54 79 70 65 29 29 3b 0a 20 20 20 20 20 20 74  (Type));.      t
7780: 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 53  bl.Columns.Add(S
7790: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
77a0: 61 6c 43 6f 6c 75 6d 6e 2e 44 65 66 61 75 6c 74  alColumn.Default
77b0: 56 61 6c 75 65 2c 20 74 79 70 65 6f 66 28 6f 62  Value, typeof(ob
77c0: 6a 65 63 74 29 29 3b 0a 20 20 20 20 20 20 74 62  ject));.      tb
77d0: 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 44  l.Columns.Add("D
77e0: 61 74 61 54 79 70 65 4e 61 6d 65 22 2c 20 74 79  ataTypeName", ty
77f0: 70 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0a 20  peof(string));. 
7800: 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
7810: 2e 41 64 64 28 22 43 6f 6c 6c 61 74 69 6f 6e 54  .Add("CollationT
7820: 79 70 65 22 2c 20 74 79 70 65 6f 66 28 73 74 72  ype", typeof(str
7830: 69 6e 67 29 29 3b 0a 20 20 20 20 20 20 74 62 6c  ing));.      tbl
7840: 2e 42 65 67 69 6e 4c 6f 61 64 44 61 74 61 28 29  .BeginLoadData()
7850: 3b 0a 0a 20 20 20 20 20 20 66 6f 72 20 28 69 6e  ;..      for (in
7860: 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 5f 66 69  t n = 0; n < _fi
7870: 65 6c 64 43 6f 75 6e 74 3b 20 6e 2b 2b 29 0a 20  eldCount; n++). 
7880: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 72       {.        r
7890: 6f 77 20 3d 20 74 62 6c 2e 4e 65 77 52 6f 77 28  ow = tbl.NewRow(
78a0: 29 3b 0a 0a 20 20 20 20 20 20 20 20 44 62 54 79  );..        DbTy
78b0: 70 65 20 74 79 70 20 3d 20 47 65 74 53 51 4c 69  pe typ = GetSQLi
78c0: 74 65 54 79 70 65 28 6e 29 2e 54 79 70 65 3b 0a  teType(n).Type;.
78d0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 44 65 66 61  .        // Defa
78e0: 75 6c 74 20 73 65 74 74 69 6e 67 73 20 66 6f 72  ult settings for
78f0: 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 20 20 20 20   the column.    
7900: 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61      row[SchemaTa
7910: 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e  bleColumn.Column
7920: 4e 61 6d 65 5d 20 3d 20 47 65 74 4e 61 6d 65 28  Name] = GetName(
7930: 6e 29 3b 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  n);.        row[
7940: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
7950: 6e 2e 43 6f 6c 75 6d 6e 4f 72 64 69 6e 61 6c 5d  n.ColumnOrdinal]
7960: 20 3d 20 6e 3b 0a 20 20 20 20 20 20 20 20 72 6f   = n;.        ro
7970: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c  w[SchemaTableCol
7980: 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69 7a 65 5d 20  umn.ColumnSize] 
7990: 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e  = SQLiteConvert.
79a0: 44 62 54 79 70 65 54 6f 43 6f 6c 75 6d 6e 53 69  DbTypeToColumnSi
79b0: 7a 65 28 74 79 70 29 3b 0a 20 20 20 20 20 20 20  ze(typ);.       
79c0: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
79d0: 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 50 72  Column.NumericPr
79e0: 65 63 69 73 69 6f 6e 5d 20 3d 20 53 51 4c 69 74  ecision] = SQLit
79f0: 65 43 6f 6e 76 65 72 74 2e 44 62 54 79 70 65 54  eConvert.DbTypeT
7a00: 6f 4e 75 6d 65 72 69 63 50 72 65 63 69 73 69 6f  oNumericPrecisio
7a10: 6e 28 74 79 70 29 3b 0a 20 20 20 20 20 20 20 20  n(typ);.        
7a20: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  row[SchemaTableC
7a30: 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61  olumn.NumericSca
7a40: 6c 65 5d 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76  le] = SQLiteConv
7a50: 65 72 74 2e 44 62 54 79 70 65 54 6f 4e 75 6d 65  ert.DbTypeToNume
7a60: 72 69 63 53 63 61 6c 65 28 74 79 70 29 3b 0a 20  ricScale(typ);. 
7a70: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
7a80: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72 6f  aTableColumn.Pro
7a90: 76 69 64 65 72 54 79 70 65 5d 20 3d 20 47 65 74  viderType] = Get
7aa0: 53 51 4c 69 74 65 54 79 70 65 28 6e 29 2e 54 79  SQLiteType(n).Ty
7ab0: 70 65 3b 0a 20 20 20 20 20 20 20 20 72 6f 77 5b  pe;.        row[
7ac0: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
7ad0: 6e 2e 49 73 4c 6f 6e 67 5d 20 3d 20 66 61 6c 73  n.IsLong] = fals
7ae0: 65 3b 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53  e;.        row[S
7af0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
7b00: 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 20 3d 20  .AllowDBNull] = 
7b10: 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20 72 6f  true;.        ro
7b20: 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74  w[SchemaTableOpt
7b30: 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73 52 65  ionalColumn.IsRe
7b40: 61 64 4f 6e 6c 79 5d 20 3d 20 66 61 6c 73 65 3b  adOnly] = false;
7b50: 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68  .        row[Sch
7b60: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
7b70: 43 6f 6c 75 6d 6e 2e 49 73 52 6f 77 56 65 72 73  Column.IsRowVers
7b80: 69 6f 6e 5d 20 3d 20 66 61 6c 73 65 3b 0a 20 20  ion] = false;.  
7b90: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
7ba0: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 55 6e  TableColumn.IsUn
7bb0: 69 71 75 65 5d 20 3d 20 66 61 6c 73 65 3b 0a 20  ique] = false;. 
7bc0: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
7bd0: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b  aTableColumn.IsK
7be0: 65 79 5d 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20  ey] = false;.   
7bf0: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
7c00: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
7c10: 6d 6e 2e 49 73 41 75 74 6f 49 6e 63 72 65 6d 65  mn.IsAutoIncreme
7c20: 6e 74 5d 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20  nt] = false;.   
7c30: 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54       row[SchemaT
7c40: 61 62 6c 65 43 6f 6c 75 6d 6e 2e 44 61 74 61 54  ableColumn.DataT
7c50: 79 70 65 5d 20 3d 20 47 65 74 46 69 65 6c 64 54  ype] = GetFieldT
7c60: 79 70 65 28 6e 29 3b 0a 20 20 20 20 20 20 20 20  ype(n);.        
7c70: 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 4f  row[SchemaTableO
7c80: 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e 49 73  ptionalColumn.Is
7c90: 48 69 64 64 65 6e 5d 20 3d 20 66 61 6c 73 65 3b  Hidden] = false;
7ca0: 0a 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68  .        row[Sch
7cb0: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42  emaTableColumn.B
7cc0: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 5d 20 3d  aseSchemaName] =
7cd0: 20 5f 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65   _baseSchemaName
7ce0: 3b 0a 0a 20 20 20 20 20 20 20 20 73 74 72 43 6f  ;..        strCo
7cf0: 6c 75 6d 6e 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50  lumn = columnToP
7d00: 61 72 65 6e 74 5b 6e 5d 2e 43 6f 6c 75 6d 6e 4e  arent[n].ColumnN
7d10: 61 6d 65 3b 0a 20 20 20 20 20 20 20 20 69 66 20  ame;.        if 
7d20: 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
7d30: 45 6d 70 74 79 28 73 74 72 43 6f 6c 75 6d 6e 29  Empty(strColumn)
7d40: 20 3d 3d 20 66 61 6c 73 65 29 20 72 6f 77 5b 53   == false) row[S
7d50: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
7d60: 2e 42 61 73 65 43 6f 6c 75 6d 6e 4e 61 6d 65 5d  .BaseColumnName]
7d70: 20 3d 20 73 74 72 43 6f 6c 75 6d 6e 3b 0a 0a 20   = strColumn;.. 
7d80: 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d         row[Schem
7d90: 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 45  aTableColumn.IsE
7da0: 78 70 72 65 73 73 69 6f 6e 5d 20 3d 20 53 74 72  xpression] = Str
7db0: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
7dc0: 79 28 73 74 72 43 6f 6c 75 6d 6e 29 3b 0a 20 20  y(strColumn);.  
7dd0: 20 20 20 20 20 20 72 6f 77 5b 53 63 68 65 6d 61        row[Schema
7de0: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 49 73 41 6c  TableColumn.IsAl
7df0: 69 61 73 65 64 5d 20 3d 20 28 53 74 72 69 6e 67  iased] = (String
7e00: 2e 43 6f 6d 70 61 72 65 28 47 65 74 4e 61 6d 65  .Compare(GetName
7e10: 28 6e 29 2c 20 73 74 72 43 6f 6c 75 6d 6e 2c 20  (n), strColumn, 
7e20: 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
7e30: 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
7e40: 73 65 29 20 21 3d 20 30 29 3b 0a 0a 20 20 20 20  se) != 0);..    
7e50: 20 20 20 20 74 65 6d 70 20 3d 20 63 6f 6c 75 6d      temp = colum
7e60: 6e 54 6f 50 61 72 65 6e 74 5b 6e 5d 2e 54 61 62  nToParent[n].Tab
7e70: 6c 65 4e 61 6d 65 3b 0a 20 20 20 20 20 20 20 20  leName;.        
7e80: 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
7e90: 6c 4f 72 45 6d 70 74 79 28 74 65 6d 70 29 20 3d  lOrEmpty(temp) =
7ea0: 3d 20 66 61 6c 73 65 29 20 72 6f 77 5b 53 63 68  = false) row[Sch
7eb0: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42  emaTableColumn.B
7ec0: 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d 20 3d 20  aseTableName] = 
7ed0: 74 65 6d 70 3b 0a 0a 20 20 20 20 20 20 20 20 74  temp;..        t
7ee0: 65 6d 70 20 3d 20 63 6f 6c 75 6d 6e 54 6f 50 61  emp = columnToPa
7ef0: 72 65 6e 74 5b 6e 5d 2e 44 61 74 61 62 61 73 65  rent[n].Database
7f00: 4e 61 6d 65 3b 0a 20 20 20 20 20 20 20 20 69 66  Name;.        if
7f10: 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
7f20: 72 45 6d 70 74 79 28 74 65 6d 70 29 20 3d 3d 20  rEmpty(temp) == 
7f30: 66 61 6c 73 65 29 20 72 6f 77 5b 53 63 68 65 6d  false) row[Schem
7f40: 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f  aTableOptionalCo
7f50: 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67  lumn.BaseCatalog
7f60: 4e 61 6d 65 5d 20 3d 20 74 65 6d 70 3b 0a 0a 20  Name] = temp;.. 
7f70: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 61         string da
7f80: 74 61 54 79 70 65 20 3d 20 6e 75 6c 6c 3b 0a 20  taType = null;. 
7f90: 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 20         // If we 
7fa0: 68 61 76 65 20 61 20 74 61 62 6c 65 2d 62 6f 75  have a table-bou
7fb0: 6e 64 20 63 6f 6c 75 6d 6e 2c 20 65 78 74 72 61  nd column, extra
7fc0: 63 74 20 74 68 65 20 65 78 74 72 61 20 69 6e 66  ct the extra inf
7fd0: 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 69 74  ormation from it
7fe0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72  .        if (Str
7ff0: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
8000: 79 28 73 74 72 43 6f 6c 75 6d 6e 29 20 3d 3d 20  y(strColumn) == 
8010: 66 61 6c 73 65 29 0a 20 20 20 20 20 20 20 20 7b  false).        {
8020: 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e  .          strin
8030: 67 20 63 6f 6c 6c 53 65 71 3b 0a 20 20 20 20 20  g collSeq;.     
8040: 20 20 20 20 20 62 6f 6f 6c 20 62 4e 6f 74 4e 75       bool bNotNu
8050: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 20 20 62 6f  ll;.          bo
8060: 6f 6c 20 62 50 72 69 6d 61 72 79 4b 65 79 3b 0a  ol bPrimaryKey;.
8070: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 62            bool b
8080: 41 75 74 6f 49 6e 63 72 65 6d 65 6e 74 3b 0a 20  AutoIncrement;. 
8090: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b           string[
80a0: 5d 20 61 72 53 69 7a 65 3b 0a 0a 20 20 20 20 20  ] arSize;..     
80b0: 20 20 20 20 20 2f 2f 20 47 65 74 20 74 68 65 20       // Get the 
80c0: 63 6f 6c 75 6d 6e 20 6d 65 74 61 20 64 61 74 61  column meta data
80d0: 0a 20 20 20 20 20 20 20 20 20 20 5f 63 6f 6d 6d  .          _comm
80e0: 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 5f  and.Connection._
80f0: 73 71 6c 2e 43 6f 6c 75 6d 6e 4d 65 74 61 44 61  sql.ColumnMetaDa
8100: 74 61 28 0a 20 20 20 20 20 20 20 20 20 20 20 20  ta(.            
8110: 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65  (string)row[Sche
8120: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
8130: 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f  olumn.BaseCatalo
8140: 67 4e 61 6d 65 5d 2c 0a 20 20 20 20 20 20 20 20  gName],.        
8150: 20 20 20 20 28 73 74 72 69 6e 67 29 72 6f 77 5b      (string)row[
8160: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
8170: 6e 2e 42 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d  n.BaseTableName]
8180: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ,.            st
8190: 72 43 6f 6c 75 6d 6e 2c 0a 20 20 20 20 20 20 20  rColumn,.       
81a0: 20 20 20 20 20 6f 75 74 20 64 61 74 61 54 79 70       out dataTyp
81b0: 65 2c 20 6f 75 74 20 63 6f 6c 6c 53 65 71 2c 20  e, out collSeq, 
81c0: 6f 75 74 20 62 4e 6f 74 4e 75 6c 6c 2c 20 6f 75  out bNotNull, ou
81d0: 74 20 62 50 72 69 6d 61 72 79 4b 65 79 2c 20 6f  t bPrimaryKey, o
81e0: 75 74 20 62 41 75 74 6f 49 6e 63 72 65 6d 65 6e  ut bAutoIncremen
81f0: 74 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 69  t);..          i
8200: 66 20 28 62 4e 6f 74 4e 75 6c 6c 20 7c 7c 20 62  f (bNotNull || b
8210: 50 72 69 6d 61 72 79 4b 65 79 29 20 72 6f 77 5b  PrimaryKey) row[
8220: 53 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d  SchemaTableColum
8230: 6e 2e 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 20 3d  n.AllowDBNull] =
8240: 20 66 61 6c 73 65 3b 0a 0a 20 20 20 20 20 20 20   false;..       
8250: 20 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62     row[SchemaTab
8260: 6c 65 43 6f 6c 75 6d 6e 2e 49 73 4b 65 79 5d 20  leColumn.IsKey] 
8270: 3d 20 62 50 72 69 6d 61 72 79 4b 65 79 3b 0a 20  = bPrimaryKey;. 
8280: 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68           row[Sch
8290: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
82a0: 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63  Column.IsAutoInc
82b0: 72 65 6d 65 6e 74 5d 20 3d 20 62 41 75 74 6f 49  rement] = bAutoI
82c0: 6e 63 72 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20  ncrement;.      
82d0: 20 20 20 20 72 6f 77 5b 22 43 6f 6c 6c 61 74 69      row["Collati
82e0: 6f 6e 54 79 70 65 22 5d 20 3d 20 63 6f 6c 6c 53  onType"] = collS
82f0: 65 71 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 2f  eq;..          /
8300: 2f 20 46 6f 72 20 74 79 70 65 73 20 6c 69 6b 65  / For types like
8310: 20 76 61 72 63 68 61 72 28 35 30 29 20 61 6e 64   varchar(50) and
8320: 20 73 75 63 68 2c 20 65 78 74 72 61 63 74 20 74   such, extract t
8330: 68 65 20 73 69 7a 65 0a 20 20 20 20 20 20 20 20  he size.        
8340: 20 20 61 72 53 69 7a 65 20 3d 20 64 61 74 61 54    arSize = dataT
8350: 79 70 65 2e 53 70 6c 69 74 28 27 28 27 29 3b 0a  ype.Split('(');.
8360: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72            if (ar
8370: 53 69 7a 65 2e 4c 65 6e 67 74 68 20 3e 20 31 29  Size.Length > 1)
8380: 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20  .          {.   
8390: 20 20 20 20 20 20 20 20 20 64 61 74 61 54 79 70           dataTyp
83a0: 65 20 3d 20 61 72 53 69 7a 65 5b 30 5d 3b 0a 20  e = arSize[0];. 
83b0: 20 20 20 20 20 20 20 20 20 20 20 61 72 53 69 7a             arSiz
83c0: 65 20 3d 20 61 72 53 69 7a 65 5b 31 5d 2e 53 70  e = arSize[1].Sp
83d0: 6c 69 74 28 27 29 27 29 3b 0a 20 20 20 20 20 20  lit(')');.      
83e0: 20 20 20 20 20 20 69 66 20 28 61 72 53 69 7a 65        if (arSize
83f0: 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0a 20 20 20  .Length > 1).   
8400: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
8410: 20 20 20 20 20 20 20 20 20 61 72 53 69 7a 65 20           arSize 
8420: 3d 20 61 72 53 69 7a 65 5b 30 5d 2e 53 70 6c 69  = arSize[0].Spli
8430: 74 28 27 2c 27 2c 20 27 2e 27 29 3b 0a 20 20 20  t(',', '.');.   
8440: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 47             if (G
8450: 65 74 53 51 4c 69 74 65 54 79 70 65 28 6e 29 2e  etSQLiteType(n).
8460: 54 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 53  Type == DbType.S
8470: 74 72 69 6e 67 20 7c 7c 20 47 65 74 53 51 4c 69  tring || GetSQLi
8480: 74 65 54 79 70 65 28 6e 29 2e 54 79 70 65 20 3d  teType(n).Type =
8490: 3d 20 44 62 54 79 70 65 2e 42 69 6e 61 72 79 29  = DbType.Binary)
84a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
84b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
84c0: 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65   row[SchemaTable
84d0: 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69 7a  Column.ColumnSiz
84e0: 65 5d 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49  e] = Convert.ToI
84f0: 6e 74 33 32 28 61 72 53 69 7a 65 5b 30 5d 2c 20  nt32(arSize[0], 
8500: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
8510: 72 69 61 6e 74 43 75 6c 74 75 72 65 29 3b 0a 20  riantCulture);. 
8520: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
8530: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
8540: 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e.              
8550: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
8560: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
8570: 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 50  eColumn.NumericP
8580: 72 65 63 69 73 69 6f 6e 5d 20 3d 20 43 6f 6e 76  recision] = Conv
8590: 65 72 74 2e 54 6f 49 6e 74 33 32 28 61 72 53 69  ert.ToInt32(arSi
85a0: 7a 65 5b 30 5d 2c 20 43 75 6c 74 75 72 65 49 6e  ze[0], CultureIn
85b0: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
85c0: 75 72 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ure);.          
85d0: 20 20 20 20 20 20 69 66 20 28 61 72 53 69 7a 65        if (arSize
85e0: 2e 4c 65 6e 67 74 68 20 3e 20 31 29 0a 20 20 20  .Length > 1).   
85f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
8600: 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
8610: 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 53 63 61 6c  lumn.NumericScal
8620: 65 5d 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49  e] = Convert.ToI
8630: 6e 74 33 32 28 61 72 53 69 7a 65 5b 31 5d 2c 20  nt32(arSize[1], 
8640: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
8650: 72 69 61 6e 74 43 75 6c 74 75 72 65 29 3b 0a 20  riantCulture);. 
8660: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
8670: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
8680: 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
8690: 20 20 20 20 69 66 20 28 77 61 6e 74 44 65 66 61      if (wantDefa
86a0: 75 6c 74 56 61 6c 75 65 29 0a 20 20 20 20 20 20  ultValue).      
86b0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
86c0: 20 20 2f 2f 20 44 65 74 65 72 6d 69 6e 65 20 74    // Determine t
86d0: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
86e0: 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c   for the column,
86f0: 20 77 68 69 63 68 20 73 75 63 6b 73 20 62 65 63   which sucks bec
8700: 61 75 73 65 20 77 65 20 68 61 76 65 20 74 6f 20  ause we have to 
8710: 71 75 65 72 79 20 74 68 65 20 73 63 68 65 6d 61  query the schema
8720: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
8730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
8740: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
8750: 64 20 63 6d 64 54 61 62 6c 65 20 3d 20 6e 65 77  d cmdTable = new
8760: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28 53   SQLiteCommand(S
8770: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c  tring.Format(Cul
8780: 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
8790: 6e 74 43 75 6c 74 75 72 65 2c 20 22 50 52 41 47  ntCulture, "PRAG
87a0: 4d 41 20 5b 7b 30 7d 5d 2e 54 41 42 4c 45 5f 49  MA [{0}].TABLE_I
87b0: 4e 46 4f 28 5b 7b 31 7d 5d 29 22 2c 0a 20 20 20  NFO([{1}])",.   
87c0: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
87d0: 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
87e0: 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74  alColumn.BaseCat
87f0: 61 6c 6f 67 4e 61 6d 65 5d 2c 0a 20 20 20 20 20  alogName],.     
8800: 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53 63 68           row[Sch
8810: 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42  emaTableColumn.B
8820: 61 73 65 54 61 62 6c 65 4e 61 6d 65 5d 0a 20 20  aseTableName].  
8830: 20 20 20 20 20 20 20 20 20 20 20 20 29 2c 20 5f              ), _
8840: 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69  command.Connecti
8850: 6f 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  on)).           
8860: 20 75 73 69 6e 67 20 28 44 62 44 61 74 61 52 65   using (DbDataRe
8870: 61 64 65 72 20 72 64 54 61 62 6c 65 20 3d 20 63  ader rdTable = c
8880: 6d 64 54 61 62 6c 65 2e 45 78 65 63 75 74 65 52  mdTable.ExecuteR
8890: 65 61 64 65 72 28 29 29 0a 20 20 20 20 20 20 20  eader()).       
88a0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
88b0: 20 20 20 20 20 2f 2f 20 46 69 6e 64 20 74 68 65       // Find the
88c0: 20 6d 61 74 63 68 69 6e 67 20 63 6f 6c 75 6d 6e   matching column
88d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77  .              w
88e0: 68 69 6c 65 20 28 72 64 54 61 62 6c 65 2e 52 65  hile (rdTable.Re
88f0: 61 64 28 29 29 0a 20 20 20 20 20 20 20 20 20 20  ad()).          
8900: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
8910: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
8920: 2e 43 6f 6d 70 61 72 65 28 28 73 74 72 69 6e 67  .Compare((string
8930: 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65  )row[SchemaTable
8940: 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 6f 6c 75 6d  Column.BaseColum
8950: 6e 4e 61 6d 65 5d 2c 20 72 64 54 61 62 6c 65 2e  nName], rdTable.
8960: 47 65 74 53 74 72 69 6e 67 28 31 29 2c 20 53 74  GetString(1), St
8970: 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
8980: 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
8990: 29 20 3d 3d 20 30 29 0a 20 20 20 20 20 20 20 20  ) == 0).        
89a0: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
89b0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
89c0: 72 64 54 61 62 6c 65 2e 49 73 44 42 4e 75 6c 6c  rdTable.IsDBNull
89d0: 28 34 29 20 3d 3d 20 66 61 6c 73 65 29 0a 20 20  (4) == false).  
89e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
89f0: 20 20 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c    row[SchemaTabl
8a00: 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e 2e  eOptionalColumn.
8a10: 44 65 66 61 75 6c 74 56 61 6c 75 65 5d 20 3d 20  DefaultValue] = 
8a20: 72 64 54 61 62 6c 65 5b 34 5d 3b 0a 0a 20 20 20  rdTable[4];..   
8a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
8a40: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20  reak;.          
8a50: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
8a60: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
8a70: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
8a80: 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  }..          // 
8a90: 44 65 74 65 72 6d 69 6e 65 20 49 73 55 6e 69 71  Determine IsUniq
8aa0: 75 65 20 70 72 6f 70 65 72 6c 79 2c 20 77 68 69  ue properly, whi
8ab0: 63 68 20 69 73 20 61 20 70 61 69 6e 20 69 6e 20  ch is a pain in 
8ac0: 74 68 65 20 62 75 74 74 21 0a 20 20 20 20 20 20  the butt!.      
8ad0: 20 20 20 20 69 66 20 28 77 61 6e 74 55 6e 69 71      if (wantUniq
8ae0: 75 65 49 6e 66 6f 29 0a 20 20 20 20 20 20 20 20  ueInfo).        
8af0: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
8b00: 69 66 20 28 28 73 74 72 69 6e 67 29 72 6f 77 5b  if ((string)row[
8b10: 53 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f  SchemaTableOptio
8b20: 6e 61 6c 43 6f 6c 75 6d 6e 2e 42 61 73 65 43 61  nalColumn.BaseCa
8b30: 74 61 6c 6f 67 4e 61 6d 65 5d 20 21 3d 20 73 74  talogName] != st
8b40: 72 43 61 74 61 6c 6f 67 0a 20 20 20 20 20 20 20  rCatalog.       
8b50: 20 20 20 20 20 20 20 7c 7c 20 28 73 74 72 69 6e         || (strin
8b60: 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c  g)row[SchemaTabl
8b70: 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c  eColumn.BaseTabl
8b80: 65 4e 61 6d 65 5d 20 21 3d 20 73 74 72 54 61 62  eName] != strTab
8b90: 6c 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  le).            
8ba0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
8bb0: 73 74 72 43 61 74 61 6c 6f 67 20 3d 20 28 73 74  strCatalog = (st
8bc0: 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54  ring)row[SchemaT
8bd0: 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
8be0: 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61  mn.BaseCatalogNa
8bf0: 6d 65 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20  me];.           
8c00: 20 20 20 73 74 72 54 61 62 6c 65 20 3d 20 28 73     strTable = (s
8c10: 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61  tring)row[Schema
8c20: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65  TableColumn.Base
8c30: 54 61 62 6c 65 4e 61 6d 65 5d 3b 0a 0a 20 20 20  TableName];..   
8c40: 20 20 20 20 20 20 20 20 20 20 20 74 62 6c 49 6e             tblIn
8c50: 64 65 78 65 73 20 3d 20 5f 63 6f 6d 6d 61 6e 64  dexes = _command
8c60: 2e 43 6f 6e 6e 65 63 74 69 6f 6e 2e 47 65 74 53  .Connection.GetS
8c70: 63 68 65 6d 61 28 22 49 6e 64 65 78 65 73 22 2c  chema("Indexes",
8c80: 20 6e 65 77 20 73 74 72 69 6e 67 5b 5d 20 7b 0a   new string[] {.
8c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ca0: 28 73 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65  (string)row[Sche
8cb0: 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43  maTableOptionalC
8cc0: 6f 6c 75 6d 6e 2e 42 61 73 65 43 61 74 61 6c 6f  olumn.BaseCatalo
8cd0: 67 4e 61 6d 65 5d 2c 0a 20 20 20 20 20 20 20 20  gName],.        
8ce0: 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 0a 20 20          null,.  
8cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73                (s
8d00: 74 72 69 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61  tring)row[Schema
8d10: 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65  TableColumn.Base
8d20: 54 61 62 6c 65 4e 61 6d 65 5d 2c 0a 20 20 20 20  TableName],.    
8d30: 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c              null
8d40: 20 7d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   });.           
8d50: 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
8d60: 66 6f 72 65 61 63 68 20 28 44 61 74 61 52 6f 77  foreach (DataRow
8d70: 20 72 6f 77 49 6e 64 65 78 65 73 20 69 6e 20 74   rowIndexes in t
8d80: 62 6c 49 6e 64 65 78 65 73 2e 52 6f 77 73 29 0a  blIndexes.Rows).
8d90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20              {.  
8da0: 20 20 20 20 20 20 20 20 20 20 20 20 74 62 6c 49              tblI
8db0: 6e 64 65 78 43 6f 6c 75 6d 6e 73 20 3d 20 5f 63  ndexColumns = _c
8dc0: 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74 69 6f  ommand.Connectio
8dd0: 6e 2e 47 65 74 53 63 68 65 6d 61 28 22 49 6e 64  n.GetSchema("Ind
8de0: 65 78 43 6f 6c 75 6d 6e 73 22 2c 20 6e 65 77 20  exColumns", new 
8df0: 73 74 72 69 6e 67 5b 5d 20 7b 0a 20 20 20 20 20  string[] {.     
8e00: 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69             (stri
8e10: 6e 67 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62  ng)row[SchemaTab
8e20: 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d 6e  leOptionalColumn
8e30: 2e 42 61 73 65 43 61 74 61 6c 6f 67 4e 61 6d 65  .BaseCatalogName
8e40: 5d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ],.             
8e50: 20 20 20 6e 75 6c 6c 2c 0a 20 20 20 20 20 20 20     null,.       
8e60: 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67           (string
8e70: 29 72 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65  )row[SchemaTable
8e80: 43 6f 6c 75 6d 6e 2e 42 61 73 65 54 61 62 6c 65  Column.BaseTable
8e90: 4e 61 6d 65 5d 2c 0a 20 20 20 20 20 20 20 20 20  Name],.         
8ea0: 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 29 72         (string)r
8eb0: 6f 77 49 6e 64 65 78 65 73 5b 22 49 4e 44 45 58  owIndexes["INDEX
8ec0: 5f 4e 41 4d 45 22 5d 2c 0a 20 20 20 20 20 20 20  _NAME"],.       
8ed0: 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 0a 20 20           null.  
8ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 29                })
8ef0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
8f00: 66 6f 72 65 61 63 68 20 28 44 61 74 61 52 6f 77  foreach (DataRow
8f10: 20 72 6f 77 43 6f 6c 75 6d 6e 49 6e 64 65 78 20   rowColumnIndex 
8f20: 69 6e 20 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d  in tblIndexColum
8f30: 6e 73 2e 52 6f 77 73 29 0a 20 20 20 20 20 20 20  ns.Rows).       
8f40: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
8f50: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
8f60: 69 6e 67 2e 43 6f 6d 70 61 72 65 28 28 73 74 72  ing.Compare((str
8f70: 69 6e 67 29 72 6f 77 43 6f 6c 75 6d 6e 49 6e 64  ing)rowColumnInd
8f80: 65 78 5b 22 43 4f 4c 55 4d 4e 5f 4e 41 4d 45 22  ex["COLUMN_NAME"
8f90: 5d 2c 20 73 74 72 43 6f 6c 75 6d 6e 2c 20 53 74  ], strColumn, St
8fa0: 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
8fb0: 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
8fc0: 29 20 3d 3d 20 30 29 0a 20 20 20 20 20 20 20 20  ) == 0).        
8fd0: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
8fe0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0a 20              //. 
8ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9000: 20 2f 2f 20 42 55 47 46 49 58 3a 20 4d 61 6b 65   // BUGFIX: Make
9010: 20 73 75 72 65 20 74 68 61 74 20 77 65 20 6f 6e   sure that we on
9020: 6c 79 20 66 6c 61 67 20 74 68 69 73 20 63 6f 6c  ly flag this col
9030: 75 6d 6e 20 61 73 20 22 75 6e 69 71 75 65 22 0a  umn as "unique".
9040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9050: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 69 66 20    //         if 
9060: 77 65 20 61 72 65 20 6e 6f 74 20 70 72 6f 63 65  we are not proce
9070: 73 73 69 6e 67 20 6f 66 20 73 6f 6d 65 20 6b 69  ssing of some ki
9080: 6e 64 20 6f 66 20 6d 75 6c 74 69 2d 74 61 62 6c  nd of multi-tabl
9090: 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e.              
90a0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 63      //         c
90b0: 6f 6e 73 74 72 75 63 74 20 28 69 2e 65 2e 20 61  onstruct (i.e. a
90c0: 20 6a 6f 69 6e 29 20 62 65 63 61 75 73 65 20 69   join) because i
90d0: 6e 20 74 68 61 74 20 63 61 73 65 20 77 65 20 6d  n that case we m
90e0: 75 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 20  ust.            
90f0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
9100: 20 61 6c 6c 6f 77 20 64 75 70 6c 69 63 61 74 65   allow duplicate
9110: 20 76 61 6c 75 65 73 20 28 72 65 66 65 72 20 74   values (refer t
9120: 6f 20 74 69 63 6b 65 74 20 5b 37 65 33 66 61 39  o ticket [7e3fa9
9130: 33 37 34 34 5d 29 2e 0a 20 20 20 20 20 20 20 20  3744])..        
9140: 20 20 20 20 20 20 20 20 20 20 2f 2f 0a 20 20 20            //.   
9150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9160: 66 20 28 70 61 72 65 6e 74 54 6f 43 6f 6c 75 6d  f (parentToColum
9170: 6e 73 2e 43 6f 75 6e 74 20 3d 3d 20 31 20 26 26  ns.Count == 1 &&
9180: 20 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e 73   tblIndexColumns
9190: 2e 52 6f 77 73 2e 43 6f 75 6e 74 20 3d 3d 20 31  .Rows.Count == 1
91a0: 20 26 26 20 28 62 6f 6f 6c 29 72 6f 77 5b 53 63   && (bool)row[Sc
91b0: 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e  hemaTableColumn.
91c0: 41 6c 6c 6f 77 44 42 4e 75 6c 6c 5d 20 3d 3d 20  AllowDBNull] == 
91d0: 66 61 6c 73 65 29 0a 20 20 20 20 20 20 20 20 20  false).         
91e0: 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 53             row[S
91f0: 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
9200: 2e 49 73 55 6e 69 71 75 65 5d 20 3d 20 72 6f 77  .IsUnique] = row
9210: 49 6e 64 65 78 65 73 5b 22 55 4e 49 51 55 45 22  Indexes["UNIQUE"
9220: 5d 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
9230: 20 20 20 20 20 20 2f 2f 20 49 66 20 69 74 73 20        // If its 
9240: 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61  an integer prima
9250: 72 79 20 6b 65 79 20 61 6e 64 20 74 68 65 20 6f  ry key and the o
9260: 6e 6c 79 20 70 72 69 6d 61 72 79 20 6b 65 79 20  nly primary key 
9270: 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 74 68  in the table, th
9280: 65 6e 20 69 74 73 20 61 20 72 6f 77 69 64 20 61  en its a rowid a
9290: 6c 69 61 73 20 61 6e 64 20 69 73 20 61 75 74 6f  lias and is auto
92a0: 69 6e 63 72 65 6d 65 6e 74 0a 20 20 20 20 20 20  increment.      
92b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
92c0: 4f 54 45 3a 20 20 43 75 72 72 65 6e 74 6c 79 20  OTE:  Currently 
92d0: 63 6f 6d 6d 65 6e 74 65 64 20 6f 75 74 20 62 65  commented out be
92e0: 63 61 75 73 65 20 74 68 69 73 20 69 73 20 6e 6f  cause this is no
92f0: 74 20 61 6c 77 61 79 73 20 74 68 65 20 64 65 73  t always the des
9300: 69 72 65 64 20 62 65 68 61 76 69 6f 72 2e 20 20  ired behavior.  
9310: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 20 31  For example, a 1
9320: 3a 31 20 72 65 6c 61 74 69 6f 6e 73 68 69 70 20  :1 relationship 
9330: 77 69 74 68 0a 20 20 20 20 20 20 20 20 20 20 20  with.           
9340: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
9350: 20 61 6e 6f 74 68 65 72 20 74 61 62 6c 65 2c 20   another table, 
9360: 77 68 65 72 65 20 74 68 65 20 6f 74 68 65 72 20  where the other 
9370: 74 61 62 6c 65 20 69 73 20 61 75 74 6f 69 6e 63  table is autoinc
9380: 72 65 6d 65 6e 74 2c 20 62 75 74 20 74 68 69 73  rement, but this
9390: 20 6f 6e 65 20 69 73 20 6e 6f 74 2c 20 61 6e 64   one is not, and
93a0: 20 75 73 65 73 20 74 68 65 20 72 6f 77 69 64 20   uses the rowid 
93b0: 66 72 6f 6d 20 74 68 65 20 6f 74 68 65 72 2e 0a  from the other..
93c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93d0: 20 20 2f 2f 20 20 20 20 20 20 20 20 49 74 20 69    //        It i
93e0: 73 20 73 61 66 65 72 20 74 6f 20 6f 6e 6c 79 20  s safer to only 
93f0: 73 65 74 20 41 75 74 6f 69 6e 63 72 65 6d 65 6e  set Autoincremen
9400: 74 20 6f 6e 20 74 61 62 6c 65 73 20 77 68 65 72  t on tables wher
9410: 65 20 77 65 27 72 65 20 53 55 52 45 20 74 68 65  e we're SURE the
9420: 20 75 73 65 72 20 73 70 65 63 69 66 69 65 64 20   user specified 
9430: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 2c 20 65  AUTOINCREMENT, e
9440: 76 65 6e 20 69 66 20 69 74 73 20 61 20 72 6f 77  ven if its a row
9450: 69 64 20 63 6f 6c 75 6d 6e 2e 0a 0a 20 20 20 20  id column...    
9460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9470: 20 28 74 62 6c 49 6e 64 65 78 43 6f 6c 75 6d 6e   (tblIndexColumn
9480: 73 2e 52 6f 77 73 2e 43 6f 75 6e 74 20 3d 3d 20  s.Rows.Count == 
9490: 31 20 26 26 20 28 62 6f 6f 6c 29 72 6f 77 49 6e  1 && (bool)rowIn
94a0: 64 65 78 65 73 5b 22 50 52 49 4d 41 52 59 5f 4b  dexes["PRIMARY_K
94b0: 45 59 22 5d 20 3d 3d 20 74 72 75 65 20 26 26 20  EY"] == true && 
94c0: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
94d0: 6d 70 74 79 28 64 61 74 61 54 79 70 65 29 20 3d  mpty(dataType) =
94e0: 3d 20 66 61 6c 73 65 20 26 26 0a 20 20 20 20 20  = false &&.     
94f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
9500: 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 64 61  tring.Compare(da
9510: 74 61 54 79 70 65 2c 20 22 69 6e 74 65 67 65 72  taType, "integer
9520: 22 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  ", StringCompari
9530: 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72  son.OrdinalIgnor
9540: 65 43 61 73 65 29 20 3d 3d 20 30 29 0a 20 20 20  eCase) == 0).   
9550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
9560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9570: 20 20 20 20 20 2f 2f 20 20 72 6f 77 5b 53 63 68       //  row[Sch
9580: 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e 61 6c  emaTableOptional
9590: 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49 6e 63  Column.IsAutoInc
95a0: 72 65 6d 65 6e 74 5d 20 3d 20 74 72 75 65 3b 0a  rement] = true;.
95b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95c0: 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
95d0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
95e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
95f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
9600: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
9610: 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
9620: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
9630: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 61  IsNullOrEmpty(da
9640: 74 61 54 79 70 65 29 29 0a 20 20 20 20 20 20 20  taType)).       
9650: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
9660: 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 61 66   TypeAffinity af
9670: 66 69 6e 3b 0a 20 20 20 20 20 20 20 20 20 20 20  fin;.           
9680: 20 64 61 74 61 54 79 70 65 20 3d 20 5f 61 63 74   dataType = _act
9690: 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71  iveStatement._sq
96a0: 6c 2e 43 6f 6c 75 6d 6e 54 79 70 65 28 5f 61 63  l.ColumnType(_ac
96b0: 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20 6e  tiveStatement, n
96c0: 2c 20 6f 75 74 20 61 66 66 69 6e 29 3b 0a 20 20  , out affin);.  
96d0: 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
96e0: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
96f0: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 61  IsNullOrEmpty(da
9700: 74 61 54 79 70 65 29 20 3d 3d 20 66 61 6c 73 65  taType) == false
9710: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 6f  ).            ro
9720: 77 5b 22 44 61 74 61 54 79 70 65 4e 61 6d 65 22  w["DataTypeName"
9730: 5d 20 3d 20 64 61 74 61 54 79 70 65 3b 0a 20 20  ] = dataType;.  
9740: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
9750: 74 62 6c 2e 52 6f 77 73 2e 41 64 64 28 72 6f 77  tbl.Rows.Add(row
9760: 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  );.      }..    
9770: 20 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21    if (_keyInfo !
9780: 3d 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20  = null).        
9790: 5f 6b 65 79 49 6e 66 6f 2e 41 70 70 65 6e 64 53  _keyInfo.AppendS
97a0: 63 68 65 6d 61 54 61 62 6c 65 28 74 62 6c 29 3b  chemaTable(tbl);
97b0: 0a 0a 20 20 20 20 20 20 74 62 6c 2e 41 63 63 65  ..      tbl.Acce
97c0: 70 74 43 68 61 6e 67 65 73 28 29 3b 0a 20 20 20  ptChanges();.   
97d0: 20 20 20 74 62 6c 2e 45 6e 64 4c 6f 61 64 44 61     tbl.EndLoadDa
97e0: 74 61 28 29 3b 0a 0a 20 20 20 20 20 20 72 65 74  ta();..      ret
97f0: 75 72 6e 20 74 62 6c 3b 0a 20 20 20 20 7d 0a 0a  urn tbl;.    }..
9800: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
9810: 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65  >.    /// Retrie
9820: 76 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  ves the column a
9830: 73 20 61 20 73 74 72 69 6e 67 0a 20 20 20 20 2f  s a string.    /
9840: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
9850: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
9860: 65 3d 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20  e="i">The index 
9870: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f  of the column to
9880: 20 72 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d   retrieve</param
9890: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
98a0: 6e 73 3e 73 74 72 69 6e 67 3c 2f 72 65 74 75 72  ns>string</retur
98b0: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
98c0: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 47  verride string G
98d0: 65 74 53 74 72 69 6e 67 28 69 6e 74 20 69 29 0a  etString(int i).
98e0: 20 20 20 20 7b 0a 20 20 20 20 20 20 43 68 65 63      {.      Chec
98f0: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a 0a 20 20  kDisposed();..  
9900: 20 20 20 20 69 66 20 28 69 20 3e 3d 20 56 69 73      if (i >= Vis
9910: 69 62 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26  ibleFieldCount &
9920: 26 20 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75  & _keyInfo != nu
9930: 6c 6c 29 0a 20 20 20 20 20 20 20 20 72 65 74 75  ll).        retu
9940: 72 6e 20 5f 6b 65 79 49 6e 66 6f 2e 47 65 74 53  rn _keyInfo.GetS
9950: 74 72 69 6e 67 28 69 20 2d 20 56 69 73 69 62 6c  tring(i - Visibl
9960: 65 46 69 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20  eFieldCount);.. 
9970: 20 20 20 20 20 56 65 72 69 66 79 54 79 70 65 28       VerifyType(
9980: 69 2c 20 44 62 54 79 70 65 2e 53 74 72 69 6e 67  i, DbType.String
9990: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
99a0: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
99b0: 2e 5f 73 71 6c 2e 47 65 74 54 65 78 74 28 5f 61  ._sql.GetText(_a
99c0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2c 20  ctiveStatement, 
99d0: 69 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  i);.    }..    /
99e0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
99f0: 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74   /// Retrieves t
9a00: 68 65 20 63 6f 6c 75 6d 6e 20 61 73 20 61 6e 20  he column as an 
9a10: 6f 62 6a 65 63 74 20 63 6f 72 72 65 73 70 6f 6e  object correspon
9a20: 64 69 6e 67 20 74 6f 20 74 68 65 20 75 6e 64 65  ding to the unde
9a30: 72 6c 79 69 6e 67 20 64 61 74 61 74 79 70 65 20  rlying datatype 
9a40: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 20 20  of the column.  
9a50: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
9a60: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
9a70: 6e 61 6d 65 3d 22 69 22 3e 54 68 65 20 69 6e 64  name="i">The ind
9a80: 65 78 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ex of the column
9a90: 20 74 6f 20 72 65 74 72 69 65 76 65 3c 2f 70 61   to retrieve</pa
9aa0: 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ram>.    /// <re
9ab0: 74 75 72 6e 73 3e 6f 62 6a 65 63 74 3c 2f 72 65  turns>object</re
9ac0: 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69  turns>.    publi
9ad0: 63 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63  c override objec
9ae0: 74 20 47 65 74 56 61 6c 75 65 28 69 6e 74 20 69  t GetValue(int i
9af0: 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 43 68  ).    {.      Ch
9b00: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a 20  eckDisposed();. 
9b10: 20 20 20 20 20 43 68 65 63 6b 56 61 6c 69 64 52       CheckValidR
9b20: 6f 77 28 29 3b 0a 0a 20 20 20 20 20 20 69 66 20  ow();..      if 
9b30: 28 69 20 3e 3d 20 56 69 73 69 62 6c 65 46 69 65  (i >= VisibleFie
9b40: 6c 64 43 6f 75 6e 74 20 26 26 20 5f 6b 65 79 49  ldCount && _keyI
9b50: 6e 66 6f 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20  nfo != null).   
9b60: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6b 65 79       return _key
9b70: 49 6e 66 6f 2e 47 65 74 56 61 6c 75 65 28 69 20  Info.GetValue(i 
9b80: 2d 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f  - VisibleFieldCo
9b90: 75 6e 74 29 3b 0a 0a 20 20 20 20 20 20 53 51 4c  unt);..      SQL
9ba0: 69 74 65 54 79 70 65 20 74 79 70 20 3d 20 47 65  iteType typ = Ge
9bb0: 74 53 51 4c 69 74 65 54 79 70 65 28 69 29 3b 0a  tSQLiteType(i);.
9bc0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 61  .      return _a
9bd0: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e 5f  ctiveStatement._
9be0: 73 71 6c 2e 47 65 74 56 61 6c 75 65 28 0a 20 20  sql.GetValue(.  
9bf0: 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53          _activeS
9c00: 74 61 74 65 6d 65 6e 74 2c 20 53 51 4c 69 74 65  tatement, SQLite
9c10: 43 6f 6d 6d 61 6e 64 2e 47 65 74 46 6c 61 67 73  Command.GetFlags
9c20: 28 5f 63 6f 6d 6d 61 6e 64 29 2c 20 69 2c 20 74  (_command), i, t
9c30: 79 70 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  yp);.    }..    
9c40: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
9c50: 20 20 2f 2f 2f 20 52 65 74 72 65 69 76 65 73 20    /// Retreives 
9c60: 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 6d 75  the values of mu
9c70: 6c 74 69 70 6c 65 20 63 6f 6c 75 6d 6e 73 2c 20  ltiple columns, 
9c80: 75 70 20 74 6f 20 74 68 65 20 73 69 7a 65 20 6f  up to the size o
9c90: 66 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 61  f the supplied a
9ca0: 72 72 61 79 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  rray.    /// </s
9cb0: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
9cc0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c  <param name="val
9cd0: 75 65 73 22 3e 54 68 65 20 61 72 72 61 79 20 74  ues">The array t
9ce0: 6f 20 66 69 6c 6c 20 77 69 74 68 20 76 61 6c 75  o fill with valu
9cf0: 65 73 20 66 72 6f 6d 20 74 68 65 20 63 6f 6c 75  es from the colu
9d00: 6d 6e 73 20 69 6e 20 74 68 65 20 63 75 72 72 65  mns in the curre
9d10: 6e 74 20 72 65 73 75 6c 74 73 65 74 3c 2f 70 61  nt resultset</pa
9d20: 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ram>.    /// <re
9d30: 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72  turns>The number
9d40: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 72 65 74 72   of columns retr
9d50: 69 65 76 65 64 3c 2f 72 65 74 75 72 6e 73 3e 0a  ieved</returns>.
9d60: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
9d70: 69 64 65 20 69 6e 74 20 47 65 74 56 61 6c 75 65  ide int GetValue
9d80: 73 28 6f 62 6a 65 63 74 5b 5d 20 76 61 6c 75 65  s(object[] value
9d90: 73 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 43  s).    {.      C
9da0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a  heckDisposed();.
9db0: 0a 20 20 20 20 20 20 69 6e 74 20 6e 4d 61 78 20  .      int nMax 
9dc0: 3d 20 46 69 65 6c 64 43 6f 75 6e 74 3b 0a 20 20  = FieldCount;.  
9dd0: 20 20 20 20 69 66 20 28 76 61 6c 75 65 73 2e 4c      if (values.L
9de0: 65 6e 67 74 68 20 3c 20 6e 4d 61 78 29 20 6e 4d  ength < nMax) nM
9df0: 61 78 20 3d 20 76 61 6c 75 65 73 2e 4c 65 6e 67  ax = values.Leng
9e00: 74 68 3b 0a 0a 20 20 20 20 20 20 66 6f 72 20 28  th;..      for (
9e10: 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 6e  int n = 0; n < n
9e20: 4d 61 78 3b 20 6e 2b 2b 29 0a 20 20 20 20 20 20  Max; n++).      
9e30: 7b 0a 20 20 20 20 20 20 20 20 76 61 6c 75 65 73  {.        values
9e40: 5b 6e 5d 20 3d 20 47 65 74 56 61 6c 75 65 28 6e  [n] = GetValue(n
9e50: 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  );.      }..    
9e60: 20 20 72 65 74 75 72 6e 20 6e 4d 61 78 3b 0a 20    return nMax;. 
9e70: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73     }..    /// <s
9e80: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
9e90: 52 65 74 75 72 6e 73 20 61 20 63 6f 6c 6c 65 63  Returns a collec
9ea0: 74 69 6f 6e 20 63 6f 6e 74 61 69 6e 69 6e 67 20  tion containing 
9eb0: 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e  all the column n
9ec0: 61 6d 65 73 20 61 6e 64 20 76 61 6c 75 65 73 20  ames and values 
9ed0: 66 6f 72 20 74 68 65 0a 20 20 20 20 2f 2f 2f 20  for the.    /// 
9ee0: 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 64  current row of d
9ef0: 61 74 61 20 69 6e 20 74 68 65 20 63 75 72 72 65  ata in the curre
9f00: 6e 74 20 72 65 73 75 6c 74 73 65 74 2c 20 69 66  nt resultset, if
9f10: 20 61 6e 79 2e 20 20 49 66 20 74 68 65 72 65 20   any.  If there 
9f20: 69 73 20 6e 6f 0a 20 20 20 20 2f 2f 2f 20 63 75  is no.    /// cu
9f30: 72 72 65 6e 74 20 72 6f 77 20 6f 72 20 6e 6f 20  rrent row or no 
9f40: 63 75 72 72 65 6e 74 20 72 65 73 75 6c 74 73 65  current resultse
9f50: 74 2c 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  t, an exception 
9f60: 6d 61 79 20 62 65 20 74 68 72 6f 77 6e 2e 0a 20  may be thrown.. 
9f70: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
9f80: 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  >.    /// <retur
9f90: 6e 73 3e 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ns>.    /// The 
9fa0: 63 6f 6c 6c 65 63 74 69 6f 6e 20 63 6f 6e 74 61  collection conta
9fb0: 69 6e 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e  ining the column
9fc0: 20 6e 61 6d 65 20 61 6e 64 20 76 61 6c 75 65 20   name and value 
9fd0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20  information for 
9fe0: 74 68 65 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72  the.    /// curr
9ff0: 65 6e 74 20 72 6f 77 20 6f 66 20 64 61 74 61 20  ent row of data 
a000: 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  in the current r
a010: 65 73 75 6c 74 73 65 74 20 6f 72 20 6e 75 6c 6c  esultset or null
a020: 20 69 66 20 74 68 69 73 20 69 6e 66 6f 72 6d 61   if this informa
a030: 74 69 6f 6e 0a 20 20 20 20 2f 2f 2f 20 63 61 6e  tion.    /// can
a040: 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e  not be obtained.
a050: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
a060: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 4e  ns>.    public N
a070: 61 6d 65 56 61 6c 75 65 43 6f 6c 6c 65 63 74 69  ameValueCollecti
a080: 6f 6e 20 47 65 74 56 61 6c 75 65 73 28 29 0a 20  on GetValues(). 
a090: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 43 68 65     {.        Che
a0a0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0a 0a 20  ckDisposed();.. 
a0b0: 20 20 20 20 20 20 20 69 66 20 28 28 5f 61 63 74         if ((_act
a0c0: 69 76 65 53 74 61 74 65 6d 65 6e 74 20 3d 3d 20  iveStatement == 
a0d0: 6e 75 6c 6c 29 20 7c 7c 20 28 5f 61 63 74 69 76  null) || (_activ
a0e0: 65 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 20  eStatement._sql 
a0f0: 3d 3d 20 6e 75 6c 6c 29 29 0a 20 20 20 20 20 20  == null)).      
a100: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
a110: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
a120: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0a 0a 20 20  Exception();..  
a130: 20 20 20 20 20 20 69 6e 74 20 6e 4d 61 78 20 3d        int nMax =
a140: 20 56 69 73 69 62 6c 65 46 69 65 6c 64 43 6f 75   VisibleFieldCou
a150: 6e 74 3b 0a 20 20 20 20 20 20 20 20 4e 61 6d 65  nt;.        Name
a160: 56 61 6c 75 65 43 6f 6c 6c 65 63 74 69 6f 6e 20  ValueCollection 
a170: 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 4e 61 6d  result = new Nam
a180: 65 56 61 6c 75 65 43 6f 6c 6c 65 63 74 69 6f 6e  eValueCollection
a190: 28 6e 4d 61 78 29 3b 0a 0a 20 20 20 20 20 20 20  (nMax);..       
a1a0: 20 66 6f 72 20 28 69 6e 74 20 6e 20 3d 20 30 3b   for (int n = 0;
a1b0: 20 6e 20 3c 20 6e 4d 61 78 3b 20 6e 2b 2b 29 0a   n < nMax; n++).
a1c0: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
a1d0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
a1e0: 65 20 3d 20 5f 61 63 74 69 76 65 53 74 61 74 65  e = _activeState
a1f0: 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e  ment._sql.Column
a200: 4e 61 6d 65 28 5f 61 63 74 69 76 65 53 74 61 74  Name(_activeStat
a210: 65 6d 65 6e 74 2c 20 6e 29 3b 0a 20 20 20 20 20  ement, n);.     
a220: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61         string va
a230: 6c 75 65 20 3d 20 5f 61 63 74 69 76 65 53 74 61  lue = _activeSta
a240: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 47 65 74 54  tement._sql.GetT
a250: 65 78 74 28 5f 61 63 74 69 76 65 53 74 61 74 65  ext(_activeState
a260: 6d 65 6e 74 2c 20 6e 29 3b 0a 0a 20 20 20 20 20  ment, n);..     
a270: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
a280: 64 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0a  d(name, value);.
a290: 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
a2a0: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
a2b0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
a2c0: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
a2d0: 2f 2f 20 52 65 74 75 72 6e 73 20 54 72 75 65 20  // Returns True 
a2e0: 69 66 20 74 68 65 20 72 65 73 75 6c 74 73 65 74  if the resultset
a2f0: 20 68 61 73 20 72 6f 77 73 20 74 68 61 74 20 63   has rows that c
a300: 61 6e 20 62 65 20 66 65 74 63 68 65 64 0a 20 20  an be fetched.  
a310: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
a320: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
a330: 72 69 64 65 20 62 6f 6f 6c 20 48 61 73 52 6f 77  ride bool HasRow
a340: 73 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65  s.    {.      ge
a350: 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  t.      {.      
a360: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
a370: 29 3b 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  );.        Check
a380: 43 6c 6f 73 65 64 28 29 3b 0a 20 20 20 20 20 20  Closed();.      
a390: 20 20 72 65 74 75 72 6e 20 28 5f 72 65 61 64 69    return (_readi
a3a0: 6e 67 53 74 61 74 65 20 21 3d 20 31 29 3b 0a 20  ngState != 1);. 
a3b0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20       }.    }..  
a3c0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
a3d0: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
a3e0: 54 72 75 65 20 69 66 20 74 68 65 20 64 61 74 61  True if the data
a3f0: 20 72 65 61 64 65 72 20 69 73 20 63 6c 6f 73 65   reader is close
a400: 64 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  d.    /// </summ
a410: 61 72 79 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  ary>.    public 
a420: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73  override bool Is
a430: 43 6c 6f 73 65 64 0a 20 20 20 20 7b 0a 20 20 20  Closed.    {.   
a440: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
a450: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
a460: 20 28 5f 63 6f 6d 6d 61 6e 64 20 3d 3d 20 6e 75   (_command == nu
a470: 6c 6c 29 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20  ll); }.    }..  
a480: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
a490: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
a4a0: 54 72 75 65 20 69 66 20 74 68 65 20 73 70 65 63  True if the spec
a4b0: 69 66 69 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20  ified column is 
a4c0: 6e 75 6c 6c 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  null.    /// </s
a4d0: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
a4e0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e  <param name="i">
a4f0: 54 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  The index of the
a500: 20 63 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69   column to retri
a510: 65 76 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20  eve</param>.    
a520: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 72 75  /// <returns>Tru
a530: 65 20 6f 72 20 46 61 6c 73 65 3c 2f 72 65 74 75  e or False</retu
a540: 72 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20  rns>.    public 
a550: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73  override bool Is
a560: 44 42 4e 75 6c 6c 28 69 6e 74 20 69 29 0a 20 20  DBNull(int i).  
a570: 20 20 7b 0a 20 20 20 20 20 20 43 68 65 63 6b 44    {.      CheckD
a580: 69 73 70 6f 73 65 64 28 29 3b 0a 0a 20 20 20 20  isposed();..    
a590: 20 20 69 66 20 28 69 20 3e 3d 20 56 69 73 69 62    if (i >= Visib
a5a0: 6c 65 46 69 65 6c 64 43 6f 75 6e 74 20 26 26 20  leFieldCount && 
a5b0: 5f 6b 65 79 49 6e 66 6f 20 21 3d 20 6e 75 6c 6c  _keyInfo != null
a5c0: 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ).        return
a5d0: 20 5f 6b 65 79 49 6e 66 6f 2e 49 73 44 42 4e 75   _keyInfo.IsDBNu
a5e0: 6c 6c 28 69 20 2d 20 56 69 73 69 62 6c 65 46 69  ll(i - VisibleFi
a5f0: 65 6c 64 43 6f 75 6e 74 29 3b 0a 0a 20 20 20 20  eldCount);..    
a600: 20 20 72 65 74 75 72 6e 20 5f 61 63 74 69 76 65    return _active
a610: 53 74 61 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 49  Statement._sql.I
a620: 73 4e 75 6c 6c 28 5f 61 63 74 69 76 65 53 74 61  sNull(_activeSta
a630: 74 65 6d 65 6e 74 2c 20 69 29 3b 0a 20 20 20 20  tement, i);.    
a640: 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
a650: 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 4d 6f 76  ary>.    /// Mov
a660: 65 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72  es to the next r
a670: 65 73 75 6c 74 73 65 74 20 69 6e 20 6d 75 6c 74  esultset in mult
a680: 69 70 6c 65 20 72 6f 77 2d 72 65 74 75 72 6e 69  iple row-returni
a690: 6e 67 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 2e 0a  ng SQL command..
a6a0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
a6b0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  y>.    /// <retu
a6c0: 72 6e 73 3e 54 72 75 65 20 69 66 20 74 68 65 20  rns>True if the 
a6d0: 63 6f 6d 6d 61 6e 64 20 77 61 73 20 73 75 63 63  command was succ
a6e0: 65 73 73 66 75 6c 20 61 6e 64 20 61 20 6e 65 77  essful and a new
a6f0: 20 72 65 73 75 6c 74 73 65 74 20 69 73 20 61 76   resultset is av
a700: 61 69 6c 61 62 6c 65 2c 20 46 61 6c 73 65 20 6f  ailable, False o
a710: 74 68 65 72 77 69 73 65 2e 3c 2f 72 65 74 75 72  therwise.</retur
a720: 6e 73 3e 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  ns>.    public o
a730: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 4e 65 78  verride bool Nex
a740: 74 52 65 73 75 6c 74 28 29 0a 20 20 20 20 7b 0a  tResult().    {.
a750: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
a760: 73 65 64 28 29 3b 0a 20 20 20 20 20 20 43 68 65  sed();.      Che
a770: 63 6b 43 6c 6f 73 65 64 28 29 3b 0a 20 20 20 20  ckClosed();.    
a780: 20 20 69 66 20 28 5f 74 68 72 6f 77 4f 6e 44 69    if (_throwOnDi
a790: 73 70 6f 73 65 64 29 20 53 51 4c 69 74 65 43 6f  sposed) SQLiteCo
a7a0: 6d 6d 61 6e 64 2e 43 68 65 63 6b 28 5f 63 6f 6d  mmand.Check(_com
a7b0: 6d 61 6e 64 29 3b 0a 0a 20 20 20 20 20 20 53 51  mand);..      SQ
a7c0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
a7d0: 6d 74 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20 20 20  mt = null;.     
a7e0: 20 69 6e 74 20 66 69 65 6c 64 43 6f 75 6e 74 3b   int fieldCount;
a7f0: 0a 0a 20 20 20 20 20 20 77 68 69 6c 65 20 28 74  ..      while (t
a800: 72 75 65 29 0a 20 20 20 20 20 20 7b 0a 20 20 20  rue).      {.   
a810: 20 20 20 20 20 69 66 20 28 73 74 6d 74 20 3d 3d       if (stmt ==
a820: 20 6e 75 6c 6c 20 26 26 20 5f 61 63 74 69 76 65   null && _active
a830: 53 74 61 74 65 6d 65 6e 74 20 21 3d 20 6e 75 6c  Statement != nul
a840: 6c 20 26 26 20 5f 61 63 74 69 76 65 53 74 61 74  l && _activeStat
a850: 65 6d 65 6e 74 2e 5f 73 71 6c 20 21 3d 20 6e 75  ement._sql != nu
a860: 6c 6c 20 26 26 20 5f 61 63 74 69 76 65 53 74 61  ll && _activeSta
a870: 74 65 6d 65 6e 74 2e 5f 73 71 6c 2e 49 73 4f 70  tement._sql.IsOp
a880: 65 6e 28 29 29 0a 20 20 20 20 20 20 20 20 7b 0a  en()).        {.
a890: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 73            // Res
a8a0: 65 74 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c  et the previousl
a8b0: 79 2d 65 78 65 63 75 74 65 64 20 73 74 61 74 65  y-executed state
a8c0: 6d 65 6e 74 0a 20 20 20 20 20 20 20 20 20 20 5f  ment.          _
a8d0: 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 2e  activeStatement.
a8e0: 5f 73 71 6c 2e 52 65 73 65 74 28 5f 61 63 74 69  _sql.Reset(_acti
a8f0: 76 65 53 74 61 74 65 6d 65 6e 74 29 3b 0a 0a 20  veStatement);.. 
a900: 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77           // If w
a910: 65 27 72 65 20 6f 6e 6c 79 20 73 75 70 70 6f 73  e're only suppos
a920: 65 64 20 74 6f 20 72 65 74 75 72 6e 20 61 20 73  ed to return a s
a930: 69 6e 67 6c 65 20 72 6f 77 73 65 74 2c 20 73 74  ingle rowset, st
a940: 65 70 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 72  ep through all r
a950: 65 6d 61 69 6e 69 6e 67 20 73 74 61 74 65 6d 65  emaining stateme
a960: 6e 74 73 20 6f 6e 63 65 20 75 6e 74 69 6c 0a 20  nts once until. 
a970: 20 20 20 20 20 20 20 20 20 2f 2f 20 74 68 65 79           // they
a980: 20 61 72 65 20 61 6c 6c 20 64 6f 6e 65 20 61 6e   are all done an
a990: 64 20 72 65 74 75 72 6e 20 66 61 6c 73 65 20 74  d return false t
a9a0: 6f 20 69 6e 64 69 63 61 74 65 20 6e 6f 20 6d 6f  o indicate no mo
a9b0: 72 65 20 72 65 73 75 6c 74 73 65 74 73 20 65 78  re resultsets ex
a9c0: 69 73 74 2e 0a 20 20 20 20 20 20 20 20 20 20 69  ist..          i
a9d0: 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42 65 68 61  f ((_commandBeha
a9e0: 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e 64 42 65  vior & CommandBe
a9f0: 68 61 76 69 6f 72 2e 53 69 6e 67 6c 65 52 65 73  havior.SingleRes
aa00: 75 6c 74 29 20 21 3d 20 30 29 0a 20 20 20 20 20  ult) != 0).     
aa10: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
aa20: 20 20 20 66 6f 72 20 28 3b 20 3b 20 29 0a 20 20     for (; ; ).  
aa30: 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20            {.    
aa40: 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 20 3d            stmt =
aa50: 20 5f 63 6f 6d 6d 61 6e 64 2e 47 65 74 53 74 61   _command.GetSta
aa60: 74 65 6d 65 6e 74 28 5f 61 63 74 69 76 65 53 74  tement(_activeSt
aa70: 61 74 65 6d 65 6e 74 49 6e 64 65 78 20 2b 20 31  atementIndex + 1
aa80: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
aa90: 20 69 66 20 28 73 74 6d 74 20 3d 3d 20 6e 75 6c   if (stmt == nul
aaa0: 6c 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  l) break;.      
aab0: 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53          _activeS
aac0: 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 2b 2b 3b  tatementIndex++;
aad0: 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aae0: 73 74 6d 74 2e 5f 73 71 6c 2e 53 74 65 70 28 73  stmt._sql.Step(s
aaf0: 74 6d 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  tmt);.          
ab00: 20 20 20 20 69 66 20 28 73 74 6d 74 2e 5f 73 71      if (stmt._sq
ab10: 6c 2e 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74  l.ColumnCount(st
ab20: 6d 74 29 20 3d 3d 20 30 29 0a 20 20 20 20 20 20  mt) == 0).      
ab30: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
ab40: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 72            if (_r
ab50: 6f 77 73 41 66 66 65 63 74 65 64 20 3d 3d 20 2d  owsAffected == -
ab60: 31 29 20 5f 72 6f 77 73 41 66 66 65 63 74 65 64  1) _rowsAffected
ab70: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
ab80: 20 20 20 20 20 20 69 6e 74 20 63 68 61 6e 67 65        int change
ab90: 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  s = 0;.         
aba0: 20 20 20 20 20 20 20 69 66 20 28 73 74 6d 74 2e         if (stmt.
abb0: 54 72 79 47 65 74 43 68 61 6e 67 65 73 28 72 65  TryGetChanges(re
abc0: 66 20 63 68 61 6e 67 65 73 29 29 0a 20 20 20 20  f changes)).    
abd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abe0: 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 2b 3d  _rowsAffected +=
abf0: 20 63 68 61 6e 67 65 73 3b 0a 20 20 20 20 20 20   changes;.      
ac00: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0a 20            else. 
ac10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac20: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
ac30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
ac40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
ac50: 74 6d 74 2e 5f 73 71 6c 2e 52 65 73 65 74 28 73  tmt._sql.Reset(s
ac60: 74 6d 74 29 3b 20 2f 2f 20 47 6f 74 74 61 20 72  tmt); // Gotta r
ac70: 65 73 65 74 20 61 66 74 65 72 20 65 76 65 72 79  eset after every
ac80: 20 73 74 65 70 20 74 6f 20 72 65 6c 65 61 73 65   step to release
ac90: 20 61 6e 79 20 6c 6f 63 6b 73 20 61 6e 64 20 73   any locks and s
aca0: 75 63 68 21 0a 20 20 20 20 20 20 20 20 20 20 20  uch!.           
acb0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72   }.            r
acc0: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a 20 20 20  eturn false;.   
acd0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
ace0: 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20 47   }..        // G
acf0: 65 74 20 74 68 65 20 6e 65 78 74 20 73 74 61 74  et the next stat
ad00: 65 6d 65 6e 74 20 74 6f 20 65 78 65 63 75 74 65  ement to execute
ad10: 0a 20 20 20 20 20 20 20 20 73 74 6d 74 20 3d 20  .        stmt = 
ad20: 5f 63 6f 6d 6d 61 6e 64 2e 47 65 74 53 74 61 74  _command.GetStat
ad30: 65 6d 65 6e 74 28 5f 61 63 74 69 76 65 53 74 61  ement(_activeSta
ad40: 74 65 6d 65 6e 74 49 6e 64 65 78 20 2b 20 31 29  tementIndex + 1)
ad50: 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20 49 66  ;..        // If
ad60: 20 77 65 27 76 65 20 72 65 61 63 68 65 64 20 74   we've reached t
ad70: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 73 74  he end of the st
ad80: 61 74 65 6d 65 6e 74 73 2c 20 72 65 74 75 72 6e  atements, return
ad90: 20 66 61 6c 73 65 2c 20 6e 6f 20 6d 6f 72 65 20   false, no more 
ada0: 72 65 73 75 6c 74 73 65 74 73 0a 20 20 20 20 20  resultsets.     
adb0: 20 20 20 69 66 20 28 73 74 6d 74 20 3d 3d 20 6e     if (stmt == n
adc0: 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 20 20 72  ull).          r
add0: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a 0a 20 20  eturn false;..  
ade0: 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 20 77        // If we w
adf0: 65 72 65 20 6f 6e 20 61 20 63 75 72 72 65 6e 74  ere on a current
ae00: 20 72 65 73 75 6c 74 73 65 74 2c 20 73 65 74 20   resultset, set 
ae10: 74 68 65 20 73 74 61 74 65 20 74 6f 20 22 64 6f  the state to "do
ae20: 6e 65 20 72 65 61 64 69 6e 67 22 20 66 6f 72 20  ne reading" for 
ae30: 69 74 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  it.        if (_
ae40: 72 65 61 64 69 6e 67 53 74 61 74 65 20 3c 20 31  readingState < 1
ae50: 29 0a 20 20 20 20 20 20 20 20 20 20 5f 72 65 61  ).          _rea
ae60: 64 69 6e 67 53 74 61 74 65 20 3d 20 31 3b 0a 0a  dingState = 1;..
ae70: 20 20 20 20 20 20 20 20 5f 61 63 74 69 76 65 53          _activeS
ae80: 74 61 74 65 6d 65 6e 74 49 6e 64 65 78 2b 2b 3b  tatementIndex++;
ae90: 0a 0a 20 20 20 20 20 20 20 20 66 69 65 6c 64 43  ..        fieldC
aea0: 6f 75 6e 74 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ount = stmt._sql
aeb0: 2e 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d  .ColumnCount(stm
aec0: 74 29 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20  t);..        // 
aed0: 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  If the statement
aee0: 20 69 73 20 6e 6f 74 20 61 20 73 65 6c 65 63 74   is not a select
aef0: 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 77 65   statement or we
af00: 27 72 65 20 6e 6f 74 20 72 65 74 72 69 65 76 69  're not retrievi
af10: 6e 67 20 73 63 68 65 6d 61 20 6f 6e 6c 79 2c 20  ng schema only, 
af20: 74 68 65 6e 20 70 65 72 66 6f 72 6d 20 74 68 65  then perform the
af30: 20 69 6e 69 74 69 61 6c 20 73 74 65 70 0a 20 20   initial step.  
af40: 20 20 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d        if ((_comm
af50: 61 6e 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f  andBehavior & Co
af60: 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 53 63  mmandBehavior.Sc
af70: 68 65 6d 61 4f 6e 6c 79 29 20 3d 3d 20 30 20 7c  hemaOnly) == 0 |
af80: 7c 20 66 69 65 6c 64 43 6f 75 6e 74 20 3d 3d 20  | fieldCount == 
af90: 30 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20  0).        {.   
afa0: 20 20 20 20 20 20 20 69 66 20 28 73 74 6d 74 2e         if (stmt.
afb0: 5f 73 71 6c 2e 53 74 65 70 28 73 74 6d 74 29 29  _sql.Step(stmt))
afc0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20  .          {.   
afd0: 20 20 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e           _readin
afe0: 67 53 74 61 74 65 20 3d 20 2d 31 3b 0a 20 20 20  gState = -1;.   
aff0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
b000: 20 20 20 65 6c 73 65 20 69 66 20 28 66 69 65 6c     else if (fiel
b010: 64 43 6f 75 6e 74 20 3d 3d 20 30 29 20 2f 2f 20  dCount == 0) // 
b020: 4e 6f 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64  No rows returned
b030: 2c 20 69 66 20 66 69 65 6c 64 43 6f 75 6e 74 20  , if fieldCount 
b040: 69 73 20 7a 65 72 6f 2c 20 73 6b 69 70 20 74 6f  is zero, skip to
b050: 20 74 68 65 20 6e 65 78 74 20 73 74 61 74 65 6d   the next statem
b060: 65 6e 74 0a 20 20 20 20 20 20 20 20 20 20 7b 0a  ent.          {.
b070: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
b080: 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 3d 3d  _rowsAffected ==
b090: 20 2d 31 29 20 5f 72 6f 77 73 41 66 66 65 63 74   -1) _rowsAffect
b0a0: 65 64 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  ed = 0;.        
b0b0: 20 20 20 20 69 6e 74 20 63 68 61 6e 67 65 73 20      int changes 
b0c0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 20  = 0;.           
b0d0: 20 69 66 20 28 73 74 6d 74 2e 54 72 79 47 65 74   if (stmt.TryGet
b0e0: 43 68 61 6e 67 65 73 28 72 65 66 20 63 68 61 6e  Changes(ref chan
b0f0: 67 65 73 29 29 0a 20 20 20 20 20 20 20 20 20 20  ges)).          
b100: 20 20 20 20 20 20 5f 72 6f 77 73 41 66 66 65 63        _rowsAffec
b110: 74 65 64 20 2b 3d 20 63 68 61 6e 67 65 73 3b 0a  ted += changes;.
b120: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
b130: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b140: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0a 20   return false;. 
b150: 20 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e             stmt.
b160: 5f 73 71 6c 2e 52 65 73 65 74 28 73 74 6d 74 29  _sql.Reset(stmt)
b170: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ;.            co
b180: 6e 74 69 6e 75 65 3b 20 2f 2f 20 53 6b 69 70 20  ntinue; // Skip 
b190: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 61 6e 64  this command and
b1a0: 20 6d 6f 76 65 20 74 6f 20 74 68 65 20 6e 65 78   move to the nex
b1b0: 74 2c 20 69 74 20 77 61 73 20 6e 6f 74 20 61 20  t, it was not a 
b1c0: 72 6f 77 2d 72 65 74 75 72 6e 69 6e 67 20 72 65  row-returning re
b1d0: 73 75 6c 74 73 65 74 0a 20 20 20 20 20 20 20 20  sultset.        
b1e0: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 65 6c    }.          el
b1f0: 73 65 20 2f 2f 20 4e 6f 20 72 6f 77 73 2c 20 66  se // No rows, f
b200: 69 65 6c 64 43 6f 75 6e 74 20 69 73 20 6e 6f 6e  ieldCount is non
b210: 2d 7a 65 72 6f 20 73 6f 20 73 74 6f 70 20 68 65  -zero so stop he
b220: 72 65 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20  re.          {. 
b230: 20 20 20 20 20 20 20 20 20 20 20 5f 72 65 61 64             _read
b240: 69 6e 67 53 74 61 74 65 20 3d 20 31 3b 20 2f 2f  ingState = 1; //
b250: 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 72 65   This command re
b260: 74 75 72 6e 65 64 20 63 6f 6c 75 6d 6e 73 20 62  turned columns b
b270: 75 74 20 6e 6f 20 72 6f 77 73 2c 20 73 6f 20 72  ut no rows, so r
b280: 65 74 75 72 6e 20 74 72 75 65 2c 20 62 75 74 20  eturn true, but 
b290: 48 61 73 52 6f 77 73 20 3d 20 66 61 6c 73 65 20  HasRows = false 
b2a0: 61 6e 64 20 52 65 61 64 28 29 20 72 65 74 75 72  and Read() retur
b2b0: 6e 73 20 66 61 6c 73 65 0a 20 20 20 20 20 20 20  ns false.       
b2c0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 0a     }.        }..
b2d0: 20 20 20 20 20 20 20 20 2f 2f 20 41 68 68 2c 20          // Ahh, 
b2e0: 77 65 20 66 6f 75 6e 64 20 61 20 72 6f 77 2d 72  we found a row-r
b2f0: 65 74 75 72 6e 69 6e 67 20 72 65 73 75 6c 74 73  eturning results
b300: 65 74 20 65 6c 69 67 69 62 6c 65 20 74 6f 20 62  et eligible to b
b310: 65 20 72 65 74 75 72 6e 65 64 21 0a 20 20 20 20  e returned!.    
b320: 20 20 20 20 5f 61 63 74 69 76 65 53 74 61 74 65      _activeState
b330: 6d 65 6e 74 20 3d 20 73 74 6d 74 3b 0a 20 20 20  ment = stmt;.   
b340: 20 20 20 20 20 5f 66 69 65 6c 64 43 6f 75 6e 74       _fieldCount
b350: 20 3d 20 66 69 65 6c 64 43 6f 75 6e 74 3b 0a 20   = fieldCount;. 
b360: 20 20 20 20 20 20 20 5f 66 69 65 6c 64 49 6e 64         _fieldInd
b370: 65 78 65 73 20 3d 20 6e 75 6c 6c 3b 0a 20 20 20  exes = null;.   
b380: 20 20 20 20 20 5f 66 69 65 6c 64 54 79 70 65 41       _fieldTypeA
b390: 72 72 61 79 20 3d 20 6e 75 6c 6c 3b 0a 0a 20 20  rray = null;..  
b3a0: 20 20 20 20 20 20 69 66 20 28 28 5f 63 6f 6d 6d        if ((_comm
b3b0: 61 6e 64 42 65 68 61 76 69 6f 72 20 26 20 43 6f  andBehavior & Co
b3c0: 6d 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 4b 65  mmandBehavior.Ke
b3d0: 79 49 6e 66 6f 29 20 21 3d 20 30 29 0a 20 20 20  yInfo) != 0).   
b3e0: 20 20 20 20 20 20 20 4c 6f 61 64 4b 65 79 49 6e         LoadKeyIn
b3f0: 66 6f 28 29 3b 0a 0a 20 20 20 20 20 20 20 20 72  fo();..        r
b400: 65 74 75 72 6e 20 74 72 75 65 3b 0a 20 20 20 20  eturn true;.    
b410: 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f    }.    }..    /
b420: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
b430: 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20 74   /// Retrieves t
b440: 68 65 20 53 51 4c 69 74 65 54 79 70 65 20 66 6f  he SQLiteType fo
b450: 72 20 61 20 67 69 76 65 6e 20 63 6f 6c 75 6d 6e  r a given column
b460: 2c 20 61 6e 64 20 63 61 63 68 65 73 20 69 74 20  , and caches it 
b470: 74 6f 20 61 76 6f 69 64 20 72 65 70 65 74 65 74  to avoid repetet
b480: 69 76 65 20 69 6e 74 65 72 6f 70 20 63 61 6c 6c  ive interop call
b490: 73 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  s..    /// </sum
b4a0: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  mary>.    /// <p
b4b0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 22 3e 54 68  aram name="i">Th
b4c0: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63  e index of the c
b4d0: 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76  olumn to retriev
b4e0: 65 3c 2f 70 61 72 61 6d 3e 0a 20 20 20 20 2f 2f  e</param>.    //
b4f0: 2f 20 3c 72 65 74 75 72 6e 73 3e 41 20 53 51 4c  / <returns>A SQL
b500: 69 74 65 54 79 70 65 20 73 74 72 75 63 74 75 72  iteType structur
b510: 65 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20 20  e</returns>.    
b520: 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 54 79  private SQLiteTy
b530: 70 65 20 47 65 74 53 51 4c 69 74 65 54 79 70 65  pe GetSQLiteType
b540: 28 69 6e 74 20 69 29 0a 20 20 20 20 7b 0a 20 20  (int i).    {.  
b550: 20 20 20 20 53 51 4c 69 74 65 54 79 70 65 20 74      SQLiteType t
b560: 79 70 3b 0a 0a 20 20 20 20 20 20 2f 2f 20 49 6e  yp;..      // In
b570: 69 74 69 61 6c 69 7a 65 20 74 68 65 20 66 69 65  itialize the fie
b580: 6c 64 20 74 79 70 65 73 20 61 72 72 61 79 20 69  ld types array i
b590: 66 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 69 6e  f not already in
b5a0: 69 74 69 61 6c 69 7a 65 64 0a 20 20 20 20 20 20  itialized.      
b5b0: 69 66 20 28 5f 66 69 65 6c 64 54 79 70 65 41 72  if (_fieldTypeAr
b5c0: 72 61 79 20 3d 3d 20 6e 75 6c 6c 29 0a 20 20 20  ray == null).   
b5d0: 20 20 20 20 20 5f 66 69 65 6c 64 54 79 70 65 41       _fieldTypeA
b5e0: 72 72 61 79 20 3d 20 6e 65 77 20 53 51 4c 69 74  rray = new SQLit
b5f0: 65 54 79 70 65 5b 56 69 73 69 62 6c 65 46 69 65  eType[VisibleFie
b600: 6c 64 43 6f 75 6e 74 5d 3b 0a 0a 20 20 20 20 20  ldCount];..     
b610: 20 2f 2f 20 49 6e 69 74 69 61 6c 69 7a 65 20 74   // Initialize t
b620: 68 69 73 20 63 6f 6c 75 6d 6e 27 73 20 66 69 65  his column's fie
b630: 6c 64 20 74 79 70 65 20 69 6e 73 74 61 6e 63 65  ld type instance
b640: 0a 20 20 20 20 20 20 69 66 20 28 5f 66 69 65 6c  .      if (_fiel
b650: 64 54 79 70 65 41 72 72 61 79 5b 69 5d 20 3d 3d  dTypeArray[i] ==
b660: 20 6e 75 6c 6c 29 20 5f 66 69 65 6c 64 54 79 70   null) _fieldTyp
b670: 65 41 72 72 61 79 5b 69 5d 20 3d 20 6e 65 77 20  eArray[i] = new 
b680: 53 51 4c 69 74 65 54 79 70 65 28 29 3b 0a 0a 20  SQLiteType();.. 
b690: 20 20 20 20 20 74 79 70 20 3d 20 5f 66 69 65 6c       typ = _fiel
b6a0: 64 54 79 70 65 41 72 72 61 79 5b 69 5d 3b 0a 0a  dTypeArray[i];..
b6b0: 20 20 20 20 20 20 2f 2f 20 49 66 20 6e 6f 74 20        // If not 
b6c0: 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 74 68 65  initialized, the
b6d0: 6e 20 66 65 74 63 68 20 74 68 65 20 64 65 63 6c  n fetch the decl
b6e0: 61 72 65 64 20 63 6f 6c 75 6d 6e 20 64 61 74 61  ared column data
b6f0: 74 79 70 65 20 61 6e 64 20 61 74 74 65 6d 70 74  type and attempt
b700: 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 0a   to convert it .
b710: 20 20 20 20 20 20 2f 2f 20 74 6f 20 61 20 6b 6e        // to a kn
b720: 6f 77 6e 20 44 62 54 79 70 65 2e 0a 20 20 20 20  own DbType..    
b730: 20 20 69 66 20 28 74 79 70 2e 41 66 66 69 6e 69    if (typ.Affini
b740: 74 79 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69  ty == TypeAffini
b750: 74 79 2e 55 6e 69 6e 69 74 69 61 6c 69 7a 65 64  ty.Uninitialized
b760: 29 0a 20 20 20 20 20 20 20 20 74 79 70 2e 54 79  ).        typ.Ty
b770: 70 65 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65  pe = SQLiteConve
b780: 72 74 2e 54 79 70 65 4e 61 6d 65 54 6f 44 62 54  rt.TypeNameToDbT
b790: 79 70 65 28 5f 61 63 74 69 76 65 53 74 61 74 65  ype(_activeState
b7a0: 6d 65 6e 74 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e  ment._sql.Column
b7b0: 54 79 70 65 28 5f 61 63 74 69 76 65 53 74 61 74  Type(_activeStat
b7c0: 65 6d 65 6e 74 2c 20 69 2c 20 6f 75 74 20 74 79  ement, i, out ty
b7d0: 70 2e 41 66 66 69 6e 69 74 79 29 29 3b 0a 20 20  p.Affinity));.  
b7e0: 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20      else.       
b7f0: 20 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d 20   typ.Affinity = 
b800: 5f 61 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74  _activeStatement
b810: 2e 5f 73 71 6c 2e 43 6f 6c 75 6d 6e 41 66 66 69  ._sql.ColumnAffi
b820: 6e 69 74 79 28 5f 61 63 74 69 76 65 53 74 61 74  nity(_activeStat
b830: 65 6d 65 6e 74 2c 20 69 29 3b 0a 0a 20 20 20 20  ement, i);..    
b840: 20 20 72 65 74 75 72 6e 20 74 79 70 3b 0a 20 20    return typ;.  
b850: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75    }..    /// <su
b860: 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 52  mmary>.    /// R
b870: 65 61 64 73 20 74 68 65 20 6e 65 78 74 20 72 6f  eads the next ro
b880: 77 20 66 72 6f 6d 20 74 68 65 20 72 65 73 75 6c  w from the resul
b890: 74 73 65 74 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  tset.    /// </s
b8a0: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
b8b0: 3c 72 65 74 75 72 6e 73 3e 54 72 75 65 20 69 66  <returns>True if
b8c0: 20 61 20 6e 65 77 20 72 6f 77 20 77 61 73 20 73   a new row was s
b8d0: 75 63 63 65 73 73 66 75 6c 6c 79 20 6c 6f 61 64  uccessfully load
b8e0: 65 64 20 61 6e 64 20 69 73 20 72 65 61 64 79 20  ed and is ready 
b8f0: 66 6f 72 20 70 72 6f 63 65 73 73 69 6e 67 3c 2f  for processing</
b900: 72 65 74 75 72 6e 73 3e 0a 20 20 20 20 70 75 62  returns>.    pub
b910: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  lic override boo
b920: 6c 20 52 65 61 64 28 29 0a 20 20 20 20 7b 0a 20  l Read().    {. 
b930: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
b940: 65 64 28 29 3b 0a 20 20 20 20 20 20 43 68 65 63  ed();.      Chec
b950: 6b 43 6c 6f 73 65 64 28 29 3b 0a 20 20 20 20 20  kClosed();.     
b960: 20 69 66 20 28 5f 74 68 72 6f 77 4f 6e 44 69 73   if (_throwOnDis
b970: 70 6f 73 65 64 29 20 53 51 4c 69 74 65 43 6f 6d  posed) SQLiteCom
b980: 6d 61 6e 64 2e 43 68 65 63 6b 28 5f 63 6f 6d 6d  mand.Check(_comm
b990: 61 6e 64 29 3b 0a 0a 20 20 20 20 20 20 69 66 20  and);..      if 
b9a0: 28 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d  (_readingState =
b9b0: 3d 20 2d 31 29 20 2f 2f 20 46 69 72 73 74 20 73  = -1) // First s
b9c0: 74 65 70 20 77 61 73 20 61 6c 72 65 61 64 79 20  tep was already 
b9d0: 64 6f 6e 65 20 61 74 20 74 68 65 20 4e 65 78 74  done at the Next
b9e0: 52 65 73 75 6c 74 28 29 20 6c 65 76 65 6c 2c 20  Result() level, 
b9f0: 73 6f 20 64 6f 6e 27 74 20 73 74 65 70 20 61 67  so don't step ag
ba00: 61 69 6e 2c 20 6a 75 73 74 20 72 65 74 75 72 6e  ain, just return
ba10: 20 74 72 75 65 2e 0a 20 20 20 20 20 20 7b 0a 20   true..      {. 
ba20: 20 20 20 20 20 20 20 5f 72 65 61 64 69 6e 67 53         _readingS
ba30: 74 61 74 65 20 3d 20 30 3b 0a 20 20 20 20 20 20  tate = 0;.      
ba40: 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0a 20    return true;. 
ba50: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 65 6c 73       }.      els
ba60: 65 20 69 66 20 28 5f 72 65 61 64 69 6e 67 53 74  e if (_readingSt
ba70: 61 74 65 20 3d 3d 20 30 29 20 2f 2f 20 41 63 74  ate == 0) // Act
ba80: 69 76 65 6c 79 20 72 65 61 64 69 6e 67 20 72 6f  ively reading ro
ba90: 77 73 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  ws.      {.     
baa0: 20 20 20 2f 2f 20 44 6f 6e 27 74 20 72 65 61 64     // Don't read
bab0: 20 61 20 6e 65 77 20 72 6f 77 20 69 66 20 74 68   a new row if th
bac0: 65 20 63 6f 6d 6d 61 6e 64 20 62 65 68 61 76 69  e command behavi
bad0: 6f 72 20 64 69 63 74 61 74 65 73 20 53 69 6e 67  or dictates Sing
bae0: 6c 65 52 6f 77 2e 20 20 57 65 27 76 65 20 61 6c  leRow.  We've al
baf0: 72 65 61 64 79 20 72 65 61 64 20 74 68 65 20 66  ready read the f
bb00: 69 72 73 74 20 72 6f 77 2e 0a 20 20 20 20 20 20  irst row..      
bb10: 20 20 69 66 20 28 28 5f 63 6f 6d 6d 61 6e 64 42    if ((_commandB
bb20: 65 68 61 76 69 6f 72 20 26 20 43 6f 6d 6d 61 6e  ehavior & Comman
bb30: 64 42 65 68 61 76 69 6f 72 2e 53 69 6e 67 6c 65  dBehavior.Single
bb40: 52 6f 77 29 20 3d 3d 20 30 29 0a 20 20 20 20 20  Row) == 0).     
bb50: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 69     {.          i
bb60: 66 20 28 5f 61 63 74 69 76 65 53 74 61 74 65 6d  f (_activeStatem
bb70: 65 6e 74 2e 5f 73 71 6c 2e 53 74 65 70 28 5f 61  ent._sql.Step(_a
bb80: 63 74 69 76 65 53 74 61 74 65 6d 65 6e 74 29 20  ctiveStatement) 
bb90: 3d 3d 20 74 72 75 65 29 0a 20 20 20 20 20 20 20  == true).       
bba0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
bbb0: 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d   if (_keyInfo !=
bbc0: 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 20   null).         
bbd0: 20 20 20 20 20 5f 6b 65 79 49 6e 66 6f 2e 52 65       _keyInfo.Re
bbe0: 73 65 74 28 29 3b 0a 0a 20 20 20 20 20 20 20 20  set();..        
bbf0: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
bc00: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
bc10: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20       }..        
bc20: 5f 72 65 61 64 69 6e 67 53 74 61 74 65 20 3d 20  _readingState = 
bc30: 31 3b 20 2f 2f 20 46 69 6e 69 73 68 65 64 20 72  1; // Finished r
bc40: 65 61 64 69 6e 67 20 72 6f 77 73 0a 20 20 20 20  eading rows.    
bc50: 20 20 7d 0a 0a 20 20 20 20 20 20 72 65 74 75 72    }..      retur
bc60: 6e 20 66 61 6c 73 65 3b 0a 20 20 20 20 7d 0a 0a  n false;.    }..
bc70: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
bc80: 3e 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69 65  >.    /// Retrie
bc90: 76 65 20 74 68 65 20 63 6f 75 6e 74 20 6f 66 20  ve the count of 
bca0: 72 65 63 6f 72 64 73 20 61 66 66 65 63 74 65 64  records affected
bcb0: 20 62 79 20 61 6e 20 75 70 64 61 74 65 2f 69 6e   by an update/in
bcc0: 73 65 72 74 20 63 6f 6d 6d 61 6e 64 2e 20 20 4f  sert command.  O
bcd0: 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 63 65 20 74  nly valid once t
bce0: 68 65 20 64 61 74 61 20 72 65 61 64 65 72 20 69  he data reader i
bcf0: 73 20 63 6c 6f 73 65 64 21 0a 20 20 20 20 2f 2f  s closed!.    //
bd00: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
bd10: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
bd20: 20 69 6e 74 20 52 65 63 6f 72 64 73 41 66 66 65   int RecordsAffe
bd30: 63 74 65 64 0a 20 20 20 20 7b 0a 20 20 20 20 20  cted.    {.     
bd40: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
bd50: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 28  osed(); return (
bd60: 5f 72 6f 77 73 41 66 66 65 63 74 65 64 20 3c 20  _rowsAffected < 
bd70: 30 29 20 3f 20 30 20 3a 20 5f 72 6f 77 73 41 66  0) ? 0 : _rowsAf
bd80: 66 65 63 74 65 64 3b 20 7d 0a 20 20 20 20 7d 0a  fected; }.    }.
bd90: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
bda0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 49 6e 64 65 78  y>.    /// Index
bdb0: 65 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 64  er to retrieve d
bdc0: 61 74 61 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d  ata from a colum
bdd0: 6e 20 67 69 76 65 6e 20 69 74 73 20 6e 61 6d 65  n given its name
bde0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
bdf0: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  ry>.    /// <par
be00: 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 54  am name="name">T
be10: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63  he name of the c
be20: 6f 6c 75 6d 6e 20 74 6f 20 72 65 74 72 69 65 76  olumn to retriev
be30: 65 20 64 61 74 61 20 66 6f 72 3c 2f 70 61 72 61  e data for</para
be40: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  m>.    /// <retu
be50: 72 6e 73 3e 54 68 65 20 76 61 6c 75 65 20 63 6f  rns>The value co
be60: 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63  ntained in the c
be70: 6f 6c 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0a  olumn</returns>.
be80: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
be90: 69 64 65 20 6f 62 6a 65 63 74 20 74 68 69 73 5b  ide object this[
bea0: 73 74 72 69 6e 67 20 6e 61 6d 65 5d 0a 20 20 20  string name].   
beb0: 20 7b 0a 20 20 20 20 20 20 67 65 74 20 7b 20 43   {.      get { C
bec0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
bed0: 72 65 74 75 72 6e 20 47 65 74 56 61 6c 75 65 28  return GetValue(
bee0: 47 65 74 4f 72 64 69 6e 61 6c 28 6e 61 6d 65 29  GetOrdinal(name)
bef0: 29 3b 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ); }.    }..    
bf00: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
bf10: 20 20 2f 2f 2f 20 49 6e 64 65 78 65 72 20 74 6f    /// Indexer to
bf20: 20 72 65 74 72 69 65 76 65 20 64 61 74 61 20 66   retrieve data f
bf30: 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 67 69 76  rom a column giv
bf40: 65 6e 20 69 74 73 20 69 0a 20 20 20 20 2f 2f 2f  en its i.    ///
bf50: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
bf60: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
bf70: 22 69 22 3e 54 68 65 20 69 6e 64 65 78 20 6f 66  "i">The index of
bf80: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 74 6f 20 72   the column to r
bf90: 65 74 72 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0a  etrieve</param>.
bfa0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
bfb0: 3e 54 68 65 20 76 61 6c 75 65 20 63 6f 6e 74 61  >The value conta
bfc0: 69 6e 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75  ined in the colu
bfd0: 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0a 20 20 20  mn</returns>.   
bfe0: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
bff0: 20 6f 62 6a 65 63 74 20 74 68 69 73 5b 69 6e 74   object this[int
c000: 20 69 5d 0a 20 20 20 20 7b 0a 20 20 20 20 20 20   i].    {.      
c010: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
c020: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 47 65  sed(); return Ge
c030: 74 56 61 6c 75 65 28 69 29 3b 20 7d 0a 20 20 20  tValue(i); }.   
c040: 20 7d 0a 0a 20 20 20 20 70 72 69 76 61 74 65 20   }..    private 
c050: 76 6f 69 64 20 4c 6f 61 64 4b 65 79 49 6e 66 6f  void LoadKeyInfo
c060: 28 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20  ().    {.       
c070: 20 69 66 20 28 5f 6b 65 79 49 6e 66 6f 20 21 3d   if (_keyInfo !=
c080: 20 6e 75 6c 6c 29 0a 20 20 20 20 20 20 20 20 7b   null).        {
c090: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 6b 65  .            _ke
c0a0: 79 49 6e 66 6f 2e 44 69 73 70 6f 73 65 28 29 3b  yInfo.Dispose();
c0b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 6b 65  .            _ke
c0c0: 79 49 6e 66 6f 20 3d 20 6e 75 6c 6c 3b 0a 20 20  yInfo = null;.  
c0d0: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
c0e0: 20 5f 6b 65 79 49 6e 66 6f 20 3d 20 6e 65 77 20   _keyInfo = new 
c0f0: 53 51 4c 69 74 65 4b 65 79 52 65 61 64 65 72 28  SQLiteKeyReader(
c100: 5f 63 6f 6d 6d 61 6e 64 2e 43 6f 6e 6e 65 63 74  _command.Connect
c110: 69 6f 6e 2c 20 74 68 69 73 2c 20 5f 61 63 74 69  ion, this, _acti
c120: 76 65 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20  veStatement);.  
c130: 20 20 7d 0a 20 20 7d 0a 7d 0a                      }.  }.}.