2002-10-26 Piers Haken <piersh@friskit.com>
[mono.git] / mcs / class / Mono.Data.PostgreSqlClient / PgSqlException.cs
1 //
2 // Mono.Data.PostgreSqlClient.PgSqlException.cs
3 //
4 // Author:
5 //   Rodrigo Moya (rodrigo@ximian.com)
6 //   Daniel Morgan (danmorg@sc.rr.com)
7 //
8 // (C) Ximian, Inc
9 //
10 using System;
11 using System.Data;
12 using System.Runtime.Serialization;
13
14 namespace Mono.Data.PostgreSqlClient
15 {
16         /// <summary>
17         /// Exceptions, as returned by SQL databases.
18         /// </summary>
19         public sealed class PgSqlException : SystemException
20         {
21                 private PgSqlErrorCollection errors; 
22
23                 internal PgSqlException() 
24                         : base("a SQL Exception has occurred") {
25                         errors = new PgSqlErrorCollection();
26                 }
27
28                 internal PgSqlException(byte theClass, int lineNumber,
29                         string message, int number, string procedure,
30                         string server, string source, byte state) 
31                                 : base(message) {       
32                         
33                         errors = new PgSqlErrorCollection (theClass, 
34                                 lineNumber, message,
35                                 number, procedure,
36                                 server, source, state);
37                 }
38
39                 #region Properties
40
41                 [MonoTODO]
42                 public byte Class {
43                         get { 
44                                 if(errors.Count == 0)
45                                         return 0; // FIXME: throw exception here?
46                                 else
47                                         return errors[0].Class;
48                         }
49
50                         set { 
51                                 errors[0].SetClass(value);
52                         }
53                 }
54
55                 [MonoTODO]
56                 public PgSqlErrorCollection Errors {
57                         get { 
58                                 return errors;
59                         }
60
61                         set { 
62                                 errors = value;
63                         }
64                 }
65
66                 [MonoTODO]
67                 public int LineNumber {
68                         get { 
69                                 if(errors.Count == 0)
70                                         return 0; // FIXME: throw exception here?
71                                 return errors[0].LineNumber;
72                         }
73
74                         set { 
75                                 errors[0].SetLineNumber(value);
76                         }
77                 }
78                 
79                 [MonoTODO]
80                 public override string Message  {
81                         get { 
82                                 if(errors.Count == 0)
83                                         return ""; // FIXME: throw exception?
84                                 else {
85                                         String msg = "";
86                                         int i = 0;
87                                         
88                                         for(i = 0; i < errors.Count - 1; i++) {
89                                                 msg = msg + errors[i].Message + "\n";
90                                         }
91                                         msg = msg + errors[i].Message;
92
93                                         return msg;
94                                 }
95                         }
96                 }
97                 
98                 [MonoTODO]
99                 public int Number {
100                         get { 
101                                 if(errors.Count == 0)
102                                         return 0; // FIXME: throw exception?
103                                 else
104                                         return errors[0].Number;
105                         }
106
107                         set { 
108                                 errors[0].SetNumber(value);
109                         }
110                 }
111                 
112                 [MonoTODO]
113                 public string Procedure {
114                         get { 
115                                 if(errors.Count == 0)
116                                         return ""; // FIXME: throw exception?
117                                 else
118                                         return errors[0].Procedure;
119                         }
120
121                         set { 
122                                 errors[0].SetProcedure(value);
123                         }
124                 }
125
126                 [MonoTODO]
127                 public string Server {
128                         get { 
129                                 if(errors.Count == 0)
130                                         return ""; // FIXME: throw exception?
131                                 else
132                                         return errors[0].Server;
133                         }
134
135                         set { 
136                                 errors[0].SetServer(value);
137                         }
138                 }
139                 
140                 [MonoTODO]
141                 public override string Source {
142                         get { 
143                                 if(errors.Count == 0)
144                                         return ""; // FIXME: throw exception?
145                                 else
146                                         return errors[0].Source;
147                         }
148
149                         set { 
150                                 errors[0].SetSource(value);
151                         }
152                 }
153
154                 [MonoTODO]
155                 public byte State {
156                         get { 
157                                 if(errors.Count == 0)
158                                         return 0; // FIXME: throw exception?
159                                 else
160                                         return errors[0].State;
161                         }
162
163                         set { 
164                                 errors[0].SetState(value);
165                         }
166                 }
167
168                 #endregion // Properties
169
170                 #region Methods
171
172                 [MonoTODO]
173                 public override void GetObjectData(SerializationInfo si,
174                         StreamingContext context) {
175                         // FIXME: to do
176                 }
177
178                 // [Serializable]
179                 // [ClassInterface(ClassInterfaceType.AutoDual)]
180                 public override string ToString() {
181                         String toStr = "";
182                         for (int i = 0; i < errors.Count; i++) {
183                                 toStr = toStr + errors[i].ToString() + "\n";
184                         }
185                         return toStr;
186                 }
187
188                 internal void Add(byte theClass, int lineNumber,
189                         string message, int number, string procedure,
190                         string server, string source, byte state) {
191                         
192                         errors.Add (theClass, lineNumber, message,
193                                 number, procedure,
194                                 server, source, state);
195                 }
196
197                 [MonoTODO]
198                 ~PgSqlException() {
199                         // FIXME: destructor to release resources
200                 }
201
202                 #endregion // Methods
203         }
204 }