System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 106872d67bc9a69517a90a415fdb06b4fe726bf9:


0000: 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  //--------------
0010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0040: 2d 2d 2d 2d 2d 2d 2d 0d 0a 2f 2f 20 3c 63 6f 70  -------..// <cop
0050: 79 72 69 67 68 74 20 66 69 6c 65 3d 22 54 6f 70  yright file="Top
0060: 43 6c 61 75 73 65 2e 63 73 22 20 63 6f 6d 70 61  Clause.cs" compa
0070: 6e 79 3d 22 4d 69 63 72 6f 73 6f 66 74 22 3e 0d  ny="Microsoft">.
0080: 0a 2f 2f 20 20 20 20 20 20 50 6f 72 74 69 6f 6e  .//      Portion
0090: 73 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 63  s of this file c
00a0: 6f 70 79 72 69 67 68 74 20 28 63 29 20 4d 69 63  opyright (c) Mic
00b0: 72 6f 73 6f 66 74 20 43 6f 72 70 6f 72 61 74 69  rosoft Corporati
00c0: 6f 6e 0d 0a 2f 2f 20 20 20 20 20 20 61 6e 64 20  on..//      and 
00d0: 61 72 65 20 72 65 6c 65 61 73 65 64 20 75 6e 64  are released und
00e0: 65 72 20 74 68 65 20 4d 69 63 72 6f 73 6f 66 74  er the Microsoft
00f0: 20 50 75 6c 69 63 20 4c 69 63 65 6e 73 65 2e 20   Pulic License. 
0100: 20 53 65 65 0d 0a 2f 2f 20 20 20 20 20 20 68 74   See..//      ht
0110: 74 70 3a 2f 2f 61 72 63 68 69 76 65 2e 6d 73 64  tp://archive.msd
0120: 6e 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f  n.microsoft.com/
0130: 45 46 53 61 6d 70 6c 65 50 72 6f 76 69 64 65 72  EFSampleProvider
0140: 2f 50 72 6f 6a 65 63 74 2f 4c 69 63 65 6e 73 65  /Project/License
0150: 2e 61 73 70 78 0d 0a 2f 2f 20 20 20 20 20 20 6f  .aspx..//      o
0160: 72 20 4c 69 63 65 6e 73 65 2e 74 78 74 20 66 6f  r License.txt fo
0170: 72 20 64 65 74 61 69 6c 73 2e 0d 0a 2f 2f 20 20  r details...//  
0180: 20 20 20 20 41 6c 6c 20 72 69 67 68 74 73 20 72      All rights r
0190: 65 73 65 72 76 65 64 2e 0d 0a 2f 2f 20 3c 2f 63  eserved...// </c
01a0: 6f 70 79 72 69 67 68 74 3e 0d 0a 2f 2f 2d 2d 2d  opyright>..//---
01b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
01c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
01d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
01e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
01f0: 2d 2d 0d 0a 0d 0a 23 69 66 20 55 53 45 5f 45 4e  --....#if USE_EN
0200: 54 49 54 59 5f 46 52 41 4d 45 57 4f 52 4b 5f 36  TITY_FRAMEWORK_6
0210: 0d 0a 6e 61 6d 65 73 70 61 63 65 20 53 79 73 74  ..namespace Syst
0220: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45  em.Data.SQLite.E
0230: 46 36 0d 0a 23 65 6c 73 65 0d 0a 6e 61 6d 65 73  F6..#else..names
0240: 70 61 63 65 20 53 79 73 74 65 6d 2e 44 61 74 61  pace System.Data
0250: 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 0d 0a 23 65  .SQLite.Linq..#e
0260: 6e 64 69 66 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67  ndif..{..  using
0270: 20 53 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e   System;..  usin
0280: 67 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61 6c 69  g System.Globali
0290: 7a 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 2f  zation;....    /
02a0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
02b0: 2f 2f 2f 20 54 6f 70 43 6c 61 75 73 65 20 72 65  /// TopClause re
02c0: 70 72 65 73 65 6e 74 73 20 74 68 65 20 61 20 54  presents the a T
02d0: 4f 50 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  OP expression in
02e0: 20 61 20 53 71 6c 53 65 6c 65 63 74 53 74 61 74   a SqlSelectStat
02f0: 65 6d 65 6e 74 2e 20 0d 0a 20 20 2f 2f 2f 20 49  ement. ..  /// I
0300: 74 20 68 61 73 20 61 20 63 6f 75 6e 74 20 70 72  t has a count pr
0310: 6f 70 65 72 74 79 2c 20 77 68 69 63 68 20 69 6e  operty, which in
0320: 64 69 63 61 74 65 73 20 68 6f 77 20 6d 61 6e 79  dicates how many
0330: 20 54 4f 50 20 72 6f 77 73 20 73 68 6f 75 6c 64   TOP rows should
0340: 20 62 65 20 73 65 6c 65 63 74 65 64 20 61 6e 64   be selected and
0350: 20 61 20 0d 0a 20 20 2f 2f 2f 20 62 6f 6f 6c 65   a ..  /// boole
0360: 6e 20 57 69 74 68 54 69 65 73 20 70 72 6f 70 65  n WithTies prope
0370: 72 74 79 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75  rty...  /// </su
0380: 6d 6d 61 72 79 3e 0d 0a 20 20 63 6c 61 73 73 20  mmary>..  class 
0390: 54 6f 70 43 6c 61 75 73 65 20 3a 20 49 53 71 6c  TopClause : ISql
03a0: 46 72 61 67 6d 65 6e 74 0d 0a 20 20 7b 0d 0a 20  Fragment..  {.. 
03b0: 20 20 20 49 53 71 6c 46 72 61 67 6d 65 6e 74 20     ISqlFragment 
03c0: 74 6f 70 43 6f 75 6e 74 3b 0d 0a 20 20 20 20 62  topCount;..    b
03d0: 6f 6f 6c 20 77 69 74 68 54 69 65 73 3b 0d 0a 0d  ool withTies;...
03e0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
03f0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 6f 20 77  y>..    /// Do w
0400: 65 20 6e 65 65 64 20 74 6f 20 61 64 64 20 61 20  e need to add a 
0410: 57 49 54 48 5f 54 49 45 53 20 74 6f 20 74 68 65  WITH_TIES to the
0420: 20 74 6f 70 20 73 74 61 74 65 6d 65 6e 74 0d 0a   top statement..
0430: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0440: 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  y>..    internal
0450: 20 62 6f 6f 6c 20 57 69 74 68 54 69 65 73 0d 0a   bool WithTies..
0460: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
0470: 20 7b 20 72 65 74 75 72 6e 20 77 69 74 68 54 69   { return withTi
0480: 65 73 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  es; }..    }....
0490: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
04a0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 6f 77 20 6d  >..    /// How m
04b0: 61 6e 79 20 74 6f 70 20 72 6f 77 73 20 73 68 6f  any top rows sho
04c0: 75 6c 64 20 62 65 20 73 65 6c 65 63 74 65 64 2e  uld be selected.
04d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
04e0: 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ary>..    intern
04f0: 61 6c 20 49 53 71 6c 46 72 61 67 6d 65 6e 74 20  al ISqlFragment 
0500: 54 6f 70 43 6f 75 6e 74 0d 0a 20 20 20 20 7b 0d  TopCount..    {.
0510: 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74  .      get { ret
0520: 75 72 6e 20 74 6f 70 43 6f 75 6e 74 3b 20 7d 0d  urn topCount; }.
0530: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
0540: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0550: 20 2f 2f 2f 20 43 72 65 61 74 65 73 20 61 20 54   /// Creates a T
0560: 6f 70 43 6c 61 75 73 65 20 77 69 74 68 20 74 68  opClause with th
0570: 65 20 67 69 76 65 6e 20 74 6f 70 43 6f 75 6e 74  e given topCount
0580: 20 61 6e 64 20 77 69 74 68 54 69 65 73 2e 0d 0a   and withTies...
0590: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
05a0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
05b0: 61 6d 20 6e 61 6d 65 3d 22 74 6f 70 43 6f 75 6e  am name="topCoun
05c0: 74 22 3e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  t"></param>..   
05d0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
05e0: 3d 22 77 69 74 68 54 69 65 73 22 3e 3c 2f 70 61  ="withTies"></pa
05f0: 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
0600: 61 6c 20 54 6f 70 43 6c 61 75 73 65 28 49 53 71  al TopClause(ISq
0610: 6c 46 72 61 67 6d 65 6e 74 20 74 6f 70 43 6f 75  lFragment topCou
0620: 6e 74 2c 20 62 6f 6f 6c 20 77 69 74 68 54 69 65  nt, bool withTie
0630: 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  s)..    {..     
0640: 20 74 68 69 73 2e 74 6f 70 43 6f 75 6e 74 20 3d   this.topCount =
0650: 20 74 6f 70 43 6f 75 6e 74 3b 0d 0a 20 20 20 20   topCount;..    
0660: 20 20 74 68 69 73 2e 77 69 74 68 54 69 65 73 20    this.withTies 
0670: 3d 20 77 69 74 68 54 69 65 73 3b 0d 0a 20 20 20  = withTies;..   
0680: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
0690: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
06a0: 20 43 72 65 61 74 65 73 20 61 20 54 6f 70 43 6c   Creates a TopCl
06b0: 61 75 73 65 20 77 69 74 68 20 74 68 65 20 67 69  ause with the gi
06c0: 76 65 6e 20 74 6f 70 43 6f 75 6e 74 20 61 6e 64  ven topCount and
06d0: 20 77 69 74 68 54 69 65 73 2e 0d 0a 20 20 20 20   withTies...    
06e0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
06f0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
0700: 61 6d 65 3d 22 74 6f 70 43 6f 75 6e 74 22 3e 3c  ame="topCount"><
0710: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
0720: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 77 69   <param name="wi
0730: 74 68 54 69 65 73 22 3e 3c 2f 70 61 72 61 6d 3e  thTies"></param>
0740: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 54  ..    internal T
0750: 6f 70 43 6c 61 75 73 65 28 69 6e 74 20 74 6f 70  opClause(int top
0760: 43 6f 75 6e 74 2c 20 62 6f 6f 6c 20 77 69 74 68  Count, bool with
0770: 54 69 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  Ties)..    {..  
0780: 20 20 20 20 53 71 6c 42 75 69 6c 64 65 72 20 73      SqlBuilder s
0790: 71 6c 42 75 69 6c 64 65 72 20 3d 20 6e 65 77 20  qlBuilder = new 
07a0: 53 71 6c 42 75 69 6c 64 65 72 28 29 3b 0d 0a 20  SqlBuilder();.. 
07b0: 20 20 20 20 20 73 71 6c 42 75 69 6c 64 65 72 2e       sqlBuilder.
07c0: 41 70 70 65 6e 64 28 74 6f 70 43 6f 75 6e 74 2e  Append(topCount.
07d0: 54 6f 53 74 72 69 6e 67 28 43 75 6c 74 75 72 65  ToString(Culture
07e0: 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75  Info.InvariantCu
07f0: 6c 74 75 72 65 29 29 3b 0d 0a 20 20 20 20 20 20  lture));..      
0800: 74 68 69 73 2e 74 6f 70 43 6f 75 6e 74 20 3d 20  this.topCount = 
0810: 73 71 6c 42 75 69 6c 64 65 72 3b 0d 0a 20 20 20  sqlBuilder;..   
0820: 20 20 20 74 68 69 73 2e 77 69 74 68 54 69 65 73     this.withTies
0830: 20 3d 20 77 69 74 68 54 69 65 73 3b 0d 0a 20 20   = withTies;..  
0840: 20 20 7d 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69    }....    #regi
0850: 6f 6e 20 49 53 71 6c 46 72 61 67 6d 65 6e 74 20  on ISqlFragment 
0860: 4d 65 6d 62 65 72 73 0d 0a 0d 0a 20 20 20 20 2f  Members....    /
0870: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0880: 20 20 2f 2f 2f 20 57 72 69 74 65 20 6f 75 74 20    /// Write out 
0890: 74 68 65 20 54 4f 50 20 70 61 72 74 20 6f 66 20  the TOP part of 
08a0: 73 71 6c 20 73 65 6c 65 63 74 20 73 74 61 74 65  sql select state
08b0: 6d 65 6e 74 20 0d 0a 20 20 20 20 2f 2f 2f 20 49  ment ..    /// I
08c0: 74 20 62 61 73 69 63 61 6c 6c 79 20 77 72 69 74  t basically writ
08d0: 65 73 20 4c 49 4d 49 54 20 28 58 29 2e 0d 0a 20  es LIMIT (X)... 
08e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
08f0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
0900: 6d 20 6e 61 6d 65 3d 22 77 72 69 74 65 72 22 3e  m name="writer">
0910: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
0920: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
0930: 71 6c 47 65 6e 65 72 61 74 6f 72 22 3e 3c 2f 70  qlGenerator"></p
0940: 61 72 61 6d 3e 0d 0a 20 20 20 20 70 75 62 6c 69  aram>..    publi
0950: 63 20 76 6f 69 64 20 57 72 69 74 65 53 71 6c 28  c void WriteSql(
0960: 53 71 6c 57 72 69 74 65 72 20 77 72 69 74 65 72  SqlWriter writer
0970: 2c 20 53 71 6c 47 65 6e 65 72 61 74 6f 72 20 73  , SqlGenerator s
0980: 71 6c 47 65 6e 65 72 61 74 6f 72 29 0d 0a 20 20  qlGenerator)..  
0990: 20 20 7b 0d 0a 20 20 20 20 20 20 77 72 69 74 65    {..      write
09a0: 72 2e 57 72 69 74 65 28 22 20 4c 49 4d 49 54 20  r.Write(" LIMIT 
09b0: 22 29 3b 0d 0a 20 20 20 20 20 20 74 68 69 73 2e  ");..      this.
09c0: 54 6f 70 43 6f 75 6e 74 2e 57 72 69 74 65 53 71  TopCount.WriteSq
09d0: 6c 28 77 72 69 74 65 72 2c 20 73 71 6c 47 65 6e  l(writer, sqlGen
09e0: 65 72 61 74 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20  erator);....    
09f0: 20 20 69 66 20 28 74 68 69 73 2e 57 69 74 68 54    if (this.WithT
0a00: 69 65 73 29 0d 0a 20 20 20 20 20 20 20 20 74 68  ies)..        th
0a10: 72 6f 77 20 6e 65 77 20 4e 6f 74 53 75 70 70 6f  row new NotSuppo
0a20: 72 74 65 64 45 78 63 65 70 74 69 6f 6e 28 22 57  rtedException("W
0a30: 49 54 48 20 54 49 45 53 22 29 3b 0d 0a 0d 0a 20  ITH TIES");.... 
0a40: 20 20 20 20 20 2f 2f 77 72 69 74 65 72 2e 57 72       //writer.Wr
0a50: 69 74 65 28 22 20 22 29 3b 0d 0a 0d 0a 20 20 20  ite(" ");....   
0a60: 20 20 20 2f 2f 69 66 20 28 74 68 69 73 2e 57 69     //if (this.Wi
0a70: 74 68 54 69 65 73 29 0d 0a 20 20 20 20 20 20 2f  thTies)..      /
0a80: 2f 7b 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  /{..      //    
0a90: 77 72 69 74 65 72 2e 57 72 69 74 65 28 22 57 49  writer.Write("WI
0aa0: 54 48 20 54 49 45 53 20 22 29 3b 0d 0a 20 20 20  TH TIES ");..   
0ab0: 20 20 20 2f 2f 7d 0d 0a 20 20 20 20 7d 0d 0a 0d     //}..    }...
0ac0: 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
0ad0: 0a 20 20 7d 0d 0a 7d 0d 0a                       .  }..}..