System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 53519f14dacda7a36ddafae6f634a24383c732b7:


0000: ef bb bf 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .../************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a  ************.. *
0040: 20 41 44 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74   ADO.NET 2.0 Dat
0050: 61 20 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53  a Provider for S
0060: 51 4c 69 74 65 20 56 65 72 73 69 6f 6e 20 33 2e  QLite Version 3.
0070: 58 0d 0a 20 2a 20 57 72 69 74 74 65 6e 20 62 79  X.. * Written by
0080: 20 52 6f 62 65 72 74 20 53 69 6d 70 73 6f 6e 20   Robert Simpson 
0090: 28 72 6f 62 65 72 74 40 62 6c 61 63 6b 63 61 73  (robert@blackcas
00a0: 74 6c 65 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a  tlesoft.com).. *
00b0: 20 0d 0a 20 2a 20 52 65 6c 65 61 73 65 64 20 74   .. * Released t
00c0: 6f 20 74 68 65 20 70 75 62 6c 69 63 20 64 6f 6d  o the public dom
00d0: 61 69 6e 2c 20 75 73 65 20 61 74 20 79 6f 75 72  ain, use at your
00e0: 20 6f 77 6e 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a   own risk!.. ***
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2a 2a 2a 2a 2f 0d 0a 0d 0a 75 73 69 6e 67 20  *****/....using 
0130: 53 79 73 74 65 6d 3b 0d 0a 75 73 69 6e 67 20 53  System;..using S
0140: 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e  ystem.Collection
0150: 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 75 73 69 6e  s.Generic;..usin
0160: 67 20 53 79 73 74 65 6d 2e 4c 69 6e 71 3b 0d 0a  g System.Linq;..
0170: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 54 65 78  using System.Tex
0180: 74 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d  t;..using System
0190: 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e 4f 62 6a  .Collections.Obj
01a0: 65 63 74 4d 6f 64 65 6c 3b 0d 0a 75 73 69 6e 67  ectModel;..using
01b0: 20 53 79 73 74 65 6d 2e 52 75 6e 74 69 6d 65 3b   System.Runtime;
01c0: 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 52  ..using System.R
01d0: 75 6e 74 69 6d 65 2e 43 6f 6d 70 69 6c 65 72 53  untime.CompilerS
01e0: 65 72 76 69 63 65 73 3b 0d 0a 75 73 69 6e 67 20  ervices;..using 
01f0: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
0200: 6e 73 3b 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65  ns;....namespace
0210: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
0220: 69 74 65 0d 0a 7b 0d 0a 09 69 6e 74 65 72 6e 61  ite..{...interna
0230: 6c 20 63 6c 61 73 73 20 4b 65 79 54 6f 4c 69 73  l class KeyToLis
0240: 74 4d 61 70 3c 54 4b 65 79 2c 20 54 56 61 6c 75  tMap<TKey, TValu
0250: 65 3e 20 3a 20 49 6e 74 65 72 6e 61 6c 42 61 73  e> : InternalBas
0260: 65 0d 0a 09 7b 0d 0a 09 09 2f 2f 20 46 69 65 6c  e...{....// Fiel
0270: 64 73 0d 0a 09 09 70 72 69 76 61 74 65 20 44 69  ds....private Di
0280: 63 74 69 6f 6e 61 72 79 3c 54 4b 65 79 2c 20 4c  ctionary<TKey, L
0290: 69 73 74 3c 54 56 61 6c 75 65 3e 3e 20 6d 5f 6d  ist<TValue>> m_m
02a0: 61 70 3b 0d 0a 0d 0a 09 09 2f 2f 20 4d 65 74 68  ap;......// Meth
02b0: 6f 64 73 0d 0a 09 09 69 6e 74 65 72 6e 61 6c 20  ods....internal 
02c0: 4b 65 79 54 6f 4c 69 73 74 4d 61 70 28 49 45 71  KeyToListMap(IEq
02d0: 75 61 6c 69 74 79 43 6f 6d 70 61 72 65 72 3c 54  ualityComparer<T
02e0: 4b 65 79 3e 20 63 6f 6d 70 61 72 65 72 29 0d 0a  Key> comparer)..
02f0: 09 09 7b 0d 0a 09 09 09 74 68 69 73 2e 6d 5f 6d  ..{.....this.m_m
0300: 61 70 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e  ap = new Diction
0310: 61 72 79 3c 54 4b 65 79 2c 20 4c 69 73 74 3c 54  ary<TKey, List<T
0320: 56 61 6c 75 65 3e 3e 28 63 6f 6d 70 61 72 65 72  Value>>(comparer
0330: 29 3b 0d 0a 09 09 7d 0d 0a 0d 0a 09 09 69 6e 74  );....}......int
0340: 65 72 6e 61 6c 20 76 6f 69 64 20 41 64 64 28 54  ernal void Add(T
0350: 4b 65 79 20 6b 65 79 2c 20 54 56 61 6c 75 65 20  Key key, TValue 
0360: 76 61 6c 75 65 29 0d 0a 09 09 7b 0d 0a 09 09 09  value)....{.....
0370: 4c 69 73 74 3c 54 56 61 6c 75 65 3e 20 6c 69 73  List<TValue> lis
0380: 74 3b 0d 0a 09 09 09 69 66 20 28 21 74 68 69 73  t;.....if (!this
0390: 2e 6d 5f 6d 61 70 2e 54 72 79 47 65 74 56 61 6c  .m_map.TryGetVal
03a0: 75 65 28 6b 65 79 2c 20 6f 75 74 20 6c 69 73 74  ue(key, out list
03b0: 29 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 6c 69  )).....{......li
03c0: 73 74 20 3d 20 6e 65 77 20 4c 69 73 74 3c 54 56  st = new List<TV
03d0: 61 6c 75 65 3e 28 29 3b 0d 0a 09 09 09 09 74 68  alue>();......th
03e0: 69 73 2e 6d 5f 6d 61 70 5b 6b 65 79 5d 20 3d 20  is.m_map[key] = 
03f0: 6c 69 73 74 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09  list;.....}.....
0400: 6c 69 73 74 2e 41 64 64 28 76 61 6c 75 65 29 3b  list.Add(value);
0410: 0d 0a 09 09 7d 0d 0a 0d 0a 09 09 69 6e 74 65 72  ....}......inter
0420: 6e 61 6c 20 76 6f 69 64 20 41 64 64 52 61 6e 67  nal void AddRang
0430: 65 28 54 4b 65 79 20 6b 65 79 2c 20 49 45 6e 75  e(TKey key, IEnu
0440: 6d 65 72 61 62 6c 65 3c 54 56 61 6c 75 65 3e 20  merable<TValue> 
0450: 76 61 6c 75 65 73 29 0d 0a 09 09 7b 0d 0a 09 09  values)....{....
0460: 09 66 6f 72 65 61 63 68 20 28 54 56 61 6c 75 65  .foreach (TValue
0470: 20 6c 6f 63 61 6c 20 69 6e 20 76 61 6c 75 65 73   local in values
0480: 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 74 68 69  ).....{......thi
0490: 73 2e 41 64 64 28 6b 65 79 2c 20 6c 6f 63 61 6c  s.Add(key, local
04a0: 29 3b 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 0d  );.....}....}...
04b0: 0a 09 09 69 6e 74 65 72 6e 61 6c 20 62 6f 6f 6c  ...internal bool
04c0: 20 43 6f 6e 74 61 69 6e 73 4b 65 79 28 54 4b 65   ContainsKey(TKe
04d0: 79 20 6b 65 79 29 0d 0a 09 09 7b 0d 0a 09 09 09  y key)....{.....
04e0: 72 65 74 75 72 6e 20 74 68 69 73 2e 6d 5f 6d 61  return this.m_ma
04f0: 70 2e 43 6f 6e 74 61 69 6e 73 4b 65 79 28 6b 65  p.ContainsKey(ke
0500: 79 29 3b 0d 0a 09 09 7d 0d 0a 0d 0a 09 09 69 6e  y);....}......in
0510: 74 65 72 6e 61 6c 20 49 45 6e 75 6d 65 72 61 62  ternal IEnumerab
0520: 6c 65 3c 54 56 61 6c 75 65 3e 20 45 6e 75 6d 65  le<TValue> Enume
0530: 72 61 74 65 56 61 6c 75 65 73 28 54 4b 65 79 20  rateValues(TKey 
0540: 6b 65 79 29 0d 0a 09 09 7b 0d 0a 09 09 09 4c 69  key)....{.....Li
0550: 73 74 3c 54 56 61 6c 75 65 3e 20 76 61 6c 75 65  st<TValue> value
0560: 73 3b 0d 0a 09 09 09 69 66 20 28 6d 5f 6d 61 70  s;.....if (m_map
0570: 2e 54 72 79 47 65 74 56 61 6c 75 65 28 6b 65 79  .TryGetValue(key
0580: 2c 20 6f 75 74 20 76 61 6c 75 65 73 29 29 0d 0a  , out values))..
0590: 09 09 09 7b 0d 0a 09 09 09 09 66 6f 72 65 61 63  ...{......foreac
05a0: 68 20 28 54 56 61 6c 75 65 20 76 61 6c 75 65 20  h (TValue value 
05b0: 69 6e 20 76 61 6c 75 65 73 29 20 7b 20 79 69 65  in values) { yie
05c0: 6c 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b  ld return value;
05d0: 20 7d 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 0d   }.....}....}...
05e0: 0a 09 09 69 6e 74 65 72 6e 61 6c 20 52 65 61 64  ...internal Read
05f0: 4f 6e 6c 79 43 6f 6c 6c 65 63 74 69 6f 6e 3c 54  OnlyCollection<T
0600: 56 61 6c 75 65 3e 20 4c 69 73 74 46 6f 72 4b 65  Value> ListForKe
0610: 79 28 54 4b 65 79 20 6b 65 79 29 0d 0a 09 09 7b  y(TKey key)....{
0620: 0d 0a 09 09 09 72 65 74 75 72 6e 20 6e 65 77 20  .....return new 
0630: 52 65 61 64 4f 6e 6c 79 43 6f 6c 6c 65 63 74 69  ReadOnlyCollecti
0640: 6f 6e 3c 54 56 61 6c 75 65 3e 28 74 68 69 73 2e  on<TValue>(this.
0650: 6d 5f 6d 61 70 5b 6b 65 79 5d 29 3b 0d 0a 09 09  m_map[key]);....
0660: 7d 0d 0a 0d 0a 09 09 69 6e 74 65 72 6e 61 6c 20  }......internal 
0670: 62 6f 6f 6c 20 52 65 6d 6f 76 65 4b 65 79 28 54  bool RemoveKey(T
0680: 4b 65 79 20 6b 65 79 29 0d 0a 09 09 7b 0d 0a 09  Key key)....{...
0690: 09 09 72 65 74 75 72 6e 20 74 68 69 73 2e 6d 5f  ..return this.m_
06a0: 6d 61 70 2e 52 65 6d 6f 76 65 28 6b 65 79 29 3b  map.Remove(key);
06b0: 0d 0a 09 09 7d 0d 0a 0d 0a 09 09 69 6e 74 65 72  ....}......inter
06c0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
06d0: 64 20 54 6f 43 6f 6d 70 61 63 74 53 74 72 69 6e  d ToCompactStrin
06e0: 67 28 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20  g(StringBuilder 
06f0: 62 75 69 6c 64 65 72 29 0d 0a 09 09 7b 0d 0a 09  builder)....{...
0700: 09 09 66 6f 72 65 61 63 68 20 28 54 4b 65 79 20  ..foreach (TKey 
0710: 6c 6f 63 61 6c 20 69 6e 20 74 68 69 73 2e 4b 65  local in this.Ke
0720: 79 73 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 53  ys).....{......S
0730: 74 72 69 6e 67 55 74 69 6c 2e 46 6f 72 6d 61 74  tringUtil.Format
0740: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 62 75  StringBuilder(bu
0750: 69 6c 64 65 72 2c 20 22 7b 30 7d 22 2c 20 6e 65  ilder, "{0}", ne
0760: 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 20 6c 6f 63  w object[] { loc
0770: 61 6c 20 7d 29 3b 0d 0a 09 09 09 09 62 75 69 6c  al });......buil
0780: 64 65 72 2e 41 70 70 65 6e 64 28 22 3a 20 22 29  der.Append(": ")
0790: 3b 0d 0a 09 09 09 09 49 45 6e 75 6d 65 72 61 62  ;......IEnumerab
07a0: 6c 65 3c 54 56 61 6c 75 65 3e 20 6c 69 73 74 20  le<TValue> list 
07b0: 3d 20 74 68 69 73 2e 4c 69 73 74 46 6f 72 4b 65  = this.ListForKe
07c0: 79 28 6c 6f 63 61 6c 29 3b 0d 0a 09 09 09 09 53  y(local);......S
07d0: 74 72 69 6e 67 55 74 69 6c 2e 54 6f 53 65 70 61  tringUtil.ToSepa
07e0: 72 61 74 65 64 53 74 72 69 6e 67 28 62 75 69 6c  ratedString(buil
07f0: 64 65 72 2c 20 6c 69 73 74 2c 20 22 2c 22 2c 20  der, list, ",", 
0800: 22 6e 75 6c 6c 22 29 3b 0d 0a 09 09 09 09 62 75  "null");......bu
0810: 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 22 3b 20  ilder.Append("; 
0820: 22 29 3b 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a  ");.....}....}..
0830: 0d 0a 09 09 69 6e 74 65 72 6e 61 6c 20 62 6f 6f  ....internal boo
0840: 6c 20 54 72 79 47 65 74 4c 69 73 74 46 6f 72 4b  l TryGetListForK
0850: 65 79 28 54 4b 65 79 20 6b 65 79 2c 20 6f 75 74  ey(TKey key, out
0860: 20 52 65 61 64 4f 6e 6c 79 43 6f 6c 6c 65 63 74   ReadOnlyCollect
0870: 69 6f 6e 3c 54 56 61 6c 75 65 3e 20 76 61 6c 75  ion<TValue> valu
0880: 65 43 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 09 09  eCollection)....
0890: 7b 0d 0a 09 09 09 4c 69 73 74 3c 54 56 61 6c 75  {.....List<TValu
08a0: 65 3e 20 6c 69 73 74 3b 0d 0a 09 09 09 76 61 6c  e> list;.....val
08b0: 75 65 43 6f 6c 6c 65 63 74 69 6f 6e 20 3d 20 6e  ueCollection = n
08c0: 75 6c 6c 3b 0d 0a 09 09 09 69 66 20 28 74 68 69  ull;.....if (thi
08d0: 73 2e 6d 5f 6d 61 70 2e 54 72 79 47 65 74 56 61  s.m_map.TryGetVa
08e0: 6c 75 65 28 6b 65 79 2c 20 6f 75 74 20 6c 69 73  lue(key, out lis
08f0: 74 29 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 76  t)).....{......v
0900: 61 6c 75 65 43 6f 6c 6c 65 63 74 69 6f 6e 20 3d  alueCollection =
0910: 20 6e 65 77 20 52 65 61 64 4f 6e 6c 79 43 6f 6c   new ReadOnlyCol
0920: 6c 65 63 74 69 6f 6e 3c 54 56 61 6c 75 65 3e 28  lection<TValue>(
0930: 6c 69 73 74 29 3b 0d 0a 09 09 09 09 72 65 74 75  list);......retu
0940: 72 6e 20 74 72 75 65 3b 0d 0a 09 09 09 7d 0d 0a  rn true;.....}..
0950: 09 09 09 72 65 74 75 72 6e 20 66 61 6c 73 65 3b  ...return false;
0960: 0d 0a 09 09 7d 0d 0a 0d 0a 09 09 2f 2f 20 50 72  ....}......// Pr
0970: 6f 70 65 72 74 69 65 73 0d 0a 09 09 69 6e 74 65  operties....inte
0980: 72 6e 61 6c 20 49 45 6e 75 6d 65 72 61 62 6c 65  rnal IEnumerable
0990: 3c 54 56 61 6c 75 65 3e 20 41 6c 6c 56 61 6c 75  <TValue> AllValu
09a0: 65 73 0d 0a 09 09 7b 0d 0a 09 09 09 67 65 74 0d  es....{.....get.
09b0: 0a 09 09 09 7b 0d 0a 09 09 09 09 66 6f 72 65 61  ....{......forea
09c0: 63 68 20 28 54 4b 65 79 20 6b 65 79 20 69 6e 20  ch (TKey key in 
09d0: 4b 65 79 73 29 0d 0a 09 09 09 09 7b 0d 0a 09 09  Keys)......{....
09e0: 09 09 09 66 6f 72 65 61 63 68 20 28 54 56 61 6c  ...foreach (TVal
09f0: 75 65 20 76 61 6c 75 65 20 69 6e 20 4c 69 73 74  ue value in List
0a00: 46 6f 72 4b 65 79 28 6b 65 79 29 29 0d 0a 09 09  ForKey(key))....
0a10: 09 09 09 7b 0d 0a 09 09 09 09 09 09 79 69 65 6c  ...{........yiel
0a20: 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d  d return value;.
0a30: 0a 09 09 09 09 09 7d 0d 0a 09 09 09 09 7d 0d 0a  ......}......}..
0a40: 09 09 09 7d 0d 0a 09 09 7d 0d 0a 0d 0a 09 09 69  ...}....}......i
0a50: 6e 74 65 72 6e 61 6c 20 49 45 6e 75 6d 65 72 61  nternal IEnumera
0a60: 62 6c 65 3c 54 4b 65 79 3e 20 4b 65 79 73 0d 0a  ble<TKey> Keys..
0a70: 09 09 7b 0d 0a 09 09 09 67 65 74 0d 0a 09 09 09  ..{.....get.....
0a80: 7b 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 74 68  {......return th
0a90: 69 73 2e 6d 5f 6d 61 70 2e 4b 65 79 73 3b 0d 0a  is.m_map.Keys;..
0aa0: 09 09 09 7d 0d 0a 09 09 7d 0d 0a 0d 0a 09 09 69  ...}....}......i
0ab0: 6e 74 65 72 6e 61 6c 20 49 45 6e 75 6d 65 72 61  nternal IEnumera
0ac0: 62 6c 65 3c 4b 65 79 56 61 6c 75 65 50 61 69 72  ble<KeyValuePair
0ad0: 3c 54 4b 65 79 2c 20 4c 69 73 74 3c 54 56 61 6c  <TKey, List<TVal
0ae0: 75 65 3e 3e 3e 20 4b 65 79 56 61 6c 75 65 50 61  ue>>> KeyValuePa
0af0: 69 72 73 0d 0a 09 09 7b 0d 0a 23 69 66 20 21 4e  irs....{..#if !N
0b00: 45 54 5f 32 30 0d 0a 09 09 09 5b 54 61 72 67 65  ET_20.....[Targe
0b10: 74 65 64 50 61 74 63 68 69 6e 67 4f 70 74 4f 75  tedPatchingOptOu
0b20: 74 28 22 50 65 72 66 6f 72 6d 61 6e 63 65 20 63  t("Performance c
0b30: 72 69 74 69 63 61 6c 20 74 6f 20 69 6e 6c 69 6e  ritical to inlin
0b40: 65 20 74 68 69 73 20 74 79 70 65 20 6f 66 20 6d  e this type of m
0b50: 65 74 68 6f 64 20 61 63 72 6f 73 73 20 4e 47 65  ethod across NGe
0b60: 6e 20 69 6d 61 67 65 20 62 6f 75 6e 64 61 72 69  n image boundari
0b70: 65 73 22 29 5d 0d 0a 23 65 6e 64 69 66 0d 0a 09  es")]..#endif...
0b80: 09 09 67 65 74 0d 0a 09 09 09 7b 0d 0a 09 09 09  ..get.....{.....
0b90: 09 72 65 74 75 72 6e 20 74 68 69 73 2e 6d 5f 6d  .return this.m_m
0ba0: 61 70 3b 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a  ap;.....}....}..
0bb0: 09 7d 0d 0a 7d 0d 0a                             .}..}..