2005-09-30 Miguel de Icaza <miguel@novell.com>
[mono.git] / mcs / class / FirebirdSql.Data.Firebird / FirebirdSql.Data.Common / DbValue.cs
index 6de9f544f4d8a5847cc7a5faf949bbb41f614a0f..b0c86d364a4bc60b1686ad647846214db23ade60 100644 (file)
-/*\r
- *  Firebird ADO.NET Data provider for .NET and Mono \r
- * \r
- *     The contents of this file are subject to the Initial \r
- *     Developer's Public License Version 1.0 (the "License"); \r
- *     you may not use this file except in compliance with the \r
- *     License. You may obtain a copy of the License at \r
- *     http://www.firebirdsql.org/index.php?op=doc&id=idpl\r
- *\r
- *     Software distributed under the License is distributed on \r
- *     an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either \r
- *     express or implied.  See the License for the specific \r
- *     language governing rights and limitations under the License.\r
- * \r
- *  Copyright (c) 2002, 2005 Carlos Guzman Alvarez\r
- *  All Rights Reserved.\r
- */\r
-\r
-using System;\r
-using System.Globalization;\r
-\r
-namespace FirebirdSql.Data.Common\r
-{\r
-       internal sealed class DbValue\r
-       {\r
-               #region Fields\r
-\r
-               private StatementBase   statement;\r
-               private DbField                 field;\r
-               private object                  value;\r
-\r
-               #endregion\r
-\r
-               #region Properties\r
-\r
-               public DbField Field\r
-               {\r
-                       get { return this.field; }\r
-               }\r
-\r
-               public object Value\r
-               {\r
-                       get { return this.GetValue(); }\r
-                       set { this.value = value; }\r
-               }\r
-\r
-               #endregion\r
-\r
-               #region Constructor\r
-\r
-               public DbValue(DbField field, object value)\r
-               {\r
-                       this.field = field;\r
-                       this.value = (value == null) ? System.DBNull.Value : value;\r
-               }\r
-\r
-               public DbValue(StatementBase statement, DbField field)\r
-               {\r
-                       this.statement  = statement;\r
-                       this.field              = field;\r
-                       this.value              = field.Value;\r
-               }\r
-\r
-               public DbValue(StatementBase statement, DbField field, object value)\r
-               {\r
-                       this.statement  = statement;\r
-                       this.field              = field;\r
-                       this.value              = (value == null) ? System.DBNull.Value : value;\r
-               }\r
-\r
-               #endregion\r
-\r
-               #region Methods\r
-\r
-               public bool IsDBNull()\r
-               {\r
-                       if (this.value == null || this.value == System.DBNull.Value)\r
-                       {\r
-                               return true;\r
-                       }\r
-                       else\r
-                       {\r
-                               return false;\r
-                       }\r
-               }\r
-\r
-               public string GetString()\r
-               {\r
-                       if (this.Field.DbDataType == DbDataType.Text && this.value is long)\r
-                       {\r
-                               this.value = this.GetClobData((long)this.value);\r
-                       }\r
-\r
-                       return this.value.ToString();\r
-               }\r
-\r
-               public char GetChar()\r
-               {\r
-                       return Convert.ToChar(this.value, CultureInfo.CurrentCulture);\r
-               }\r
-\r
-               public bool GetBoolean()\r
-               {\r
-                       return Convert.ToBoolean(this.value, CultureInfo.InvariantCulture);\r
-               }\r
-\r
-               public byte GetByte()\r
-               {\r
-                       return Convert.ToByte(this.value, CultureInfo.InvariantCulture);\r
-               }\r
-\r
-               public short GetInt16()\r
-               {\r
-                       return Convert.ToInt16(this.value, CultureInfo.InvariantCulture);\r
-               }\r
-\r
-               public int GetInt32()\r
-               {\r
-                       return Convert.ToInt32(this.value, CultureInfo.InvariantCulture);\r
-               }\r
-\r
-               public long GetInt64()\r
-               {\r
-                       return Convert.ToInt64(this.value, CultureInfo.InvariantCulture);\r
-               }\r
-\r
-               public decimal GetDecimal()\r
-               {\r
-                       return Convert.ToDecimal(this.value, CultureInfo.InvariantCulture);\r
-               }\r
-\r
-               public float GetFloat()\r
-               {\r
-                       return Convert.ToSingle(this.value, CultureInfo.InvariantCulture);\r
-               }\r
-\r
-               public Guid GetGuid()\r
-               {\r
-                       if (this.Value is Guid)\r
-                       {\r
-                               return (Guid)this.Value;\r
-                       }\r
-                       else if (this.Value is byte[])\r
-                       {\r
-                               return new Guid((byte[])this.value);\r
-                       }\r
-\r
-                       throw new InvalidOperationException("Incorrect Guid value");\r
-               }\r
-\r
-               public double GetDouble()\r
-               {\r
-                       return Convert.ToDouble(this.value, CultureInfo.InvariantCulture);\r
-               }\r
-\r
-               public DateTime GetDateTime()\r
-               {\r
-                       return Convert.ToDateTime(this.value, CultureInfo.CurrentCulture.DateTimeFormat);\r
-               }\r
-\r
-               public Array GetArray()\r
-               {\r
-                       if (this.value is long)\r
-                       {\r
-                               this.value = this.GetArrayData((long)this.value);\r
-                       }\r
-\r
-                       return (Array)this.value;\r
-               }\r
-\r
-               public byte[] GetBinary()\r
-               {\r
-                       if (this.value is long)\r
-                       {\r
-                               this.value = this.GetBlobData((long)this.value);\r
-                       }\r
-                       return (byte[])this.value;\r
-               }\r
-\r
-               public int EncodeDate()\r
-               {\r
-                       return TypeEncoder.EncodeDate(this.GetDateTime());\r
-               }\r
-\r
-               public int EncodeTime()\r
-               {\r
-                       return TypeEncoder.EncodeTime(this.GetDateTime());\r
-               }\r
-\r
-               #endregion\r
-\r
-               #region Private Methods\r
-\r
-               private object GetValue()\r
-               {\r
-                       if (this.IsDBNull())\r
-                       {\r
-                               return System.DBNull.Value;\r
-                       }\r
-\r
-                       switch (this.field.DbDataType)\r
-                       {\r
-                               case DbDataType.Text:\r
-                                       if (this.statement == null)\r
-                                       {\r
-                                               return this.GetInt64();\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               return this.GetString();\r
-                                       }\r
-\r
-                               case DbDataType.Binary:\r
-                                       if (this.statement == null)\r
-                                       {\r
-                                               return this.GetInt64();\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               return this.GetBinary();\r
-                                       }\r
-\r
-                               case DbDataType.Array:\r
-                                       if (this.statement == null)\r
-                                       {\r
-                                               return this.GetInt64();\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               return this.GetArray();\r
-                                       }\r
-\r
-                               default:\r
-                                       return this.value;\r
-                       }\r
-               }\r
-\r
-               private string GetClobData(long blobId)\r
-               {\r
-                       BlobBase clob = this.statement.CreateBlob(blobId);\r
-\r
-                       return clob.ReadString();\r
-               }\r
-\r
-               private byte[] GetBlobData(long blobId)\r
-               {\r
-                       BlobBase blob = this.statement.CreateBlob(blobId);\r
-\r
-                       return blob.Read();\r
-               }\r
-\r
-               private Array GetArrayData(long handle)\r
-               {\r
-                       if (this.field.ArrayHandle == null)\r
-                       {\r
-                               this.field.ArrayHandle = this.statement.CreateArray(handle, this.Field.Relation, this.Field.Name);\r
-                       }\r
-\r
-                       ArrayBase gdsArray = this.statement.CreateArray(this.field.ArrayHandle.Descriptor);\r
-                       \r
-                       gdsArray.Handle                 = handle;\r
-                       gdsArray.DB                             = this.statement.DB;\r
-                       gdsArray.Transaction    = this.statement.Transaction;\r
-\r
-                       return gdsArray.Read();\r
-               }\r
-\r
-               #endregion\r
-       }\r
+/*
+ *  Firebird ADO.NET Data provider for .NET and Mono 
+ * 
+ *     The contents of this file are subject to the Initial 
+ *     Developer's Public License Version 1.0 (the "License"); 
+ *     you may not use this file except in compliance with the 
+ *     License. You may obtain a copy of the License at 
+ *     http://www.firebirdsql.org/index.php?op=doc&id=idpl
+ *
+ *     Software distributed under the License is distributed on 
+ *     an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either 
+ *     express or implied.  See the License for the specific 
+ *     language governing rights and limitations under the License.
+ * 
+ *  Copyright (c) 2002, 2005 Carlos Guzman Alvarez
+ *  All Rights Reserved.
+ */
+
+using System;
+using System.Globalization;
+
+namespace FirebirdSql.Data.Common
+{
+       internal sealed class DbValue
+       {
+               #region Fields
+
+               private StatementBase   statement;
+               private DbField                 field;
+               private object                  value;
+
+               #endregion
+
+               #region Properties
+
+               public DbField Field
+               {
+                       get { return this.field; }
+               }
+
+               public object Value
+               {
+                       get { return this.GetValue(); }
+                       set { this.value = value; }
+               }
+
+               #endregion
+
+               #region Constructor
+
+               public DbValue(DbField field, object value)
+               {
+                       this.field = field;
+                       this.value = (value == null) ? System.DBNull.Value : value;
+               }
+
+               public DbValue(StatementBase statement, DbField field)
+               {
+                       this.statement  = statement;
+                       this.field              = field;
+                       this.value              = field.Value;
+               }
+
+               public DbValue(StatementBase statement, DbField field, object value)
+               {
+                       this.statement  = statement;
+                       this.field              = field;
+                       this.value              = (value == null) ? System.DBNull.Value : value;
+               }
+
+               #endregion
+
+               #region Methods
+
+               public bool IsDBNull()
+               {
+                       if (this.value == null || this.value == System.DBNull.Value)
+                       {
+                               return true;
+                       }
+                       else
+                       {
+                               return false;
+                       }
+               }
+
+               public string GetString()
+               {
+                       if (this.Field.DbDataType == DbDataType.Text && this.value is long)
+                       {
+                               this.value = this.GetClobData((long)this.value);
+                       }
+
+                       return this.value.ToString();
+               }
+
+               public char GetChar()
+               {
+                       return Convert.ToChar(this.value, CultureInfo.CurrentCulture);
+               }
+
+               public bool GetBoolean()
+               {
+                       return Convert.ToBoolean(this.value, CultureInfo.InvariantCulture);
+               }
+
+               public byte GetByte()
+               {
+                       return Convert.ToByte(this.value, CultureInfo.InvariantCulture);
+               }
+
+               public short GetInt16()
+               {
+                       return Convert.ToInt16(this.value, CultureInfo.InvariantCulture);
+               }
+
+               public int GetInt32()
+               {
+                       return Convert.ToInt32(this.value, CultureInfo.InvariantCulture);
+               }
+
+               public long GetInt64()
+               {
+                       return Convert.ToInt64(this.value, CultureInfo.InvariantCulture);
+               }
+
+               public decimal GetDecimal()
+               {
+                       return Convert.ToDecimal(this.value, CultureInfo.InvariantCulture);
+               }
+
+               public float GetFloat()
+               {
+                       return Convert.ToSingle(this.value, CultureInfo.InvariantCulture);
+               }
+
+               public Guid GetGuid()
+               {
+                       if (this.Value is Guid)
+                       {
+                               return (Guid)this.Value;
+                       }
+                       else if (this.Value is byte[])
+                       {
+                               return new Guid((byte[])this.value);
+                       }
+
+                       throw new InvalidOperationException("Incorrect Guid value");
+               }
+
+               public double GetDouble()
+               {
+                       return Convert.ToDouble(this.value, CultureInfo.InvariantCulture);
+               }
+
+               public DateTime GetDateTime()
+               {
+                       return Convert.ToDateTime(this.value, CultureInfo.CurrentCulture.DateTimeFormat);
+               }
+
+               public Array GetArray()
+               {
+                       if (this.value is long)
+                       {
+                               this.value = this.GetArrayData((long)this.value);
+                       }
+
+                       return (Array)this.value;
+               }
+
+               public byte[] GetBinary()
+               {
+                       if (this.value is long)
+                       {
+                               this.value = this.GetBlobData((long)this.value);
+                       }
+                       return (byte[])this.value;
+               }
+
+               public int EncodeDate()
+               {
+                       return TypeEncoder.EncodeDate(this.GetDateTime());
+               }
+
+               public int EncodeTime()
+               {
+                       return TypeEncoder.EncodeTime(this.GetDateTime());
+               }
+
+               #endregion
+
+               #region Private Methods
+
+               private object GetValue()
+               {
+                       if (this.IsDBNull())
+                       {
+                               return System.DBNull.Value;
+                       }
+
+                       switch (this.field.DbDataType)
+                       {
+                               case DbDataType.Text:
+                                       if (this.statement == null)
+                                       {
+                                               return this.GetInt64();
+                                       }
+                                       else
+                                       {
+                                               return this.GetString();
+                                       }
+
+                               case DbDataType.Binary:
+                                       if (this.statement == null)
+                                       {
+                                               return this.GetInt64();
+                                       }
+                                       else
+                                       {
+                                               return this.GetBinary();
+                                       }
+
+                               case DbDataType.Array:
+                                       if (this.statement == null)
+                                       {
+                                               return this.GetInt64();
+                                       }
+                                       else
+                                       {
+                                               return this.GetArray();
+                                       }
+
+                               default:
+                                       return this.value;
+                       }
+               }
+
+               private string GetClobData(long blobId)
+               {
+                       BlobBase clob = this.statement.CreateBlob(blobId);
+
+                       return clob.ReadString();
+               }
+
+               private byte[] GetBlobData(long blobId)
+               {
+                       BlobBase blob = this.statement.CreateBlob(blobId);
+
+                       return blob.Read();
+               }
+
+               private Array GetArrayData(long handle)
+               {
+                       if (this.field.ArrayHandle == null)
+                       {
+                               this.field.ArrayHandle = this.statement.CreateArray(handle, this.Field.Relation, this.Field.Name);
+                       }
+
+                       ArrayBase gdsArray = this.statement.CreateArray(this.field.ArrayHandle.Descriptor);
+                       
+                       gdsArray.Handle                 = handle;
+                       gdsArray.DB                             = this.statement.DB;
+                       gdsArray.Transaction    = this.statement.Transaction;
+
+                       return gdsArray.Read();
+               }
+
+               #endregion
+       }
 }
\ No newline at end of file