*** empty log message ***
[mono.git] / mcs / class / IBM.Data.DB2 / IBM.Data.DB2 / DB2ConnectionSettings.cs
1 using System;\r
2 using System.Runtime.InteropServices;\r
3 using System.Text;\r
4 \r
5 namespace IBM.Data.DB2\r
6 {\r
7         internal sealed class DB2ConnectionSettings\r
8         {\r
9                 private string   connectionString;\r
10                 private string   userName = "";\r
11                 private string   passWord = "";\r
12                 private string   databaseAlias = "";\r
13                 private string   server = "";\r
14                 private bool     pooling = true;\r
15                 private TimeSpan connectTimeout = new TimeSpan(0, 0, 15);\r
16                 private TimeSpan connectionLifeTime = new TimeSpan(0, 0, 15);   // 15 seconds\r
17                 private int              connectionPoolSizeMin = 0;\r
18                 private int              connectionPoolSizeMax = -1;    // no maximum\r
19 \r
20                 private DB2ConnectionPool pool;\r
21 \r
22                 private DB2ConnectionSettings(string connectionString)\r
23                 {\r
24                         this.connectionString = connectionString;\r
25                         this.Parse();\r
26                 }\r
27 \r
28                 public static DB2ConnectionSettings GetConnectionSettings(string connectionString)\r
29                 {\r
30                         DB2ConnectionPool pool = DB2ConnectionPool.FindConnectionPool(connectionString);\r
31                         if(pool != null)\r
32                         {\r
33                                 return pool.ConnectionSettings;\r
34                         }\r
35                         DB2ConnectionSettings settings = new DB2ConnectionSettings(connectionString);\r
36                         if(settings.Pooling)\r
37                         {\r
38                                 settings.pool = DB2ConnectionPool.GetConnectionPool(settings);\r
39                         }\r
40                         return settings;\r
41                 }\r
42 \r
43                 public DB2OpenConnection GetRealOpenConnection(DB2Connection connection)\r
44                 {\r
45                         if(pool != null)\r
46                         {\r
47                                 return pool.GetOpenConnection(connection);\r
48                         }\r
49                         else\r
50                         {\r
51                                 return new DB2OpenConnection(this, connection);\r
52                         }\r
53                 }\r
54 \r
55                 public DB2ConnectionPool Pool\r
56                 {\r
57                         get { return pool; }\r
58                 }\r
59 \r
60                 public string ConnectionString\r
61                 {\r
62                         get { return connectionString; }\r
63                 }\r
64 \r
65                 public string UserName\r
66                 {\r
67                         get { return userName; }\r
68                 }\r
69                 \r
70                 public string PassWord\r
71                 {\r
72                         get { return passWord; }\r
73                 }\r
74 \r
75                 /// <summary>\r
76                 /// database alias (for cataloged database)\r
77                 /// </summary>\r
78                 public string DatabaseAlias\r
79                 {\r
80                         get { return databaseAlias; }\r
81                 }\r
82 \r
83                 /// <summary>\r
84                 /// server name with optional port number for direct connection (<server name/ip address>[:<port>])\r
85                 /// </summary>\r
86                 public string Server\r
87                 {\r
88                         get { return server; }\r
89                 }\r
90 \r
91                 public TimeSpan ConnectTimeout\r
92                 {\r
93                         get { return connectTimeout; }\r
94                 }\r
95 \r
96                 /// <summary>\r
97                 /// Connection pooling yes/no\r
98                 /// </summary>\r
99                 public bool Pooling\r
100                 {\r
101                         get { return pooling; }\r
102                 }\r
103 \r
104                 public int ConnectionPoolSizeMin\r
105                 {\r
106                         get { return connectionPoolSizeMin; }\r
107                 }\r
108 \r
109                 public int ConnectionPoolSizeMax\r
110                 {\r
111                         get { return connectionPoolSizeMin; }\r
112                 }\r
113 \r
114                 public TimeSpan ConnectionLifeTime\r
115                 {\r
116                         get { return connectionLifeTime; }\r
117                 }\r
118 \r
119 \r
120                 /// <summary>\r
121                 /// parsed according to IBM DB2 .NET data provider help\r
122                 /// </summary>\r
123                 public void Parse()\r
124                 {\r
125                         string[] parts = connectionString.Split(new char[]{';'});\r
126                         foreach(string part in parts)\r
127                         {\r
128                                 string[] pairs = part.Split(new char[]{'='});\r
129                                 switch(pairs[0].ToLower())\r
130                                 {\r
131                                         case "database":\r
132                                         case "dsn":\r
133                                                 databaseAlias = pairs[1];\r
134                                                 break;\r
135                                         case "uid":\r
136                                         case "user id":\r
137                                                 userName = pairs[1];\r
138                                                 break;\r
139                                         case "pwd":\r
140                                         case "password":\r
141                                                 passWord = pairs[1];\r
142                                                 break;\r
143                                         case "server":\r
144                                                 server = pairs[1];\r
145                                                 break;\r
146                                         case "pooling":\r
147                                                 pooling = (pairs[1].ToLower() == "true") || (pairs[1]== "1");\r
148                                                 break;\r
149                                         case "connect timeout":\r
150                                         case "timeout":\r
151                                         case "connection timeout":\r
152                                                 connectTimeout = new TimeSpan(0, 0, int.Parse(pairs[1]));\r
153                                                 break;\r
154                                         case "min pool size":\r
155                                                 connectionPoolSizeMin = int.Parse(pairs[1]);\r
156                                                 break;\r
157                                         case "max pool size":\r
158                                                 connectionPoolSizeMax = int.Parse(pairs[1]);\r
159                                                 break;\r
160                                         case "connection lifetime":\r
161                                                 connectionLifeTime = new TimeSpan(0, 0, int.Parse(pairs[1]));\r
162                                                 break;\r
163                                 }\r
164                         }\r
165                         if(connectionLifeTime.Ticks <= 0)\r
166                         {\r
167                                 pooling = false;\r
168                         }\r
169                 }\r
170         \r
171                 public override int GetHashCode()\r
172                 {\r
173                         return connectionString.GetHashCode ();\r
174                 }\r
175         \r
176                 public override bool Equals(object obj)\r
177                 {\r
178                         return connectionString.Equals (obj);\r
179                 }\r
180         }\r
181 }\r