File: OdbcConnectionOpen.cs

package info (click to toggle)
mono 6.12.0.199%2Bdfsg-6
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 1,296,836 kB
  • sloc: cs: 11,181,803; xml: 2,850,076; ansic: 699,709; cpp: 123,344; perl: 59,361; javascript: 30,841; asm: 21,853; makefile: 20,405; sh: 15,009; python: 4,839; pascal: 925; sql: 859; sed: 16; php: 1
file content (88 lines) | stat: -rw-r--r-- 3,289 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
//------------------------------------------------------------------------------
// <copyright file="OdbcConnectionOpen.cs" company="Microsoft">
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
// <owner current="true" primary="true">Microsoft</owner>
// <owner current="true" primary="false">Microsoft</owner>
//------------------------------------------------------------------------------

using System;
using System.Data;
using System.Data.Common;
using System.Data.ProviderBase;
using System.Threading;
using SysTx = System.Transactions;

namespace System.Data.Odbc {
    sealed internal class OdbcConnectionOpen : DbConnectionInternal {      
       
        // Construct from a compiled connection string
        internal OdbcConnectionOpen(OdbcConnection outerConnection, OdbcConnectionString connectionOptions) {
#if DEBUG
            try { // use this to help validate this object is only created after the following permission has been previously demanded in the current codepath
                if (null != outerConnection) {
                    outerConnection.UserConnectionOptions.DemandPermission();
                }
                else {
                    connectionOptions.DemandPermission();
                }
            }
            catch(System.Security.SecurityException) {
                System.Diagnostics.Debug.Assert(false, "unexpected SecurityException for current codepath");
                throw;
            }
#endif
            OdbcEnvironmentHandle environmentHandle = OdbcEnvironment.GetGlobalEnvironmentHandle();
            outerConnection.ConnectionHandle = new OdbcConnectionHandle(outerConnection, connectionOptions, environmentHandle);
        }

        internal OdbcConnection OuterConnection {
            get {
                OdbcConnection outerConnection = (OdbcConnection)Owner;

                if (null == outerConnection)
                    throw ODBC.OpenConnectionNoOwner();
            
                return outerConnection;
            }
        }
        
        override public string ServerVersion {
            get { 
                return OuterConnection.Open_GetServerVersion();
            }
        }
        
        override protected void Activate(SysTx.Transaction transaction) {
#if !COREFX
            OdbcConnection.ExecutePermission.Demand();
#endif
        }

        override public DbTransaction BeginTransaction(IsolationLevel isolevel) {
            return BeginOdbcTransaction(isolevel);
        }
        
        internal OdbcTransaction BeginOdbcTransaction(IsolationLevel isolevel) {
            return OuterConnection.Open_BeginTransaction(isolevel);
        }
        
        override public void ChangeDatabase(string value) {
            OuterConnection.Open_ChangeDatabase(value);
        }

        override protected DbReferenceCollection CreateReferenceCollection() {
            return new OdbcReferenceCollection();
        }
        
        override protected void Deactivate() {
            NotifyWeakReference(OdbcReferenceCollection.Closing);
        }
          
        override public void EnlistTransaction(SysTx.Transaction transaction) {
#if !COREFX
            OuterConnection.Open_EnlistTransaction(transaction);
#endif
        }
    }
}