[bcl] Update Reference Source to .NET Framework 4.6.2
[mono.git] / mcs / class / referencesource / System.Data / System / Data / Odbc / OdbcConnectionOpen.cs
1 //------------------------------------------------------------------------------
2 // <copyright file="OdbcConnectionOpen.cs" company="Microsoft">
3 //      Copyright (c) Microsoft Corporation.  All rights reserved.
4 // </copyright>
5 // <owner current="true" primary="true">[....]</owner>
6 // <owner current="true" primary="false">[....]</owner>
7 //------------------------------------------------------------------------------
8
9 using System;
10 using System.Data;
11 using System.Data.Common;
12 using System.Data.ProviderBase;
13 using System.Threading;
14 using SysTx = System.Transactions;
15
16 namespace System.Data.Odbc {
17     sealed internal class OdbcConnectionOpen : DbConnectionInternal {      
18        
19         // Construct from a compiled connection string
20         internal OdbcConnectionOpen(OdbcConnection outerConnection, OdbcConnectionString connectionOptions) {
21 #if DEBUG
22             try { // use this to help validate this object is only created after the following permission has been previously demanded in the current codepath
23                 if (null != outerConnection) {
24                     outerConnection.UserConnectionOptions.DemandPermission();
25                 }
26                 else {
27                     connectionOptions.DemandPermission();
28                 }
29             }
30             catch(System.Security.SecurityException) {
31                 System.Diagnostics.Debug.Assert(false, "unexpected SecurityException for current codepath");
32                 throw;
33             }
34 #endif
35             OdbcEnvironmentHandle environmentHandle = OdbcEnvironment.GetGlobalEnvironmentHandle();
36             outerConnection.ConnectionHandle = new OdbcConnectionHandle(outerConnection, connectionOptions, environmentHandle);
37         }
38
39         internal OdbcConnection OuterConnection {
40             get {
41                 OdbcConnection outerConnection = (OdbcConnection)Owner;
42
43                 if (null == outerConnection)
44                     throw ODBC.OpenConnectionNoOwner();
45             
46                 return outerConnection;
47             }
48         }
49         
50         override public string ServerVersion {
51             get { 
52                 return OuterConnection.Open_GetServerVersion();
53             }
54         }
55         
56         override protected void Activate(SysTx.Transaction transaction) {
57             OdbcConnection.ExecutePermission.Demand();
58         }
59
60         override public DbTransaction BeginTransaction(IsolationLevel isolevel) {
61             return BeginOdbcTransaction(isolevel);
62         }
63         
64         internal OdbcTransaction BeginOdbcTransaction(IsolationLevel isolevel) {
65             return OuterConnection.Open_BeginTransaction(isolevel);
66         }
67         
68         override public void ChangeDatabase(string value) {
69             OuterConnection.Open_ChangeDatabase(value);
70         }
71
72         override protected DbReferenceCollection CreateReferenceCollection() {
73             return new OdbcReferenceCollection();
74         }
75         
76         override protected void Deactivate() {
77             NotifyWeakReference(OdbcReferenceCollection.Closing);
78         }
79           
80         override public void EnlistTransaction(SysTx.Transaction transaction) {
81             OuterConnection.Open_EnlistTransaction(transaction);
82         }
83     }
84 }