Updates referencesource to .NET 4.7
[mono.git] / mcs / class / referencesource / System.Data.Entity / System / Data / SqlClient / SqlVersion.cs
1 //---------------------------------------------------------------------
2 // <copyright file="SqlVersion.cs" company="Microsoft">
3 //      Copyright (c) Microsoft Corporation.  All rights reserved.
4 // </copyright>
5 //
6 // @owner  Microsoft
7 // @backupOwner Microsoft
8 //---------------------------------------------------------------------
9
10 namespace System.Data.SqlClient
11 {
12     using System.Data;
13     using System.Data.Entity;
14     using System.Globalization;
15
16     /// <summary>
17     /// This enum describes the current server version
18     /// </summary>
19     internal enum SqlVersion
20     {
21         /// <summary>
22         /// Sql Server 8
23         /// </summary>
24         Sql8 = 80,
25
26         /// <summary>
27         /// Sql Server 9
28         /// </summary>
29         Sql9 = 90,
30
31         /// <summary>
32         /// Sql Server 10
33         /// </summary>
34         Sql10 = 100,
35
36         // higher versions go here
37     }
38
39     /// <summary>
40     /// This class is a simple utility class that determines the sql version from the 
41     /// connection
42     /// </summary>
43     internal static class SqlVersionUtils
44     {
45         /// <summary>
46         /// Get the SqlVersion from the connection. Returns one of Sql8, Sql9, Sql10
47         /// The passed connection must be open
48         /// </summary>
49         /// <param name="connection">current sql connection</param>
50         /// <returns>Sql Version for the current connection</returns>
51         internal static SqlVersion GetSqlVersion(SqlConnection connection)
52         {
53             System.Diagnostics.Debug.Assert(connection.State == ConnectionState.Open, "Expected an open connection");
54             int majorVersion = Int32.Parse(connection.ServerVersion.Substring(0, 2), CultureInfo.InvariantCulture);
55             if (majorVersion >= 10) 
56             {
57                 return SqlVersion.Sql10;
58             }
59             else if (majorVersion == 9)
60             {
61                 return SqlVersion.Sql9;
62             }
63             else
64             {
65                 System.Diagnostics.Debug.Assert(majorVersion == 8, "not version 8");
66                 return SqlVersion.Sql8;
67             }
68         }
69
70         internal static string GetVersionHint(SqlVersion version)
71         {
72             switch(version)
73             {
74                 case SqlVersion.Sql8:
75                     return SqlProviderManifest.TokenSql8;
76
77                 case SqlVersion.Sql9:
78                     return SqlProviderManifest.TokenSql9;
79
80                 case SqlVersion.Sql10:
81                     return SqlProviderManifest.TokenSql10;
82
83                 default:
84                     throw EntityUtil.Argument(Strings.UnableToDetermineStoreVersion);
85             }
86         }
87
88         internal static SqlVersion GetSqlVersion(string versionHint)
89         {
90             if (!string.IsNullOrEmpty(versionHint))
91             {
92                 switch (versionHint)
93                 {
94                     case SqlProviderManifest.TokenSql8:
95                         return SqlVersion.Sql8;
96
97                     case SqlProviderManifest.TokenSql9:
98                         return SqlVersion.Sql9;
99
100                     case SqlProviderManifest.TokenSql10:
101                         return SqlVersion.Sql10;
102                 }
103             }
104             
105             throw EntityUtil.Argument(Strings.UnableToDetermineStoreVersion);
106         }
107
108         internal static bool IsPreKatmai(SqlVersion sqlVersion)
109         {
110             return sqlVersion == SqlVersion.Sql8 || sqlVersion == SqlVersion.Sql9;
111         }
112     }
113 }