소스 검색

2004-04-10 Gonzalo Paniagua Javier <[email protected]>

	* OciDefineHandle.cs: added support for basic RAW data type. Patch by
	Eduard Nesiba.

svn path=/trunk/mcs/; revision=25269
Gonzalo Paniagua Javier 22 년 전
부모
커밋
1c7ec0236b

+ 5 - 0
mcs/class/System.Data.OracleClient/ChangeLog

@@ -1,3 +1,8 @@
+2004-04-10  Gonzalo Paniagua Javier <[email protected]>
+
+	* System.Data.OracleClient.Oci/OciDefineHandle.cs: added support for
+	basic RAW data type. Patch by Eduard Nesiba.
+
 2004-03-31  Joerg Rosenkranz  <[email protected]>
 
 	* System.Data.OracleClient.Oci/OciDefineHandle.cs:

+ 32 - 0
mcs/class/System.Data.OracleClient/System.Data.OracleClient.Oci/OciDefineHandle.cs

@@ -110,6 +110,9 @@ namespace System.Data.OracleClient.Oci {
 				definedSize = -1;
 				DefineLob (position, definedType);
 				return;
+			case OciDataType.Raw:
+				DefineRaw( position);
+				return;
 			default:
 				DefineChar (position); // HANDLE ALL OTHERS AS CHAR FOR NOW
 				return;
@@ -205,6 +208,31 @@ namespace System.Data.OracleClient.Oci {
 			}
 		}
 
+		void DefineRaw (int position)
+		{
+			ociType = OciDataType.Raw;
+
+			value = Marshal.AllocHGlobal (definedSize);
+
+			int status = 0;
+
+			status = OciCalls.OCIDefineByPos (Parent,
+							out handle,
+							ErrorHandle,
+							position + 1,
+							value,
+							definedSize * 2,
+							ociType,
+							ref indicator,
+							ref rlenp,
+							IntPtr.Zero, 0);
+
+			if (status != 0) {
+				OciErrorInfo info = ErrorHandle.HandleError ();
+				throw new OracleException (info.ErrorCode, info.ErrorMessage);
+			}
+		}
+
 		protected override void Dispose (bool disposing) 
 		{
 			if (!disposed) {
@@ -259,6 +287,10 @@ namespace System.Data.OracleClient.Oci {
 				break;
 			case OciDataType.Date:
 				return UnpackDate ();
+			case OciDataType.Raw:
+				byte [] raw_buffer = new byte [Size];
+				Marshal.Copy (Value, raw_buffer, 0, Size);
+				return raw_buffer;
 			}
 
 			return DBNull.Value;